diff --git a/.astro/data-store.json b/.astro/data-store.json index f413ad1..aaea7e1 100644 --- a/.astro/data-store.json +++ b/.astro/data-store.json @@ -1 +1 @@ -[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.1.9","content-config-digest","4d06b0cb4cf5ac0b","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://ghall.blog\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true},\"redirects\":{\"/posts/[...slug]\":\"/blog/[...slug]\"},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":\"shiki\",\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"svg\":{\"mode\":\"inline\"}},\"legacy\":{\"collections\":false}}","blog",["Map",11,12,31,32,60,61,87,88,107,108,125,126,160,161,178,179,196,197,214,215,242,243,260,261,278,279,296,297,317,318,335,336,353,354,375,376,405,406,423,424,442,443,461,462,479,480,497,498,515,516,533,534,551,552,585,586,605,606,624,625,642,643,661,662,679,680,698,699,732,733,759,760,786,787,814,815,832,833,851,852,870,871,888,889],"2022/ask-the-darn-question",{"id":11,"data":13,"body":19,"filePath":20,"digest":21,"rendered":22,"legacyId":30},{"title":14,"pubDate":15,"tags":16},"Ask The Darn Question!",["Date","2022-11-05T00:00:00.000Z"],[17,18],"Web Dev","Mental Health","One of the areas I struggle with when it comes to working in a professional web development environment is asking questions. Whether it’s a problem I’m stuck on, or something about the codebase I don’t quite understand, I’m more likely to end up banging my head against the wall trying to find the answers myself than reach out and ask someone a question.\n\nIt’s not out of pride, at least I don’t think it is. It’s more about insecurity. I’m afraid asking for help will somehow reveal to the more experienced devs that I actually have no idea what I’m doing. I will expose myself as a fraud who doesn’t know the first thing about development, and I don’t deserve to get paid for it.\n\nOf course, logically speaking, this is not true. It’s a story told with a combination of imposter syndrome, an anxiety disorder, and a copious amount of logical fallacies. I’m not a fraud, I’m just inexperienced. I can write code, and it may not be the best code ever written but it generally works, and there’s room for me to improve.\n\nAll this to say, it’s ok to ask for help when you need it. I’m writing that as a reminder to myself as much as to you, the reader. No one person has all the answers, and in development there are a multitude of ways to solve a given problem. Consider this: you’re more competent than you give yourself credit for, but maybe you just need a fresh perspective.\n\nI had couple eye-opening experiences this week at work.\n\nFirstly, I was running into an issue where a particular set of values wasn’t getting passed through correctly in our beta environment even though everything was working perfectly when I tested locally on my machine. I was stumped. My boss took a look and suggested I get the values I needed from somewhere else. It worked like a charm! In retrospect, it seemed like the obvious solution, but its easy to get so caught up in looking at a problem in a particular way that you lose sight of other perspectives. In this case, it wasn’t that I didn’t understand what I was doing, I just needed another perspective.\n\nSecondly, earlier in the week I was struggling with trying to track down a particular issue in AWS. I couldn’t find the log I was looking for, and I was completely perplexed. I asked a co-worker, and he asked me if anyone showed me our naming convention for our serverless functions and how to navigate them in AWS. I said no, so he took about 10-15 minutes to show me the ropes. It was something I couldn’t have known, I’d had zero AWS experience before this job and I’m still in the process of getting to grips with our massive codebase. Nobody had taught me what I needed to know, and I had been too nervous to ask, so I just flat out didn’t know.\n\nSo, if there’s one thing I hope we all can take away from this it’s that, if we’re truly stuck on something, there’s more harm in not asking questions. There will always be something you don’t know, and there will always be another way of looking at a problem you’re facing. As long as you’re not asking for help as a first resort, and you’re putting in the effort to try and solve the problem yourself, then just ask the darn question!\n\nAnd if you’re ever feeling any doubt, come back and read this post. I know I will.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/ask-the-darn-question.md","4cb275af5430623a",{"html":23,"metadata":24},"\u003Cp>One of the areas I struggle with when it comes to working in a professional web development environment is asking questions. Whether it’s a problem I’m stuck on, or something about the codebase I don’t quite understand, I’m more likely to end up banging my head against the wall trying to find the answers myself than reach out and ask someone a question.\u003C/p>\n\u003Cp>It’s not out of pride, at least I don’t think it is. It’s more about insecurity. I’m afraid asking for help will somehow reveal to the more experienced devs that I actually have no idea what I’m doing. I will expose myself as a fraud who doesn’t know the first thing about development, and I don’t deserve to get paid for it.\u003C/p>\n\u003Cp>Of course, logically speaking, this is not true. It’s a story told with a combination of imposter syndrome, an anxiety disorder, and a copious amount of logical fallacies. I’m not a fraud, I’m just inexperienced. I can write code, and it may not be the best code ever written but it generally works, and there’s room for me to improve.\u003C/p>\n\u003Cp>All this to say, it’s ok to ask for help when you need it. I’m writing that as a reminder to myself as much as to you, the reader. No one person has all the answers, and in development there are a multitude of ways to solve a given problem. Consider this: you’re more competent than you give yourself credit for, but maybe you just need a fresh perspective.\u003C/p>\n\u003Cp>I had couple eye-opening experiences this week at work.\u003C/p>\n\u003Cp>Firstly, I was running into an issue where a particular set of values wasn’t getting passed through correctly in our beta environment even though everything was working perfectly when I tested locally on my machine. I was stumped. My boss took a look and suggested I get the values I needed from somewhere else. It worked like a charm! In retrospect, it seemed like the obvious solution, but its easy to get so caught up in looking at a problem in a particular way that you lose sight of other perspectives. In this case, it wasn’t that I didn’t understand what I was doing, I just needed another perspective.\u003C/p>\n\u003Cp>Secondly, earlier in the week I was struggling with trying to track down a particular issue in AWS. I couldn’t find the log I was looking for, and I was completely perplexed. I asked a co-worker, and he asked me if anyone showed me our naming convention for our serverless functions and how to navigate them in AWS. I said no, so he took about 10-15 minutes to show me the ropes. It was something I couldn’t have known, I’d had zero AWS experience before this job and I’m still in the process of getting to grips with our massive codebase. Nobody had taught me what I needed to know, and I had been too nervous to ask, so I just flat out didn’t know.\u003C/p>\n\u003Cp>So, if there’s one thing I hope we all can take away from this it’s that, if we’re truly stuck on something, there’s more harm in not asking questions. There will always be something you don’t know, and there will always be another way of looking at a problem you’re facing. As long as you’re not asking for help as a first resort, and you’re putting in the effort to try and solve the problem yourself, then just ask the darn question!\u003C/p>\n\u003Cp>And if you’re ever feeling any doubt, come back and read this post. I know I will.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":25,"imagePaths":26,"frontmatter":27},[],[],{"title":14,"pubDate":28,"tags":29},"2022-11-05",[17,18],"2022/ask-the-darn-question.md","2022/building-ghalldev-30",{"id":31,"data":33,"body":38,"filePath":39,"digest":40,"rendered":41,"legacyId":59},{"title":34,"pubDate":35,"tags":36},"Building ghall.dev 3.0",["Date","2022-10-16T00:00:00.000Z"],[17,37],"Making Stuff","Welcome to my brand new website, the 3rd iteration of ghall.dev! For the last year-and-a-half this has simply been home to my portfolio, but for a while now I’ve wanted to expand from a simple, single-page site to a multi-page site with a blog (which you are of course reading right now).\n\nIn the previous version of this site, I coded myself into a corner. I did a lot of little things I thought were cool, but maybe weren’t the best ideas design-wise, and put things together in such a way that I couldn’t simply tweak things very easily. One of the lessons I took from the experience of building and maintaining that site was to keep things simple, and not try to be too flashy for the sake of being flashy.\n\nAnother lesson I took was to plan ahead for any changes. I didn’t really think about wanting to start a blog until after the site was up, and if I had made things a little easier by planning for future changes it probably wouldn’t have taken a “nuke-and-pave” to cleanly integrate a blog.\n\nI’m also a much better developer than I was when I built version 2. Not saying I’m amazing, I’ve only been at this since late 2020 after all, but I’ve learned a lot about coding, and organizing code in a way that makes sense. Of course, a year from now I’ll be wondering what the heck I was thinking when I originally wrote the code for this site.\n\nAnyway, the first step to any project like this is deciding on the tech stack. As this is a solo project, being my personal site and all, I had a bit of leeway to experiment with different pieces of that puzzle, but I decided on the following:\n\n### Front-end Framework: Next.js\n\nI’m a relative newcomer to Next.js, as I’ve only been using it for about 2 months now. But the learning curve was really low coming from React, and I was able to pick it up pretty quickly when I started my current job.\n\nI prefer it to straight React in a few ways, one of the biggest being how easy it is to set up a multi-page site like this. While it’s definitely possible in React, Next.js makes it painfully simple. It was a no-brainer, and it got me rolling so fast I was able to built this website in a matter of days.\n\n[Check out Next.js](https://nextjs.org/)\n\nFor styling, I went with good old Tailwind, which I also used on the previous iteration of my site. I’m a very visual person, and Tailwind makes it so easy for me to just built the designs I have in my head.\n\n[Check out Tailwind](https://tailwindcss.com/)\n\n### Headless CMS: Cosmic\n\nOn the previous iteration of my website, I had built a rudimentary CMS in the command line using M3O for a database, which I then served to the front-end through a small API I built. It was slow and clunky, but it was good enough for periodically updating my portfolio. But, when M3O changed their pricing model, this system became economically infeasible, so I switched to essentially hardcoding my portoflio into my sourcecode, which was something I wanted to avoid. Also, it made the fact I was building my front-end in React a little silly since I had eliminated the one bit of dynamic content on my website. But it was serving its purpose, so I left it.\n\nFor this new iteration, since I wanted to not only go back to managing my portfolio on the back-end, but also build a blog, I knew the best thing to do was to find a pre-packaged solution so I could spend more time focusing on my strengths.\n\n[Check out Cosmic](https://www.cosmicjs.com/)\n\n### Final Notes\n\nThere are a couple little Node packages I’ve used to make things a little easier, such as [date-fns](https://date-fns.org/), [react-jsx-parser](https://github.com/TroyAlford/react-jsx-parser), and [Framer Motion](https://www.framer.com/motion/). I particularly had fun with Framer Motion, but I ended up really toning down some of the animations.\n\nAlso, I ended up using the ever-popular VS Code as my text editor instead of my usual go-to, [Nova](https://nova.app/). I started using VS Code again for the first time since early 2021 because of work, and I quickly got spoiled by a lot of the autocomplete features, expecially automatic imports. There will definitly be a breakdown of my thoughts about VS Code vs Nova at some point in the future.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/building-ghalldev-30.md","e613db37e72d2ffe",{"html":42,"metadata":43},"\u003Cp>Welcome to my brand new website, the 3rd iteration of ghall.dev! For the last year-and-a-half this has simply been home to my portfolio, but for a while now I’ve wanted to expand from a simple, single-page site to a multi-page site with a blog (which you are of course reading right now).\u003C/p>\n\u003Cp>In the previous version of this site, I coded myself into a corner. I did a lot of little things I thought were cool, but maybe weren’t the best ideas design-wise, and put things together in such a way that I couldn’t simply tweak things very easily. One of the lessons I took from the experience of building and maintaining that site was to keep things simple, and not try to be too flashy for the sake of being flashy.\u003C/p>\n\u003Cp>Another lesson I took was to plan ahead for any changes. I didn’t really think about wanting to start a blog until after the site was up, and if I had made things a little easier by planning for future changes it probably wouldn’t have taken a “nuke-and-pave” to cleanly integrate a blog.\u003C/p>\n\u003Cp>I’m also a much better developer than I was when I built version 2. Not saying I’m amazing, I’ve only been at this since late 2020 after all, but I’ve learned a lot about coding, and organizing code in a way that makes sense. Of course, a year from now I’ll be wondering what the heck I was thinking when I originally wrote the code for this site.\u003C/p>\n\u003Cp>Anyway, the first step to any project like this is deciding on the tech stack. As this is a solo project, being my personal site and all, I had a bit of leeway to experiment with different pieces of that puzzle, but I decided on the following:\u003C/p>\n\u003Ch3 id=\"front-end-framework-nextjs\">Front-end Framework: Next.js\u003C/h3>\n\u003Cp>I’m a relative newcomer to Next.js, as I’ve only been using it for about 2 months now. But the learning curve was really low coming from React, and I was able to pick it up pretty quickly when I started my current job.\u003C/p>\n\u003Cp>I prefer it to straight React in a few ways, one of the biggest being how easy it is to set up a multi-page site like this. While it’s definitely possible in React, Next.js makes it painfully simple. It was a no-brainer, and it got me rolling so fast I was able to built this website in a matter of days.\u003C/p>\n\u003Cp>\u003Ca href=\"https://nextjs.org/\">Check out Next.js\u003C/a>\u003C/p>\n\u003Cp>For styling, I went with good old Tailwind, which I also used on the previous iteration of my site. I’m a very visual person, and Tailwind makes it so easy for me to just built the designs I have in my head.\u003C/p>\n\u003Cp>\u003Ca href=\"https://tailwindcss.com/\">Check out Tailwind\u003C/a>\u003C/p>\n\u003Ch3 id=\"headless-cms-cosmic\">Headless CMS: Cosmic\u003C/h3>\n\u003Cp>On the previous iteration of my website, I had built a rudimentary CMS in the command line using M3O for a database, which I then served to the front-end through a small API I built. It was slow and clunky, but it was good enough for periodically updating my portfolio. But, when M3O changed their pricing model, this system became economically infeasible, so I switched to essentially hardcoding my portoflio into my sourcecode, which was something I wanted to avoid. Also, it made the fact I was building my front-end in React a little silly since I had eliminated the one bit of dynamic content on my website. But it was serving its purpose, so I left it.\u003C/p>\n\u003Cp>For this new iteration, since I wanted to not only go back to managing my portfolio on the back-end, but also build a blog, I knew the best thing to do was to find a pre-packaged solution so I could spend more time focusing on my strengths.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.cosmicjs.com/\">Check out Cosmic\u003C/a>\u003C/p>\n\u003Ch3 id=\"final-notes\">Final Notes\u003C/h3>\n\u003Cp>There are a couple little Node packages I’ve used to make things a little easier, such as \u003Ca href=\"https://date-fns.org/\">date-fns\u003C/a>, \u003Ca href=\"https://github.com/TroyAlford/react-jsx-parser\">react-jsx-parser\u003C/a>, and \u003Ca href=\"https://www.framer.com/motion/\">Framer Motion\u003C/a>. I particularly had fun with Framer Motion, but I ended up really toning down some of the animations.\u003C/p>\n\u003Cp>Also, I ended up using the ever-popular VS Code as my text editor instead of my usual go-to, \u003Ca href=\"https://nova.app/\">Nova\u003C/a>. I started using VS Code again for the first time since early 2021 because of work, and I quickly got spoiled by a lot of the autocomplete features, expecially automatic imports. There will definitly be a breakdown of my thoughts about VS Code vs Nova at some point in the future.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":44,"imagePaths":55,"frontmatter":56},[45,49,52],{"depth":46,"slug":47,"text":48},3,"front-end-framework-nextjs","Front-end Framework: Next.js",{"depth":46,"slug":50,"text":51},"headless-cms-cosmic","Headless CMS: Cosmic",{"depth":46,"slug":53,"text":54},"final-notes","Final Notes",[],{"title":34,"pubDate":57,"tags":58},"2022-10-16",[17,37],"2022/building-ghalldev-30.md","2022/coding-with-depression",{"id":60,"data":62,"body":66,"filePath":67,"digest":68,"rendered":69,"legacyId":86},{"title":63,"pubDate":64,"tags":65},"Coding With Depression",["Date","2022-11-11T00:00:00.000Z"],[17,18],"One of the reasons I started this blog, aside from wanting to share my thoughts and experiences as someone early in my web development career, was to write about mental illness as it relates to development. As you can imagine, it's not an easy topic by any means, as it's something that profoundly affects me personally on a daily basis.\n\nFor a decent chunk of this past week, I've been struggling with a bit of a depressive episode. For me this manifests as lack of motivation, and especially \"brain fog\", which just kills my logical thinking and problem solving skills. Obviously this is not ideal for web development, but I've found ways to make it work and maintain some level of productivity, even if it's not my absolute best.\n\n### Getting Motivated\n\nThe first step to overcoming anything is showing up.\n\nWhether I'm laying in bed wishing I could just go back to sleep, or sitting at my computer struggling to make myself just open my code editor, I have to find a way to get myself motivated. When I'm hitting these low points, I've found it incredibly helpful to break things down into tiny pieces and just work through them a piece at a time.\n\nIf I'm struggling to get out of bed, instead of trying to motivate myself to get up because I need to go to work, I focus on the process one step at a time. It's far easier to motivate myself to do a bunch of little things in sequence than it is to motivate myself to reach the end goal.\n\nThis even applies to just tackling things throughout the day. Today I had a rather large task to complete, and I was simply not motivated to do it. I took it one step at a time, down to the most mundane steps like executing a CLI command, or opening a file. I didn't have to be motivated to finish the task as a whole, I just had to motivate myself to tackle each step until I finished.\n\n### Navigating the Fog\n\nBrain fog is a complicated one. I first experienced the impact it has on coding when I was working on homework for boot camp. It's resulted in me blankly staring at a block of code and just totally forgetting how to read it, or just forgetting the name of a variable I defined less than a minute earlier.\n\nIt's so unbelievably frustrating to experience. The knowledge required to understand the code, the ability needed to problem solve the issue, it's all in there somewhere but it feels like that particular brain function is out of scope.\n\nOne of my bad habits to tackle this problem is coffee. I hate to admit it, but it does help take the edge of the fog.\n\nFirstly, I'd suggest some preventative measures like sleeping, getting some sun when you can, and using a light therapy lamp in the morning on those dark rainy mornings. It seems obvious, but it's worth mentioning these things help manage depression, and, by extension, brain fog.\n\nBut if you're in the moment, the best thing you can do is just step away from the computer for a few minutes. Get up, stretch, walk around, do some jumping jacks, go outside, whatever you can do to just get away from the problem and get your body moving. It's good advice for anyone facing a programming problem, but it's especially good if you're struggling with a bit of brain fog.\n\n### Be Kind to Yourself\n\nThrough all this, the most important thing to remember is to be kind to yourself.\n\nI tend to be extremely self-critical on the best of days, but when I'm struggling and not producing my best work I am even more so. I have to remind myself that this isn't typical, I'm not lazy or dumb, I'm just having a rough time. It's ok to slip up here and there and not be at 100% peak productivity, because I'm doing my best and I'm getting stuff done despite the challenges.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/coding-with-depression.md","d2bf7a0999d48ac1",{"html":70,"metadata":71},"\u003Cp>One of the reasons I started this blog, aside from wanting to share my thoughts and experiences as someone early in my web development career, was to write about mental illness as it relates to development. As you can imagine, it’s not an easy topic by any means, as it’s something that profoundly affects me personally on a daily basis.\u003C/p>\n\u003Cp>For a decent chunk of this past week, I’ve been struggling with a bit of a depressive episode. For me this manifests as lack of motivation, and especially “brain fog”, which just kills my logical thinking and problem solving skills. Obviously this is not ideal for web development, but I’ve found ways to make it work and maintain some level of productivity, even if it’s not my absolute best.\u003C/p>\n\u003Ch3 id=\"getting-motivated\">Getting Motivated\u003C/h3>\n\u003Cp>The first step to overcoming anything is showing up.\u003C/p>\n\u003Cp>Whether I’m laying in bed wishing I could just go back to sleep, or sitting at my computer struggling to make myself just open my code editor, I have to find a way to get myself motivated. When I’m hitting these low points, I’ve found it incredibly helpful to break things down into tiny pieces and just work through them a piece at a time.\u003C/p>\n\u003Cp>If I’m struggling to get out of bed, instead of trying to motivate myself to get up because I need to go to work, I focus on the process one step at a time. It’s far easier to motivate myself to do a bunch of little things in sequence than it is to motivate myself to reach the end goal.\u003C/p>\n\u003Cp>This even applies to just tackling things throughout the day. Today I had a rather large task to complete, and I was simply not motivated to do it. I took it one step at a time, down to the most mundane steps like executing a CLI command, or opening a file. I didn’t have to be motivated to finish the task as a whole, I just had to motivate myself to tackle each step until I finished.\u003C/p>\n\u003Ch3 id=\"navigating-the-fog\">Navigating the Fog\u003C/h3>\n\u003Cp>Brain fog is a complicated one. I first experienced the impact it has on coding when I was working on homework for boot camp. It’s resulted in me blankly staring at a block of code and just totally forgetting how to read it, or just forgetting the name of a variable I defined less than a minute earlier.\u003C/p>\n\u003Cp>It’s so unbelievably frustrating to experience. The knowledge required to understand the code, the ability needed to problem solve the issue, it’s all in there somewhere but it feels like that particular brain function is out of scope.\u003C/p>\n\u003Cp>One of my bad habits to tackle this problem is coffee. I hate to admit it, but it does help take the edge of the fog.\u003C/p>\n\u003Cp>Firstly, I’d suggest some preventative measures like sleeping, getting some sun when you can, and using a light therapy lamp in the morning on those dark rainy mornings. It seems obvious, but it’s worth mentioning these things help manage depression, and, by extension, brain fog.\u003C/p>\n\u003Cp>But if you’re in the moment, the best thing you can do is just step away from the computer for a few minutes. Get up, stretch, walk around, do some jumping jacks, go outside, whatever you can do to just get away from the problem and get your body moving. It’s good advice for anyone facing a programming problem, but it’s especially good if you’re struggling with a bit of brain fog.\u003C/p>\n\u003Ch3 id=\"be-kind-to-yourself\">Be Kind to Yourself\u003C/h3>\n\u003Cp>Through all this, the most important thing to remember is to be kind to yourself.\u003C/p>\n\u003Cp>I tend to be extremely self-critical on the best of days, but when I’m struggling and not producing my best work I am even more so. I have to remind myself that this isn’t typical, I’m not lazy or dumb, I’m just having a rough time. It’s ok to slip up here and there and not be at 100% peak productivity, because I’m doing my best and I’m getting stuff done despite the challenges.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":72,"imagePaths":82,"frontmatter":83},[73,76,79],{"depth":46,"slug":74,"text":75},"getting-motivated","Getting Motivated",{"depth":46,"slug":77,"text":78},"navigating-the-fog","Navigating the Fog",{"depth":46,"slug":80,"text":81},"be-kind-to-yourself","Be Kind to Yourself",[],{"title":63,"pubDate":84,"tags":85},"2022-11-11",[17,18],"2022/coding-with-depression.md","2022/creating-a-dating-profile-with-ai",{"id":87,"data":89,"body":95,"filePath":96,"digest":97,"rendered":98,"legacyId":106},{"title":90,"pubDate":91,"tags":92},"Creating a Dating Profile With AI",["Date","2022-12-10T00:00:00.000Z"],[93,94],"Life","Tech","I’ve been single for a few years now, and I haven’t had a whole lot of success in the dating game. I’m very introverted and socially anxious, so dating apps seemed like the way to go for me. Sadly, I’ve not had a lot of success, and since Covid it seems like the dating scene has only got worse. I’ve been feeling pretty down about it, but I decided to have a little fun and let an AI help me assemble a brand new profile.\n\nMy goal is to, for an entire week, use my AI generated dating profile. That means my bio and prompts would be written by an AI and all my photos would be selected by an AI. Finally, as long as it doesn’t end in disaster, all my opening messages will be generated by an AI–all further responses will be written by me, because otherwise what would be the point?\n\nI decided to use [OpenAI](https://openai.com/) for the written portion, and [Everypixel](https://aesthetics.everypixel.com/) to select the pictures. For the dating app itself, the most important ingredient in this experiment, I decided to go with [Hinge](https://hinge.co/), mainly because I've never used it before.\n\nI decided against using AI generated images because, even though I’m letting an AI create a dating profile for me, I want it to be somewhat genuine. Also I’m not looking to catfish anybody with this image I generated just to see how good AI could make me look:\n\n\u003Cimg src=\"/media/my-ai-portrait.jpg\" width=\"260\" alt=\"an AI-generated portrait of me\" />\n\nOriginally this was going to be one post I’d write over the course of a week, but as I was writing I decided I should split it into 2 parts: Part 1, this part, about setting up the dating profile, and part 2, coming at the end of the experiment, about the experience and how it went.\n\nMy first step was to sign up for Hinge. I went through the sign up process, and got to photos. Hinge requires 6 photos to create a profile, so it was Everypixel’s time to shine! I collected up 42 photos from the last few years—I wasn’t aiming for 42 but, as that’s the answer to life, the universe, and everything, I decided to take it as a good omen—and proceeded to feed them through this AI (which I have no doubt added to some collection of images to train machine learning algorithms. Your welcome for the coming robot apocalypse!).\n\nMy first photo didn’t go over very well, with a whopping 0.9% chance of being awesome. Oh well, 41 more pictures to go. After going through the first 5 photos, not a single one scored more than 8%. That’s when I noticed I could get more info about the result, and found this gem: “Surprised by the result? This service doesn't measure the coolness or beauty of a person or any object in a photo.”\n\nSo really all I learned was that my selfies and family photos are garbage. Good to know.\n\nI had to go back to the drawing board. I came across [AttractivenessTest.com](http://AttractivenessTest.com) which admittedly seems more dubious than Everypixel, but sometimes we gotta make sacrifices. Anyways, it seemed to go pretty well, but there was one photo I had to disqualify because the AI kept zeroing in on someone else's face, and 3 that it absolutely refused to process, most likely because it couldn't zero in on my face.\n\nAs I ran through the photos, I sorted them into folders based on the rating they got, from 1 to 10. I don’t mean to brag, but I got a couple 7’s. The problem though was I had 12 6’s, so I couldn’t simply combine these 2 categories so I decided to go back to our old friend Everypixel to pick the top 4 best photos of the ones rated 6. Within a few minutes I had my top 4, ranging from a 1.5% chance to 50% chance to be awesome. Quite a range, and not extremely encouraging but that’s the bed I’ve made for myself.\n\nInteresting note: what I consider the 2 best pictures of me with animals made it through the process and made it to the top 6.\n\nNext up was selecting and answering prompts. While not remotely AI, I decided it best to use a random number generator to help me select which prompts the AI should answer.\n\nThis is where I ran into my first major roadblock. Through the magic of random numbers, for the first prompt I landed on, “Give me travel tips for…” The AI, predictably, gave me some admittedly useful travel tips, but I’m not sure that was in the spirit of the prompt. I decided it best to remove the random factor and hand-select 3 prompts I think the AI might be able to handle.\n\nMy first selection was, “The hallmark of a good relationship is…” Boy did it deliver!\n\n> The hallmark of a good relationship is trust, respect, and open communication. When two people are in a relationship, they should be able to have honest and meaningful conversations, with enough understanding, patience, and empathy to make sure that both perspectives can be heard. A good relationship should also be based on mutual respect, with each person being able to express themselves and their feelings without feeling judged or belittled. Lastly, having a strong foundation of trust and honesty is essential for a healthy and fulfilling relationship.\n\nSadly, it was a little long but with a little bit of trimming I got it to fit into the 220-character limit.\n\nNext up I picked, “The key to my heart is…” To which the AI responded, weirdly in context with the previous prompt, with the following:\n\n> No single \"key\" can unlock a person's heart. The best way forward is to build a relationship based on the qualities mentioned above.\n\nFinally, I picked, “My best dad joke.” The AI did not disappoint.\n\n> Q: What did the sea say to the beach?\n>\n> A: Nothing, it just waved!\n\nWhen I was experimenting with OpenAI initially, I had it prepare a short bio. Unfortunately, it seems that Hinge doesn’t have a field for a bio, but here it is anyway, for posterity.\n\n> I'm an introverted geek who loves all things tech, sci-fi, and fantasy. I enjoy staying inside watching movies, playing video games, and reading comics. I'm looking for someone who shares my interests and is up for some exciting nerd-related activities. I'm a reliable and loyal person who loves to make people laugh. I'm also an animal lover and I like to spend time with cats and dogs. If you think we could be a great match, let's get to know each other better!\n\nSo, how well will this work? Will AI turn my love life around? Or will this backfire spectacularly? Nobody knows! But I’ll be sure to follow up in part 2. 🙂","src/content/blog/2022/creating-a-dating-profile-with-ai.md","cd44821db46d1ab3",{"html":99,"metadata":100},"\u003Cp>I’ve been single for a few years now, and I haven’t had a whole lot of success in the dating game. I’m very introverted and socially anxious, so dating apps seemed like the way to go for me. Sadly, I’ve not had a lot of success, and since Covid it seems like the dating scene has only got worse. I’ve been feeling pretty down about it, but I decided to have a little fun and let an AI help me assemble a brand new profile.\u003C/p>\n\u003Cp>My goal is to, for an entire week, use my AI generated dating profile. That means my bio and prompts would be written by an AI and all my photos would be selected by an AI. Finally, as long as it doesn’t end in disaster, all my opening messages will be generated by an AI–all further responses will be written by me, because otherwise what would be the point?\u003C/p>\n\u003Cp>I decided to use \u003Ca href=\"https://openai.com/\">OpenAI\u003C/a> for the written portion, and \u003Ca href=\"https://aesthetics.everypixel.com/\">Everypixel\u003C/a> to select the pictures. For the dating app itself, the most important ingredient in this experiment, I decided to go with \u003Ca href=\"https://hinge.co/\">Hinge\u003C/a>, mainly because I’ve never used it before.\u003C/p>\n\u003Cp>I decided against using AI generated images because, even though I’m letting an AI create a dating profile for me, I want it to be somewhat genuine. Also I’m not looking to catfish anybody with this image I generated just to see how good AI could make me look:\u003C/p>\n\u003Cimg src=\"/media/my-ai-portrait.jpg\" width=\"260\" alt=\"an AI-generated portrait of me\">\n\u003Cp>Originally this was going to be one post I’d write over the course of a week, but as I was writing I decided I should split it into 2 parts: Part 1, this part, about setting up the dating profile, and part 2, coming at the end of the experiment, about the experience and how it went.\u003C/p>\n\u003Cp>My first step was to sign up for Hinge. I went through the sign up process, and got to photos. Hinge requires 6 photos to create a profile, so it was Everypixel’s time to shine! I collected up 42 photos from the last few years—I wasn’t aiming for 42 but, as that’s the answer to life, the universe, and everything, I decided to take it as a good omen—and proceeded to feed them through this AI (which I have no doubt added to some collection of images to train machine learning algorithms. Your welcome for the coming robot apocalypse!).\u003C/p>\n\u003Cp>My first photo didn’t go over very well, with a whopping 0.9% chance of being awesome. Oh well, 41 more pictures to go. After going through the first 5 photos, not a single one scored more than 8%. That’s when I noticed I could get more info about the result, and found this gem: “Surprised by the result? This service doesn’t measure the coolness or beauty of a person or any object in a photo.”\u003C/p>\n\u003Cp>So really all I learned was that my selfies and family photos are garbage. Good to know.\u003C/p>\n\u003Cp>I had to go back to the drawing board. I came across \u003Ca href=\"http://AttractivenessTest.com\">AttractivenessTest.com\u003C/a> which admittedly seems more dubious than Everypixel, but sometimes we gotta make sacrifices. Anyways, it seemed to go pretty well, but there was one photo I had to disqualify because the AI kept zeroing in on someone else’s face, and 3 that it absolutely refused to process, most likely because it couldn’t zero in on my face.\u003C/p>\n\u003Cp>As I ran through the photos, I sorted them into folders based on the rating they got, from 1 to 10. I don’t mean to brag, but I got a couple 7’s. The problem though was I had 12 6’s, so I couldn’t simply combine these 2 categories so I decided to go back to our old friend Everypixel to pick the top 4 best photos of the ones rated 6. Within a few minutes I had my top 4, ranging from a 1.5% chance to 50% chance to be awesome. Quite a range, and not extremely encouraging but that’s the bed I’ve made for myself.\u003C/p>\n\u003Cp>Interesting note: what I consider the 2 best pictures of me with animals made it through the process and made it to the top 6.\u003C/p>\n\u003Cp>Next up was selecting and answering prompts. While not remotely AI, I decided it best to use a random number generator to help me select which prompts the AI should answer.\u003C/p>\n\u003Cp>This is where I ran into my first major roadblock. Through the magic of random numbers, for the first prompt I landed on, “Give me travel tips for…” The AI, predictably, gave me some admittedly useful travel tips, but I’m not sure that was in the spirit of the prompt. I decided it best to remove the random factor and hand-select 3 prompts I think the AI might be able to handle.\u003C/p>\n\u003Cp>My first selection was, “The hallmark of a good relationship is…” Boy did it deliver!\u003C/p>\n\u003Cblockquote>\n\u003Cp>The hallmark of a good relationship is trust, respect, and open communication. When two people are in a relationship, they should be able to have honest and meaningful conversations, with enough understanding, patience, and empathy to make sure that both perspectives can be heard. A good relationship should also be based on mutual respect, with each person being able to express themselves and their feelings without feeling judged or belittled. Lastly, having a strong foundation of trust and honesty is essential for a healthy and fulfilling relationship.\u003C/p>\n\u003C/blockquote>\n\u003Cp>Sadly, it was a little long but with a little bit of trimming I got it to fit into the 220-character limit.\u003C/p>\n\u003Cp>Next up I picked, “The key to my heart is…” To which the AI responded, weirdly in context with the previous prompt, with the following:\u003C/p>\n\u003Cblockquote>\n\u003Cp>No single “key” can unlock a person’s heart. The best way forward is to build a relationship based on the qualities mentioned above.\u003C/p>\n\u003C/blockquote>\n\u003Cp>Finally, I picked, “My best dad joke.” The AI did not disappoint.\u003C/p>\n\u003Cblockquote>\n\u003Cp>Q: What did the sea say to the beach?\u003C/p>\n\u003Cp>A: Nothing, it just waved!\u003C/p>\n\u003C/blockquote>\n\u003Cp>When I was experimenting with OpenAI initially, I had it prepare a short bio. Unfortunately, it seems that Hinge doesn’t have a field for a bio, but here it is anyway, for posterity.\u003C/p>\n\u003Cblockquote>\n\u003Cp>I’m an introverted geek who loves all things tech, sci-fi, and fantasy. I enjoy staying inside watching movies, playing video games, and reading comics. I’m looking for someone who shares my interests and is up for some exciting nerd-related activities. I’m a reliable and loyal person who loves to make people laugh. I’m also an animal lover and I like to spend time with cats and dogs. If you think we could be a great match, let’s get to know each other better!\u003C/p>\n\u003C/blockquote>\n\u003Cp>So, how well will this work? Will AI turn my love life around? Or will this backfire spectacularly? Nobody knows! But I’ll be sure to follow up in part 2. 🙂\u003C/p>",{"headings":101,"imagePaths":102,"frontmatter":103},[],[],{"title":90,"pubDate":104,"tags":105},"2022-12-10",[93,94],"2022/creating-a-dating-profile-with-ai.md","2022/getting-out-of-your-comfort-zone",{"id":107,"data":109,"body":114,"filePath":115,"digest":116,"rendered":117,"legacyId":124},{"title":110,"pubDate":111,"tags":112},"Getting Out of Your Comfort Zone",["Date","2022-12-10T00:00:00.000Z"],[93,113,17],"Learning","When it comes to frameworks, I’ve been firmly stuck in the React–and React-adjacent–world. Basically, my “coding comfort zone” has been vanilla JavaScript, React, and Next.js. The world of web development is much broader than that, but I’m going to be honest, I was a little scared to branch out.\n\nDespite my curiosity and eagerness to learn, I tend to stick to what’s comfortable, and I have to work a little harder to branch out. I’m comfortable with React, so my tendency is to learn everything I can about React. I’m comfortable with JavaScript, so it’s more natural for me to try to master that language.\n\nBut there was a time I didn’t know how to do anything beyond a simple website with HTML and CSS (and I barely knew CSS). Heck, there was a time I was building websites with [iWeb.](https://en.wikipedia.org/wiki/IWeb) I wouldn't be anywhere near where I am as a web developer if I didn't get out of my comfort zone.\n\nSo with that in mind, after a friend suggested I try out [Astro](https://astro.build/), I decided maybe it's time to branch out and try new things. I've also been wanting to build a blog site where I can write about my other interests outside of web development. So it all came together nicely.\n\nSo, the other night I sat down on the couch with my laptop, opened up the Astro documentation, and got to work. Over the course of that evening I built a fully-functional blog site, learned the fundamentals of Astro in the process, and added another tool to my web developer tool belt.\n\nThrough this experience, I proved to myself that learning new things isn’t as scary as it seems. Does this mean I’m going to go out and learn every framework? No, I don’t think that’s realistic or advisable for anybody to do. But it showed me how relatively easy it is to branch out, so I won’t be so nervous about stepping outside the comfort of the React world in the future.\n\nIf you’re feeling like you’re stuck in your comfort zone, using whatever technologies and languages you’re used to using, try mixing things up. Find a project you want to build, and try tackling it with a tool you’ve never used before.\n\nAlso, if you're curious, you can check out my Astro blog at [ghall.blog](http://ghall.blog).\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/getting-out-of-your-comfort-zone.md","aa2ec47f7048c7f2",{"html":118,"metadata":119},"\u003Cp>When it comes to frameworks, I’ve been firmly stuck in the React–and React-adjacent–world. Basically, my “coding comfort zone” has been vanilla JavaScript, React, and Next.js. The world of web development is much broader than that, but I’m going to be honest, I was a little scared to branch out.\u003C/p>\n\u003Cp>Despite my curiosity and eagerness to learn, I tend to stick to what’s comfortable, and I have to work a little harder to branch out. I’m comfortable with React, so my tendency is to learn everything I can about React. I’m comfortable with JavaScript, so it’s more natural for me to try to master that language.\u003C/p>\n\u003Cp>But there was a time I didn’t know how to do anything beyond a simple website with HTML and CSS (and I barely knew CSS). Heck, there was a time I was building websites with \u003Ca href=\"https://en.wikipedia.org/wiki/IWeb\">iWeb.\u003C/a> I wouldn’t be anywhere near where I am as a web developer if I didn’t get out of my comfort zone.\u003C/p>\n\u003Cp>So with that in mind, after a friend suggested I try out \u003Ca href=\"https://astro.build/\">Astro\u003C/a>, I decided maybe it’s time to branch out and try new things. I’ve also been wanting to build a blog site where I can write about my other interests outside of web development. So it all came together nicely.\u003C/p>\n\u003Cp>So, the other night I sat down on the couch with my laptop, opened up the Astro documentation, and got to work. Over the course of that evening I built a fully-functional blog site, learned the fundamentals of Astro in the process, and added another tool to my web developer tool belt.\u003C/p>\n\u003Cp>Through this experience, I proved to myself that learning new things isn’t as scary as it seems. Does this mean I’m going to go out and learn every framework? No, I don’t think that’s realistic or advisable for anybody to do. But it showed me how relatively easy it is to branch out, so I won’t be so nervous about stepping outside the comfort of the React world in the future.\u003C/p>\n\u003Cp>If you’re feeling like you’re stuck in your comfort zone, using whatever technologies and languages you’re used to using, try mixing things up. Find a project you want to build, and try tackling it with a tool you’ve never used before.\u003C/p>\n\u003Cp>Also, if you’re curious, you can check out my Astro blog at \u003Ca href=\"http://ghall.blog\">ghall.blog\u003C/a>.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":120,"imagePaths":121,"frontmatter":122},[],[],{"title":110,"pubDate":104,"tags":123},[93,113,17],"2022/getting-out-of-your-comfort-zone.md","2022/my-favorite-little-apps",{"id":125,"data":127,"body":133,"filePath":134,"digest":135,"rendered":136,"legacyId":159},{"title":128,"pubDate":129,"tags":130},"My Favorite Little Apps",["Date","2022-11-28T00:00:00.000Z"],[131,132],"MacOS","Apps","There are a lot of apps on my Macs that I use every day. There’s the big ones like Nova for coding, Brave for testing and dev tools, Craft for taking notes and keeping track of projects, and many more. But I wanted to pay special attention to the smaller apps that I use that just hang out in the menu bar or the background that make working in MacOS that much more seamless and enjoyable.\n\n### Itsycal\n\nThis is a cool little free that puts a calendar in your menubar. It’s a great way to get a quick glance at my day, and join Zoom/Google Meet calls without opening a full calendar app.\n\n[Download Here](https://www.mowglii.com/itsycal/)\n\n### Tot\n\nA note pad that lives in your menu bar! I use it for jotting down notes during meetings, temporarily storing snippets of text and code, making quick lists, storing links for later…you get the idea.\n\nThe Mac app is free, but you can also buy an iOS version.\n\n[Download Here](https://apps.apple.com/us/app/tot/id1491071483?mt=12)\n\n### Rectangle Pro\n\nSnap, resize, and align windows with keyboard shortcuts, or by dragging then across the screen. It’s highly customizable, and I’m going to be honest I haven’t even scratched the surface of the variety of options the Pro version provides, I just bought it to support development.\n\nThere are a lot of apps for Mac that do similar things, but this is, in my opinion, the best available.\n\n[Download/Buy Here](https://rectangleapp.com/)\n\n### Velja\n\nBecause I use Safari as my primary browser, but prefer to use Brave for development, this app saves me time and mouse clicks. Basically Velja routes links opened from any app to any browser you have installed. For example, I have it set up to open any ‘localhost’ URLs in Brave.\n\nIt offers a variety of built-in filters that will even work with certain apps (like Apple Music, Discord, Zoom, etc).\n\n[Download Here](https://apps.apple.com/us/app/velja/id1607635845?mt=12)\n\n### Contexts\n\nIt’s the built-in command + tab app switcher on steroids! Instead of a row of icons, you get a list of every window that you can either tab through or even search by app or window title. It’s another app I feel lost with if I’m using a computer without it installed.\n\n[Buy Here](https://contexts.co/)\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/my-favorite-little-apps.md","561165d463c24f48",{"html":137,"metadata":138},"\u003Cp>There are a lot of apps on my Macs that I use every day. There’s the big ones like Nova for coding, Brave for testing and dev tools, Craft for taking notes and keeping track of projects, and many more. But I wanted to pay special attention to the smaller apps that I use that just hang out in the menu bar or the background that make working in MacOS that much more seamless and enjoyable.\u003C/p>\n\u003Ch3 id=\"itsycal\">Itsycal\u003C/h3>\n\u003Cp>This is a cool little free that puts a calendar in your menubar. It’s a great way to get a quick glance at my day, and join Zoom/Google Meet calls without opening a full calendar app.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.mowglii.com/itsycal/\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"tot\">Tot\u003C/h3>\n\u003Cp>A note pad that lives in your menu bar! I use it for jotting down notes during meetings, temporarily storing snippets of text and code, making quick lists, storing links for later…you get the idea.\u003C/p>\n\u003Cp>The Mac app is free, but you can also buy an iOS version.\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app/tot/id1491071483?mt=12\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"rectangle-pro\">Rectangle Pro\u003C/h3>\n\u003Cp>Snap, resize, and align windows with keyboard shortcuts, or by dragging then across the screen. It’s highly customizable, and I’m going to be honest I haven’t even scratched the surface of the variety of options the Pro version provides, I just bought it to support development.\u003C/p>\n\u003Cp>There are a lot of apps for Mac that do similar things, but this is, in my opinion, the best available.\u003C/p>\n\u003Cp>\u003Ca href=\"https://rectangleapp.com/\">Download/Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"velja\">Velja\u003C/h3>\n\u003Cp>Because I use Safari as my primary browser, but prefer to use Brave for development, this app saves me time and mouse clicks. Basically Velja routes links opened from any app to any browser you have installed. For example, I have it set up to open any ‘localhost’ URLs in Brave.\u003C/p>\n\u003Cp>It offers a variety of built-in filters that will even work with certain apps (like Apple Music, Discord, Zoom, etc).\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app/velja/id1607635845?mt=12\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"contexts\">Contexts\u003C/h3>\n\u003Cp>It’s the built-in command + tab app switcher on steroids! Instead of a row of icons, you get a list of every window that you can either tab through or even search by app or window title. It’s another app I feel lost with if I’m using a computer without it installed.\u003C/p>\n\u003Cp>\u003Ca href=\"https://contexts.co/\">Buy Here\u003C/a>\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":139,"imagePaths":155,"frontmatter":156},[140,143,146,149,152],{"depth":46,"slug":141,"text":142},"itsycal","Itsycal",{"depth":46,"slug":144,"text":145},"tot","Tot",{"depth":46,"slug":147,"text":148},"rectangle-pro","Rectangle Pro",{"depth":46,"slug":150,"text":151},"velja","Velja",{"depth":46,"slug":153,"text":154},"contexts","Contexts",[],{"title":128,"pubDate":157,"tags":158},"2022-11-28",[131,132],"2022/my-favorite-little-apps.md","2022/ileopard-a-retrospective",{"id":160,"data":162,"body":166,"filePath":167,"digest":168,"rendered":169,"legacyId":177},{"title":163,"pubDate":164,"tags":165},"iLeopard - A Retrospective",["Date","2022-12-26T00:00:00.000Z"],[94,131,37],"I few months ago I rediscovered among some old project folders the source code and markdown files for an old blog I ran in the early 2010s. With nothing to do on the afternoon of Christmas Eve, which was a brisk 15°F, I decided I wanted to search through and try to find a rather lengthy retrospective I wrote on Star Trek: The Next Generation. Now that I’ve finally started up a new blog I thought it would be fun to touch it up and republish it, since I put so many hours worth of work into it back in the day. Upsettingly, it was not there.\n\nBut I did find a rather salty post I wrote about a Mac theme I created back when I was a senior in high school. I thought it would be nice to go back and take a fresh look at the project, and how I feel about it now, being another 10 years removed from it.\n\nIf you were around the Mac customization scene–specifically on the now-defunct MacThemes.net–around 2007, you probably remember a little project called iLeopard. Admittedly, the chance that you’re in that extremely specific niché is incredibly small. The best data I could find is this [Ars Technica article](https://arstechnica.com/gadgets/2007/03/7296/) from March 2007 saying the Mac hit about 6% marketshare. And only a tiny subset of those users even had the thought that customizing the look of Mac OS X was something they wanted to do.\n\n\u003Cimg src=\"/media/ileopard/mac-os-10-1.png\" width=\"90%\" alt=\"a screenshot of Mac OS X 10.1 with various apps open\" />\n\n*Mac OS X 10.1 and the Aqua Interface, from* [_GUIdebook_](https://guidebookgallery.org/screenshots/macosx101)\n\nI was one of the few that had that had that idea pop into my head. I was super into finding and downloading cool themes, including one I distinctly remember that looked like Windows Vista for some reason. It was 2007, the Aqua Interface (the playful, plastic-looking interface style Apple used for about a decade) was already feeling a little passé to me. I wanted something new, and weirdly enough that new thing came from Apple, in the form of iTunes 7.\n\n\u003Cimg src=\"/media/ileopard/itunes-7.gif\" width=\"80%\" alt=\"a screenshot iTunes 7 with the iTunes Music Store open\" />\n\n_iTunes 7 screenshot, from [AppleInsider](https://appleinsider.com/articles/06/09/12/apple_introduces_itunes_7_previews_itv_device)_\n\nIn retrospect, and with the hindsight of 15 years of UI design evolution, it’s not exactly pretty, but I liked it at the time. It was classy, and simple, and I thought it was the future of the Mac OS X design language.\n\nFast-forward to the release of Mac OS X Leopard, and I was disappointed to see that the bubbly, lick-able scrollbars and buttons were still quite prominent. Having dabbled in the Mac OS X theming scene already, I decided to take matters into my own hands.\n\nThere was a small problem though. With the release of Leopard, Apple changed the format the system used for UI resources, and introduced a new framework to power it all, called CoreUI. The tools that had existed to make theming the OS relatively simple were useless.\n\nIf you’re curious, [here’s a writeup](https://arstechnica.com/gadgets/2007/10/mac-os-x-10-5/10/) from John Siracusa’s Mac OS X Leopard review about CoreUI, which was, if I recall, what served as the starting point on the road to being able to even locate the system files I needed to crack open.\n\nNow, just as a heads up, most of what follows is based on memory and a fairly cringy blog post I wrote 10 years ago and found in the bowls of my digital archives. Also, my memory on the timeline is a bit fuzzy, but with some digging I found that this mostly takes place between April and June 2008.\n\nBasically, the main barrier to theming Mac OS X Leopard were 2 files; ArtFile.bin, and SArtFile.bin. This is where nearly all the UI resources were stored, aside from scroll bars, which were stored in a file called Extras.rsrc, a file that had been cracked ages before. If I recall–and I could be totally wrong so if anybody knows better feel free to tell me–Extras.rsrc, and its sister file Extras2.rsrc, still contained all the UI resources, but only the scrollbars were actually used by the system.\n\nI want to make it clear that I can’t take the credit for cracking open ArtFile.bin and SArtFile.bin. I believe it was someone on the MacThemes.net forum, and I wish I could remember or find their name–if you’re out there reading this, thank you! Those files were essentially encrypted ZIP files, and this genius of a human build a command line tool to decrypt and extract them. This was actually the experience that got me comfortable with the command line, and we’ll say indirectly led to my current career as a web developer, but I digress…\n\nAnyway, I knew where to find the files. I had the tool to decrypt the files. The only thing that stood in my way was the mass of nonsensical folder names filled with equally nonsensically named bitmap images that got extracted from the files.\n\nBeing that I was a bored teenager in high school with way too much time on my hands, I decided to figure out exactly what every bitmap image was by methodically changing the graphics to the most garish colors I could, recreating the bin files–which if I recall was as easy as zipping them up and renaming them, but this was 15 years ago so I could definitely be misremembering–restarting my computer, and hunting down the various neon hues while taking notes.\n\nAfter dozens of restarts, and a couple corrupted OS installs, I had figured out a good chunk of the building blocks making up Leopard’s UI. Even still, after weeks of this, there was still so much to be done. Bear in mind, there was no documentation on any of this stuff. I was about to create, as far as I know, the first theme for Mac OS X Leopard.\n\n\u003Cimg src=\"/media/ileopard/ileopard-2-0-1.png\" width=\"75%\" alt=\"a screenshot of the Mac OS X Appearance preference pane showing off the modifications made by iLeopard\" />\n\n_iLeopard 2.0.1 screenshot, from [AmazingHenry on MacRumors](https://forums.macrumors.com/threads/ileopard-theme.2045553/), released by fellow MacThemes.net user ‘gcamp' after I essentially handed off the project_\n\nI started pulling elements from iTunes, and, using a “totally legal, I swear” copy of Adobe PhotoShop, tweaked them to fit in their new home. I shared the very first version of the theme, which I called iLeopard, a portmanteau of iTunes and Leopard, on the MacThemes.net forum (thankfully archived [here](https://web.archive.org/web/20080702015727/http://macthemes2.net:80/forum/viewtopic.php?id=16785679&p=1) by the Wayback Machine!!), and it kind of took off more than I expected. By that, I mean people actually used it. Then it made the MacThemes.net front page. Yeah, it was all a bit overwhelming.\n\nAt some point, I got an offer to help out with the theme from fellow forum user ‘gcamp’. This was probably the best possible thing to happen for the longevity of the theme. He initially started by contributing custom graphics, and ended up taking the reigns on the project after I graduated high school and lost my passion for the project. He kept the project alive, I believe until Apple effectively killed Mac theming for good a few releases later.\n\nThe sad news is I lost all my original work on iLeopard, along with countless other digital relics from that era of my life, when my MacBook suffered a major hard drive crash in 2011. I had to go on a crazy archeological dig through the internet just to find the above screenshot, and it’s from after I handed off the project. I did reach out on Mastodon on the extremely off-chance that someone had some more screenshots, or even a pre-2.0 installer, but I haven't got back anything substantial as of this writing.\n\nWhat’s been interesting as I’ve written and researched this piece is the contrast between the Apple of 15+ years ago, and the Apple of today. It was a weird time, they had just completed transitioning the Mac from PowerPC to Intel–interestingly, we’re currently in the midst of a transition from Intel to Apple Silicon–and the first iPhone was brand new.\n\nSecurity on the Mac was pretty laissez-faire, to the point where a dorky high school kid could modify system files and create a simple tool to let other people install those modifications. These days, as a more security-conscious user, that idea horrifies me. But at the same time, I do miss being able to tinker with the little parts of software that weren’t made to be tinkered with.","src/content/blog/2022/ileopard-a-retrospective.md","e9c929df4b77a7b6",{"html":170,"metadata":171},"\u003Cp>I few months ago I rediscovered among some old project folders the source code and markdown files for an old blog I ran in the early 2010s. With nothing to do on the afternoon of Christmas Eve, which was a brisk 15°F, I decided I wanted to search through and try to find a rather lengthy retrospective I wrote on Star Trek: The Next Generation. Now that I’ve finally started up a new blog I thought it would be fun to touch it up and republish it, since I put so many hours worth of work into it back in the day. Upsettingly, it was not there.\u003C/p>\n\u003Cp>But I did find a rather salty post I wrote about a Mac theme I created back when I was a senior in high school. I thought it would be nice to go back and take a fresh look at the project, and how I feel about it now, being another 10 years removed from it.\u003C/p>\n\u003Cp>If you were around the Mac customization scene–specifically on the now-defunct MacThemes.net–around 2007, you probably remember a little project called iLeopard. Admittedly, the chance that you’re in that extremely specific niché is incredibly small. The best data I could find is this \u003Ca href=\"https://arstechnica.com/gadgets/2007/03/7296/\">Ars Technica article\u003C/a> from March 2007 saying the Mac hit about 6% marketshare. And only a tiny subset of those users even had the thought that customizing the look of Mac OS X was something they wanted to do.\u003C/p>\n\u003Cimg src=\"/media/ileopard/mac-os-10-1.png\" width=\"90%\" alt=\"a screenshot of Mac OS X 10.1 with various apps open\">\n\u003Cp>\u003Cem>Mac OS X 10.1 and the Aqua Interface, from\u003C/em> \u003Ca href=\"https://guidebookgallery.org/screenshots/macosx101\">\u003Cem>GUIdebook\u003C/em>\u003C/a>\u003C/p>\n\u003Cp>I was one of the few that had that had that idea pop into my head. I was super into finding and downloading cool themes, including one I distinctly remember that looked like Windows Vista for some reason. It was 2007, the Aqua Interface (the playful, plastic-looking interface style Apple used for about a decade) was already feeling a little passé to me. I wanted something new, and weirdly enough that new thing came from Apple, in the form of iTunes 7.\u003C/p>\n\u003Cimg src=\"/media/ileopard/itunes-7.gif\" width=\"80%\" alt=\"a screenshot iTunes 7 with the iTunes Music Store open\">\n\u003Cp>\u003Cem>iTunes 7 screenshot, from \u003Ca href=\"https://appleinsider.com/articles/06/09/12/apple_introduces_itunes_7_previews_itv_device\">AppleInsider\u003C/a>\u003C/em>\u003C/p>\n\u003Cp>In retrospect, and with the hindsight of 15 years of UI design evolution, it’s not exactly pretty, but I liked it at the time. It was classy, and simple, and I thought it was the future of the Mac OS X design language.\u003C/p>\n\u003Cp>Fast-forward to the release of Mac OS X Leopard, and I was disappointed to see that the bubbly, lick-able scrollbars and buttons were still quite prominent. Having dabbled in the Mac OS X theming scene already, I decided to take matters into my own hands.\u003C/p>\n\u003Cp>There was a small problem though. With the release of Leopard, Apple changed the format the system used for UI resources, and introduced a new framework to power it all, called CoreUI. The tools that had existed to make theming the OS relatively simple were useless.\u003C/p>\n\u003Cp>If you’re curious, \u003Ca href=\"https://arstechnica.com/gadgets/2007/10/mac-os-x-10-5/10/\">here’s a writeup\u003C/a> from John Siracusa’s Mac OS X Leopard review about CoreUI, which was, if I recall, what served as the starting point on the road to being able to even locate the system files I needed to crack open.\u003C/p>\n\u003Cp>Now, just as a heads up, most of what follows is based on memory and a fairly cringy blog post I wrote 10 years ago and found in the bowls of my digital archives. Also, my memory on the timeline is a bit fuzzy, but with some digging I found that this mostly takes place between April and June 2008.\u003C/p>\n\u003Cp>Basically, the main barrier to theming Mac OS X Leopard were 2 files; ArtFile.bin, and SArtFile.bin. This is where nearly all the UI resources were stored, aside from scroll bars, which were stored in a file called Extras.rsrc, a file that had been cracked ages before. If I recall–and I could be totally wrong so if anybody knows better feel free to tell me–Extras.rsrc, and its sister file Extras2.rsrc, still contained all the UI resources, but only the scrollbars were actually used by the system.\u003C/p>\n\u003Cp>I want to make it clear that I can’t take the credit for cracking open ArtFile.bin and SArtFile.bin. I believe it was someone on the MacThemes.net forum, and I wish I could remember or find their name–if you’re out there reading this, thank you! Those files were essentially encrypted ZIP files, and this genius of a human build a command line tool to decrypt and extract them. This was actually the experience that got me comfortable with the command line, and we’ll say indirectly led to my current career as a web developer, but I digress…\u003C/p>\n\u003Cp>Anyway, I knew where to find the files. I had the tool to decrypt the files. The only thing that stood in my way was the mass of nonsensical folder names filled with equally nonsensically named bitmap images that got extracted from the files.\u003C/p>\n\u003Cp>Being that I was a bored teenager in high school with way too much time on my hands, I decided to figure out exactly what every bitmap image was by methodically changing the graphics to the most garish colors I could, recreating the bin files–which if I recall was as easy as zipping them up and renaming them, but this was 15 years ago so I could definitely be misremembering–restarting my computer, and hunting down the various neon hues while taking notes.\u003C/p>\n\u003Cp>After dozens of restarts, and a couple corrupted OS installs, I had figured out a good chunk of the building blocks making up Leopard’s UI. Even still, after weeks of this, there was still so much to be done. Bear in mind, there was no documentation on any of this stuff. I was about to create, as far as I know, the first theme for Mac OS X Leopard.\u003C/p>\n\u003Cimg src=\"/media/ileopard/ileopard-2-0-1.png\" width=\"75%\" alt=\"a screenshot of the Mac OS X Appearance preference pane showing off the modifications made by iLeopard\">\n\u003Cp>\u003Cem>iLeopard 2.0.1 screenshot, from \u003Ca href=\"https://forums.macrumors.com/threads/ileopard-theme.2045553/\">AmazingHenry on MacRumors\u003C/a>, released by fellow MacThemes.net user ‘gcamp’ after I essentially handed off the project\u003C/em>\u003C/p>\n\u003Cp>I started pulling elements from iTunes, and, using a “totally legal, I swear” copy of Adobe PhotoShop, tweaked them to fit in their new home. I shared the very first version of the theme, which I called iLeopard, a portmanteau of iTunes and Leopard, on the MacThemes.net forum (thankfully archived \u003Ca href=\"https://web.archive.org/web/20080702015727/http://macthemes2.net:80/forum/viewtopic.php?id=16785679&p=1\">here\u003C/a> by the Wayback Machine!!), and it kind of took off more than I expected. By that, I mean people actually used it. Then it made the MacThemes.net front page. Yeah, it was all a bit overwhelming.\u003C/p>\n\u003Cp>At some point, I got an offer to help out with the theme from fellow forum user ‘gcamp’. This was probably the best possible thing to happen for the longevity of the theme. He initially started by contributing custom graphics, and ended up taking the reigns on the project after I graduated high school and lost my passion for the project. He kept the project alive, I believe until Apple effectively killed Mac theming for good a few releases later.\u003C/p>\n\u003Cp>The sad news is I lost all my original work on iLeopard, along with countless other digital relics from that era of my life, when my MacBook suffered a major hard drive crash in 2011. I had to go on a crazy archeological dig through the internet just to find the above screenshot, and it’s from after I handed off the project. I did reach out on Mastodon on the extremely off-chance that someone had some more screenshots, or even a pre-2.0 installer, but I haven’t got back anything substantial as of this writing.\u003C/p>\n\u003Cp>What’s been interesting as I’ve written and researched this piece is the contrast between the Apple of 15+ years ago, and the Apple of today. It was a weird time, they had just completed transitioning the Mac from PowerPC to Intel–interestingly, we’re currently in the midst of a transition from Intel to Apple Silicon–and the first iPhone was brand new.\u003C/p>\n\u003Cp>Security on the Mac was pretty laissez-faire, to the point where a dorky high school kid could modify system files and create a simple tool to let other people install those modifications. These days, as a more security-conscious user, that idea horrifies me. But at the same time, I do miss being able to tinker with the little parts of software that weren’t made to be tinkered with.\u003C/p>",{"headings":172,"imagePaths":173,"frontmatter":174},[],[],{"title":163,"pubDate":175,"tags":176},"2022-12-26",[94,131,37],"2022/ileopard-a-retrospective.md","2022/my-macos-home-directory-overview",{"id":178,"data":180,"body":184,"filePath":185,"digest":186,"rendered":187,"legacyId":195},{"title":181,"pubDate":182,"tags":183},"My MacOS Home Directory Overview",["Date","2022-12-23T00:00:00.000Z"],[131,94],"On [the latest episode of ATP](https://atp.fm/514), Casey, John, and Marco discussed MacOS home directories. After I was done cringing at John keeping his git clones in the root level of his home directory, I started thinking about how I use my own home folder, and how I keep it organized. I won’t go into the hidden items, because I don’t think either of us want that (with hidden items included, my home directory has 34 documents, and 47 folders 😅).\n\nAnyway, here’s my overview...\n\n- Applications - Honestly, all that’s in here are a handful of Shortcuts, and I’m not sure why because I never put them there.\n- Desktop - This is empty, because I don’t keep anything on my desktop.\n- Developer - Now this is where git clones go. Mostly web projects, a folder for all my work repos, and the [Playdate SDK](https://play.date/dev/) from when I was fiddling with that a couple months ago.\n- Documents - Basically just a folder where Divinity: Original Sin 2 keeps its saves, and where I keep various Pages documents and PDFs for some reason (I should probably sort through that at some point)\n- Downloads - Self-explanatory. I tend to keep this clean manually and with Hazel scripts, so there’s nothing of note in here at the moment.\n- Movies - Empty, except for my TV.app library.\n- Music - Same as above, except with my Music.app library.\n- Pictures - My Photos.app library, as well as a hodgepodge of scanned photos, drawings, desktop wallpapers, and GIFs I like. All sorted by folder, of course. I’m not a monster!\n- Postman - From when I tried Postman, and then immediately switched back to Insomnia.\n- Public - I don’t think I’ve ever used this folder.\n- Sites - Same as above.\n- Sync - A synced folder, used by an app called Sync, that syncs little bits and bobs like shell scripts and Hazel rules between my 2 Macs.\n\nI didn’t bother listing my Library folder because there’s not much to say about that–it’s the same as it is on anyone else’s Mac.\n\nOn an additional note, I would really like an iCloud Drive folder in the home directory. I could add one with an alias or symlink, but it just seems weird to me that it’s squirreled away in the Library folder, cryptically named ‘Mobile Documents’.","src/content/blog/2022/my-macos-home-directory-overview.md","c1d7b4f1e53ad3d1",{"html":188,"metadata":189},"\u003Cp>On \u003Ca href=\"https://atp.fm/514\">the latest episode of ATP\u003C/a>, Casey, John, and Marco discussed MacOS home directories. After I was done cringing at John keeping his git clones in the root level of his home directory, I started thinking about how I use my own home folder, and how I keep it organized. I won’t go into the hidden items, because I don’t think either of us want that (with hidden items included, my home directory has 34 documents, and 47 folders 😅).\u003C/p>\n\u003Cp>Anyway, here’s my overview…\u003C/p>\n\u003Cul>\n\u003Cli>Applications - Honestly, all that’s in here are a handful of Shortcuts, and I’m not sure why because I never put them there.\u003C/li>\n\u003Cli>Desktop - This is empty, because I don’t keep anything on my desktop.\u003C/li>\n\u003Cli>Developer - Now this is where git clones go. Mostly web projects, a folder for all my work repos, and the \u003Ca href=\"https://play.date/dev/\">Playdate SDK\u003C/a> from when I was fiddling with that a couple months ago.\u003C/li>\n\u003Cli>Documents - Basically just a folder where Divinity: Original Sin 2 keeps its saves, and where I keep various Pages documents and PDFs for some reason (I should probably sort through that at some point)\u003C/li>\n\u003Cli>Downloads - Self-explanatory. I tend to keep this clean manually and with Hazel scripts, so there’s nothing of note in here at the moment.\u003C/li>\n\u003Cli>Movies - Empty, except for my TV.app library.\u003C/li>\n\u003Cli>Music - Same as above, except with my Music.app library.\u003C/li>\n\u003Cli>Pictures - My Photos.app library, as well as a hodgepodge of scanned photos, drawings, desktop wallpapers, and GIFs I like. All sorted by folder, of course. I’m not a monster!\u003C/li>\n\u003Cli>Postman - From when I tried Postman, and then immediately switched back to Insomnia.\u003C/li>\n\u003Cli>Public - I don’t think I’ve ever used this folder.\u003C/li>\n\u003Cli>Sites - Same as above.\u003C/li>\n\u003Cli>Sync - A synced folder, used by an app called Sync, that syncs little bits and bobs like shell scripts and Hazel rules between my 2 Macs.\u003C/li>\n\u003C/ul>\n\u003Cp>I didn’t bother listing my Library folder because there’s not much to say about that–it’s the same as it is on anyone else’s Mac.\u003C/p>\n\u003Cp>On an additional note, I would really like an iCloud Drive folder in the home directory. I could add one with an alias or symlink, but it just seems weird to me that it’s squirreled away in the Library folder, cryptically named ‘Mobile Documents’.\u003C/p>",{"headings":190,"imagePaths":191,"frontmatter":192},[],[],{"title":181,"pubDate":193,"tags":194},"2022-12-23",[131,94],"2022/my-macos-home-directory-overview.md","2022/nextjs-13-and-exploring-new-technologies",{"id":196,"data":198,"body":202,"filePath":203,"digest":204,"rendered":205,"legacyId":213},{"title":199,"pubDate":200,"tags":201},"Next.js 13 and Exploring New Technologies",["Date","2022-10-28T00:00:00.000Z"],[17,113],"Next.js 13 was launched a few days ago ([More details here!](https://nextjs.org/blog/next-13)), and I’ve been slowly working my way through the new stuff. As a relative newcomer to the world of Next.js I’m very excited by what I see, but I also don’t want to get too bogged down in what’s new because I’m already feeling a little bombarded with new stuff at my day job. Besides, it might be a while before I get to use Next.js 13 in a professional setting.\n\nYes I’m a tech nerd, and I become easily enamored with the shiny new thing, perhaps to a fault, especially when that shiny new thing is a piece of software. I’m the guy who installs OS updates on day one—MacOS Ventura seems to be running fine so far, _knock on wood_—and I just want to just dive head-first into Next.js 13.\n\nBut, when you’re as new to the industry as I am, there are already so many new tools and technologies to learn it can already seem overwhelming without throwing in trying to keep up with the latest in the ever-evolving world of web development.\n\nMy attitude is embrace the curiosity, but focus on mastering the tools you’re currently using on a daily basis. Whether you’re using an entirely different set of frameworks,, or if you’re like me and just using an older version of Next.js, the new shiny stuff will still be there when you’re ready. And possibly, by the time you’re ready, an even newer, shinier technology will be around for you to check out.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/nextjs-13-and-exploring-new-technologies.md","ea18592c3f2fe135",{"html":206,"metadata":207},"\u003Cp>Next.js 13 was launched a few days ago (\u003Ca href=\"https://nextjs.org/blog/next-13\">More details here!\u003C/a>), and I’ve been slowly working my way through the new stuff. As a relative newcomer to the world of Next.js I’m very excited by what I see, but I also don’t want to get too bogged down in what’s new because I’m already feeling a little bombarded with new stuff at my day job. Besides, it might be a while before I get to use Next.js 13 in a professional setting.\u003C/p>\n\u003Cp>Yes I’m a tech nerd, and I become easily enamored with the shiny new thing, perhaps to a fault, especially when that shiny new thing is a piece of software. I’m the guy who installs OS updates on day one—MacOS Ventura seems to be running fine so far, \u003Cem>knock on wood\u003C/em>—and I just want to just dive head-first into Next.js 13.\u003C/p>\n\u003Cp>But, when you’re as new to the industry as I am, there are already so many new tools and technologies to learn it can already seem overwhelming without throwing in trying to keep up with the latest in the ever-evolving world of web development.\u003C/p>\n\u003Cp>My attitude is embrace the curiosity, but focus on mastering the tools you’re currently using on a daily basis. Whether you’re using an entirely different set of frameworks,, or if you’re like me and just using an older version of Next.js, the new shiny stuff will still be there when you’re ready. And possibly, by the time you’re ready, an even newer, shinier technology will be around for you to check out.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":208,"imagePaths":209,"frontmatter":210},[],[],{"title":199,"pubDate":211,"tags":212},"2022-10-28",[17,113],"2022/nextjs-13-and-exploring-new-technologies.md","2022/my-top-3-games-of-2022",{"id":214,"data":216,"body":221,"filePath":222,"digest":223,"rendered":224,"legacyId":241},{"title":217,"pubDate":218,"tags":219},"My Top 3 Games of 2022",["Date","2022-12-09T00:00:00.000Z"],[220],"Gaming","The Game Awards were last night, so I was inspired to take some time and write about my personal game of the year. But I couldn't narrow it down to just one, so I picked 3 games which were nominated for several awards but didn't get much, if any, recognition.\n\n### Xenoblade Chronicles 3\n\nI'm not a huge JRPG fan, but with the original Xenoblade Chronicles being among the few I've finished, I had to check this out. It ended up being pretty much the only game I played for weeks.\n\nIt scratches several RPG itches for me; a compelling cast of characters, a fun combat system that you can spend hours just experimenting with, and an intriguing world I still long to go back to even months later. This is definitely a game I will keep coming back to, between all the side content I still have left, and the DLC that's slowly rolling out.\n\nIs it a masterpiece? Probably not. But it stands among Persona 5 and Dragon Quest XI as another modern JRPG that I can not only stomach, but thoroughly enjoy. And to think, I almost skipped out on it because I thought Xenoblade Chronicles 2 was absolute cringe.\n\n### Tunic\n\nI don't play as many indie games as I would like, and I finish even fewer. I love indie games, perhaps a little too much, because I'm always jumping around to the latest one that's grabbed my attention. Thankfully, Tunic is one I managed to finish.\n\nIt came at just the right time, I had just wrapped up Xenoblade Chronicles 3, and I was in the modo for a light action-adventure game. I was ready to start another playthrough of Link's Awakening HD, but I happened to see that this adorable looking game starring a cute fox was about to drop on PS5 and Switch (it had been on Xbox since March I believe, but I don't have an Xbox).\n\nI was not prepared for the challenge this game posed, but it was just the right kind of challenging that made me go, \"Ok, I need to show this game who's boss!\" Beyond challenging bosses, the game mechanics are never tutorialized. Instead, you collect pages of the game's \"manual\" as you play, and have to figure things out from there. Even simple things like how to upgrade your stats isn't explained to you in plain terms.\n\n### Horizon Forbidden West\n\nHorizon Zero Dawn launched in a crowded year for good games, but it stood out to me for its incredibly engrossing story, and its primary mechanic of fighting giant friggin' robots. I was captivated from the start, and was chomping at the bit for a sequel. That sequel finally came, and once again got buried by other games (yeah, I'm looking at you, Elden Ring). But I didn't care, I wanted to see the next chapter in Aloy's story.\n\nI will confess, the story didn't grab me as much as the first game's. It was a satisfying continuation for me, without a doubt, but part of the mystery that made the first game so compelling–namely; how the world ended up in the state it is in the game–was already solved.\n\nThe gameplay in this sequel, however, was a _huge_ improvement. Melee combat, world traversal, side content, it was all so much better in this game, and showed that the developers took the feedback of the first game to heart. I couldn't put this game down, and once the new game plus patch dropped I jumped right back in. And I'm anxiously awaiting the Burning Shores DLC dropping next year!","src/content/blog/2022/my-top-3-games-of-2022.md","ba3d0b0794128043",{"html":225,"metadata":226},"\u003Cp>The Game Awards were last night, so I was inspired to take some time and write about my personal game of the year. But I couldn’t narrow it down to just one, so I picked 3 games which were nominated for several awards but didn’t get much, if any, recognition.\u003C/p>\n\u003Ch3 id=\"xenoblade-chronicles-3\">Xenoblade Chronicles 3\u003C/h3>\n\u003Cp>I’m not a huge JRPG fan, but with the original Xenoblade Chronicles being among the few I’ve finished, I had to check this out. It ended up being pretty much the only game I played for weeks.\u003C/p>\n\u003Cp>It scratches several RPG itches for me; a compelling cast of characters, a fun combat system that you can spend hours just experimenting with, and an intriguing world I still long to go back to even months later. This is definitely a game I will keep coming back to, between all the side content I still have left, and the DLC that’s slowly rolling out.\u003C/p>\n\u003Cp>Is it a masterpiece? Probably not. But it stands among Persona 5 and Dragon Quest XI as another modern JRPG that I can not only stomach, but thoroughly enjoy. And to think, I almost skipped out on it because I thought Xenoblade Chronicles 2 was absolute cringe.\u003C/p>\n\u003Ch3 id=\"tunic\">Tunic\u003C/h3>\n\u003Cp>I don’t play as many indie games as I would like, and I finish even fewer. I love indie games, perhaps a little too much, because I’m always jumping around to the latest one that’s grabbed my attention. Thankfully, Tunic is one I managed to finish.\u003C/p>\n\u003Cp>It came at just the right time, I had just wrapped up Xenoblade Chronicles 3, and I was in the modo for a light action-adventure game. I was ready to start another playthrough of Link’s Awakening HD, but I happened to see that this adorable looking game starring a cute fox was about to drop on PS5 and Switch (it had been on Xbox since March I believe, but I don’t have an Xbox).\u003C/p>\n\u003Cp>I was not prepared for the challenge this game posed, but it was just the right kind of challenging that made me go, “Ok, I need to show this game who’s boss!” Beyond challenging bosses, the game mechanics are never tutorialized. Instead, you collect pages of the game’s “manual” as you play, and have to figure things out from there. Even simple things like how to upgrade your stats isn’t explained to you in plain terms.\u003C/p>\n\u003Ch3 id=\"horizon-forbidden-west\">Horizon Forbidden West\u003C/h3>\n\u003Cp>Horizon Zero Dawn launched in a crowded year for good games, but it stood out to me for its incredibly engrossing story, and its primary mechanic of fighting giant friggin’ robots. I was captivated from the start, and was chomping at the bit for a sequel. That sequel finally came, and once again got buried by other games (yeah, I’m looking at you, Elden Ring). But I didn’t care, I wanted to see the next chapter in Aloy’s story.\u003C/p>\n\u003Cp>I will confess, the story didn’t grab me as much as the first game’s. It was a satisfying continuation for me, without a doubt, but part of the mystery that made the first game so compelling–namely; how the world ended up in the state it is in the game–was already solved.\u003C/p>\n\u003Cp>The gameplay in this sequel, however, was a \u003Cem>huge\u003C/em> improvement. Melee combat, world traversal, side content, it was all so much better in this game, and showed that the developers took the feedback of the first game to heart. I couldn’t put this game down, and once the new game plus patch dropped I jumped right back in. And I’m anxiously awaiting the Burning Shores DLC dropping next year!\u003C/p>",{"headings":227,"imagePaths":237,"frontmatter":238},[228,231,234],{"depth":46,"slug":229,"text":230},"xenoblade-chronicles-3","Xenoblade Chronicles 3",{"depth":46,"slug":232,"text":233},"tunic","Tunic",{"depth":46,"slug":235,"text":236},"horizon-forbidden-west","Horizon Forbidden West",[],{"title":217,"pubDate":239,"tags":240},"2022-12-09",[220],"2022/my-top-3-games-of-2022.md","2022/on-text-editors",{"id":242,"data":244,"body":248,"filePath":249,"digest":250,"rendered":251,"legacyId":259},{"title":245,"pubDate":246,"tags":247},"On Text Editors",["Date","2022-10-22T00:00:00.000Z"],[94,132,17],"Among the various types of software tools I use every day, the one I spend a majority of my time in is a text editor. If I’m going to be spending most of my working day using one of these tools, I want it to be something that I enjoy using, and helps me work the way I like to work.\n\nThere are certainly no shortage of text editors out there. I’ve tried more than I can name, and I haven’t even scratched the surface of what’s out there. The most popular out there is Visual Studio Code, and it’s no mystery why. It’s absolutely packed with features, code completion is top notch, and there’s an extension for just about anything you could ever imagine.\n\nBut I’m going to be honest, I’m a Mac user and a bit of a software snob. I do use good old VS Code when the mood strikes me, but I’ve come to far prefer Nova, a fantastic piece of software from the people at [Panic Inc.](https://www.panic.com/) It’s fast, it’s clean, and most importantly for me, it’s MacOS native.\n\nNova has its drawbacks. It’s extension support is nowhere near VS Code’s. It’s also got some janky-ness when working with JSX files, at least in my experience. On the other hand, while some people might find its code completion leaves much to be desired, for me, outside of automatic imports, it’s a lot less frustrating.\n\nBasically, I still use VS Code from time to time. I turn to it when I’m working my day job, which involves working on a fairly large Next.js codebase, and I need to collaborate on something, or if I’m building out new components I need to import. I also built this website entirely in VS Code. Still, I far prefer using Nova.\n\nAt the end of the day, the tool you use doesn’t really matter. Using a particular text editor isn’t going to make you a better developer. The only thing that really matters is you use the tool that you like. Don’t just use VS Code because it’s trendy, or Nova because I’m singing its praises. I know people who swear by Sublime Text, WebStorm, and BBEdit. The best tool for web development is the one that works for you.\n\nEven if that tool is vim. 😉\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/on-text-editors.md","71d6bf519c412ce1",{"html":252,"metadata":253},"\u003Cp>Among the various types of software tools I use every day, the one I spend a majority of my time in is a text editor. If I’m going to be spending most of my working day using one of these tools, I want it to be something that I enjoy using, and helps me work the way I like to work.\u003C/p>\n\u003Cp>There are certainly no shortage of text editors out there. I’ve tried more than I can name, and I haven’t even scratched the surface of what’s out there. The most popular out there is Visual Studio Code, and it’s no mystery why. It’s absolutely packed with features, code completion is top notch, and there’s an extension for just about anything you could ever imagine.\u003C/p>\n\u003Cp>But I’m going to be honest, I’m a Mac user and a bit of a software snob. I do use good old VS Code when the mood strikes me, but I’ve come to far prefer Nova, a fantastic piece of software from the people at \u003Ca href=\"https://www.panic.com/\">Panic Inc.\u003C/a> It’s fast, it’s clean, and most importantly for me, it’s MacOS native.\u003C/p>\n\u003Cp>Nova has its drawbacks. It’s extension support is nowhere near VS Code’s. It’s also got some janky-ness when working with JSX files, at least in my experience. On the other hand, while some people might find its code completion leaves much to be desired, for me, outside of automatic imports, it’s a lot less frustrating.\u003C/p>\n\u003Cp>Basically, I still use VS Code from time to time. I turn to it when I’m working my day job, which involves working on a fairly large Next.js codebase, and I need to collaborate on something, or if I’m building out new components I need to import. I also built this website entirely in VS Code. Still, I far prefer using Nova.\u003C/p>\n\u003Cp>At the end of the day, the tool you use doesn’t really matter. Using a particular text editor isn’t going to make you a better developer. The only thing that really matters is you use the tool that you like. Don’t just use VS Code because it’s trendy, or Nova because I’m singing its praises. I know people who swear by Sublime Text, WebStorm, and BBEdit. The best tool for web development is the one that works for you.\u003C/p>\n\u003Cp>Even if that tool is vim. 😉\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":254,"imagePaths":255,"frontmatter":256},[],[],{"title":245,"pubDate":257,"tags":258},"2022-10-22",[94,132,17],"2022/on-text-editors.md","2023/an-update-on-my-ai-dating-profile",{"id":260,"data":262,"body":266,"filePath":267,"digest":268,"rendered":269,"legacyId":277},{"title":263,"pubDate":264,"tags":265},"An Update on my AI Dating Profile",["Date","2023-01-14T00:00:00.000Z"],[93,94],"Back in early December I posted about [how I created a dating profile using AI](/posts/2022/creating-a-dating-profile-with-ai). I haven't forgotten about my promise to follow up on the results from that very unscientific experiment. Though I stated I'd commit to using my AI profile for a week, I quickly realized that was not a reasonable amount of time. So a week, turned into 2, which turned into just over a month, and I finally reached a point where I feel like a follow up is warranted.\n\nNow, I wish I had some interesting stats to share. I wish I could say that my AI-assisted dating profile resulted in X% greater or fewer matches. The truth is there was nothing remarkable about my results. I got 5 matches in the first week-and-a-half, and zero after that.\n\nThe only standout event was that I received a message from a woman saying she really liked my outlook on relationships, so thank you AI for so eloquently phrasing my thoughts and feelings.\n\nThat was another thing I noticed in this experiment; it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\n\nSo, to answer the question I posed at the end of my previous post; did this turn my love-life around, or did it backfire? The truth is, neither. It was just an uncomfortably weird and disappointing experience, which is just par for the course when dating in a post-2020 world–at least in my experience. 🤷‍♂️","src/content/blog/2023/an-update-on-my-ai-dating-profile.md","db64faaaad105b1a",{"html":270,"metadata":271},"\u003Cp>Back in early December I posted about \u003Ca href=\"/posts/2022/creating-a-dating-profile-with-ai\">how I created a dating profile using AI\u003C/a>. I haven’t forgotten about my promise to follow up on the results from that very unscientific experiment. Though I stated I’d commit to using my AI profile for a week, I quickly realized that was not a reasonable amount of time. So a week, turned into 2, which turned into just over a month, and I finally reached a point where I feel like a follow up is warranted.\u003C/p>\n\u003Cp>Now, I wish I had some interesting stats to share. I wish I could say that my AI-assisted dating profile resulted in X% greater or fewer matches. The truth is there was nothing remarkable about my results. I got 5 matches in the first week-and-a-half, and zero after that.\u003C/p>\n\u003Cp>The only standout event was that I received a message from a woman saying she really liked my outlook on relationships, so thank you AI for so eloquently phrasing my thoughts and feelings.\u003C/p>\n\u003Cp>That was another thing I noticed in this experiment; it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\u003C/p>\n\u003Cp>So, to answer the question I posed at the end of my previous post; did this turn my love-life around, or did it backfire? The truth is, neither. It was just an uncomfortably weird and disappointing experience, which is just par for the course when dating in a post-2020 world–at least in my experience. 🤷‍♂️\u003C/p>",{"headings":272,"imagePaths":273,"frontmatter":274},[],[],{"title":263,"pubDate":275,"tags":276},"2023-01-14",[93,94],"2023/an-update-on-my-ai-dating-profile.md","2023/baldurs-gate-3-feels",{"id":278,"data":280,"body":284,"filePath":285,"digest":286,"rendered":287,"legacyId":295},{"title":281,"pubDate":282,"tags":283},"Baldur's Gate 3, and Lots of Feels About Video Games",["Date","2023-11-01T04:00:00.000Z"],[220,18],"2023 has been insane for games. We've seen such an influx of quality titles that it's been hard to even keep track, or even dedicate the time to the ones I have been able to keep track of. One of the two games that has really captured my attention – the other being Tears of the Kingdom – is Baldur's Gate 3.\n\nI’ve typically have had a difficult time getting invested in deep, Western-made RPGs, with the notable exception of The Witcher 3. The specific sub-genre that Baldur’s Gate 3 belongs to, the CRPG (or, Computer Role Playing Game) has been particularly challenging for me to latch on to.\n\nAround late-2020 or early-2021 I started playing Dungeons and Dragons remotely with a couple internet friends. It was in the midst of Covid, so we all had too much time to kill, and would spend a good chunk of our Sundays adventuring across the Forgotten Realms. I’d played D&D before, but it wasn’t something I really got into until that point.\n\nIf I didn’t have this experience I don’t think I would have been open to playing Baldur’s Gate. Because its mechanics are based on the same D&D rules I had spent hours immersed in every Sunday for nearly a year, I was going into the game already knowing the mechanics I usually find overwhelming and obtuse in these types of games.\n\nFor my first playthrough, I decided to port my wood elf ranger, the character I played as in the aforementioned remote D&D campaigns. I tried to recreate him as closely as the game allowed – Baldur’s Gate 3 actually uses a slightly modified version of the current D&D ruleset – and tried to role-play him the same. Basically my head canon was, after his previous adventures, he was thrust into this story.\n\nI never actually finished this playthrough. I got to the final story quest and decided to start over, I’d made so many mistakes, missed out on 3 major companions (Wyll, Karlach, and Halsin), and was only just getting comfortable with the freedom the game offers. Maybe someday I’ll finish my plucky wood elf’s journey, but until then...\n\nFor my second character, I chose to play as the Dark Urge. Unlike a purely custom character like I used for my first playthrough, the Dark Urge is not a blank slate, and has a story that interlinks with the game’s overall story.\n\nFor the Dark Urge I went with a human rogue, and I’ve had a lot more fun leaning into the game’s mechanics this time around. She’s basically a badass assassin, a master of deception, who disguises herself using this magical mask – which I got as part of the deluxe edition – to reach her targets.\n\nThis subtly altered my approach to the game in more ways than I had anticipated. For instance, during the early stages of the game, there's a quest to infiltrate a goblin camp and eliminate their three leaders. On both occasions, I successfully gained entry by persuading the goblins that I belonged to the nefarious cult that plays a significant role in the story. The first attempt required passing a series of deception checks, while during the second attempt, I employed the aforementioned magical mask to transform my character into a Drow – a race of dark elves – allowing me to waltz right into the camp.\n\nCarrying out the quest to take out the 3 goblin leaders played out quite a bit differently, at least on a mechanical level. The first time around I went in guns (er, arrows) blazing to take out the first 2 leaders, and then somehow convincing the 3rd I was on her side, leading her to a Druid grove, and having an all-out battle.\n\nThe second time I took full advantage of my party’s range of capabilities at that point, as well as the environment, to ambush the 3 leaders and get out with as little damage to my team as possible. I had a much easier time using this method, but it was so much more fulfilling to pull off. It didn’t feel cheap because I wasn’t cheesing the mechanics, I was figuring out how to best use them to my advantage.\n\nOn the surface, Baldur’s Gate 3 seems to share very little in common with Tears of the Kingdom, but I think it has enraptured me in much the same way. Both games not only allow you to push their mechanics to the limit to find your own solutions to the challenges they present you, but they make doing so extremely rewarding. These are games that are at their best when you think outside the box and get creative with the tools they give you.\n\nLast year I wrote about [my 3 favorite games of 2022](/posts/2022/my-top-3-games-of-2022) with the intention of doing a similar thing this year, but I don’t think I can. I’ve played a few games that could be the 3rd game in a potential “3 Favorite Games of 2023”, Sea of Stars, Spider-Man 2, and Star Wars: Jedi Survivor come to mind, and while they’re all very good games worthy of the spot, they just didn't come close to impacting me in the same way.\n\nTears of the Kingdom [gave me a place to feel at home](/posts/2023/finding-home-in-hyrule) at a time when I felt out of place after moving apartments. Baldur’s Gate 3 has given me a sense of camaraderie, albeit a virtual one, in a point in my life when I’ve been feeling alone and lost trying to find myself in a new city. No other game I’ve played this year has been a fraction as meaningful as these two have been.","src/content/blog/2023/baldurs-gate-3-feels.md","8e61cb1d5d95716f",{"html":288,"metadata":289},"\u003Cp>2023 has been insane for games. We’ve seen such an influx of quality titles that it’s been hard to even keep track, or even dedicate the time to the ones I have been able to keep track of. One of the two games that has really captured my attention – the other being Tears of the Kingdom – is Baldur’s Gate 3.\u003C/p>\n\u003Cp>I’ve typically have had a difficult time getting invested in deep, Western-made RPGs, with the notable exception of The Witcher 3. The specific sub-genre that Baldur’s Gate 3 belongs to, the CRPG (or, Computer Role Playing Game) has been particularly challenging for me to latch on to.\u003C/p>\n\u003Cp>Around late-2020 or early-2021 I started playing Dungeons and Dragons remotely with a couple internet friends. It was in the midst of Covid, so we all had too much time to kill, and would spend a good chunk of our Sundays adventuring across the Forgotten Realms. I’d played D&D before, but it wasn’t something I really got into until that point.\u003C/p>\n\u003Cp>If I didn’t have this experience I don’t think I would have been open to playing Baldur’s Gate. Because its mechanics are based on the same D&D rules I had spent hours immersed in every Sunday for nearly a year, I was going into the game already knowing the mechanics I usually find overwhelming and obtuse in these types of games.\u003C/p>\n\u003Cp>For my first playthrough, I decided to port my wood elf ranger, the character I played as in the aforementioned remote D&D campaigns. I tried to recreate him as closely as the game allowed – Baldur’s Gate 3 actually uses a slightly modified version of the current D&D ruleset – and tried to role-play him the same. Basically my head canon was, after his previous adventures, he was thrust into this story.\u003C/p>\n\u003Cp>I never actually finished this playthrough. I got to the final story quest and decided to start over, I’d made so many mistakes, missed out on 3 major companions (Wyll, Karlach, and Halsin), and was only just getting comfortable with the freedom the game offers. Maybe someday I’ll finish my plucky wood elf’s journey, but until then…\u003C/p>\n\u003Cp>For my second character, I chose to play as the Dark Urge. Unlike a purely custom character like I used for my first playthrough, the Dark Urge is not a blank slate, and has a story that interlinks with the game’s overall story.\u003C/p>\n\u003Cp>For the Dark Urge I went with a human rogue, and I’ve had a lot more fun leaning into the game’s mechanics this time around. She’s basically a badass assassin, a master of deception, who disguises herself using this magical mask – which I got as part of the deluxe edition – to reach her targets.\u003C/p>\n\u003Cp>This subtly altered my approach to the game in more ways than I had anticipated. For instance, during the early stages of the game, there’s a quest to infiltrate a goblin camp and eliminate their three leaders. On both occasions, I successfully gained entry by persuading the goblins that I belonged to the nefarious cult that plays a significant role in the story. The first attempt required passing a series of deception checks, while during the second attempt, I employed the aforementioned magical mask to transform my character into a Drow – a race of dark elves – allowing me to waltz right into the camp.\u003C/p>\n\u003Cp>Carrying out the quest to take out the 3 goblin leaders played out quite a bit differently, at least on a mechanical level. The first time around I went in guns (er, arrows) blazing to take out the first 2 leaders, and then somehow convincing the 3rd I was on her side, leading her to a Druid grove, and having an all-out battle.\u003C/p>\n\u003Cp>The second time I took full advantage of my party’s range of capabilities at that point, as well as the environment, to ambush the 3 leaders and get out with as little damage to my team as possible. I had a much easier time using this method, but it was so much more fulfilling to pull off. It didn’t feel cheap because I wasn’t cheesing the mechanics, I was figuring out how to best use them to my advantage.\u003C/p>\n\u003Cp>On the surface, Baldur’s Gate 3 seems to share very little in common with Tears of the Kingdom, but I think it has enraptured me in much the same way. Both games not only allow you to push their mechanics to the limit to find your own solutions to the challenges they present you, but they make doing so extremely rewarding. These are games that are at their best when you think outside the box and get creative with the tools they give you.\u003C/p>\n\u003Cp>Last year I wrote about \u003Ca href=\"/posts/2022/my-top-3-games-of-2022\">my 3 favorite games of 2022\u003C/a> with the intention of doing a similar thing this year, but I don’t think I can. I’ve played a few games that could be the 3rd game in a potential “3 Favorite Games of 2023”, Sea of Stars, Spider-Man 2, and Star Wars: Jedi Survivor come to mind, and while they’re all very good games worthy of the spot, they just didn’t come close to impacting me in the same way.\u003C/p>\n\u003Cp>Tears of the Kingdom \u003Ca href=\"/posts/2023/finding-home-in-hyrule\">gave me a place to feel at home\u003C/a> at a time when I felt out of place after moving apartments. Baldur’s Gate 3 has given me a sense of camaraderie, albeit a virtual one, in a point in my life when I’ve been feeling alone and lost trying to find myself in a new city. No other game I’ve played this year has been a fraction as meaningful as these two have been.\u003C/p>",{"headings":290,"imagePaths":291,"frontmatter":292},[],[],{"title":281,"pubDate":293,"tags":294},"11/1/23",[220,18],"2023/baldurs-gate-3-feels.md","2023/default-apps-2023",{"id":296,"data":298,"body":302,"filePath":303,"digest":304,"rendered":305,"legacyId":316},{"title":299,"pubDate":300,"tags":301},"Default Apps 2023",["Date","2023-11-25T05:00:00.000Z"],[132,94],"Inspired by [this post](https://chriscoyier.net/2023/11/25/default-apps-2023/) from Chris Coyier (which was in turn inpsired by [this post](https://mattcool.tech/posts/default-apps-2023)).\n\nI changed up some of the categories to avoid any entries with \"none\" or \"N/A\".\n\n---\n\n✉️ Mail Client: [Mail.app](https://support.apple.com/guide/mail/welcome/mac)\n\n📮 Mail Server: [Hover](https://www.hover.com/email)\n\n📓 Notes: [Bear](https://bear.app/), [Tot](https://tot.rocks/)\n\n✅ To Do: [Reminders](https://support.apple.com/guide/reminders/welcome/mac)\n\n📷 Photo Shooting: [iPhone 14](https://www.apple.com/shop/buy-iphone/iphone-14)\n\n🎨 Photo Editing: [Affinity Photo](https://affinity.serif.com/en-us/photo/)\n\n📆 Calendar: [Calendar](https://support.apple.com/guide/calendar/welcome/mac), [Dato](https://sindresorhus.com/dato), synced with [Google Calendar](https://calendar.google.com)\n\n☁️ Cloud Storage: [iCloud](https://www.icloud.com/)\n\n📰 RSS: [Reeder](https://www.reederapp.com/), synced with [Inoreeder](https://www.inoreader.com/)\n\n📇 Contacts: [Contacts.app](https://support.apple.com/guide/contacts/welcome/mac)\n\n🌐 Browser: [Safari](https://www.apple.com/safari/) for personal use, [Vivaldi](https://vivaldi.com/?mtm_ad=79027606064265&mtm_kwd=broswers) for work\n\n💬 Chat: [Messages](https://support.apple.com/guide/messages/welcome/mac), [Slack](https://slack.com/), [WhatsApp](https://www.whatsapp.com/)\n\n🔖 Bookmarks: [Anybox](https://anybox.app/)\n\n📑 Read It Later: [Reeder](https://www.reederapp.com/) (synced with [iCloud](https://www.icloud.com/))\n\n📝 Writing & Text Editing: [BBEdit](https://www.barebones.com/products/bbedit/index.html)\n\n📈 Spreadsheets: [Numbers](https://www.apple.com/numbers/)\n\n🪟 Window Management: [Rectangle Pro](https://rectangleapp.com/pro)\n\n🛒 Shopping Lists: [Tot](https://tot.rocks/)\n\n🏋️‍♀️Workout Tracking: [Gentler Streaks](https://www.gentler.app/)\n\n💰 Budgeting: [Numbers](https://www.apple.com/numbers/)\n\n🗞 News: [RSS](https://en.wikipedia.org/wiki/RSS)\n\n🎵 Music: [Apple Music](https://www.apple.com/apple-music/)\n\n🎙 Podcasts: [Overcast](https://overcast.fm/)\n\n🔑 Password Management: [iCloud Keychain](https://support.apple.com/en-us/HT204085)\n\n👨‍💻 Code Editor: [Nova](https://nova.app/), [Xcode](https://developer.apple.com/xcode/), [VSCode](https://code.visualstudio.com/)\n\n🐘 Mastodon Client: [Ivory](https://tapbots.com/ivory/)\n\n### Honorable Mentions\n\n- [Collections](https://collectionsdb.com/) - Personal Database\n- [Vinegar](https://andadinosaur.com/launch-vinegar) - Replaces YouTube player with standard HTML `\u003Cvideo>` tag\n- [Contexts](https://contexts.co/) - \u003Ckbd>⌘\u003C/kbd> + \u003Ckbd>tab\u003C/kbd> replacement","src/content/blog/2023/default-apps-2023.md","02920a3d7bf4c282",{"html":306,"metadata":307},"\u003Cp>Inspired by \u003Ca href=\"https://chriscoyier.net/2023/11/25/default-apps-2023/\">this post\u003C/a> from Chris Coyier (which was in turn inpsired by \u003Ca href=\"https://mattcool.tech/posts/default-apps-2023\">this post\u003C/a>).\u003C/p>\n\u003Cp>I changed up some of the categories to avoid any entries with “none” or “N/A”.\u003C/p>\n\u003Chr>\n\u003Cp>✉️ Mail Client: \u003Ca href=\"https://support.apple.com/guide/mail/welcome/mac\">Mail.app\u003C/a>\u003C/p>\n\u003Cp>📮 Mail Server: \u003Ca href=\"https://www.hover.com/email\">Hover\u003C/a>\u003C/p>\n\u003Cp>📓 Notes: \u003Ca href=\"https://bear.app/\">Bear\u003C/a>, \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>✅ To Do: \u003Ca href=\"https://support.apple.com/guide/reminders/welcome/mac\">Reminders\u003C/a>\u003C/p>\n\u003Cp>📷 Photo Shooting: \u003Ca href=\"https://www.apple.com/shop/buy-iphone/iphone-14\">iPhone 14\u003C/a>\u003C/p>\n\u003Cp>🎨 Photo Editing: \u003Ca href=\"https://affinity.serif.com/en-us/photo/\">Affinity Photo\u003C/a>\u003C/p>\n\u003Cp>📆 Calendar: \u003Ca href=\"https://support.apple.com/guide/calendar/welcome/mac\">Calendar\u003C/a>, \u003Ca href=\"https://sindresorhus.com/dato\">Dato\u003C/a>, synced with \u003Ca href=\"https://calendar.google.com\">Google Calendar\u003C/a>\u003C/p>\n\u003Cp>☁️ Cloud Storage: \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>\u003C/p>\n\u003Cp>📰 RSS: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>, synced with \u003Ca href=\"https://www.inoreader.com/\">Inoreeder\u003C/a>\u003C/p>\n\u003Cp>📇 Contacts: \u003Ca href=\"https://support.apple.com/guide/contacts/welcome/mac\">Contacts.app\u003C/a>\u003C/p>\n\u003Cp>🌐 Browser: \u003Ca href=\"https://www.apple.com/safari/\">Safari\u003C/a> for personal use, \u003Ca href=\"https://vivaldi.com/?mtm_ad=79027606064265&mtm_kwd=broswers\">Vivaldi\u003C/a> for work\u003C/p>\n\u003Cp>💬 Chat: \u003Ca href=\"https://support.apple.com/guide/messages/welcome/mac\">Messages\u003C/a>, \u003Ca href=\"https://slack.com/\">Slack\u003C/a>, \u003Ca href=\"https://www.whatsapp.com/\">WhatsApp\u003C/a>\u003C/p>\n\u003Cp>🔖 Bookmarks: \u003Ca href=\"https://anybox.app/\">Anybox\u003C/a>\u003C/p>\n\u003Cp>📑 Read It Later: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a> (synced with \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>)\u003C/p>\n\u003Cp>📝 Writing & Text Editing: \u003Ca href=\"https://www.barebones.com/products/bbedit/index.html\">BBEdit\u003C/a>\u003C/p>\n\u003Cp>📈 Spreadsheets: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🪟 Window Management: \u003Ca href=\"https://rectangleapp.com/pro\">Rectangle Pro\u003C/a>\u003C/p>\n\u003Cp>🛒 Shopping Lists: \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>🏋️‍♀️Workout Tracking: \u003Ca href=\"https://www.gentler.app/\">Gentler Streaks\u003C/a>\u003C/p>\n\u003Cp>💰 Budgeting: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🗞 News: \u003Ca href=\"https://en.wikipedia.org/wiki/RSS\">RSS\u003C/a>\u003C/p>\n\u003Cp>🎵 Music: \u003Ca href=\"https://www.apple.com/apple-music/\">Apple Music\u003C/a>\u003C/p>\n\u003Cp>🎙 Podcasts: \u003Ca href=\"https://overcast.fm/\">Overcast\u003C/a>\u003C/p>\n\u003Cp>🔑 Password Management: \u003Ca href=\"https://support.apple.com/en-us/HT204085\">iCloud Keychain\u003C/a>\u003C/p>\n\u003Cp>👨‍💻 Code Editor: \u003Ca href=\"https://nova.app/\">Nova\u003C/a>, \u003Ca href=\"https://developer.apple.com/xcode/\">Xcode\u003C/a>, \u003Ca href=\"https://code.visualstudio.com/\">VSCode\u003C/a>\u003C/p>\n\u003Cp>🐘 Mastodon Client: \u003Ca href=\"https://tapbots.com/ivory/\">Ivory\u003C/a>\u003C/p>\n\u003Ch3 id=\"honorable-mentions\">Honorable Mentions\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://collectionsdb.com/\">Collections\u003C/a> - Personal Database\u003C/li>\n\u003Cli>\u003Ca href=\"https://andadinosaur.com/launch-vinegar\">Vinegar\u003C/a> - Replaces YouTube player with standard HTML \u003Ccode><video>\u003C/code> tag\u003C/li>\n\u003Cli>\u003Ca href=\"https://contexts.co/\">Contexts\u003C/a> - \u003Ckbd>⌘\u003C/kbd> + \u003Ckbd>tab\u003C/kbd> replacement\u003C/li>\n\u003C/ul>",{"headings":308,"imagePaths":312,"frontmatter":313},[309],{"depth":46,"slug":310,"text":311},"honorable-mentions","Honorable Mentions",[],{"title":299,"pubDate":314,"tags":315},"11/25/23",[132,94],"2023/default-apps-2023.md","2023/handheld-gaming",{"id":317,"data":319,"body":323,"filePath":324,"digest":325,"rendered":326,"legacyId":334},{"title":320,"pubDate":321,"tags":322},"Handheld Gaming",["Date","2023-01-07T00:00:00.000Z"],[220],"I don’t know if it’s the particular mood I’ve been in, the colder weather, or some combination of the 2, but something about cozying up with a handheld game console has been incredibly appealing lately. My PS5 sits under my TV, streaming the occasional movie or show, and begging me to jump into that Witcher 3 update, or continue playing Tales of Arise. Meanwhile, my Switch Lite is getting all the love.\n\nGenerally speaking, I feel like I’ve logged most of the game time over the course of my life on a handheld of some kind, from my GameBoy Pocket, all the way up to the Switch Lite. The first console I ever bought with my own money was a GameBoy Advance SP. Portable gaming is in my blood! (Ok, maybe that’s a touch dramatic…)\n\nThat’s not to say I didn’t ever play home consoles. I’ve had every Nintendo system since the SNES–yup, that includes the Wii U–and got into PlayStation around the mid-PS3 era.\n\nThe thing is, my parents were divorced by the time I was into gaming, and the home consoles lived at my dad’s house. But I spent a majority of my childhood at my mom’s, and she didn’t want those things around, and I was only allowed to have my GameBoy. To this day, I’m not sure why that was. Maybe because she found it less annoying.\n\nGrowing up, console games were a treat I got on the weekend, so most of my afternoons after school were spent playing Pokémon, Super Mario Land 2, Link’s Awakening, and others that I could take this whole blog post listing.\n\nI had some big gaming firsts on handhelds; My first RPG? Pokémon Red. My first Final Fantasy? Final Fantasy IV Advance. My first Zelda? The aforementioned Link’s Awakening. The first game I put 100+ hours into? Pokémon Silver.\n\nHandheld gaming even kept me sane during lockdown in 2020. Let’s not talk about how many hours I logged in Animal Crossing and Fire Emblem Three Houses I logged during that time. Yeah I played some console games–notably, I replayed and re-completed Horizon Zero Dawn–but I practically wore out my original Switch Lite that year.\n\nMaybe there’s something nostalgic about handheld gaming that draws me in when I just want to get cozy, even if I’m playing a newer game that I’m not necessarily nostalgic for. Maybe my brain gets tired of the flashy, blockbuster-level graphics of home consoles, and just longs for something simpler.\n\nWhatever the case, my biggest trivial fear in life is handheld gaming going away, because mobile games do not cut it at all.","src/content/blog/2023/handheld-gaming.md","378580903305b18d",{"html":327,"metadata":328},"\u003Cp>I don’t know if it’s the particular mood I’ve been in, the colder weather, or some combination of the 2, but something about cozying up with a handheld game console has been incredibly appealing lately. My PS5 sits under my TV, streaming the occasional movie or show, and begging me to jump into that Witcher 3 update, or continue playing Tales of Arise. Meanwhile, my Switch Lite is getting all the love.\u003C/p>\n\u003Cp>Generally speaking, I feel like I’ve logged most of the game time over the course of my life on a handheld of some kind, from my GameBoy Pocket, all the way up to the Switch Lite. The first console I ever bought with my own money was a GameBoy Advance SP. Portable gaming is in my blood! (Ok, maybe that’s a touch dramatic…)\u003C/p>\n\u003Cp>That’s not to say I didn’t ever play home consoles. I’ve had every Nintendo system since the SNES–yup, that includes the Wii U–and got into PlayStation around the mid-PS3 era.\u003C/p>\n\u003Cp>The thing is, my parents were divorced by the time I was into gaming, and the home consoles lived at my dad’s house. But I spent a majority of my childhood at my mom’s, and she didn’t want those things around, and I was only allowed to have my GameBoy. To this day, I’m not sure why that was. Maybe because she found it less annoying.\u003C/p>\n\u003Cp>Growing up, console games were a treat I got on the weekend, so most of my afternoons after school were spent playing Pokémon, Super Mario Land 2, Link’s Awakening, and others that I could take this whole blog post listing.\u003C/p>\n\u003Cp>I had some big gaming firsts on handhelds; My first RPG? Pokémon Red. My first Final Fantasy? Final Fantasy IV Advance. My first Zelda? The aforementioned Link’s Awakening. The first game I put 100+ hours into? Pokémon Silver.\u003C/p>\n\u003Cp>Handheld gaming even kept me sane during lockdown in 2020. Let’s not talk about how many hours I logged in Animal Crossing and Fire Emblem Three Houses I logged during that time. Yeah I played some console games–notably, I replayed and re-completed Horizon Zero Dawn–but I practically wore out my original Switch Lite that year.\u003C/p>\n\u003Cp>Maybe there’s something nostalgic about handheld gaming that draws me in when I just want to get cozy, even if I’m playing a newer game that I’m not necessarily nostalgic for. Maybe my brain gets tired of the flashy, blockbuster-level graphics of home consoles, and just longs for something simpler.\u003C/p>\n\u003Cp>Whatever the case, my biggest trivial fear in life is handheld gaming going away, because mobile games do not cut it at all.\u003C/p>",{"headings":329,"imagePaths":330,"frontmatter":331},[],[],{"title":320,"pubDate":332,"tags":333},"2023-01-07",[220],"2023/handheld-gaming.md","2023/finding-home-in-hyrule",{"id":335,"data":337,"body":341,"filePath":342,"digest":343,"rendered":344,"legacyId":352},{"title":338,"pubDate":339,"tags":340},"Finding Home in Hyrule",["Date","2023-05-22T04:00:00.000Z"],[220,18],"5 years ago I underwent a big change in my life, my girlfriend of 8 years and I split up. One of the things that got me through that particularly tough change was a little game called The Legend of Zelda: Breath of the Wild. I had played it the year previous on the Wii U, but I had finally upgraded to the Switch and was in the middle of my second play through when it all went down. I would spend a couple hours every day just aimlessly wandering around Hyrule, it made me feel a strange comfort. My sadness about the situation I found myself in melted away whenever I took these little virtual treks across the map, finding little nooks and crannies I’d never seen before.\n\nFast forward to last week, and I underwent another drastic life change; I moved from the apartment I’ve lived in for most of my adult life to a totally new place in a totally new city. I was, and still am, overwhelmed, homesick, and questioning all my decisions that led me to this point. Coincidentally, a little game called The Legend of Zelda Tears of the Kingdom dropped the day before I was to embark on this IRL adventure.\n\nMy first night in the new place involved staying up well past midnight diving into Hyrule once again, but this time it brought be a different kind of comfort. Fortuitously for me, Nintendo decided to reuse the world map from the previous game and just build upon it, and that has made this game feel a lot like coming home to me. Hyrule was a world that got me through a rough point in my life, and here it is again giving me a little taste of familiarity, of home, at a time when I need it the most.\n\nLast night I made a point to find a place Hateno Village, a town where you can buy a little house in Breath of the Wild. I wanted to visit it again, and see what had become of this virtual home-away-from-home. So, over the course of the evening I made my journey, and eventually came to the little house, sitting there at the edge of the village. I walked inside, and, for the first time in a week, I felt at home.","src/content/blog/2023/finding-home-in-hyrule.md","cbba225ac107c916",{"html":345,"metadata":346},"\u003Cp>5 years ago I underwent a big change in my life, my girlfriend of 8 years and I split up. One of the things that got me through that particularly tough change was a little game called The Legend of Zelda: Breath of the Wild. I had played it the year previous on the Wii U, but I had finally upgraded to the Switch and was in the middle of my second play through when it all went down. I would spend a couple hours every day just aimlessly wandering around Hyrule, it made me feel a strange comfort. My sadness about the situation I found myself in melted away whenever I took these little virtual treks across the map, finding little nooks and crannies I’d never seen before.\u003C/p>\n\u003Cp>Fast forward to last week, and I underwent another drastic life change; I moved from the apartment I’ve lived in for most of my adult life to a totally new place in a totally new city. I was, and still am, overwhelmed, homesick, and questioning all my decisions that led me to this point. Coincidentally, a little game called The Legend of Zelda Tears of the Kingdom dropped the day before I was to embark on this IRL adventure.\u003C/p>\n\u003Cp>My first night in the new place involved staying up well past midnight diving into Hyrule once again, but this time it brought be a different kind of comfort. Fortuitously for me, Nintendo decided to reuse the world map from the previous game and just build upon it, and that has made this game feel a lot like coming home to me. Hyrule was a world that got me through a rough point in my life, and here it is again giving me a little taste of familiarity, of home, at a time when I need it the most.\u003C/p>\n\u003Cp>Last night I made a point to find a place Hateno Village, a town where you can buy a little house in Breath of the Wild. I wanted to visit it again, and see what had become of this virtual home-away-from-home. So, over the course of the evening I made my journey, and eventually came to the little house, sitting there at the edge of the village. I walked inside, and, for the first time in a week, I felt at home.\u003C/p>",{"headings":347,"imagePaths":348,"frontmatter":349},[],[],{"title":338,"pubDate":350,"tags":351},"5/22/23",[220,18],"2023/finding-home-in-hyrule.md","2023/journal-app-impressions",{"id":353,"data":355,"body":359,"filePath":360,"digest":361,"rendered":362,"legacyId":374},{"title":356,"pubDate":357,"tags":358},"Apple's Journal App: First Impressions",["Date","2023-11-12T05:00:00.000Z"],[94,132,18],"With the upcoming iOS 17.2 update, we’ll finally get our hands on the new Journal app Apple announced at WWDC earlier this year. I decided to be brave and install the public beta so I could take a look and get some first impressions. As someone with mental health struggles, I appreciate the recent efforts Apple has put into making these kinds of features available, so I was really excited to take a look at this latest addition.\n\nFirst off, I like the simplicity of the interface. It doesn’t have much going on, and I think that’s a point in its favor. You can open the app and get journaling right away. It even offers you journaling prompt which is excellent for those like me who are not always sure what to write about. [^1]\n\nIt doesn’t have the bells and whistles an app like Day One has, but when it comes to writing a journal entry you’re given the option to add photos, location, and even an audio recording. It’s pretty barebones, but I think that’s ok. The one thing I would like is the ability to tie into the mood tracking on Apple Watch and either be able to set your current mood from the app, or tie mood tracking into the Journaling Suggestions feature.\n\nSpeaking of, I actually don’t have much to say about the Journaling Suggestions feature. At the moment it can only suggest journaling based on your workouts, music and podcasts, messages and calls you make, your photos, and significant locations. That’s not at all how I like to journal, so I actually have those turned off. Apparently there’s an API that 3rd party apps can use, but we won’t see what that will bring until iOS 17.2 officially comes out later this year.\n\nSome other things I like are the ability to lock your journal with its own password, which I think is an absolute must for this kind of app, and the ability to set a journal schedule, which is nice for helping to build – or rebuild – a regular journaling habit.\n\nThe one thing I do not like, and this could be the dealbreaker for me, is that, at the moment, Journal is iPhone only. No iPad, no Mac, just iPhone. This severely limits its usability for me, I generally do not like writing anything more than a sentence or 2 on an iPhone. It really needs to be available on all Apple’s platforms and I’m puzzled that it isn’t. Even just making it available on iPad would be acceptable, but as it stands now I don’t think I can make use of it.\n\n[^1]: Shameless plug: I built [a webpage to solve this very problem](https://www.journal-prompt.com).","src/content/blog/2023/journal-app-impressions.md","5e466d3aa46de587",{"html":363,"metadata":364},"\u003Cp>With the upcoming iOS 17.2 update, we’ll finally get our hands on the new Journal app Apple announced at WWDC earlier this year. I decided to be brave and install the public beta so I could take a look and get some first impressions. As someone with mental health struggles, I appreciate the recent efforts Apple has put into making these kinds of features available, so I was really excited to take a look at this latest addition.\u003C/p>\n\u003Cp>First off, I like the simplicity of the interface. It doesn’t have much going on, and I think that’s a point in its favor. You can open the app and get journaling right away. It even offers you journaling prompt which is excellent for those like me who are not always sure what to write about. \u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>\u003C/p>\n\u003Cp>It doesn’t have the bells and whistles an app like Day One has, but when it comes to writing a journal entry you’re given the option to add photos, location, and even an audio recording. It’s pretty barebones, but I think that’s ok. The one thing I would like is the ability to tie into the mood tracking on Apple Watch and either be able to set your current mood from the app, or tie mood tracking into the Journaling Suggestions feature.\u003C/p>\n\u003Cp>Speaking of, I actually don’t have much to say about the Journaling Suggestions feature. At the moment it can only suggest journaling based on your workouts, music and podcasts, messages and calls you make, your photos, and significant locations. That’s not at all how I like to journal, so I actually have those turned off. Apparently there’s an API that 3rd party apps can use, but we won’t see what that will bring until iOS 17.2 officially comes out later this year.\u003C/p>\n\u003Cp>Some other things I like are the ability to lock your journal with its own password, which I think is an absolute must for this kind of app, and the ability to set a journal schedule, which is nice for helping to build – or rebuild – a regular journaling habit.\u003C/p>\n\u003Cp>The one thing I do not like, and this could be the dealbreaker for me, is that, at the moment, Journal is iPhone only. No iPad, no Mac, just iPhone. This severely limits its usability for me, I generally do not like writing anything more than a sentence or 2 on an iPhone. It really needs to be available on all Apple’s platforms and I’m puzzled that it isn’t. Even just making it available on iPad would be acceptable, but as it stands now I don’t think I can make use of it.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Shameless plug: I built \u003Ca href=\"https://www.journal-prompt.com\">a webpage to solve this very problem\u003C/a>. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":365,"imagePaths":370,"frontmatter":371},[366],{"depth":367,"slug":368,"text":369},2,"footnote-label","Footnotes",[],{"title":356,"pubDate":372,"tags":373},"11/12/23",[94,132,18],"2023/journal-app-impressions.md","2023/my-favorite-little-apps-part-2",{"id":375,"data":377,"body":381,"filePath":382,"digest":383,"rendered":384,"legacyId":404},{"title":378,"pubDate":379,"tags":380},"My Favorite Little Apps, Part 2",["Date","2023-01-21T00:00:00.000Z"],[131,132],"A few months ago, I wrote about [my favorite little Mac apps](/posts/2022/my-favorite-little-apps). This post was originally published on my portfolio blog (which I have since merged with this one), so it had more of a focus on web development and productivity, so I wanted to write up a part 2 with more general-use apps I use frequently.\n\n### Vinegar\n\nI use YouTube a lot, but I hate their video player, and the constant ads are obnoxious (nothing is worse than watching a dev tutorial and having it get interrupted by an ad for Wix). Vinegar is a Safari extension that replaces the YouTube player with a standard HTML 5 player, and blocks ads. It's made YouTube so much more enjoyable to use on both my Mac and iOS devices. I suggest getting it in a bundle with Baking Soda, which replaces custom video players on other websites with standard HTML 5 players.\n\n[Buy Here](https://apps.apple.com/us/app-bundle/fizzy-water-bundle/id1601247237)\n\n### Rocket\n\nRocket gives you quick and easy access to the full swath of Emoji with a simple search function you can either access via the menu bar, or in any text field via a trigger key (for example, Rocket pops up when I type `::`). And that's just the free version! With the pro version, you can store and search custom text snippets, ASCII art, images, and even gifs. Furthermore, you can search various symbols and glyphs like ↺, ◆, ∭, etc...\n\n[Download/Buy Here](https://matthewpalmer.net/rocket/)\n\n### QLMarkdown\n\nI do 90% of my writing in Markdown (heck, this blog is just a collection of Markdown files), and I wanted to see if there was a way to preview Markdown in QuickLook. After some searching, I found QLMarkdown! While it is an app you install to your Applications folder, it is primarily a QuickLook plugin that will display any `.md` file as a fully styled Markdown preview. The app itself is simply a interface to change various settings for how you want the preview to look and function. Best of all, it's open source!\n\n[Download Here](https://github.com/toland/qlmarkdown/releases)\n\nOr, if you use Homebrew, you can install it with `brew install --cask qlmarkdown`.\n\n### Keka\n\nEven though MacOS handles ZIP files, and other similar formats, it does have some limitations. I used the Unarchiver for many years, but I recently discovered Keka. I find it to be faster, and has a lot more options for compression and encyption if you're into that.\n\n[Download Here](https://www.keka.io/en/)","src/content/blog/2023/my-favorite-little-apps-part-2.md","d010e1b1a6fe4e97",{"html":385,"metadata":386},"\u003Cp>A few months ago, I wrote about \u003Ca href=\"/posts/2022/my-favorite-little-apps\">my favorite little Mac apps\u003C/a>. This post was originally published on my portfolio blog (which I have since merged with this one), so it had more of a focus on web development and productivity, so I wanted to write up a part 2 with more general-use apps I use frequently.\u003C/p>\n\u003Ch3 id=\"vinegar\">Vinegar\u003C/h3>\n\u003Cp>I use YouTube a lot, but I hate their video player, and the constant ads are obnoxious (nothing is worse than watching a dev tutorial and having it get interrupted by an ad for Wix). Vinegar is a Safari extension that replaces the YouTube player with a standard HTML 5 player, and blocks ads. It’s made YouTube so much more enjoyable to use on both my Mac and iOS devices. I suggest getting it in a bundle with Baking Soda, which replaces custom video players on other websites with standard HTML 5 players.\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app-bundle/fizzy-water-bundle/id1601247237\">Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"rocket\">Rocket\u003C/h3>\n\u003Cp>Rocket gives you quick and easy access to the full swath of Emoji with a simple search function you can either access via the menu bar, or in any text field via a trigger key (for example, Rocket pops up when I type \u003Ccode>::\u003C/code>). And that’s just the free version! With the pro version, you can store and search custom text snippets, ASCII art, images, and even gifs. Furthermore, you can search various symbols and glyphs like ↺, ◆, ∭, etc…\u003C/p>\n\u003Cp>\u003Ca href=\"https://matthewpalmer.net/rocket/\">Download/Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"qlmarkdown\">QLMarkdown\u003C/h3>\n\u003Cp>I do 90% of my writing in Markdown (heck, this blog is just a collection of Markdown files), and I wanted to see if there was a way to preview Markdown in QuickLook. After some searching, I found QLMarkdown! While it is an app you install to your Applications folder, it is primarily a QuickLook plugin that will display any \u003Ccode>.md\u003C/code> file as a fully styled Markdown preview. The app itself is simply a interface to change various settings for how you want the preview to look and function. Best of all, it’s open source!\u003C/p>\n\u003Cp>\u003Ca href=\"https://github.com/toland/qlmarkdown/releases\">Download Here\u003C/a>\u003C/p>\n\u003Cp>Or, if you use Homebrew, you can install it with \u003Ccode>brew install --cask qlmarkdown\u003C/code>.\u003C/p>\n\u003Ch3 id=\"keka\">Keka\u003C/h3>\n\u003Cp>Even though MacOS handles ZIP files, and other similar formats, it does have some limitations. I used the Unarchiver for many years, but I recently discovered Keka. I find it to be faster, and has a lot more options for compression and encyption if you’re into that.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.keka.io/en/\">Download Here\u003C/a>\u003C/p>",{"headings":387,"imagePaths":400,"frontmatter":401},[388,391,394,397],{"depth":46,"slug":389,"text":390},"vinegar","Vinegar",{"depth":46,"slug":392,"text":393},"rocket","Rocket",{"depth":46,"slug":395,"text":396},"qlmarkdown","QLMarkdown",{"depth":46,"slug":398,"text":399},"keka","Keka",[],{"title":378,"pubDate":402,"tags":403},"2023-01-21",[131,132],"2023/my-favorite-little-apps-part-2.md","2023/my-gunpla-adventure",{"id":405,"data":407,"body":411,"filePath":412,"digest":413,"rendered":414,"legacyId":422},{"title":408,"pubDate":409,"tags":410},"My Gunpla Adventure",["Date","2023-01-28T00:00:00.000Z"],[37],"Back in my teenage years I used to build model kits. Mostly Star Trek, some Star Wars, and 1 or 2 model planes. It was sort of a continuation of my Lego obsession from my pre-teen days, but at some point I just kind of fell of. Fast-forward Summer 2022, I was going through a rough patch and wanted to focus on some hobbies that would get me away from the screen, and I decided to pick up model building again. Because the YouTube algorithm is a thing, as I watched more and more reviews and tutorials, I naturally ended up in a strange corner of the model kit scene called Gunpla.\n\nSo, what the heck is Gunpla? Best I can understand is that it's a portmanteau of [Gundam](https://en.wikipedia.org/wiki/Gundam) and plastic. So simply put, it's about building robots (sorry, mecha) out of plastic.\n\nI've never been a Gundam fan, the genre just never really appealed to me. But I became enamored with watching Gunpla videos on YouTube, which is a whole genre of ASMR-like videos like [this one](https://www.youtube.com/watch?v=Nq88NAAD25k). The level of engineering behind these kits was just so fascinating to me, but I'm not super big on buying merch for franchises I don't really enjoy. Happily, that ended up not being a problem.\n\nSo, there was a little anime I watched back in high school called [Full Metal Panic](https://en.wikipedia.org/wiki/Full_Metal_Panic!) which, like Gundam, features people piloting giant mecha. As luck would have it, Bandai, the makers of Gunpla kits, have/had the license to make kits for the series. Not-so-luckily, the kit I wanted based on the main character's mech is impossible to find at a reasonable price at the moment, so I settled for my second pick:\n\n\u003Cimg src=\"/media/gunpla/box.jpg\" width=\"90%\" alt=\"a box sitting on a table with an image of a mech and text that reads 'M9 Gernsback ver IV (Agressor Squadron)'\" />\n\nSo, with the kit in hand, I opened the box and was greeted by a handful of plastic pouches containing what seemed like a thousand parts connected on plastic sprues in a variety of blues and grays. I took out the contents and perused through the included instructions, which read very much like it was designed by Ikea, if Ikea sold miniature giant robots. The writing was all in Japanese, but the illustrations were enough to guide one through the process no matter what language they can read.\n\n\u003Cimg src=\"/media/gunpla/all-the-parts.jpg\" width=\"90%\" alt=\"neatly piled plastic sprues sorted by color, an instruction booklet, and a model of R2-D2 lurking in the corner\" />\n\nSeparating the individual pieces from each sprue was pretty painless. They came off very cleanly and I barely had to use my handy hobby knife to clean up bits of excess plastic, and when I did it cut through like butter. Not a drop of glue was needed, everything snapped together perfectly. I struggled a bit with the smaller parts (of which there were plenty), and there were a couple seemingly microscopic stickers I had to apply, so my iFixIt tweezers came in handy quite a few times.\n\nAfter a couple hours, I had a pretty sweet looking miniature mecha.\n\n\u003Cimg src=\"/media/gunpla/final.jpg\" width=\"90%\" alt=\"the finished model, standing tall, and holding a scary looking gun\" />\n\nPutting it together, I was just so amazed by the level of engineering that went into this kit. Putting it all together, I could tell someone put a lot of care and attention into designing this thing, rivaling some of the Lego kits I've built, from the near-seamless fit of all the pieces, to the various types of joints enabling a quite frankly insane level of pose-ability for something this size.\n\nI had a lot of fun doing this, and it was cool to see what this little subculture of model building is like. Would I build another one? For sure, but I don't think it will be a regular thing for me because of how expensive it could get. This kit cost me around $50, and I tend to go hard on stuff like this (see my obscene collection of 2016-2017-era Magic The Gathering cards), so I could see myself spending way too much money on this if I'm not careful.\n\nI'm sure I'll get another kit eventually, but in the meantime there's a seemingly infinite number of those ASMR-style assembly videos, so I can marvel at the the engineering behind these kits second-hand for now.","src/content/blog/2023/my-gunpla-adventure.md","0151531fdef3e9eb",{"html":415,"metadata":416},"\u003Cp>Back in my teenage years I used to build model kits. Mostly Star Trek, some Star Wars, and 1 or 2 model planes. It was sort of a continuation of my Lego obsession from my pre-teen days, but at some point I just kind of fell of. Fast-forward Summer 2022, I was going through a rough patch and wanted to focus on some hobbies that would get me away from the screen, and I decided to pick up model building again. Because the YouTube algorithm is a thing, as I watched more and more reviews and tutorials, I naturally ended up in a strange corner of the model kit scene called Gunpla.\u003C/p>\n\u003Cp>So, what the heck is Gunpla? Best I can understand is that it’s a portmanteau of \u003Ca href=\"https://en.wikipedia.org/wiki/Gundam\">Gundam\u003C/a> and plastic. So simply put, it’s about building robots (sorry, mecha) out of plastic.\u003C/p>\n\u003Cp>I’ve never been a Gundam fan, the genre just never really appealed to me. But I became enamored with watching Gunpla videos on YouTube, which is a whole genre of ASMR-like videos like \u003Ca href=\"https://www.youtube.com/watch?v=Nq88NAAD25k\">this one\u003C/a>. The level of engineering behind these kits was just so fascinating to me, but I’m not super big on buying merch for franchises I don’t really enjoy. Happily, that ended up not being a problem.\u003C/p>\n\u003Cp>So, there was a little anime I watched back in high school called \u003Ca href=\"https://en.wikipedia.org/wiki/Full_Metal_Panic!\">Full Metal Panic\u003C/a> which, like Gundam, features people piloting giant mecha. As luck would have it, Bandai, the makers of Gunpla kits, have/had the license to make kits for the series. Not-so-luckily, the kit I wanted based on the main character’s mech is impossible to find at a reasonable price at the moment, so I settled for my second pick:\u003C/p>\n\u003Cimg src=\"/media/gunpla/box.jpg\" width=\"90%\" alt=\"a box sitting on a table with an image of a mech and text that reads 'M9 Gernsback ver IV (Agressor Squadron)'\">\n\u003Cp>So, with the kit in hand, I opened the box and was greeted by a handful of plastic pouches containing what seemed like a thousand parts connected on plastic sprues in a variety of blues and grays. I took out the contents and perused through the included instructions, which read very much like it was designed by Ikea, if Ikea sold miniature giant robots. The writing was all in Japanese, but the illustrations were enough to guide one through the process no matter what language they can read.\u003C/p>\n\u003Cimg src=\"/media/gunpla/all-the-parts.jpg\" width=\"90%\" alt=\"neatly piled plastic sprues sorted by color, an instruction booklet, and a model of R2-D2 lurking in the corner\">\n\u003Cp>Separating the individual pieces from each sprue was pretty painless. They came off very cleanly and I barely had to use my handy hobby knife to clean up bits of excess plastic, and when I did it cut through like butter. Not a drop of glue was needed, everything snapped together perfectly. I struggled a bit with the smaller parts (of which there were plenty), and there were a couple seemingly microscopic stickers I had to apply, so my iFixIt tweezers came in handy quite a few times.\u003C/p>\n\u003Cp>After a couple hours, I had a pretty sweet looking miniature mecha.\u003C/p>\n\u003Cimg src=\"/media/gunpla/final.jpg\" width=\"90%\" alt=\"the finished model, standing tall, and holding a scary looking gun\">\n\u003Cp>Putting it together, I was just so amazed by the level of engineering that went into this kit. Putting it all together, I could tell someone put a lot of care and attention into designing this thing, rivaling some of the Lego kits I’ve built, from the near-seamless fit of all the pieces, to the various types of joints enabling a quite frankly insane level of pose-ability for something this size.\u003C/p>\n\u003Cp>I had a lot of fun doing this, and it was cool to see what this little subculture of model building is like. Would I build another one? For sure, but I don’t think it will be a regular thing for me because of how expensive it could get. This kit cost me around $50, and I tend to go hard on stuff like this (see my obscene collection of 2016-2017-era Magic The Gathering cards), so I could see myself spending way too much money on this if I’m not careful.\u003C/p>\n\u003Cp>I’m sure I’ll get another kit eventually, but in the meantime there’s a seemingly infinite number of those ASMR-style assembly videos, so I can marvel at the the engineering behind these kits second-hand for now.\u003C/p>",{"headings":417,"imagePaths":418,"frontmatter":419},[],[],{"title":408,"pubDate":420,"tags":421},"2023-01-28",[37],"2023/my-gunpla-adventure.md","2023/nostalgia",{"id":423,"data":425,"body":430,"filePath":431,"digest":432,"rendered":433,"legacyId":441},{"title":426,"pubDate":427,"tags":428},"Nostalgia",["Date","2023-03-04T00:00:00.000Z"],[93,220,429],"Movies & TV","I've recently been playing 2 games that would be considered \"retro\", but referring to them as such would make me feel old, so we'll call them \"classics\". These classics are Metroid Prime, via the recent remaster on Switch, and The Legend of Zelda: The Minish Cap, via the Switch Online GameBoy Advance collection. It got me thinking about how nostalgia can color our opinions of certain pieces of media, primarily when comparing media of a similar vintage.\n\nMetroid Prime originally came out on the GameCube in 2002, my the extent of my knowledge of the series was via Samus in Super Smash Bros, and I never played the game until the Wii version, which I hated due to the controls.\n\nTo contrast, Minish Cap came out on the GameBoy Advance in 2004, and I've been a Zelda fan since Link's Awakening DX on the GameBoy Color. I played this game to death when it released, and spent countless hours searching the (admittedly small) game world seeking out secrets and collectables.\n\nThese 2 games are both well-regarded and loved among their respective fans. Both of them are quality, well-made games in their own right. But I've found myself enjoying the time I've spent replaying Minish Cap more than my time experiencing much of Metroid Prime for the first time. Is Minish Cap just more my style of game? Could it just be a better game? Or maybe my nostalgia is influencing my opinions.\n\nThere's also the fact that my first experience with the Wii version of Metroid Prime was suboptimal. Could that be coloring my opinion of the Switch version, even though none of the issues I had on the Wii exist–or, more accurately, they are not mandatory, as motion controls can be turned on in the game's settings.\n\nThis kind of thing isn't exclusive to video games. As a child of the 90's I grew up in the so-called \"Disney Renaissance\" and, as I've been re-exploring that era thanks to Disney Plus, I've found myself gravitating towards certain movies. Aladdin, Lion King, Mulan, Pocahontas, the Disney films I watched the most growing up, were the ones I enjoyed the most. And I found myself wholly uninterested in The Little Mermaid, Beauty and the Beast, Tarzan, or Hercules. None of this is a reflection on the quality of these movies. My feelings about them are entirely down to the ones I remember watching the most, the ones I could picture in my head as clear as day.\n\nMaybe, objectively speaking, Metroid Prime is a better game than Minish Cap. I'm sure there are many people who would be insisting that's the case, and many others who would argue the opposite. But I don't know if trying to settle that, or similar debates, would be all that productive. Whether we're talking Nintendo games from the early 2000's, or Disney movies from the 1990's, their perceived quality is wholly determined by how they made us feel when we first experienced them.\n\nPerhaps asking someone today, someone who has yet to experience either game, to play both Minish Cap and Metroid Prime and pick their favorite of the 2 would produce some useful insight. But on the other hand, would their opinions be colored by the ever-evolving experiences games have produced over the last 20 years? Someone who played Breath of the Wild before experiencing Minish Cap for the first time is going to experience the game differently than someone who played it back in 2004.\n\nAdmittedly, as someone who un-ironically enjoys Star Wars Episode II–purely due to nostalgia, even though I can recognize and point out the movies many flaws–I'm perhaps not the best person to examine nostalgia vs. objective quality.","src/content/blog/2023/nostalgia.md","02495bfc28d1a357",{"html":434,"metadata":435},"\u003Cp>I’ve recently been playing 2 games that would be considered “retro”, but referring to them as such would make me feel old, so we’ll call them “classics”. These classics are Metroid Prime, via the recent remaster on Switch, and The Legend of Zelda: The Minish Cap, via the Switch Online GameBoy Advance collection. It got me thinking about how nostalgia can color our opinions of certain pieces of media, primarily when comparing media of a similar vintage.\u003C/p>\n\u003Cp>Metroid Prime originally came out on the GameCube in 2002, my the extent of my knowledge of the series was via Samus in Super Smash Bros, and I never played the game until the Wii version, which I hated due to the controls.\u003C/p>\n\u003Cp>To contrast, Minish Cap came out on the GameBoy Advance in 2004, and I’ve been a Zelda fan since Link’s Awakening DX on the GameBoy Color. I played this game to death when it released, and spent countless hours searching the (admittedly small) game world seeking out secrets and collectables.\u003C/p>\n\u003Cp>These 2 games are both well-regarded and loved among their respective fans. Both of them are quality, well-made games in their own right. But I’ve found myself enjoying the time I’ve spent replaying Minish Cap more than my time experiencing much of Metroid Prime for the first time. Is Minish Cap just more my style of game? Could it just be a better game? Or maybe my nostalgia is influencing my opinions.\u003C/p>\n\u003Cp>There’s also the fact that my first experience with the Wii version of Metroid Prime was suboptimal. Could that be coloring my opinion of the Switch version, even though none of the issues I had on the Wii exist–or, more accurately, they are not mandatory, as motion controls can be turned on in the game’s settings.\u003C/p>\n\u003Cp>This kind of thing isn’t exclusive to video games. As a child of the 90’s I grew up in the so-called “Disney Renaissance” and, as I’ve been re-exploring that era thanks to Disney Plus, I’ve found myself gravitating towards certain movies. Aladdin, Lion King, Mulan, Pocahontas, the Disney films I watched the most growing up, were the ones I enjoyed the most. And I found myself wholly uninterested in The Little Mermaid, Beauty and the Beast, Tarzan, or Hercules. None of this is a reflection on the quality of these movies. My feelings about them are entirely down to the ones I remember watching the most, the ones I could picture in my head as clear as day.\u003C/p>\n\u003Cp>Maybe, objectively speaking, Metroid Prime is a better game than Minish Cap. I’m sure there are many people who would be insisting that’s the case, and many others who would argue the opposite. But I don’t know if trying to settle that, or similar debates, would be all that productive. Whether we’re talking Nintendo games from the early 2000’s, or Disney movies from the 1990’s, their perceived quality is wholly determined by how they made us feel when we first experienced them.\u003C/p>\n\u003Cp>Perhaps asking someone today, someone who has yet to experience either game, to play both Minish Cap and Metroid Prime and pick their favorite of the 2 would produce some useful insight. But on the other hand, would their opinions be colored by the ever-evolving experiences games have produced over the last 20 years? Someone who played Breath of the Wild before experiencing Minish Cap for the first time is going to experience the game differently than someone who played it back in 2004.\u003C/p>\n\u003Cp>Admittedly, as someone who un-ironically enjoys Star Wars Episode II–purely due to nostalgia, even though I can recognize and point out the movies many flaws–I’m perhaps not the best person to examine nostalgia vs. objective quality.\u003C/p>",{"headings":436,"imagePaths":437,"frontmatter":438},[],[],{"title":426,"pubDate":439,"tags":440},"2023-03-04",[93,220,429],"2023/nostalgia.md","2023/questlogger-from-ios-to-mac",{"id":442,"data":444,"body":449,"filePath":450,"digest":451,"rendered":452,"legacyId":460},{"title":445,"pubDate":446,"tags":447},"QuestLogger - From Closed-Source iOS App to Open-Source Mac App",["Date","2023-09-03T04:00:00.000Z"],[37,448,132],"Programming","A few weeks ago I relaunched my work-in-progress iOS app, QuestLogger, as [an open-source Mac app](https://github.com/ghall89/questlogger-mac). That’s quite a shift, but I felt it was best for the project itself, and my interest in carrying it on.\n\nWithout getting too into the technical details, it required a bit of work to pull off. The app was originally written specifically for the iPhone, and used a bit of custom nonsense that would’t work at all on macOS, so I had to rewrite a non-insignificant part of the user interface. Thankfully I had the forethought to break up my interface code into smaller components, so a lot of that code could be reused (once any iOS-specific code was stripped out). The bulk of the work was rewriting the entire layout to use the screen real estate of the Mac more effectively.\n\nSo, I guess the big question is, “Why did I do this?”\n\nThe answer? Subscriptions.\n\nFrom the get-go I was adamant about making this app a pay once type of deal. I wasn’t looking to make a lot of money, I just wanted to build something that people might want to use. Maybe use it as a way to build towards more lucrative projects if I was lucky. And I didn’t want the to deal with the pressure of subscriptions and the demands that could bring. Maybe this would be something I’d be more comfortable with down the line with an app or 2 under my belt, or if I were doing this full time, but as a little side project I’m just not comfortable with asking people to pay a recurring subscription\n\nBut after running a relatively short TestFlight beta over the summer, and witnessing the drama with the Reddit API, I got very nervous about running an app with the payment structure I wanted off an API I have no control over, and an estimated 30¢ cost per user to run a proxy server on AWS to access that API. That doesn’t sound like a lot, but if for some reason my app happened to blow up (unlikely, but not impossible) I could be stuck with a sizable AWS bill, and no recurring revenue to cover it.\n\nI should probably explain that QuestLogger gets its data from IGDB (Internet Game Database) through an API. In order to access the API, an app first needs to authenticate with their server by sending a pair of authentication keys and receiving back a special “bearer token”. This token can then be used to access the API itself, but as a developer my app can only request a very limited number of tokens at a time across all instances. That’s not a problem if you have only a couple users, but it could become one very quickly if say I had even 50 people using my app. So the best way around that is to set up a proxy server for the app to communicate with instead, and essentially let all users share the same token.\n\nI was feeling super discouraged. I don’t think I wrote a single line of code for QuestLogger throughout the month of July. Then, in early August, I decided I didn’t want all the work I put into the app go to waste, so I had the idea to convert the whole thing into a Mac app and release it as an open source project.\n\nI think this change allows the project to be a lot more flexible. First, I was able to circumvent the token issue by requiring users to provide their own authentication keys–which is, as I understand it, against Apple’s rules for the App Store–and request the token on-device. It also gives a lot more freedom in terms of being able to switch to another source of data as it seems there are more options for non-commercial projects.\n\nMost importantly though, it’s reignited my interest in building this project, and honing my Swift skills. I don’t need to worry about optimal subscription prices, or making sure people are getting their money’s worth. I can just focus on making something I think is cool, and hopefully others do too.","src/content/blog/2023/questlogger-from-ios-to-mac.md","80a59f8bec0f36dc",{"html":453,"metadata":454},"\u003Cp>A few weeks ago I relaunched my work-in-progress iOS app, QuestLogger, as \u003Ca href=\"https://github.com/ghall89/questlogger-mac\">an open-source Mac app\u003C/a>. That’s quite a shift, but I felt it was best for the project itself, and my interest in carrying it on.\u003C/p>\n\u003Cp>Without getting too into the technical details, it required a bit of work to pull off. The app was originally written specifically for the iPhone, and used a bit of custom nonsense that would’t work at all on macOS, so I had to rewrite a non-insignificant part of the user interface. Thankfully I had the forethought to break up my interface code into smaller components, so a lot of that code could be reused (once any iOS-specific code was stripped out). The bulk of the work was rewriting the entire layout to use the screen real estate of the Mac more effectively.\u003C/p>\n\u003Cp>So, I guess the big question is, “Why did I do this?”\u003C/p>\n\u003Cp>The answer? Subscriptions.\u003C/p>\n\u003Cp>From the get-go I was adamant about making this app a pay once type of deal. I wasn’t looking to make a lot of money, I just wanted to build something that people might want to use. Maybe use it as a way to build towards more lucrative projects if I was lucky. And I didn’t want the to deal with the pressure of subscriptions and the demands that could bring. Maybe this would be something I’d be more comfortable with down the line with an app or 2 under my belt, or if I were doing this full time, but as a little side project I’m just not comfortable with asking people to pay a recurring subscription\u003C/p>\n\u003Cp>But after running a relatively short TestFlight beta over the summer, and witnessing the drama with the Reddit API, I got very nervous about running an app with the payment structure I wanted off an API I have no control over, and an estimated 30¢ cost per user to run a proxy server on AWS to access that API. That doesn’t sound like a lot, but if for some reason my app happened to blow up (unlikely, but not impossible) I could be stuck with a sizable AWS bill, and no recurring revenue to cover it.\u003C/p>\n\u003Cp>I should probably explain that QuestLogger gets its data from IGDB (Internet Game Database) through an API. In order to access the API, an app first needs to authenticate with their server by sending a pair of authentication keys and receiving back a special “bearer token”. This token can then be used to access the API itself, but as a developer my app can only request a very limited number of tokens at a time across all instances. That’s not a problem if you have only a couple users, but it could become one very quickly if say I had even 50 people using my app. So the best way around that is to set up a proxy server for the app to communicate with instead, and essentially let all users share the same token.\u003C/p>\n\u003Cp>I was feeling super discouraged. I don’t think I wrote a single line of code for QuestLogger throughout the month of July. Then, in early August, I decided I didn’t want all the work I put into the app go to waste, so I had the idea to convert the whole thing into a Mac app and release it as an open source project.\u003C/p>\n\u003Cp>I think this change allows the project to be a lot more flexible. First, I was able to circumvent the token issue by requiring users to provide their own authentication keys–which is, as I understand it, against Apple’s rules for the App Store–and request the token on-device. It also gives a lot more freedom in terms of being able to switch to another source of data as it seems there are more options for non-commercial projects.\u003C/p>\n\u003Cp>Most importantly though, it’s reignited my interest in building this project, and honing my Swift skills. I don’t need to worry about optimal subscription prices, or making sure people are getting their money’s worth. I can just focus on making something I think is cool, and hopefully others do too.\u003C/p>",{"headings":455,"imagePaths":456,"frontmatter":457},[],[],{"title":445,"pubDate":458,"tags":459},"9/3/23",[37,448,132],"2023/questlogger-from-ios-to-mac.md","2023/on-using-chat-gpt",{"id":461,"data":463,"body":467,"filePath":468,"digest":469,"rendered":470,"legacyId":478},{"title":464,"pubDate":465,"tags":466},"Quick Thoughts On Using Chat GPT as a Coding Assistant",["Date","2023-04-30T04:00:00.000Z"],[113,448],"When I was learning to code, the line my tutor kept repeating was, “Half of programming is knowing how to use Google.” That can be pretty much boiled down to half of programming is knowing how to look things up, whether that’s in a book, online, or with a language model. You can’t know everything there is to know about programming, so you have to be good at looking things up when you don’t have the answer to a problem, and you have to be able to do it effectively with whatever tool\n\nFor the last several weeks I’ve been using ChatGPT in lieu of Google for looking up code examples when I’m stuck on a problem at work, or when working on side-projects. It’s been hugely beneficial to my productivity and workflow, but it’s not perfect.\n\nGoing in you need to have enough knowledge to be able to call it on its BS. I’ve found ChatGPT will get things wrong, give you code that maybe doesn’t quite do what you’re looking for, or sometimes try to get you to use non-existent or deprecated packages or language features.\n\nEspecially when I’m going in trying to learn something new, whether its a web technology I’m not experienced in, or trying to [learn Swift from scratch](/posts/2023/reflecting-on-building-my-first-app), I’ve found it helpful to go in at least knowing what I’m looking for. That means reading documentation, and trying a few things out on my own. If I’m stuck, or if the documentation has poor or non-existent sample code (looking at you Apple), I’ll use ChatGPT to generate some generic starter code I can use as a jumping off point.","src/content/blog/2023/on-using-chat-gpt.md","d0468670ada28309",{"html":471,"metadata":472},"\u003Cp>When I was learning to code, the line my tutor kept repeating was, “Half of programming is knowing how to use Google.” That can be pretty much boiled down to half of programming is knowing how to look things up, whether that’s in a book, online, or with a language model. You can’t know everything there is to know about programming, so you have to be good at looking things up when you don’t have the answer to a problem, and you have to be able to do it effectively with whatever tool\u003C/p>\n\u003Cp>For the last several weeks I’ve been using ChatGPT in lieu of Google for looking up code examples when I’m stuck on a problem at work, or when working on side-projects. It’s been hugely beneficial to my productivity and workflow, but it’s not perfect.\u003C/p>\n\u003Cp>Going in you need to have enough knowledge to be able to call it on its BS. I’ve found ChatGPT will get things wrong, give you code that maybe doesn’t quite do what you’re looking for, or sometimes try to get you to use non-existent or deprecated packages or language features.\u003C/p>\n\u003Cp>Especially when I’m going in trying to learn something new, whether its a web technology I’m not experienced in, or trying to \u003Ca href=\"/posts/2023/reflecting-on-building-my-first-app\">learn Swift from scratch\u003C/a>, I’ve found it helpful to go in at least knowing what I’m looking for. That means reading documentation, and trying a few things out on my own. If I’m stuck, or if the documentation has poor or non-existent sample code (looking at you Apple), I’ll use ChatGPT to generate some generic starter code I can use as a jumping off point.\u003C/p>",{"headings":473,"imagePaths":474,"frontmatter":475},[],[],{"title":464,"pubDate":476,"tags":477},"4/30/23",[113,448],"2023/on-using-chat-gpt.md","2023/reflecting-on-building-my-first-app",{"id":479,"data":481,"body":485,"filePath":486,"digest":487,"rendered":488,"legacyId":496},{"title":482,"pubDate":483,"tags":484},"Reflecting on Building My First App",["Date","2023-02-28T00:00:00.000Z"],[113,37,131,448],"I'm primarily a web developer. Everything I build, whether it's for work or for fun, is destined for the web. I love it, building stuff for the web has been a part of my life since I first cobbled together a Star Trek fan site in my tween years. But I've also wanted to broaden my horizons a bit beyond the web, and create something for another platform I love; the Mac.\n\nI've dipped my toes into building desktop apps in Electron with my app [Classic Calc](https://github.com/ghall89/classic-calc), but I wasn't all that fulfilled by building it. It was a good exercise, but it felt inauthentic, like I was cheating, so I lost interest. That was about a year-and-a-half ago.\n\nMore recently, I decided to tackle building something more substantial. I started fiddling around with Swift Playgrounds on my MacBook, trying to use the built-in learning tools to create a basic UI. Coming from JavaScript, I found Swift as a language fairly easy to grasp the basics of. But when it came to SwiftUI, I quickly found myself struggling.\n\nAfter a few days of this, I decided to try my hand at building a basic app: a Markdown text editor. Over the course of a couple nights (and one or two lunch breaks), I built [Scrib](https://github.com/ghall89/Scrib). Is it something I'd suggest using? Nope. But to be fair, I'd readily suggest it over [CSS Shadow Tool](https://ghall89.github.io/css-shadow-tool/), one of my first attempts at an interactive web app.\n\nI pushed this project aside too. Unlike my Electron app though, I wasn’t unfulfilled or bored. I was overwhelmed. SwiftUI can be a finicky beast for seasoned developers, but I’d never written a line of it until recently so I was feeling totally lost. I felt stupid. The pride I felt in creating a functional Mac app was replaced with harsh self-critique. So I dove headfirst back into web development projects, my comfort zone.\n\nBut the thing is, web development wasn’t always my comfort zone. I used to be scared, overwhelmed, at the prospect of building for the web. Hell, it still scares me sometimes, but it’s what I know. I don’t know Swift very well yet, and I certainly am not very familiar with SwiftUI, and I often forget there was a time I was in the same boat with JavaScript (not to say I’m an expert, far from it, but I think you get my point).\n\nSo what did I learn that I can apply to my future endeavors to build a Mac app? Honestly, it’s something I already knew, but maybe I just needed to be reminded of: Start small, and don’t try to do everything at once.\n\nI made a mistake trying to just immerse myself in everything Swift, but, as a result, I feel like I actually learned very little. What I should have done, and will do when I’m ready to dive back in, is start at step one. I know the fundamentals of programming, but that’s like trying to speak a language when you know the grammar but not the vocabulary. So I need to just forget about SwiftUI and building functional apps, and just start with the core language and get comfortable with that. Maybe write some command line tools and work my way up from there.\n\nIt’s definitely hard for me when learning something new to not immediately put myself down for not being good at it on my first go. It’s unrealistic, and unproductive, but for some reason it’s my natural inclination. The boot camp format mitigated that a bit, between the structured lessons and interacting with people who were in the same boat of having no idea what the frick we were doing.","src/content/blog/2023/reflecting-on-building-my-first-app.md","0a22fbc38e358da1",{"html":489,"metadata":490},"\u003Cp>I’m primarily a web developer. Everything I build, whether it’s for work or for fun, is destined for the web. I love it, building stuff for the web has been a part of my life since I first cobbled together a Star Trek fan site in my tween years. But I’ve also wanted to broaden my horizons a bit beyond the web, and create something for another platform I love; the Mac.\u003C/p>\n\u003Cp>I’ve dipped my toes into building desktop apps in Electron with my app \u003Ca href=\"https://github.com/ghall89/classic-calc\">Classic Calc\u003C/a>, but I wasn’t all that fulfilled by building it. It was a good exercise, but it felt inauthentic, like I was cheating, so I lost interest. That was about a year-and-a-half ago.\u003C/p>\n\u003Cp>More recently, I decided to tackle building something more substantial. I started fiddling around with Swift Playgrounds on my MacBook, trying to use the built-in learning tools to create a basic UI. Coming from JavaScript, I found Swift as a language fairly easy to grasp the basics of. But when it came to SwiftUI, I quickly found myself struggling.\u003C/p>\n\u003Cp>After a few days of this, I decided to try my hand at building a basic app: a Markdown text editor. Over the course of a couple nights (and one or two lunch breaks), I built \u003Ca href=\"https://github.com/ghall89/Scrib\">Scrib\u003C/a>. Is it something I’d suggest using? Nope. But to be fair, I’d readily suggest it over \u003Ca href=\"https://ghall89.github.io/css-shadow-tool/\">CSS Shadow Tool\u003C/a>, one of my first attempts at an interactive web app.\u003C/p>\n\u003Cp>I pushed this project aside too. Unlike my Electron app though, I wasn’t unfulfilled or bored. I was overwhelmed. SwiftUI can be a finicky beast for seasoned developers, but I’d never written a line of it until recently so I was feeling totally lost. I felt stupid. The pride I felt in creating a functional Mac app was replaced with harsh self-critique. So I dove headfirst back into web development projects, my comfort zone.\u003C/p>\n\u003Cp>But the thing is, web development wasn’t always my comfort zone. I used to be scared, overwhelmed, at the prospect of building for the web. Hell, it still scares me sometimes, but it’s what I know. I don’t know Swift very well yet, and I certainly am not very familiar with SwiftUI, and I often forget there was a time I was in the same boat with JavaScript (not to say I’m an expert, far from it, but I think you get my point).\u003C/p>\n\u003Cp>So what did I learn that I can apply to my future endeavors to build a Mac app? Honestly, it’s something I already knew, but maybe I just needed to be reminded of: Start small, and don’t try to do everything at once.\u003C/p>\n\u003Cp>I made a mistake trying to just immerse myself in everything Swift, but, as a result, I feel like I actually learned very little. What I should have done, and will do when I’m ready to dive back in, is start at step one. I know the fundamentals of programming, but that’s like trying to speak a language when you know the grammar but not the vocabulary. So I need to just forget about SwiftUI and building functional apps, and just start with the core language and get comfortable with that. Maybe write some command line tools and work my way up from there.\u003C/p>\n\u003Cp>It’s definitely hard for me when learning something new to not immediately put myself down for not being good at it on my first go. It’s unrealistic, and unproductive, but for some reason it’s my natural inclination. The boot camp format mitigated that a bit, between the structured lessons and interacting with people who were in the same boat of having no idea what the frick we were doing.\u003C/p>",{"headings":491,"imagePaths":492,"frontmatter":493},[],[],{"title":482,"pubDate":494,"tags":495},"2023-02-28",[113,37,131,448],"2023/reflecting-on-building-my-first-app.md","2023/reflecting-on-my-first-year-as-a-developer",{"id":497,"data":499,"body":503,"filePath":504,"digest":505,"rendered":506,"legacyId":514},{"title":500,"pubDate":501,"tags":502},"Reflecting On My First Year as a Developer",["Date","2023-08-07T04:00:00.000Z"],[93,113,448],"Next week will mark the end of my first year (of hopefully many more) working as a software developer. This fact blows my mind, and feels wholly unreal. It’s still difficult for me to believe that I made it this far. I still remember thinking my interview was a total disaster and being genuinely shocked when I got the job offer.\n\nI can’t understate how life changing this last year has been. Last summer I was at a low point. My year-long job search was proving unfruitful, and I was not really feeling good about myself. I had been working at a small startup doing quality control for short-form video clips on a contract basis, and I was slowly losing my mind.\n\nI’ve grown a lot in the last year, not just as a developer, but also as a person. Financially, being a full time job, it’s given me stability I didn’t have doing contract work. Emotionally, it isn’t as overwhelming to deal with (when I’m not having a bout of Imposter Syndrome). It’s given me the space to work on myself in a way I haven’t really had in a long time.\n\nHell, even the job itself has allowed me to grow as a person. Right off the bat, I had to learn Next.js, and over time I’ve learned and grown more comfortable with a multitude of technologies that I lacked the confidence to touch or expand my knowledge of. Things like working with databases, something that I’ve found very intimidating in the past, has become not _quite_ second nature, but a lot less overwhelming.\n\nThe most important thing I learned, the one common thread tying this last year together, is the importance of just _doing_. I have a tendency to not believe in myself, and that has led to me saying “I can’t” to a lot of things. “I can’t learn to code.” “I can’t handle working with databases.” “I can’t live in a new place.” “I can’t find happiness.”\n\nFor Star Wars Day this year I rewatched The Empire Strikes Back. In that movie, after Luke is unable to use the Force to lift his X-Wing out of the swamp on Dagobah, exclaiming that it’s “impossible”. Yoda sighs and pulls the starfighter out of the swamp himself. Luke, upon seeing this, says, “I don’t believe it.” To which Yoda responds, “That is why you failed.” This scene really struck a chord with me when I watched it this past May. For so long I had been Luke, failing because I didn’t have faith I could succeed.\n\nOf course, belief does not always equal success, though it would be nice if it did. But, what this last year–and honestly, my entire journey into the world of software development–has taught me is that the only guarantee is that not trying, not taking the chance, will always lead to failure. But sometimes, every once in a while, if you believe in yourself and take that chance, you might just succeed.","src/content/blog/2023/reflecting-on-my-first-year-as-a-developer.md","59ccb49a7a592e63",{"html":507,"metadata":508},"\u003Cp>Next week will mark the end of my first year (of hopefully many more) working as a software developer. This fact blows my mind, and feels wholly unreal. It’s still difficult for me to believe that I made it this far. I still remember thinking my interview was a total disaster and being genuinely shocked when I got the job offer.\u003C/p>\n\u003Cp>I can’t understate how life changing this last year has been. Last summer I was at a low point. My year-long job search was proving unfruitful, and I was not really feeling good about myself. I had been working at a small startup doing quality control for short-form video clips on a contract basis, and I was slowly losing my mind.\u003C/p>\n\u003Cp>I’ve grown a lot in the last year, not just as a developer, but also as a person. Financially, being a full time job, it’s given me stability I didn’t have doing contract work. Emotionally, it isn’t as overwhelming to deal with (when I’m not having a bout of Imposter Syndrome). It’s given me the space to work on myself in a way I haven’t really had in a long time.\u003C/p>\n\u003Cp>Hell, even the job itself has allowed me to grow as a person. Right off the bat, I had to learn Next.js, and over time I’ve learned and grown more comfortable with a multitude of technologies that I lacked the confidence to touch or expand my knowledge of. Things like working with databases, something that I’ve found very intimidating in the past, has become not \u003Cem>quite\u003C/em> second nature, but a lot less overwhelming.\u003C/p>\n\u003Cp>The most important thing I learned, the one common thread tying this last year together, is the importance of just \u003Cem>doing\u003C/em>. I have a tendency to not believe in myself, and that has led to me saying “I can’t” to a lot of things. “I can’t learn to code.” “I can’t handle working with databases.” “I can’t live in a new place.” “I can’t find happiness.”\u003C/p>\n\u003Cp>For Star Wars Day this year I rewatched The Empire Strikes Back. In that movie, after Luke is unable to use the Force to lift his X-Wing out of the swamp on Dagobah, exclaiming that it’s “impossible”. Yoda sighs and pulls the starfighter out of the swamp himself. Luke, upon seeing this, says, “I don’t believe it.” To which Yoda responds, “That is why you failed.” This scene really struck a chord with me when I watched it this past May. For so long I had been Luke, failing because I didn’t have faith I could succeed.\u003C/p>\n\u003Cp>Of course, belief does not always equal success, though it would be nice if it did. But, what this last year–and honestly, my entire journey into the world of software development–has taught me is that the only guarantee is that not trying, not taking the chance, will always lead to failure. But sometimes, every once in a while, if you believe in yourself and take that chance, you might just succeed.\u003C/p>",{"headings":509,"imagePaths":510,"frontmatter":511},[],[],{"title":500,"pubDate":512,"tags":513},"8/7/23",[93,113,448],"2023/reflecting-on-my-first-year-as-a-developer.md","2023/thoughs-on-macos",{"id":515,"data":517,"body":521,"filePath":522,"digest":523,"rendered":524,"legacyId":532},{"title":518,"pubDate":519,"tags":520},"Thoughts on macOS",["Date","2023-06-04T04:00:00.000Z"],[131,94],"So, as of this writing, WWDC 2023 kicks off _tomorrow_. As a web developer who’s recently started dabbling in Swift, and building apps for Apple platforms, I’m excited to see what gets shown off that I can start sinking my teeth into. On the other hand, as a longtime Mac user, I’m a little apprehensive about what we’ll see there.\n\nHardware-wise, the Mac is in a fantastic place. We’re 3 years into the transition from Intel to Apple Silicon, and the design aesthetic is changing up for the first time in like a decade (maybe more??). However, in terms of software, specifically macOS itself, we’re kind of in a weird place.\n\nJust looking at macOS 13 Ventura, the latest version until the next one is most likely announced tomorrow, there are so many little oddities that range from minor annoyances to showstoppers. Some bugs introduced in the betas from last year, for example the infamous launch item notification bug, are _still_ present in the currently shipping version (13.4). Then there’s the mess that is System Settings, which received a major redesign last year for the first time since the Mac OS X betas from 23 years ago.\n\nThen there are some long-standing issues, like a memory leak in the WindowServer system process that has existed since at least Monterey in 2021 (though I feel like I’ve been experiencing it longer). Or the fact that the TV app straight up doesn’t work most of the time.\n\nThen there’s Launchpad (which may not be long for this world as the dedicated key on Apple’s keyboard has been replaced with Spotlight) which I’ve tried to use since it was introduced in Mac OS X Lion all the way back in 2010, but has a bug that will randomly just reorder the icons, which has been an issue since day 1.\n\nOne other long-standing issue that I’ve experienced is how unreliable network drives are. I have a Mac Mini set up as a home server, and the amount of times it’ll just fail to connect when I need to access one of the drives, or Time Machine just fails to recognize that there’s a network volume, is exceedingly frustrating.\n\nThe reliability of macOS varies so much from person to person. Some people experience just one, or maybe even none, of the issues I’ve mentioned. Others experience totally different issues that I’ve never run into. It’s just so wild that an operating system that has been around for 23 years (33 if you count NeXTSTEP as part of the lineage) has so many little issues. Yes, every piece of software has bugs, especially when working with the bogglingly large codebase of an operating system, but so many of what people encounter on the Mac are not small issues.\n\nAll this to say, my one wish for WWDC 2023 is that we _don’t_ see a new version of macOS, and if we do, it’s purely focused on fixing the outstanding issues (and, if we want to get really crazy, fixing the System Settings design). I doubt either of those will happen, but I can certainly dream.","src/content/blog/2023/thoughs-on-macos.md","ab22dd606410397d",{"html":525,"metadata":526},"\u003Cp>So, as of this writing, WWDC 2023 kicks off \u003Cem>tomorrow\u003C/em>. As a web developer who’s recently started dabbling in Swift, and building apps for Apple platforms, I’m excited to see what gets shown off that I can start sinking my teeth into. On the other hand, as a longtime Mac user, I’m a little apprehensive about what we’ll see there.\u003C/p>\n\u003Cp>Hardware-wise, the Mac is in a fantastic place. We’re 3 years into the transition from Intel to Apple Silicon, and the design aesthetic is changing up for the first time in like a decade (maybe more??). However, in terms of software, specifically macOS itself, we’re kind of in a weird place.\u003C/p>\n\u003Cp>Just looking at macOS 13 Ventura, the latest version until the next one is most likely announced tomorrow, there are so many little oddities that range from minor annoyances to showstoppers. Some bugs introduced in the betas from last year, for example the infamous launch item notification bug, are \u003Cem>still\u003C/em> present in the currently shipping version (13.4). Then there’s the mess that is System Settings, which received a major redesign last year for the first time since the Mac OS X betas from 23 years ago.\u003C/p>\n\u003Cp>Then there are some long-standing issues, like a memory leak in the WindowServer system process that has existed since at least Monterey in 2021 (though I feel like I’ve been experiencing it longer). Or the fact that the TV app straight up doesn’t work most of the time.\u003C/p>\n\u003Cp>Then there’s Launchpad (which may not be long for this world as the dedicated key on Apple’s keyboard has been replaced with Spotlight) which I’ve tried to use since it was introduced in Mac OS X Lion all the way back in 2010, but has a bug that will randomly just reorder the icons, which has been an issue since day 1.\u003C/p>\n\u003Cp>One other long-standing issue that I’ve experienced is how unreliable network drives are. I have a Mac Mini set up as a home server, and the amount of times it’ll just fail to connect when I need to access one of the drives, or Time Machine just fails to recognize that there’s a network volume, is exceedingly frustrating.\u003C/p>\n\u003Cp>The reliability of macOS varies so much from person to person. Some people experience just one, or maybe even none, of the issues I’ve mentioned. Others experience totally different issues that I’ve never run into. It’s just so wild that an operating system that has been around for 23 years (33 if you count NeXTSTEP as part of the lineage) has so many little issues. Yes, every piece of software has bugs, especially when working with the bogglingly large codebase of an operating system, but so many of what people encounter on the Mac are not small issues.\u003C/p>\n\u003Cp>All this to say, my one wish for WWDC 2023 is that we \u003Cem>don’t\u003C/em> see a new version of macOS, and if we do, it’s purely focused on fixing the outstanding issues (and, if we want to get really crazy, fixing the System Settings design). I doubt either of those will happen, but I can certainly dream.\u003C/p>",{"headings":527,"imagePaths":528,"frontmatter":529},[],[],{"title":518,"pubDate":530,"tags":531},"6/4/23",[131,94],"2023/thoughs-on-macos.md","2023/using-json-for-data-storage",{"id":533,"data":535,"body":539,"filePath":540,"digest":541,"rendered":542,"legacyId":550},{"title":536,"pubDate":537,"tags":538},"More Swift Learnings: Using JSON For Data Storage",["Date","2023-04-09T04:00:00.000Z"],[131,113,448],"Back at the end of February, I built [a simple Markdown editor](https://github.com/ghall89/Scrib) using SwiftUI. It was an interesting learning experience, not just in terms of learning a new programming language, but also in terms of _how_ to learn said programming language. So, I decided to take a step back and approach this educational journey from another angle.\n\nI decided to take a project I built before for the web and recreate it in a native Mac app, rather than try to do something I’d never done before (like, for example, a document-based application). AI is sort of a big deal right now, so I decided to revisit [a project I made last year](https://github.com/ghall89/openai-challenge) using the OpenAI API.\n\nSo, over the course of the last couple weeks, I’ve been working on the incredibly cleverly named [SwiftGPT](https://github.com/ghall89/swiftgpt), and it’s proven to be quite the interesting challenge translating what I know about building data-focused applications for the web into building them for the Mac.\n\nThe biggest challenge for me, by far, was dealing with storing and retrieving user data. My experience is in NoSQL databases like MongoDB, as well as local and session storage in the browser. But how, I wondered, should I go about persisting user data in a native Mac app? In this case, this primarily means the chat history between the user and the OpenAI assistant.\n\nI tinkered a bit with Core Data, but I had a hard time wrapping my head around it, and, from what little I did understand, it seemed like overkill anyway. My inspiration came in the form of [episode \\#87 of the CoRecursive podcast](https://corecursive.com/json-vs-xml-douglas-crockford/), which featured an interview with Douglas Crockford, the creator of a little format called JSON (a.k.a., JavaScript Object Notation).\n\nJavaScript being my primary language, I knew all about JSON. I also happened to know that Swift has some built-in support for it, so it seemed like the natural direction to go. However, the main problem was, while I somewhat knew how to read JSON data in Swift, I had no idea how to create it, much less save it to a file and read that file back reliably.\n\nI’m sure any Mac or iOS developer with an ounce of experience reading this is screaming, “Just use [JSONEncoder](https://developer.apple.com/documentation/foundation/jsonencoder/) and [FileManager](https://developer.apple.com/documentation/foundation/filemanager)!” Well, you’ll be happy to know–unless there’s some better method I overlooked–that’s exactly what I used. Though I’m sure my code is filled with flaws. 😅\n\nIf I were doing something more complex, beyond storing a list of messages and who “wrote” them, I would probably be better served by sucking it up and learning Core Data. But, as I’m working with a small set of very simple data, I’m not sure there are any downsides to my solution. I will say though, my curiosity has been piqued, and I wonder what other sorts of things I can build with this method.","src/content/blog/2023/using-json-for-data-storage.md","65f8b3445085777a",{"html":543,"metadata":544},"\u003Cp>Back at the end of February, I built \u003Ca href=\"https://github.com/ghall89/Scrib\">a simple Markdown editor\u003C/a> using SwiftUI. It was an interesting learning experience, not just in terms of learning a new programming language, but also in terms of \u003Cem>how\u003C/em> to learn said programming language. So, I decided to take a step back and approach this educational journey from another angle.\u003C/p>\n\u003Cp>I decided to take a project I built before for the web and recreate it in a native Mac app, rather than try to do something I’d never done before (like, for example, a document-based application). AI is sort of a big deal right now, so I decided to revisit \u003Ca href=\"https://github.com/ghall89/openai-challenge\">a project I made last year\u003C/a> using the OpenAI API.\u003C/p>\n\u003Cp>So, over the course of the last couple weeks, I’ve been working on the incredibly cleverly named \u003Ca href=\"https://github.com/ghall89/swiftgpt\">SwiftGPT\u003C/a>, and it’s proven to be quite the interesting challenge translating what I know about building data-focused applications for the web into building them for the Mac.\u003C/p>\n\u003Cp>The biggest challenge for me, by far, was dealing with storing and retrieving user data. My experience is in NoSQL databases like MongoDB, as well as local and session storage in the browser. But how, I wondered, should I go about persisting user data in a native Mac app? In this case, this primarily means the chat history between the user and the OpenAI assistant.\u003C/p>\n\u003Cp>I tinkered a bit with Core Data, but I had a hard time wrapping my head around it, and, from what little I did understand, it seemed like overkill anyway. My inspiration came in the form of \u003Ca href=\"https://corecursive.com/json-vs-xml-douglas-crockford/\">episode #87 of the CoRecursive podcast\u003C/a>, which featured an interview with Douglas Crockford, the creator of a little format called JSON (a.k.a., JavaScript Object Notation).\u003C/p>\n\u003Cp>JavaScript being my primary language, I knew all about JSON. I also happened to know that Swift has some built-in support for it, so it seemed like the natural direction to go. However, the main problem was, while I somewhat knew how to read JSON data in Swift, I had no idea how to create it, much less save it to a file and read that file back reliably.\u003C/p>\n\u003Cp>I’m sure any Mac or iOS developer with an ounce of experience reading this is screaming, “Just use \u003Ca href=\"https://developer.apple.com/documentation/foundation/jsonencoder/\">JSONEncoder\u003C/a> and \u003Ca href=\"https://developer.apple.com/documentation/foundation/filemanager\">FileManager\u003C/a>!” Well, you’ll be happy to know–unless there’s some better method I overlooked–that’s exactly what I used. Though I’m sure my code is filled with flaws. 😅\u003C/p>\n\u003Cp>If I were doing something more complex, beyond storing a list of messages and who “wrote” them, I would probably be better served by sucking it up and learning Core Data. But, as I’m working with a small set of very simple data, I’m not sure there are any downsides to my solution. I will say though, my curiosity has been piqued, and I wonder what other sorts of things I can build with this method.\u003C/p>",{"headings":545,"imagePaths":546,"frontmatter":547},[],[],{"title":536,"pubDate":548,"tags":549},"4/9/23",[131,113,448],"2023/using-json-for-data-storage.md","2023/using-tailwind-with-mui-base",{"id":551,"data":553,"body":558,"filePath":559,"digest":560,"rendered":561,"legacyId":584},{"title":554,"pubDate":555,"tags":556},"Using Tailwind With MUI Base",["Date","2023-03-11T05:00:00.000Z"],[17,557],"Tutorial","I've had some frustration lately working with [MUI](https://mui.com), a styled component library for React. I decided to try and experiment with combining [MUI Base](https://mui.com/base/getting-started/overview/), the barebones version of the MUI library, with [Tailwind](https://tailwindcss.com) to allow easier customization. Here's an overview of how I set up a test project using [Next.js](https://nextjs.org). This writeup assumes you have some experience with Next.js, using the terminal, and ideally some experience with MUI and Tailwind.\n\n## Step 1: Set Up Next.js\n\nNothing special is going on here. You can use `npx create-next-app@latest` or `yarn create next-app` depending on which package manager you prefer. I personally like Yarn, so that's what I'll be using. If you use NPM though the commands are similar so you'll be able to follow along.\n\nFollow the prompts to set up your Next.js project. These are the choices I went with:\n\n- Project name: mui-tailwind\n- Typescript: No\n- ESLint: Yes\n- Use 'src/' directory: Yes\n- Experimental 'app/' directory: No\n\nI also chose not to set up any import aliases for now. These can be easily added later if you so choose.\n\nIt will take a few moments for Next.js to download and for the project to set up, but when that's done, cd into '/mui-tailwind' (or whatever you named the project).\n\n## Step 2: Install MUI Base & Tailwind\n\nInstalling MUI Base is simple. Just run `yarn add @mui/base`, and you're good to go. There will be some config to do later, but once the package is done installing we're ready to install Tailwind with `yarn add -D tailwindcss postcss autoprefixer`.\n\nOnce both MUI Base and Tailwind are installed, we next need to run `yarn tailwindcss init -p`, which will create 2 files, one called 'tailwind.config.js', and another called 'postcss.config.js'. Now we're ready to do some setup.\n\n## Step 3: Configuration\n\nFirst thing's first, open up the project folder in your code editor of choice and at the root of the project you should see the 'tailwind.config.js' we created in step 2. Open that, and under `module.exports` you should see an empty array named 'content'. Add the following to the array: `'./src/**/*.{js,jsx,ts,tsx}'` Your config file should look like this:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/tailwind-config.png\" width=\"80%\" alt=\"module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}'], theme: { extend: {}, }, plugins: [],};\">\n\nNext, we need to import Tailwind into our 'globals.css' file, which is located in 'src/styles/'. We can delete everything in the file as we won't be needing any of it. Then, add the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/global-css.png\" width=\"80%\" alt=\"@tailwind base; @tailwind components; @tailwind utilities;\">\n\nAnd that's it! We're ready to start creating something!\n\n## Step 4: Creating Your First Component\n\nIdeally, we'd want to create smaller, reusable component files, but that's beyond the scope of this post, and is something you're most likely already familiar with if you have any experience with Next.js. Instead, we're going to work entirely in 'src/pages/index.js'.\n\nFirst, we should delete everything we don't need so that our 'index.js' file looks like this:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/index-js.png\" width=\"80%\" alt=\"export default function Home() { return() }\">\n\nWe're going to create a simple button, nothing too fancy. So first we need to import the MUI Unstyled Button component by adding `import { ButtonUnstyled as Button } from '@mui/base'` on the first line of our file.\n\n_Note: The official MUI docs say to import as `import ButtonUnstyled from '@mui/base/ButtonUnstyled'`, which also works, but I prefer to use destructing which allows you to import multiple components with a single import statement'_\n\nNow we can create our button. Inside the return statement, add the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button-code.png\" width=\"80%\" alt=\"\u003CButton>Click Me!\u003C/Button>\" />\n\nNext, go back to your terminal and run `yarn dev` to start up the dev server, and click the 'localhost' link that appears (most likely 'localhost:3000'). We'll be greeted by what looks like just a bit of text (it's a button, I promise), which isn't what we want, but that's because we haven't added any styles yet!\n\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button.png\" width=\"40%\" alt=\"A plain old 'button' that reads 'Click Me!'\" />\n\nAll we need to do is add the `className` prop with some nice Tailwind utility classes:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button-code.png\" width=\"80%\" alt=\"\u003CButton className='rounded-lg border-2 border-sky-500 bg-sky-600 py-2 px-10 font-medium text-slate-300 shadow hover:bg-sky-700 active:translate-y-0.5'>\n Click Me!\n\u003C/Button>\" />\n\nNow, when we go back to the browser, we should see the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button.png\" width=\"40%\" alt=\"A styled blue button that reads 'Click Me!'\" />\n\nNice! That looks a lot more like a button.\n\n## Step 5: Further Reading\n\nThis tutorial is just the basics of setting up a project using Next.js, MUI Base, and Tailwind. Of course, there's so much more to all these tools than I can possibly cover. For a more in-depth overview, I recommend you check out [this documentation](https://mui.com/base/guides/working-with-tailwind-css/) for using MUI Base with Tailwind, which I used as the basis for this guide, in combination with [this documentation](https://tailwindcss.com/docs/guides/nextjs) for using Tailwind with Next.js.\n\nOf course, the documentation I linked to at the top of this post is also suggested reading if you're not familiar with any of what I've written about here.","src/content/blog/2023/using-tailwind-with-mui-base.md","85446e6b16a9ad0a",{"html":562,"metadata":563},"\u003Cp>I’ve had some frustration lately working with \u003Ca href=\"https://mui.com\">MUI\u003C/a>, a styled component library for React. I decided to try and experiment with combining \u003Ca href=\"https://mui.com/base/getting-started/overview/\">MUI Base\u003C/a>, the barebones version of the MUI library, with \u003Ca href=\"https://tailwindcss.com\">Tailwind\u003C/a> to allow easier customization. Here’s an overview of how I set up a test project using \u003Ca href=\"https://nextjs.org\">Next.js\u003C/a>. This writeup assumes you have some experience with Next.js, using the terminal, and ideally some experience with MUI and Tailwind.\u003C/p>\n\u003Ch2 id=\"step-1-set-up-nextjs\">Step 1: Set Up Next.js\u003C/h2>\n\u003Cp>Nothing special is going on here. You can use \u003Ccode>npx create-next-app@latest\u003C/code> or \u003Ccode>yarn create next-app\u003C/code> depending on which package manager you prefer. I personally like Yarn, so that’s what I’ll be using. If you use NPM though the commands are similar so you’ll be able to follow along.\u003C/p>\n\u003Cp>Follow the prompts to set up your Next.js project. These are the choices I went with:\u003C/p>\n\u003Cul>\n\u003Cli>Project name: mui-tailwind\u003C/li>\n\u003Cli>Typescript: No\u003C/li>\n\u003Cli>ESLint: Yes\u003C/li>\n\u003Cli>Use ‘src/’ directory: Yes\u003C/li>\n\u003Cli>Experimental ‘app/’ directory: No\u003C/li>\n\u003C/ul>\n\u003Cp>I also chose not to set up any import aliases for now. These can be easily added later if you so choose.\u003C/p>\n\u003Cp>It will take a few moments for Next.js to download and for the project to set up, but when that’s done, cd into ‘/mui-tailwind’ (or whatever you named the project).\u003C/p>\n\u003Ch2 id=\"step-2-install-mui-base--tailwind\">Step 2: Install MUI Base & Tailwind\u003C/h2>\n\u003Cp>Installing MUI Base is simple. Just run \u003Ccode>yarn add @mui/base\u003C/code>, and you’re good to go. There will be some config to do later, but once the package is done installing we’re ready to install Tailwind with \u003Ccode>yarn add -D tailwindcss postcss autoprefixer\u003C/code>.\u003C/p>\n\u003Cp>Once both MUI Base and Tailwind are installed, we next need to run \u003Ccode>yarn tailwindcss init -p\u003C/code>, which will create 2 files, one called ‘tailwind.config.js’, and another called ‘postcss.config.js’. Now we’re ready to do some setup.\u003C/p>\n\u003Ch2 id=\"step-3-configuration\">Step 3: Configuration\u003C/h2>\n\u003Cp>First thing’s first, open up the project folder in your code editor of choice and at the root of the project you should see the ‘tailwind.config.js’ we created in step 2. Open that, and under \u003Ccode>module.exports\u003C/code> you should see an empty array named ‘content’. Add the following to the array: \u003Ccode>'./src/**/*.{js,jsx,ts,tsx}'\u003C/code> Your config file should look like this:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/tailwind-config.png\" width=\"80%\" alt=\"module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}'], theme: { extend: {}, }, plugins: [],};\">\n\u003Cp>Next, we need to import Tailwind into our ‘globals.css’ file, which is located in ‘src/styles/’. We can delete everything in the file as we won’t be needing any of it. Then, add the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/global-css.png\" width=\"80%\" alt=\"@tailwind base; @tailwind components; @tailwind utilities;\">\n\u003Cp>And that’s it! We’re ready to start creating something!\u003C/p>\n\u003Ch2 id=\"step-4-creating-your-first-component\">Step 4: Creating Your First Component\u003C/h2>\n\u003Cp>Ideally, we’d want to create smaller, reusable component files, but that’s beyond the scope of this post, and is something you’re most likely already familiar with if you have any experience with Next.js. Instead, we’re going to work entirely in ‘src/pages/index.js’.\u003C/p>\n\u003Cp>First, we should delete everything we don’t need so that our ‘index.js’ file looks like this:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/index-js.png\" width=\"80%\" alt=\"export default function Home() { return() }\">\n\u003Cp>We’re going to create a simple button, nothing too fancy. So first we need to import the MUI Unstyled Button component by adding \u003Ccode>import { ButtonUnstyled as Button } from '@mui/base'\u003C/code> on the first line of our file.\u003C/p>\n\u003Cp>\u003Cem>Note: The official MUI docs say to import as \u003Ccode>import ButtonUnstyled from '@mui/base/ButtonUnstyled'\u003C/code>, which also works, but I prefer to use destructing which allows you to import multiple components with a single import statement’\u003C/em>\u003C/p>\n\u003Cp>Now we can create our button. Inside the return statement, add the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button-code.png\" width=\"80%\" alt=\"\u003CButton>Click Me!\u003C/Button>\">\n\u003Cp>Next, go back to your terminal and run \u003Ccode>yarn dev\u003C/code> to start up the dev server, and click the ‘localhost’ link that appears (most likely ‘localhost:3000’). We’ll be greeted by what looks like just a bit of text (it’s a button, I promise), which isn’t what we want, but that’s because we haven’t added any styles yet!\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button.png\" width=\"40%\" alt=\"A plain old 'button' that reads 'Click Me!'\">\n\u003Cp>All we need to do is add the \u003Ccode>className\u003C/code> prop with some nice Tailwind utility classes:\u003C/p>\n\u003Cp>\u003Cimg src=\"/media/mui-plus-tailwind/styled-button-code.png\" width=\"80%\" alt=\"\u003CButton className='rounded-lg border-2 border-sky-500 bg-sky-600 py-2 px-10 font-medium text-slate-300 shadow hover:bg-sky-700 active:translate-y-0.5'>\nClick Me!\n\u003C/Button>\">\u003C/p>\n\u003Cp>Now, when we go back to the browser, we should see the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button.png\" width=\"40%\" alt=\"A styled blue button that reads 'Click Me!'\">\n\u003Cp>Nice! That looks a lot more like a button.\u003C/p>\n\u003Ch2 id=\"step-5-further-reading\">Step 5: Further Reading\u003C/h2>\n\u003Cp>This tutorial is just the basics of setting up a project using Next.js, MUI Base, and Tailwind. Of course, there’s so much more to all these tools than I can possibly cover. For a more in-depth overview, I recommend you check out \u003Ca href=\"https://mui.com/base/guides/working-with-tailwind-css/\">this documentation\u003C/a> for using MUI Base with Tailwind, which I used as the basis for this guide, in combination with \u003Ca href=\"https://tailwindcss.com/docs/guides/nextjs\">this documentation\u003C/a> for using Tailwind with Next.js.\u003C/p>\n\u003Cp>Of course, the documentation I linked to at the top of this post is also suggested reading if you’re not familiar with any of what I’ve written about here.\u003C/p>",{"headings":564,"imagePaths":580,"frontmatter":581},[565,568,571,574,577],{"depth":367,"slug":566,"text":567},"step-1-set-up-nextjs","Step 1: Set Up Next.js",{"depth":367,"slug":569,"text":570},"step-2-install-mui-base--tailwind","Step 2: Install MUI Base & Tailwind",{"depth":367,"slug":572,"text":573},"step-3-configuration","Step 3: Configuration",{"depth":367,"slug":575,"text":576},"step-4-creating-your-first-component","Step 4: Creating Your First Component",{"depth":367,"slug":578,"text":579},"step-5-further-reading","Step 5: Further Reading",[],{"title":554,"pubDate":582,"tags":583},"3/11/23",[17,557],"2023/using-tailwind-with-mui-base.md","2024/ai-and-creativity",{"id":585,"data":587,"body":592,"filePath":593,"digest":594,"rendered":595,"legacyId":604},{"title":588,"pubDate":589,"tags":590},"AI & Creativity",["Date","2024-11-11T05:00:00.000Z"],[94,591],"Creativity","Recently, I’ve been pondering generative AI and its effects. Not on jobs, the economy, or even the damage it’s done to our ability to trust information we see online (whether it’s something generated by a malicious actor looking to mislead, or a simple “hallucination” causing an innocent mistake). No, I’ve been pondering its effects on human creativity, and our capacity to learn and grow as creative creatures. This is something I’ve had in the back of my mind for a quite a while, and I think I’ve finally reached a point where I can put my feelings into words.\n\nMy experience with generative AI started way back at the end of 2022 with [an AI-assisted dating profile](https://ghall.blog/posts/2022/creating-a-dating-profile-with-ai/). Just over a month later, I posted a [follow up](https://ghall.blog/posts/2023/an-update-on-my-ai-dating-profile/), in which I said the following:\n\n> …it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\n\nI’ve used AI on and off for different reasons since then. I’ve used it to help solve programming issues at work and on side projects, to generate images in various art styles that I don’t have the patience or talent to draw in, and even tinkered with it for writing letters. But I kept experiencing the same feelings I had from “creating” my AI dating profile; these creations were far more a product of the machine than my own humanity.\n\nIt can be–and has been–argued that generative AI democratizes creativity. A person who can barely draw a stick figure can create intricate works of art just by writing some words and feeding them into an algorithm. Or someone with no sense of rhythm or tune can make music that sounds clean and professional. As someone who lacks skill in both those areas (and many more), that sounds incredibly liberating.\n\nBut, the more I think about it, even when ignoring the plagiarism inherent in using generative AI, the more problematic it feels. Yes, generative AI is a tool like any other, and requires a human to operate it[^1], but at what point does a tool eclipse the creative input of the human behind it?\n\nArt, writing, any sort of creative output, is the result of our emotions, our thoughts, our experiences. Perhaps even more important is the journey we must take to create. We can’t be good at everything, and part of the joy of creation is finding the things that we can be good at, and honing that skill. The best painters in history didn’t wake up one day and start making masterpieces, the best writers didn’t start writing classics from the moment they put pen to paper, and the best photographers weren’t masters of framing when they picked up a camera for the first time.\n\nI would argue that Generative AI does not democratize art or self-expression. It enables us to create a hollow facsimile of those things, something that doesn’t truly express to the world who we are. If an AI wrote my blog posts, they might convey some broad thought or opinion I may share, but you wouldn’t be any closer to understanding how I truly feel about whatever it is I’m writing about.\n\nWhy does any of this even matter? Perhaps, in the grand scheme of things, it doesn’t. But, I would argue that, whether it’s commercial art or just art for the sake of art, a personal blog or a best-selling novel, a side project or just a small piece of a larger piece of software, it’s the human element, the emotions and experiences of the creator, that makes any art worth creating or consuming.\n\nGenerative AI is already writing articles for publications like Sports Illustrated, creating motion graphics for shows like Marvel’s Secret Invasion, and being pushed into countless tools for creatives, developers, and designers. Even Apple, which has prided itself for decades on making products that appeal to artists, has got into the generative AI game with their upcoming Image Playground app.\n\nNone of this is to say AI has no place in our lives–I for one would love an AI to do my taxes, create meal plans, and handle whatever other drudgery we need to deal with. Like any tool, it should supplement, not replace, the human touch.\n\nThe question I think we need to ponder is this; Where do we draw the line?\n\nSurely, purely AI-generated works are a bridge too far. But is there room for AI to assist in the creative process, and to what extent? How do we strike a balance and use this tool in a way that maximizes its positive impact on our lives while minimizing the negative impact on society? I hope that this is a question we can answer as a society sooner than later…\n\n[^1]: For now, anyway… _Cue dramatic music_. 🎵","src/content/blog/2024/ai-and-creativity.md","58d356fe670a1a7d",{"html":596,"metadata":597},"\u003Cp>Recently, I’ve been pondering generative AI and its effects. Not on jobs, the economy, or even the damage it’s done to our ability to trust information we see online (whether it’s something generated by a malicious actor looking to mislead, or a simple “hallucination” causing an innocent mistake). No, I’ve been pondering its effects on human creativity, and our capacity to learn and grow as creative creatures. This is something I’ve had in the back of my mind for a quite a while, and I think I’ve finally reached a point where I can put my feelings into words.\u003C/p>\n\u003Cp>My experience with generative AI started way back at the end of 2022 with \u003Ca href=\"https://ghall.blog/posts/2022/creating-a-dating-profile-with-ai/\">an AI-assisted dating profile\u003C/a>. Just over a month later, I posted a \u003Ca href=\"https://ghall.blog/posts/2023/an-update-on-my-ai-dating-profile/\">follow up\u003C/a>, in which I said the following:\u003C/p>\n\u003Cblockquote>\n\u003Cp>…it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\u003C/p>\n\u003C/blockquote>\n\u003Cp>I’ve used AI on and off for different reasons since then. I’ve used it to help solve programming issues at work and on side projects, to generate images in various art styles that I don’t have the patience or talent to draw in, and even tinkered with it for writing letters. But I kept experiencing the same feelings I had from “creating” my AI dating profile; these creations were far more a product of the machine than my own humanity.\u003C/p>\n\u003Cp>It can be–and has been–argued that generative AI democratizes creativity. A person who can barely draw a stick figure can create intricate works of art just by writing some words and feeding them into an algorithm. Or someone with no sense of rhythm or tune can make music that sounds clean and professional. As someone who lacks skill in both those areas (and many more), that sounds incredibly liberating.\u003C/p>\n\u003Cp>But, the more I think about it, even when ignoring the plagiarism inherent in using generative AI, the more problematic it feels. Yes, generative AI is a tool like any other, and requires a human to operate it\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>, but at what point does a tool eclipse the creative input of the human behind it?\u003C/p>\n\u003Cp>Art, writing, any sort of creative output, is the result of our emotions, our thoughts, our experiences. Perhaps even more important is the journey we must take to create. We can’t be good at everything, and part of the joy of creation is finding the things that we can be good at, and honing that skill. The best painters in history didn’t wake up one day and start making masterpieces, the best writers didn’t start writing classics from the moment they put pen to paper, and the best photographers weren’t masters of framing when they picked up a camera for the first time.\u003C/p>\n\u003Cp>I would argue that Generative AI does not democratize art or self-expression. It enables us to create a hollow facsimile of those things, something that doesn’t truly express to the world who we are. If an AI wrote my blog posts, they might convey some broad thought or opinion I may share, but you wouldn’t be any closer to understanding how I truly feel about whatever it is I’m writing about.\u003C/p>\n\u003Cp>Why does any of this even matter? Perhaps, in the grand scheme of things, it doesn’t. But, I would argue that, whether it’s commercial art or just art for the sake of art, a personal blog or a best-selling novel, a side project or just a small piece of a larger piece of software, it’s the human element, the emotions and experiences of the creator, that makes any art worth creating or consuming.\u003C/p>\n\u003Cp>Generative AI is already writing articles for publications like Sports Illustrated, creating motion graphics for shows like Marvel’s Secret Invasion, and being pushed into countless tools for creatives, developers, and designers. Even Apple, which has prided itself for decades on making products that appeal to artists, has got into the generative AI game with their upcoming Image Playground app.\u003C/p>\n\u003Cp>None of this is to say AI has no place in our lives–I for one would love an AI to do my taxes, create meal plans, and handle whatever other drudgery we need to deal with. Like any tool, it should supplement, not replace, the human touch.\u003C/p>\n\u003Cp>The question I think we need to ponder is this; Where do we draw the line?\u003C/p>\n\u003Cp>Surely, purely AI-generated works are a bridge too far. But is there room for AI to assist in the creative process, and to what extent? How do we strike a balance and use this tool in a way that maximizes its positive impact on our lives while minimizing the negative impact on society? I hope that this is a question we can answer as a society sooner than later…\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>For now, anyway… \u003Cem>Cue dramatic music\u003C/em>. 🎵 \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":598,"imagePaths":600,"frontmatter":601},[599],{"depth":367,"slug":368,"text":369},[],{"title":588,"pubDate":602,"tags":603},"11/11/24",[94,591],"2024/ai-and-creativity.md","2024/am-i-switching-to-zed",{"id":605,"data":607,"body":611,"filePath":612,"digest":613,"rendered":614,"legacyId":623},{"title":608,"pubDate":609,"tags":610},"Am I Switching From Nova To Zed?",["Date","2024-04-14T13:20:00.000Z"],[132,448,17],"For the past several days I've been using the [Zed](https://zed.dev/) editor at work, and on my personal web projects. It started out as just curiosity, but I wasn't immediately sold. I even went so far as to [toot](https://mastodon.social/@ghalldev/112243389407945338) that I'd be going back to Nova as my daily driver.\n\nBut then something weird happened. The next day, I signed into my day job, opened up Nova, and then worked for maybe an hour before Zed started calling to me. After using Zed for 8 hours the previous day, Nova suddenly felt overwhelming and clunky in the same way VSCode felt when I first started using Nova.\n\nNova is, on paper, everything I want from a Mac app; it's slick, it's fast, and it feels right at home on macOS. Zed on the other hand, while fast (perhaps more so than Nova), is not all that pretty, and does not feel like a native Mac app.\n\nBut it has one huge advantage over Nova; it's a code editor first and foremost. And once you figure out the [various JSON incantations](https://zed.dev/docs/configuring-zed) to disable the extraneous AI and collaboration features, it's a pretty barebones app that puts your code front-and-center. Even something like git integration, which is a big deal in both VSCode and Nova, is pretty limited, necessitating the use of the command line tool, or an app like Fork, to perform any action besides seeing which lines and files have been changed.\n\nThis isn't to say I don't have any concerns about Zed, and the team behind it. Their business model doesn't seem all that clear to me, and their AI focus as outlined on their [roadmap](https://zed.dev/roadmap) doesn't exactly indicate to me that this is a product I want to use long term – I'd rather they focus those resources on just trying to build a good editor.\n\nOn an emotional level I'd rather give my business to a company like Panic, who have a clear business model with Nova, and who are very good at targeting the niche I happen to fall into - namely, the discerning, if not extremely nit-picky, Mac user. But Zed makes me _feel_ more productive (the science is still out on if it _actually_ makes me more productive), and the extension ecosystem, while still much smaller than the one around Nova, seems a lot healthier[^1].\n\nOf course, this whole post could be totally premature, and, once the honeymoon period is over, I'll find myself crawling back from the cold utilitarianism of Zed to the warm friendliness of Nova. After all, I am known, among those who know my computing habits, to be extremely finicky about the software I choose to use...\n\n[^1]: Example: Nova's TypeScript extension hasn't been updated in about a year, and the developer archived the project on GitHub in late December. 🙁","src/content/blog/2024/am-i-switching-to-zed.md","187937ad7baf7428",{"html":615,"metadata":616},"\u003Cp>For the past several days I’ve been using the \u003Ca href=\"https://zed.dev/\">Zed\u003C/a> editor at work, and on my personal web projects. It started out as just curiosity, but I wasn’t immediately sold. I even went so far as to \u003Ca href=\"https://mastodon.social/@ghalldev/112243389407945338\">toot\u003C/a> that I’d be going back to Nova as my daily driver.\u003C/p>\n\u003Cp>But then something weird happened. The next day, I signed into my day job, opened up Nova, and then worked for maybe an hour before Zed started calling to me. After using Zed for 8 hours the previous day, Nova suddenly felt overwhelming and clunky in the same way VSCode felt when I first started using Nova.\u003C/p>\n\u003Cp>Nova is, on paper, everything I want from a Mac app; it’s slick, it’s fast, and it feels right at home on macOS. Zed on the other hand, while fast (perhaps more so than Nova), is not all that pretty, and does not feel like a native Mac app.\u003C/p>\n\u003Cp>But it has one huge advantage over Nova; it’s a code editor first and foremost. And once you figure out the \u003Ca href=\"https://zed.dev/docs/configuring-zed\">various JSON incantations\u003C/a> to disable the extraneous AI and collaboration features, it’s a pretty barebones app that puts your code front-and-center. Even something like git integration, which is a big deal in both VSCode and Nova, is pretty limited, necessitating the use of the command line tool, or an app like Fork, to perform any action besides seeing which lines and files have been changed.\u003C/p>\n\u003Cp>This isn’t to say I don’t have any concerns about Zed, and the team behind it. Their business model doesn’t seem all that clear to me, and their AI focus as outlined on their \u003Ca href=\"https://zed.dev/roadmap\">roadmap\u003C/a> doesn’t exactly indicate to me that this is a product I want to use long term – I’d rather they focus those resources on just trying to build a good editor.\u003C/p>\n\u003Cp>On an emotional level I’d rather give my business to a company like Panic, who have a clear business model with Nova, and who are very good at targeting the niche I happen to fall into - namely, the discerning, if not extremely nit-picky, Mac user. But Zed makes me \u003Cem>feel\u003C/em> more productive (the science is still out on if it \u003Cem>actually\u003C/em> makes me more productive), and the extension ecosystem, while still much smaller than the one around Nova, seems a lot healthier\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>.\u003C/p>\n\u003Cp>Of course, this whole post could be totally premature, and, once the honeymoon period is over, I’ll find myself crawling back from the cold utilitarianism of Zed to the warm friendliness of Nova. After all, I am known, among those who know my computing habits, to be extremely finicky about the software I choose to use…\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Example: Nova’s TypeScript extension hasn’t been updated in about a year, and the developer archived the project on GitHub in late December. 🙁 \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":617,"imagePaths":619,"frontmatter":620},[618],{"depth":367,"slug":368,"text":369},[],{"title":608,"pubDate":621,"tags":622},"4/14/24, 9:20 AM",[132,448,17],"2024/am-i-switching-to-zed.md","2024/default-apps-2024",{"id":624,"data":626,"body":630,"filePath":631,"digest":632,"rendered":633,"legacyId":641},{"title":627,"pubDate":628,"tags":629},"Default Apps 2024",["Date","2024-12-29T05:00:00.000Z"],[132,94],"An updated version of [this post](/posts/2023/default-apps-2023) from 2023, inspired by [this post](https://chriscoyier.net/2023/11/25/default-apps-2023/) from Chris Coyier (which was in turn inpsired by [this post](https://mattcool.tech/posts/default-apps-2023)).\n\nI changed up some of the categories to avoid any entries with \"none\" or \"N/A\".\n\n---\n\n✉️ Mail Client: [Mail.app](https://support.apple.com/guide/mail/welcome/mac)\n\n📮 Mail Server: [Proton](https://proton.me/)\n\n📓 Notes: [Bear](https://bear.app/), [Tot](https://tot.rocks/)\n\n✅ To Do: [Reminders](https://support.apple.com/guide/reminders/welcome/mac)\n\n📷 Photo Shooting: [iPhone 14](https://www.apple.com/shop/buy-iphone/iphone-14)\n\n🎨 Photo Editing: [Affinity Photo](https://affinity.serif.com/en-us/photo/)\n\n📆 Calendar: [Fantastical](https://flexibits.com/fantastical), synced with [Google Calendar](https://calendar.google.com)\n\n☁️ Cloud Storage: [iCloud](https://www.icloud.com/)\n\n📰 RSS: [Reeder](https://www.reederapp.com/)\n\n📇 Contacts: [Contacts.app](https://support.apple.com/guide/contacts/welcome/mac)\n\n🌐 Browser: [Arc](https://www.apple.com/safari/)\n\n💬 Chat: [Messages](https://support.apple.com/guide/messages/welcome/mac), [Slack](https://slack.com/), [WhatsApp](https://www.whatsapp.com/)\n\n🔖 Bookmarks: [Anybox](https://anybox.app/)\n\n📑 Read It Later: [Reeder](https://www.reederapp.com/)\n\n📝 Writing & Text Editing: [BBEdit](https://www.barebones.com/products/bbedit/index.html)\n\n📈 Spreadsheets: [Numbers](https://www.apple.com/numbers/)\n\n🪟 Window Management: [Rectangle Pro](https://rectangleapp.com/pro)\n\n🛒 Shopping Lists: [Tot](https://tot.rocks/)\n\n🏋️‍♀️Workout Tracking: [Fitness](https://apps.apple.com/us/app/fitness/id1208224953)\n\n💰 Budgeting: [Expenses](https://getexpenses.app/)\n\n🗞 News: [RSS](https://en.wikipedia.org/wiki/RSS)\n\n🎵 Music: [Apple Music](https://www.apple.com/apple-music/)\n\n🎙 Podcasts: [Overcast](https://overcast.fm/)\n\n🔑 Password Management: [Passwords](https://support.apple.com/en-us/120758)\n\n👨‍💻 Code Editor: [Zed](https://zed.dev/), [Xcode](https://developer.apple.com/xcode/)\n\n🐘 Mastodon Client: [Ivory](https://tapbots.com/ivory/)","src/content/blog/2024/default-apps-2024.md","e29513d601ee8ea8",{"html":634,"metadata":635},"\u003Cp>An updated version of \u003Ca href=\"/posts/2023/default-apps-2023\">this post\u003C/a> from 2023, inspired by \u003Ca href=\"https://chriscoyier.net/2023/11/25/default-apps-2023/\">this post\u003C/a> from Chris Coyier (which was in turn inpsired by \u003Ca href=\"https://mattcool.tech/posts/default-apps-2023\">this post\u003C/a>).\u003C/p>\n\u003Cp>I changed up some of the categories to avoid any entries with “none” or “N/A”.\u003C/p>\n\u003Chr>\n\u003Cp>✉️ Mail Client: \u003Ca href=\"https://support.apple.com/guide/mail/welcome/mac\">Mail.app\u003C/a>\u003C/p>\n\u003Cp>📮 Mail Server: \u003Ca href=\"https://proton.me/\">Proton\u003C/a>\u003C/p>\n\u003Cp>📓 Notes: \u003Ca href=\"https://bear.app/\">Bear\u003C/a>, \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>✅ To Do: \u003Ca href=\"https://support.apple.com/guide/reminders/welcome/mac\">Reminders\u003C/a>\u003C/p>\n\u003Cp>📷 Photo Shooting: \u003Ca href=\"https://www.apple.com/shop/buy-iphone/iphone-14\">iPhone 14\u003C/a>\u003C/p>\n\u003Cp>🎨 Photo Editing: \u003Ca href=\"https://affinity.serif.com/en-us/photo/\">Affinity Photo\u003C/a>\u003C/p>\n\u003Cp>📆 Calendar: \u003Ca href=\"https://flexibits.com/fantastical\">Fantastical\u003C/a>, synced with \u003Ca href=\"https://calendar.google.com\">Google Calendar\u003C/a>\u003C/p>\n\u003Cp>☁️ Cloud Storage: \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>\u003C/p>\n\u003Cp>📰 RSS: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>\u003C/p>\n\u003Cp>📇 Contacts: \u003Ca href=\"https://support.apple.com/guide/contacts/welcome/mac\">Contacts.app\u003C/a>\u003C/p>\n\u003Cp>🌐 Browser: \u003Ca href=\"https://www.apple.com/safari/\">Arc\u003C/a>\u003C/p>\n\u003Cp>💬 Chat: \u003Ca href=\"https://support.apple.com/guide/messages/welcome/mac\">Messages\u003C/a>, \u003Ca href=\"https://slack.com/\">Slack\u003C/a>, \u003Ca href=\"https://www.whatsapp.com/\">WhatsApp\u003C/a>\u003C/p>\n\u003Cp>🔖 Bookmarks: \u003Ca href=\"https://anybox.app/\">Anybox\u003C/a>\u003C/p>\n\u003Cp>📑 Read It Later: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>\u003C/p>\n\u003Cp>📝 Writing & Text Editing: \u003Ca href=\"https://www.barebones.com/products/bbedit/index.html\">BBEdit\u003C/a>\u003C/p>\n\u003Cp>📈 Spreadsheets: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🪟 Window Management: \u003Ca href=\"https://rectangleapp.com/pro\">Rectangle Pro\u003C/a>\u003C/p>\n\u003Cp>🛒 Shopping Lists: \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>🏋️‍♀️Workout Tracking: \u003Ca href=\"https://apps.apple.com/us/app/fitness/id1208224953\">Fitness\u003C/a>\u003C/p>\n\u003Cp>💰 Budgeting: \u003Ca href=\"https://getexpenses.app/\">Expenses\u003C/a>\u003C/p>\n\u003Cp>🗞 News: \u003Ca href=\"https://en.wikipedia.org/wiki/RSS\">RSS\u003C/a>\u003C/p>\n\u003Cp>🎵 Music: \u003Ca href=\"https://www.apple.com/apple-music/\">Apple Music\u003C/a>\u003C/p>\n\u003Cp>🎙 Podcasts: \u003Ca href=\"https://overcast.fm/\">Overcast\u003C/a>\u003C/p>\n\u003Cp>🔑 Password Management: \u003Ca href=\"https://support.apple.com/en-us/120758\">Passwords\u003C/a>\u003C/p>\n\u003Cp>👨‍💻 Code Editor: \u003Ca href=\"https://zed.dev/\">Zed\u003C/a>, \u003Ca href=\"https://developer.apple.com/xcode/\">Xcode\u003C/a>\u003C/p>\n\u003Cp>🐘 Mastodon Client: \u003Ca href=\"https://tapbots.com/ivory/\">Ivory\u003C/a>\u003C/p>",{"headings":636,"imagePaths":637,"frontmatter":638},[],[],{"title":627,"pubDate":639,"tags":640},"12/29/24",[132,94],"2024/default-apps-2024.md","2024/doctor-type-love",{"id":642,"data":644,"body":648,"filePath":649,"digest":650,"rendered":651,"legacyId":660},{"title":645,"pubDate":646,"tags":647},"How I Learned to Stop Worrying and Love TypeScript",["Date","2024-02-21T05:00:00.000Z"],[113,448],"One of the first steps I took on my post-boot camp webdev journey was to learn TypeScript. It wasn't something that was covered–though I wish it had been, I'll get into why in a second–but it was something we were encouraged to study on our own. I immediately got frustrated, and determined that there was no point. Why would I need to go through the trouble of assigning types to my variables when it was all just getting compiled into vanilla JavaScript anyway?\n\nTwo major things happened since then that changed my tune; I learned Swift, and I started using Bun for personal projects.\n\nFirst, I'll tackle Swift.\n\nLearning Swift was both pretty straightforward coming from JavaScript. The syntax, while pretty different, has some concepts that were familiar to me. By the same token though, Swift is a statically-typed[^1] language and I found that difficult to wrap my head around at first–I had, after all, given up on TypeScript in frustration.\n\nAs I got more comfortable with Swift, I starte to miss the benefits of static typing when working in JavaScript. The ability to just tell my code \"hey, this variable here is an integer\" and have my code crash, or even just fail to even compile, with a super specific error when I inevitably do something stupid and try to treat that variable as a string is infinitely less frustrating than the alternative.\n\nSecondly, there's Bun.\n\nBun is amazing, and I could write an entire post about how much I love working with bun. Heck, maybe I will, but that's something for another day...\n\nThe main thing about Bun that's relevant to my TypeScript journey is the fact that it can natively interpret TypeScript without having to compile to JavaScript. That means that right out of the box, with no dependencies, Bun can just run your TypeScript code just as easily as it can run JavaScript.[^2]\n\nWhile any code getting shipped to the browser will still need to be compiled to vanilla JavaScript, you could, as I understand it, theoretically write your entire back-end in TypeScript and just skip the build step. 🤯\n\nI started off being annoyed with using types in my code because, to be quite frank, they are annoying. They'll make your code throw errors whenever you try to multiply a string, or something silly like that. But that's part of the beauty I've come to appreciate. They're there to help you write better code, and to point you in the right direction when something inevitably goes wrong.\n\n[^1]: [Here](https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages) is a StackOverflow thread on the difference between dynamic and static typing put far better than I ever could explain it\n[^2]: As an example, I rewrote [my CLI clone of Wordle](https://github.com/ghall89/wordle-cli) in TypeScript","src/content/blog/2024/doctor-type-love.md","eab4c600e07f3ed1",{"html":652,"metadata":653},"\u003Cp>One of the first steps I took on my post-boot camp webdev journey was to learn TypeScript. It wasn’t something that was covered–though I wish it had been, I’ll get into why in a second–but it was something we were encouraged to study on our own. I immediately got frustrated, and determined that there was no point. Why would I need to go through the trouble of assigning types to my variables when it was all just getting compiled into vanilla JavaScript anyway?\u003C/p>\n\u003Cp>Two major things happened since then that changed my tune; I learned Swift, and I started using Bun for personal projects.\u003C/p>\n\u003Cp>First, I’ll tackle Swift.\u003C/p>\n\u003Cp>Learning Swift was both pretty straightforward coming from JavaScript. The syntax, while pretty different, has some concepts that were familiar to me. By the same token though, Swift is a statically-typed\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup> language and I found that difficult to wrap my head around at first–I had, after all, given up on TypeScript in frustration.\u003C/p>\n\u003Cp>As I got more comfortable with Swift, I starte to miss the benefits of static typing when working in JavaScript. The ability to just tell my code “hey, this variable here is an integer” and have my code crash, or even just fail to even compile, with a super specific error when I inevitably do something stupid and try to treat that variable as a string is infinitely less frustrating than the alternative.\u003C/p>\n\u003Cp>Secondly, there’s Bun.\u003C/p>\n\u003Cp>Bun is amazing, and I could write an entire post about how much I love working with bun. Heck, maybe I will, but that’s something for another day…\u003C/p>\n\u003Cp>The main thing about Bun that’s relevant to my TypeScript journey is the fact that it can natively interpret TypeScript without having to compile to JavaScript. That means that right out of the box, with no dependencies, Bun can just run your TypeScript code just as easily as it can run JavaScript.\u003Csup>\u003Ca href=\"#user-content-fn-2\" id=\"user-content-fnref-2\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">2\u003C/a>\u003C/sup>\u003C/p>\n\u003Cp>While any code getting shipped to the browser will still need to be compiled to vanilla JavaScript, you could, as I understand it, theoretically write your entire back-end in TypeScript and just skip the build step. 🤯\u003C/p>\n\u003Cp>I started off being annoyed with using types in my code because, to be quite frank, they are annoying. They’ll make your code throw errors whenever you try to multiply a string, or something silly like that. But that’s part of the beauty I’ve come to appreciate. They’re there to help you write better code, and to point you in the right direction when something inevitably goes wrong.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>\u003Ca href=\"https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages\">Here\u003C/a> is a StackOverflow thread on the difference between dynamic and static typing put far better than I ever could explain it \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003Cli id=\"user-content-fn-2\">\n\u003Cp>As an example, I rewrote \u003Ca href=\"https://github.com/ghall89/wordle-cli\">my CLI clone of Wordle\u003C/a> in TypeScript \u003Ca href=\"#user-content-fnref-2\" data-footnote-backref=\"\" aria-label=\"Back to reference 2\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":654,"imagePaths":656,"frontmatter":657},[655],{"depth":367,"slug":368,"text":369},[],{"title":645,"pubDate":658,"tags":659},"2/21/24",[113,448],"2024/doctor-type-love.md","2024/finishing-stuff",{"id":661,"data":663,"body":667,"filePath":668,"digest":669,"rendered":670,"legacyId":678},{"title":664,"pubDate":665,"tags":666},"Finishing Stuff",["Date","2024-07-08T04:00:00.000Z"],[18],"It's been a while, longer than usual, since I've posted something here.\n\nI often have a hard time finishing stuff if I don't have some kind of external pressure (like, say, my job depends on it), and it seems like it's been worse over the last several months.\n\nIf you were to take a look into my WIP folder for this blog, you'll see about a dozen or so posts in various states of unfinished. The next big update for my app is in limbo. My gaming backlog is littered with games I started and never finished. My sink always has a couple dishes I couldn't bring myself to just wash along with the rest of them.\n\nIt feels bad to have all these unfinished things hanging over my head. There's the guilt of course, but then there's the frustration and lack of fulfillment that comes with leaving so many things unfinished.\n\nI have so many reasons for leaving things unfinished.\n\nWhen it comes to writing or programming, it's lack of confidence in my work. With writing it's because I decided I have a bad take, or that my writing is just poor quality. With programming it's because I feel like I don't know what I'm doing (especially when working with Swift...).\n\nFor games, it's the desire to move on to the new shiny thing even though I'm still having fun with the game I'm playing.\n\nWith chores, my brain just gets bored and I feel the need to do something more mentally stimulating.\n\nThe cycle repeats, and eventually I'm overwhelmed. I have too many projects to finish. Too many blog posts to write. Too many games to play. Trying to go back and finish these things becomes less about the joy of creating or enjoying a hobby, and more about checking things off a list. So I lose the passion to even finish them.\n\nI've never been diagnosed with Attention Deficit Disorder, but sometimes I wonder if that's something I should pursue (yet another unfinished task I suppose). I tend to blam it on my anxiety since I seem to have more of a challenge during periods of high anxiety (like I've had for the last few months), but maybe this is something I should look into.\n\nIn the meantime though, I did finish this blog post (finally), _and_ posted it, so I'm going to have a mini celebratory cup of tea.","src/content/blog/2024/finishing-stuff.md","88795150a7cb9ac6",{"html":671,"metadata":672},"\u003Cp>It’s been a while, longer than usual, since I’ve posted something here.\u003C/p>\n\u003Cp>I often have a hard time finishing stuff if I don’t have some kind of external pressure (like, say, my job depends on it), and it seems like it’s been worse over the last several months.\u003C/p>\n\u003Cp>If you were to take a look into my WIP folder for this blog, you’ll see about a dozen or so posts in various states of unfinished. The next big update for my app is in limbo. My gaming backlog is littered with games I started and never finished. My sink always has a couple dishes I couldn’t bring myself to just wash along with the rest of them.\u003C/p>\n\u003Cp>It feels bad to have all these unfinished things hanging over my head. There’s the guilt of course, but then there’s the frustration and lack of fulfillment that comes with leaving so many things unfinished.\u003C/p>\n\u003Cp>I have so many reasons for leaving things unfinished.\u003C/p>\n\u003Cp>When it comes to writing or programming, it’s lack of confidence in my work. With writing it’s because I decided I have a bad take, or that my writing is just poor quality. With programming it’s because I feel like I don’t know what I’m doing (especially when working with Swift…).\u003C/p>\n\u003Cp>For games, it’s the desire to move on to the new shiny thing even though I’m still having fun with the game I’m playing.\u003C/p>\n\u003Cp>With chores, my brain just gets bored and I feel the need to do something more mentally stimulating.\u003C/p>\n\u003Cp>The cycle repeats, and eventually I’m overwhelmed. I have too many projects to finish. Too many blog posts to write. Too many games to play. Trying to go back and finish these things becomes less about the joy of creating or enjoying a hobby, and more about checking things off a list. So I lose the passion to even finish them.\u003C/p>\n\u003Cp>I’ve never been diagnosed with Attention Deficit Disorder, but sometimes I wonder if that’s something I should pursue (yet another unfinished task I suppose). I tend to blam it on my anxiety since I seem to have more of a challenge during periods of high anxiety (like I’ve had for the last few months), but maybe this is something I should look into.\u003C/p>\n\u003Cp>In the meantime though, I did finish this blog post (finally), \u003Cem>and\u003C/em> posted it, so I’m going to have a mini celebratory cup of tea.\u003C/p>",{"headings":673,"imagePaths":674,"frontmatter":675},[],[],{"title":664,"pubDate":676,"tags":677},"7/8/24",[18],"2024/finishing-stuff.md","2024/my-backup-solution",{"id":679,"data":681,"body":686,"filePath":687,"digest":688,"rendered":689,"legacyId":697},{"title":682,"pubDate":683,"tags":684},"My Backup Solution",["Date","2024-01-27T05:00:00.000Z"],[94,685],"Digital Life","Backing up your data is probably the most important thing you can do with it. This is something I learned the hard way, a little over 10 years ago now, when I lost almost everything on a failed hard drive. Photos, school projects, personal projects, a bunch of terrible stories I wrote (to be fair, that last one wasn't a huge loss). It was then I decided to get serious about backing up, and scrounged up what little money I had at the time to buy a 500GB external drive.\n\nSince then, though my backup solution has evolved, I haven't lost a single bit of data. Outside of my own stupidity of course, but that's another story...\n\nMy current backup solution is 2-fold:\n\nFirst, my entire MacBook is backed up over my local network to an external 4TB drive connected to Mac Mini server using [Carbon Copy Cloner](https://bombich.com/).\n\nSecond, the Mac Mini server is then backed up to the cloud via [Backblaze](https://www.backblaze.com/).\n\nTo complicate things a tad, I also have a 1TB external SSD connected to the Mac Mini which I use as extra storage for files I don't really need on my MacBook, but still want to keep. This SSD is also backed up to the 4TB drive (via another install of Carbon Copy Cloner), and is thus included in the Backblaze backup.\n\nI've opted to use Carbon Copy Cloner instead of Time Machine because it offers a lot more flexibility, both in scheduling and in how my backups are organized.\n\nFor example, the external SSD on the Mac Mini doesn't get written to a whole lot, so I have it scheduled to backup once a day. It's probably a little excessive for how often I actually need to save files there, but I figure it's better to backup more often than I actually need.\n\nOn my MacBook, I have it set to backup every 6 hours. I figured this was a good balance between safety and convenience. Most of my mission-critical work is code, which I commit to GitHub on a regular basis, and I'd rather not have to tie up my network every hour.\n\nFinally, I have both these backups separated into their own folders on the 4TB drive for organizational purposes, which I don't think is possible, or at least not that easy to set up, with Time Machine.\n\nBut my solution is not perfect, and I have identified a few weaknesses in my setup:\n\nFirstly, my backup is not bootable. This is more of a convenience than anything else, but because of how I have everything configured it's not possible to boot from my network backup.\n\nAlso, because my backups are over my local network, I can only backup from home. This isn't the end of the world since I don't often take my MacBook with me for more than a few hours but there have been instances where I've been away for a few days with it in tow. But again, it would be mostly an inconvenience because my mission-critical work gets pushed to GitHub regularly.\n\nThirdly, I don't have a great solution for keeping backups of my photos and anything else I have in iCloud. While both my local Photos library and the \"Mobile Documents\" folder–where macOS stores iCloud Drive locally–are included in the backup, the way iCloud handles files, and its overall reliability, makes me a little nervous. What if some of my photos are missing from the local library, or some document in my iCloud Drive isn't properly downloaded. I don't have a great solution to this, but I am open to suggestions. Please [hit me up on Mastodon](https://mastodon.social/@ghalldev) if you have any.\n\nAnd finally, I don't have another offsite backup, so if my apartment burns down AND Backblaze for some reason loses all my data (which is an unlikely, but not impossible, scenario) I'm SOL. Even having a backup drive at a relative's house that I backup to once in a while would be better than relying entirely on local network backups and the cloud.\n\nBut if there's one thing I learned, and would like to impart on anyone who, in the year 2024, doesn't have a backup, is that _any_ backup is better than _no_ backup. It all depends on your risk tolerance and how much complexity you want to introduce. But I think, at the very least, backing up to an external drive connected to your computer is a must.","src/content/blog/2024/my-backup-solution.md","cb0af27199af223d",{"html":690,"metadata":691},"\u003Cp>Backing up your data is probably the most important thing you can do with it. This is something I learned the hard way, a little over 10 years ago now, when I lost almost everything on a failed hard drive. Photos, school projects, personal projects, a bunch of terrible stories I wrote (to be fair, that last one wasn’t a huge loss). It was then I decided to get serious about backing up, and scrounged up what little money I had at the time to buy a 500GB external drive.\u003C/p>\n\u003Cp>Since then, though my backup solution has evolved, I haven’t lost a single bit of data. Outside of my own stupidity of course, but that’s another story…\u003C/p>\n\u003Cp>My current backup solution is 2-fold:\u003C/p>\n\u003Cp>First, my entire MacBook is backed up over my local network to an external 4TB drive connected to Mac Mini server using \u003Ca href=\"https://bombich.com/\">Carbon Copy Cloner\u003C/a>.\u003C/p>\n\u003Cp>Second, the Mac Mini server is then backed up to the cloud via \u003Ca href=\"https://www.backblaze.com/\">Backblaze\u003C/a>.\u003C/p>\n\u003Cp>To complicate things a tad, I also have a 1TB external SSD connected to the Mac Mini which I use as extra storage for files I don’t really need on my MacBook, but still want to keep. This SSD is also backed up to the 4TB drive (via another install of Carbon Copy Cloner), and is thus included in the Backblaze backup.\u003C/p>\n\u003Cp>I’ve opted to use Carbon Copy Cloner instead of Time Machine because it offers a lot more flexibility, both in scheduling and in how my backups are organized.\u003C/p>\n\u003Cp>For example, the external SSD on the Mac Mini doesn’t get written to a whole lot, so I have it scheduled to backup once a day. It’s probably a little excessive for how often I actually need to save files there, but I figure it’s better to backup more often than I actually need.\u003C/p>\n\u003Cp>On my MacBook, I have it set to backup every 6 hours. I figured this was a good balance between safety and convenience. Most of my mission-critical work is code, which I commit to GitHub on a regular basis, and I’d rather not have to tie up my network every hour.\u003C/p>\n\u003Cp>Finally, I have both these backups separated into their own folders on the 4TB drive for organizational purposes, which I don’t think is possible, or at least not that easy to set up, with Time Machine.\u003C/p>\n\u003Cp>But my solution is not perfect, and I have identified a few weaknesses in my setup:\u003C/p>\n\u003Cp>Firstly, my backup is not bootable. This is more of a convenience than anything else, but because of how I have everything configured it’s not possible to boot from my network backup.\u003C/p>\n\u003Cp>Also, because my backups are over my local network, I can only backup from home. This isn’t the end of the world since I don’t often take my MacBook with me for more than a few hours but there have been instances where I’ve been away for a few days with it in tow. But again, it would be mostly an inconvenience because my mission-critical work gets pushed to GitHub regularly.\u003C/p>\n\u003Cp>Thirdly, I don’t have a great solution for keeping backups of my photos and anything else I have in iCloud. While both my local Photos library and the “Mobile Documents” folder–where macOS stores iCloud Drive locally–are included in the backup, the way iCloud handles files, and its overall reliability, makes me a little nervous. What if some of my photos are missing from the local library, or some document in my iCloud Drive isn’t properly downloaded. I don’t have a great solution to this, but I am open to suggestions. Please \u003Ca href=\"https://mastodon.social/@ghalldev\">hit me up on Mastodon\u003C/a> if you have any.\u003C/p>\n\u003Cp>And finally, I don’t have another offsite backup, so if my apartment burns down AND Backblaze for some reason loses all my data (which is an unlikely, but not impossible, scenario) I’m SOL. Even having a backup drive at a relative’s house that I backup to once in a while would be better than relying entirely on local network backups and the cloud.\u003C/p>\n\u003Cp>But if there’s one thing I learned, and would like to impart on anyone who, in the year 2024, doesn’t have a backup, is that \u003Cem>any\u003C/em> backup is better than \u003Cem>no\u003C/em> backup. It all depends on your risk tolerance and how much complexity you want to introduce. But I think, at the very least, backing up to an external drive connected to your computer is a must.\u003C/p>",{"headings":692,"imagePaths":693,"frontmatter":694},[],[],{"title":682,"pubDate":695,"tags":696},"1/27/24",[94,685],"2024/my-backup-solution.md","2024/my-five-formative-games",{"id":698,"data":700,"body":704,"filePath":705,"digest":706,"rendered":707,"legacyId":731},{"title":701,"pubDate":702,"tags":703},"My Five Formative Video Games",["Date","2024-07-18T04:00:00.000Z"],[220],"This week, the Triple Click podcast posted to their main feed [a bonus episode from a couple years ago](https://overcast.fm/+AAZusZIrU4E) about the hosts' top 5 formative games. It got me thinking about some of my most formative video game experiences, and what shaped me into the gamer I am today.\n\nLike the postcast, I've picked 5 games I consider to be important to me personally. They're in no particular order, and they're not all my favorites, but they are the games that contributed most to my love of gaming.\n\n## Donkey Kong Country\n\nThis game hold a special place in my heart as my first ever video game. When I was 6, my dad bought me a Super Nintendo bundled with this game, and it blew my little mind. While I think its sequel, Donkey Kong Country 2: Diddy's Kong Quest, is the better game, the original still has a warm place in my heart, and I revisit it from time to time.\n\n## Super Mario Land 2: Six Golden Coins\n\nMy parents got divorced when I was young, and I wasn't really allowed to have a console at my mom's house. I was, however, allowed to have my GameBoy, which my mom bought for me alongside a copy of this game.\n\nIt's not what I'd call a favorite of mine–sorry to everyone who loves this game–but it was my first experience with portable gaming, and the start of my preference for that kind of experience. And it eventually led to my next formative game...\n\n## Pokémon Red[^1]\n\nIf you're a gamer in your early-to-mid-30's, Pokémon is probably the game that introduced to you to the genre of role-playing games. That was definitely the case for me. I didn't know anything about RPGs, but I was just the right age for Pokémon fever and I had to play it. In the years since, RPGs have become my favorite type of game to play, and I owe it all to Pokémon.\n\n## The Legend of Zelda: The Wind Waker\n\nI went back and forth between including this or Ocarina of Time, but in the grand scheme of things I think Wind Waker had a much larger effect on me personally. It's my earliest memory of a game that really captivated me, and drew me into its world in a way that I could believe it was alive. I didn't care enough to know about the controversy around the cartoony graphics, if anything that's what really made the game for me at the time.\n\n## Sim Copter\n\nThis is probably a strange pick, and it's the only game on this list I'd never recommend to anyone. But I was absolutely obsessed with this game for a time. I hated doing the missions, I just enjoyed flying the helicopter around. I spent most of my time playing with an included tool called the SimCity Urban Renewal Kit, building my own intricate cities, and loading them into the game to fly around in 3D.\n\n[^1]: I specifically chose Pokémon Red because that's the version I had growing up.","src/content/blog/2024/my-five-formative-games.md","8934d26bee452399",{"html":708,"metadata":709},"\u003Cp>This week, the Triple Click podcast posted to their main feed \u003Ca href=\"https://overcast.fm/+AAZusZIrU4E\">a bonus episode from a couple years ago\u003C/a> about the hosts’ top 5 formative games. It got me thinking about some of my most formative video game experiences, and what shaped me into the gamer I am today.\u003C/p>\n\u003Cp>Like the postcast, I’ve picked 5 games I consider to be important to me personally. They’re in no particular order, and they’re not all my favorites, but they are the games that contributed most to my love of gaming.\u003C/p>\n\u003Ch2 id=\"donkey-kong-country\">Donkey Kong Country\u003C/h2>\n\u003Cp>This game hold a special place in my heart as my first ever video game. When I was 6, my dad bought me a Super Nintendo bundled with this game, and it blew my little mind. While I think its sequel, Donkey Kong Country 2: Diddy’s Kong Quest, is the better game, the original still has a warm place in my heart, and I revisit it from time to time.\u003C/p>\n\u003Ch2 id=\"super-mario-land-2-six-golden-coins\">Super Mario Land 2: Six Golden Coins\u003C/h2>\n\u003Cp>My parents got divorced when I was young, and I wasn’t really allowed to have a console at my mom’s house. I was, however, allowed to have my GameBoy, which my mom bought for me alongside a copy of this game.\u003C/p>\n\u003Cp>It’s not what I’d call a favorite of mine–sorry to everyone who loves this game–but it was my first experience with portable gaming, and the start of my preference for that kind of experience. And it eventually led to my next formative game…\u003C/p>\n\u003Ch2 id=\"pokémon-red1\">Pokémon Red\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>\u003C/h2>\n\u003Cp>If you’re a gamer in your early-to-mid-30’s, Pokémon is probably the game that introduced to you to the genre of role-playing games. That was definitely the case for me. I didn’t know anything about RPGs, but I was just the right age for Pokémon fever and I had to play it. In the years since, RPGs have become my favorite type of game to play, and I owe it all to Pokémon.\u003C/p>\n\u003Ch2 id=\"the-legend-of-zelda-the-wind-waker\">The Legend of Zelda: The Wind Waker\u003C/h2>\n\u003Cp>I went back and forth between including this or Ocarina of Time, but in the grand scheme of things I think Wind Waker had a much larger effect on me personally. It’s my earliest memory of a game that really captivated me, and drew me into its world in a way that I could believe it was alive. I didn’t care enough to know about the controversy around the cartoony graphics, if anything that’s what really made the game for me at the time.\u003C/p>\n\u003Ch2 id=\"sim-copter\">Sim Copter\u003C/h2>\n\u003Cp>This is probably a strange pick, and it’s the only game on this list I’d never recommend to anyone. But I was absolutely obsessed with this game for a time. I hated doing the missions, I just enjoyed flying the helicopter around. I spent most of my time playing with an included tool called the SimCity Urban Renewal Kit, building my own intricate cities, and loading them into the game to fly around in 3D.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I specifically chose Pokémon Red because that’s the version I had growing up. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":710,"imagePaths":727,"frontmatter":728},[711,714,717,720,723,726],{"depth":367,"slug":712,"text":713},"donkey-kong-country","Donkey Kong Country",{"depth":367,"slug":715,"text":716},"super-mario-land-2-six-golden-coins","Super Mario Land 2: Six Golden Coins",{"depth":367,"slug":718,"text":719},"pokémon-red1","Pokémon Red1",{"depth":367,"slug":721,"text":722},"the-legend-of-zelda-the-wind-waker","The Legend of Zelda: The Wind Waker",{"depth":367,"slug":724,"text":725},"sim-copter","Sim Copter",{"depth":367,"slug":368,"text":369},[],{"title":701,"pubDate":729,"tags":730},"7/18/24",[220],"2024/my-five-formative-games.md","2024/my-terminal-setup",{"id":732,"data":734,"body":738,"filePath":739,"digest":740,"rendered":741,"legacyId":758},{"title":735,"pubDate":736,"tags":737},"My Terminal Setup",["Date","2024-03-09T05:00:00.000Z"],[131,94],"The command line is something I've tinkered with for years. Ever since I discovered Terminal.app in the Utilities folder on my PowerBook G4 back in the day, I've been curious about the kinds of things I could do with it. For most of that time, I've really only used it to change hidden settings, and run tools like 'diskutil', but since entering the world of software development the terminal has become an indispensable tool.\n\nOne of the things I enjoy about the terminal is how customizable it is. If you're on macOS like I am, it can be a nice little reprieve from the relatively locked-down GUI. As such, I've had a lot of fun tweaking the Unix underpinnings of the Mac to my own preferences.\n\n### The Basics\n\nTo start off, let's look at the basic setup. Though macOS comes with the built-in Terminal.app I mentioned earlier, I prefer to use an app called [iTerm 2](https://iterm2.com). There are a lot of alternative terminal emulators out there, and I've tried most of them, but I keep coming back to iTerm because it just feels at home on the Mac in the way Warp, Alacritty, and the like, just don't.\n\nFor the shell itself, I use ZSH, which is what ships by default on Mac. I'll admit I'm not sure what the pros and cons are versus something like Bash, but it works for me. I also use [ohmyzsh](https://github.com/ohmyzsh/ohmyzsh) for an extra level of customization.\n\nFinally, I use [Homebrew](https://brew.sh) for my package manager. That seems to be the go-to solution for Mac. I use it to not only install and manage the CLI tools I use, but also any GUI apps I install outside the App Store. There's even a nice little app called [Cork](https://github.com/buresdv/Cork) which is a GUI app that makes dealing with Homebrew a lot nicer.\n\n### Themes and Plugins\n\nUsing ohmyzsh opens the door for a lot of easy customization. One of the other tools I use is [Powerlevel10k](https://github.com/romkatv/powerlevel10k), which can be used with or without ohmyzsh. This allows you to create a theme by mixing and matching several preset options. I went with a pretty barebones, minimal look, but you don't have to go that route.\n\nFor plugins, I use [zsh-autocomplete](https://github.com/marlonrichert/zsh-autocomplete), which is basically a search function and autocompletion for terminal commands. I also use [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting), which not only adds a bit of color, but can be useful as well because it will color code valid commands in green and invalid ones in red.\n\n### Useful Tools\n\nThere are also a handful of useful tools I have installed that make using the command line a much more pleasant experience. I'm going to skip over ones like git and Homebrew, they're pretty much a necessity for developers, and instead focus on some tools I'd consider nice to have.\n\nAll of these tools can be installed via Homebrew.\n\n**gum**\n\nThis isn't so much a standalone tool as it is a way to easily add some interactivity to shell scripts. You can easily add text inputs, confirmation dialogs, list selections, and even loading spinners to your shell scripts. There's a lot, so I'd suggest checking out [the readme](https://github.com/charmbracelet/gum/blob/main/README.md) to see if it's something you'd find useful.\n\n**mas**\n\nA CLI for the Mac App Store. It may seem a little redundant, but I find it a much more reliable way to update apps installed via the App Store since auto-update seems pretty hit-or-miss, and many times updates will not show for me at all in the GUI interface. Simply running `mas upgrade` will find and install updates much more reliably in my experience.\n\n**thefuck**\n\nEven with all my autocomplete and syntax highlighting shenanigans, I still sometimes make mistakes (ever do a git push without setting an origin?). All I have to do when I make these silly mistakes is run the command `fuck` and it will pretty reliably find and run the command you meant to run.\n\n**yt-dlp**\n\nI don't always have to download YouTube videos, but when I do, I use yt-dlp. It makes it pretty simple to download videos, and it's feels a lot less sketchy than using one of those YouTube downloader websites. Shameless plug, I also [built a GUI front end for it](https://github.com/ghall89/Siphon).\n\n**zoxide**\n\nUsing cd to navigate our computers is an everyday part of using the terminal, but zoxide makes that experience much better. On top just being able to navigate your folders just like with cd, zoxide can keep track of your most visited folders and lets you quickly navigate to them with a fuzzy search. So, say you have a folder you navigate to a lot with `cd ~/Developer/web/personal/my-cool-blog`, instead of having to type that out you can simply type `z web blog` and it will, like magic, take you right there. Also, if you're like me and have the cd command burned into your brain, you can set cd as an alias of z.","src/content/blog/2024/my-terminal-setup.md","8dfb2c1b5e92ae77",{"html":742,"metadata":743},"\u003Cp>The command line is something I’ve tinkered with for years. Ever since I discovered Terminal.app in the Utilities folder on my PowerBook G4 back in the day, I’ve been curious about the kinds of things I could do with it. For most of that time, I’ve really only used it to change hidden settings, and run tools like ‘diskutil’, but since entering the world of software development the terminal has become an indispensable tool.\u003C/p>\n\u003Cp>One of the things I enjoy about the terminal is how customizable it is. If you’re on macOS like I am, it can be a nice little reprieve from the relatively locked-down GUI. As such, I’ve had a lot of fun tweaking the Unix underpinnings of the Mac to my own preferences.\u003C/p>\n\u003Ch3 id=\"the-basics\">The Basics\u003C/h3>\n\u003Cp>To start off, let’s look at the basic setup. Though macOS comes with the built-in Terminal.app I mentioned earlier, I prefer to use an app called \u003Ca href=\"https://iterm2.com\">iTerm 2\u003C/a>. There are a lot of alternative terminal emulators out there, and I’ve tried most of them, but I keep coming back to iTerm because it just feels at home on the Mac in the way Warp, Alacritty, and the like, just don’t.\u003C/p>\n\u003Cp>For the shell itself, I use ZSH, which is what ships by default on Mac. I’ll admit I’m not sure what the pros and cons are versus something like Bash, but it works for me. I also use \u003Ca href=\"https://github.com/ohmyzsh/ohmyzsh\">ohmyzsh\u003C/a> for an extra level of customization.\u003C/p>\n\u003Cp>Finally, I use \u003Ca href=\"https://brew.sh\">Homebrew\u003C/a> for my package manager. That seems to be the go-to solution for Mac. I use it to not only install and manage the CLI tools I use, but also any GUI apps I install outside the App Store. There’s even a nice little app called \u003Ca href=\"https://github.com/buresdv/Cork\">Cork\u003C/a> which is a GUI app that makes dealing with Homebrew a lot nicer.\u003C/p>\n\u003Ch3 id=\"themes-and-plugins\">Themes and Plugins\u003C/h3>\n\u003Cp>Using ohmyzsh opens the door for a lot of easy customization. One of the other tools I use is \u003Ca href=\"https://github.com/romkatv/powerlevel10k\">Powerlevel10k\u003C/a>, which can be used with or without ohmyzsh. This allows you to create a theme by mixing and matching several preset options. I went with a pretty barebones, minimal look, but you don’t have to go that route.\u003C/p>\n\u003Cp>For plugins, I use \u003Ca href=\"https://github.com/marlonrichert/zsh-autocomplete\">zsh-autocomplete\u003C/a>, which is basically a search function and autocompletion for terminal commands. I also use \u003Ca href=\"https://github.com/zsh-users/zsh-syntax-highlighting\">zsh-syntax-highlighting\u003C/a>, which not only adds a bit of color, but can be useful as well because it will color code valid commands in green and invalid ones in red.\u003C/p>\n\u003Ch3 id=\"useful-tools\">Useful Tools\u003C/h3>\n\u003Cp>There are also a handful of useful tools I have installed that make using the command line a much more pleasant experience. I’m going to skip over ones like git and Homebrew, they’re pretty much a necessity for developers, and instead focus on some tools I’d consider nice to have.\u003C/p>\n\u003Cp>All of these tools can be installed via Homebrew.\u003C/p>\n\u003Cp>\u003Cstrong>gum\u003C/strong>\u003C/p>\n\u003Cp>This isn’t so much a standalone tool as it is a way to easily add some interactivity to shell scripts. You can easily add text inputs, confirmation dialogs, list selections, and even loading spinners to your shell scripts. There’s a lot, so I’d suggest checking out \u003Ca href=\"https://github.com/charmbracelet/gum/blob/main/README.md\">the readme\u003C/a> to see if it’s something you’d find useful.\u003C/p>\n\u003Cp>\u003Cstrong>mas\u003C/strong>\u003C/p>\n\u003Cp>A CLI for the Mac App Store. It may seem a little redundant, but I find it a much more reliable way to update apps installed via the App Store since auto-update seems pretty hit-or-miss, and many times updates will not show for me at all in the GUI interface. Simply running \u003Ccode>mas upgrade\u003C/code> will find and install updates much more reliably in my experience.\u003C/p>\n\u003Cp>\u003Cstrong>thefuck\u003C/strong>\u003C/p>\n\u003Cp>Even with all my autocomplete and syntax highlighting shenanigans, I still sometimes make mistakes (ever do a git push without setting an origin?). All I have to do when I make these silly mistakes is run the command \u003Ccode>fuck\u003C/code> and it will pretty reliably find and run the command you meant to run.\u003C/p>\n\u003Cp>\u003Cstrong>yt-dlp\u003C/strong>\u003C/p>\n\u003Cp>I don’t always have to download YouTube videos, but when I do, I use yt-dlp. It makes it pretty simple to download videos, and it’s feels a lot less sketchy than using one of those YouTube downloader websites. Shameless plug, I also \u003Ca href=\"https://github.com/ghall89/Siphon\">built a GUI front end for it\u003C/a>.\u003C/p>\n\u003Cp>\u003Cstrong>zoxide\u003C/strong>\u003C/p>\n\u003Cp>Using cd to navigate our computers is an everyday part of using the terminal, but zoxide makes that experience much better. On top just being able to navigate your folders just like with cd, zoxide can keep track of your most visited folders and lets you quickly navigate to them with a fuzzy search. So, say you have a folder you navigate to a lot with \u003Ccode>cd ~/Developer/web/personal/my-cool-blog\u003C/code>, instead of having to type that out you can simply type \u003Ccode>z web blog\u003C/code> and it will, like magic, take you right there. Also, if you’re like me and have the cd command burned into your brain, you can set cd as an alias of z.\u003C/p>",{"headings":744,"imagePaths":754,"frontmatter":755},[745,748,751],{"depth":46,"slug":746,"text":747},"the-basics","The Basics",{"depth":46,"slug":749,"text":750},"themes-and-plugins","Themes and Plugins",{"depth":46,"slug":752,"text":753},"useful-tools","Useful Tools",[],{"title":735,"pubDate":756,"tags":757},"3/9/24",[131,94],"2024/my-terminal-setup.md","2024/my-top-3-games-of-2024",{"id":759,"data":761,"body":765,"filePath":766,"digest":767,"rendered":768,"legacyId":785},{"title":762,"pubDate":763,"tags":764},"My Top 3 Games of 2024",["Date","2024-12-12T00:00:00.000Z"],[220],"Back in December 2022, I wrote about [my top 3 games of that year](/posts/2022/my-top-3-games-of-2022/) in what I hoped would be a yearly tradition. For 2023, Tears of the Kingdom and Baldur’s Gate 3 blew me away that I couldn’t fathom selecting a third game that stood up to them. This year however, I’m returning to the originally envisioned format for my top 3 games of 2024.\n\nOne of my regrets from the 2022 post was that I didn’t go into very much detail as to why I liked the games, so this time around I wanted to make sure to go more in-depth (but not too in-depth). So, over the course of the year, I’ve kept a journal of every game I finished in 2024, and wrote down what I thought about it while the experience was still fresh in my mind. I chose this list by re-reading my journal and picking the 3 games that, upon reflection, still resonate with me in the same way.\n\n### Star Wars: Outlaws\n\nOk, this is a controversial pick, but, despite its many flaws, Star Wars: Outlaws is a game I genuinely enjoyed from start to finish. Granted, many of its strengths are a result of it being a Star Wars game, but as a fan of the franchise that’s enough for me.\n\nTo me, this game nailed the feeling of being a roguish scoundrel going on adventures across the Star Wars galaxy. From classic locations such as Mos Eisley, to new places like Mirogana, it all felt authentically a part of that galaxy far, far away. It’s clear the people behind the game are big fans of the universe George Lucas created.\n\nEven the typical Ubisoft open-world tropes didn’t detract from the experience. In fact, setting the game across multiple planets, and therefore segmenting the game into smaller open areas instead of one huge map, did a lot to remove the tedium that comes with open-world games.\n\nAnother aspect of the game I enjoyed was the “Reputation System”. During the course of the game you’ll encounter and do missions for various criminal syndicates; The Hutts, The Pykes, Crimson Dawn, and the Ashiga Clan. Which missions you do, and whether you succeed or fail, will affect your standing with these organizations. Raising your reputation with a particular group can unlock special merchants, allow you to take higher paying missions, and freely move about the gangs territory. However, betraying a gang, stealing from them, entering restricted areas, or just being a menace towards them, will lower your reputation. It’s a cool system, and I think it has plenty of room for iteration in a sequel.\n\n### Final Fantasy VII Rebirth\n\nI have to say, this is the game that most surprised me this year. While I enjoyed Final Fantasy VII Remake–the first entry in this trilogy-to-be of games re-imagining the classic 90’s RPG–when I originally played it during Covid lockdown in 2020, I found it very tedious when I revisited it a couple years ago In addition, 2023’s Final Fantasy XVI left me a bit down on the series as a whole. But I gave Rebirth a shot anyway, and I’m glad I did.\n\nOne thing this game shares in common with the first entry is how well it handles real-time combat, especially compared to the more recent “mainline” entries. Final Fantasy XV’s real-time combat was tedious, while XVI’s was frustrating and shallow. I really appreciate the ability in this game to switch characters in combat to not only keep gameplay interesting, but provide a level of depth and control that the aforementioned mainline games just don’t.\n\nThe world design, similar to Star Wars: Outlaws, is more segmented, which makes the exploration much less tedious, and far more varied. Each map is littered with side objectives to encourage exploration, but it’s not so much that it’s overwhelming. The only 2 exceptions were Cosmo Canyon and Gongaga, which I found extremely convoluted and not at all enjoyable to navigate.\n\nThe game has a multitude of mini-games, which felt like a throwback to an older style of video game design, and I thought it was fun. They weren’t all bangers, but I did find myself engaging in Gwen…sorry, I mean, Queen’s Blood. Also, Chocobo Racing ended up being another big time sink. It was enough to keep me coming back for many more hours, even after I finished the story (and is probably why I didn’t finish more games this year 😬).\n\n### The Legend of Zelda: Echoes of Wisdom\n\nIt goes without saying, if there’s a new Zelda game out it’s going to make my top 3 games of the year, no question. Like any other game, it’s not perfect. As the first brand-new “2D” Zelda in a decade, and the first in the series to star the titular princess, it had high expectations to live up to, but I think it ran away with them.\n\nIt’s the first Zelda game of this style to take on the open-world design of the 2 most recent 3D games–Breath of the Wild, and Tears of the Kingdom–and it really fit a lot better that I was expecting. In fact, I’d say it did the open-world much better, because it was reigned in just enough to not impede on the storytelling (such as it is in a Nintendo title), but still gave the player a good level of freedom to explore.\n\nAnother area this game excels is the puzzles. Much like in Tears of the Kingdom, the puzzles in this game are more focused on player creativity and finding fun solutions than simply trying to figure out the one solution the designers intended. Much of this creativity comes from what this game calls “echoes”, basically various objects and enemies you can conjure up.\n\nI hope this is a concept Nintendo revisits, because I really want to see a successor to this game that iterates upon what is already great, and improves on what didn’t quite work. Basically, what Tears of the Kingdom did for Breath of the Wild.","src/content/blog/2024/my-top-3-games-of-2024.md","aeb241061d662d08",{"html":769,"metadata":770},"\u003Cp>Back in December 2022, I wrote about \u003Ca href=\"/posts/2022/my-top-3-games-of-2022/\">my top 3 games of that year\u003C/a> in what I hoped would be a yearly tradition. For 2023, Tears of the Kingdom and Baldur’s Gate 3 blew me away that I couldn’t fathom selecting a third game that stood up to them. This year however, I’m returning to the originally envisioned format for my top 3 games of 2024.\u003C/p>\n\u003Cp>One of my regrets from the 2022 post was that I didn’t go into very much detail as to why I liked the games, so this time around I wanted to make sure to go more in-depth (but not too in-depth). So, over the course of the year, I’ve kept a journal of every game I finished in 2024, and wrote down what I thought about it while the experience was still fresh in my mind. I chose this list by re-reading my journal and picking the 3 games that, upon reflection, still resonate with me in the same way.\u003C/p>\n\u003Ch3 id=\"star-wars-outlaws\">Star Wars: Outlaws\u003C/h3>\n\u003Cp>Ok, this is a controversial pick, but, despite its many flaws, Star Wars: Outlaws is a game I genuinely enjoyed from start to finish. Granted, many of its strengths are a result of it being a Star Wars game, but as a fan of the franchise that’s enough for me.\u003C/p>\n\u003Cp>To me, this game nailed the feeling of being a roguish scoundrel going on adventures across the Star Wars galaxy. From classic locations such as Mos Eisley, to new places like Mirogana, it all felt authentically a part of that galaxy far, far away. It’s clear the people behind the game are big fans of the universe George Lucas created.\u003C/p>\n\u003Cp>Even the typical Ubisoft open-world tropes didn’t detract from the experience. In fact, setting the game across multiple planets, and therefore segmenting the game into smaller open areas instead of one huge map, did a lot to remove the tedium that comes with open-world games.\u003C/p>\n\u003Cp>Another aspect of the game I enjoyed was the “Reputation System”. During the course of the game you’ll encounter and do missions for various criminal syndicates; The Hutts, The Pykes, Crimson Dawn, and the Ashiga Clan. Which missions you do, and whether you succeed or fail, will affect your standing with these organizations. Raising your reputation with a particular group can unlock special merchants, allow you to take higher paying missions, and freely move about the gangs territory. However, betraying a gang, stealing from them, entering restricted areas, or just being a menace towards them, will lower your reputation. It’s a cool system, and I think it has plenty of room for iteration in a sequel.\u003C/p>\n\u003Ch3 id=\"final-fantasy-vii-rebirth\">Final Fantasy VII Rebirth\u003C/h3>\n\u003Cp>I have to say, this is the game that most surprised me this year. While I enjoyed Final Fantasy VII Remake–the first entry in this trilogy-to-be of games re-imagining the classic 90’s RPG–when I originally played it during Covid lockdown in 2020, I found it very tedious when I revisited it a couple years ago In addition, 2023’s Final Fantasy XVI left me a bit down on the series as a whole. But I gave Rebirth a shot anyway, and I’m glad I did.\u003C/p>\n\u003Cp>One thing this game shares in common with the first entry is how well it handles real-time combat, especially compared to the more recent “mainline” entries. Final Fantasy XV’s real-time combat was tedious, while XVI’s was frustrating and shallow. I really appreciate the ability in this game to switch characters in combat to not only keep gameplay interesting, but provide a level of depth and control that the aforementioned mainline games just don’t.\u003C/p>\n\u003Cp>The world design, similar to Star Wars: Outlaws, is more segmented, which makes the exploration much less tedious, and far more varied. Each map is littered with side objectives to encourage exploration, but it’s not so much that it’s overwhelming. The only 2 exceptions were Cosmo Canyon and Gongaga, which I found extremely convoluted and not at all enjoyable to navigate.\u003C/p>\n\u003Cp>The game has a multitude of mini-games, which felt like a throwback to an older style of video game design, and I thought it was fun. They weren’t all bangers, but I did find myself engaging in Gwen…sorry, I mean, Queen’s Blood. Also, Chocobo Racing ended up being another big time sink. It was enough to keep me coming back for many more hours, even after I finished the story (and is probably why I didn’t finish more games this year 😬).\u003C/p>\n\u003Ch3 id=\"the-legend-of-zelda-echoes-of-wisdom\">The Legend of Zelda: Echoes of Wisdom\u003C/h3>\n\u003Cp>It goes without saying, if there’s a new Zelda game out it’s going to make my top 3 games of the year, no question. Like any other game, it’s not perfect. As the first brand-new “2D” Zelda in a decade, and the first in the series to star the titular princess, it had high expectations to live up to, but I think it ran away with them.\u003C/p>\n\u003Cp>It’s the first Zelda game of this style to take on the open-world design of the 2 most recent 3D games–Breath of the Wild, and Tears of the Kingdom–and it really fit a lot better that I was expecting. In fact, I’d say it did the open-world much better, because it was reigned in just enough to not impede on the storytelling (such as it is in a Nintendo title), but still gave the player a good level of freedom to explore.\u003C/p>\n\u003Cp>Another area this game excels is the puzzles. Much like in Tears of the Kingdom, the puzzles in this game are more focused on player creativity and finding fun solutions than simply trying to figure out the one solution the designers intended. Much of this creativity comes from what this game calls “echoes”, basically various objects and enemies you can conjure up.\u003C/p>\n\u003Cp>I hope this is a concept Nintendo revisits, because I really want to see a successor to this game that iterates upon what is already great, and improves on what didn’t quite work. Basically, what Tears of the Kingdom did for Breath of the Wild.\u003C/p>",{"headings":771,"imagePaths":781,"frontmatter":782},[772,775,778],{"depth":46,"slug":773,"text":774},"star-wars-outlaws","Star Wars: Outlaws",{"depth":46,"slug":776,"text":777},"final-fantasy-vii-rebirth","Final Fantasy VII Rebirth",{"depth":46,"slug":779,"text":780},"the-legend-of-zelda-echoes-of-wisdom","The Legend of Zelda: Echoes of Wisdom",[],{"title":762,"pubDate":783,"tags":784},"2024-12-12",[220],"2024/my-top-3-games-of-2024.md","2024/notes-on-these-airpods",{"id":786,"data":788,"body":792,"filePath":793,"digest":794,"rendered":795,"legacyId":813},{"title":789,"pubDate":790,"tags":791},"Notes on the AirPods 4",["Date","2024-09-24T01:10:00.000Z"],[94],"My big purchase from the iPhone event a couple weeks ago was the AirPods 4 With Active Noise Cancellation[^1].\n\nI've only had them a few days at this point, and writing product reviews isn't my strong suite, so I've collected up some notes on my experience with the new AirPods' audio modes:\n\n## Noise Cancellation\n\nI've never owned a set of headphones with noise cancellation so I don't really have anything to compare these to, but I feel like it works pretty well considering there are no rubber tips (and thus no seal to fully block out external noise).\n\nI've tried them when working at my desk and it does a real good job of blocking out most ambient noise, and I feel less distracted. I've also tried them working in a crowded cafe, and while I could still hear the chatter of the people around me, it was muffled enough to minimize any distraction.\n\nSpeaking on the phone or in meetings is still a bit strange and I feel like I have to shout. Might default to turning off noise cancellation in these situations if I don't adapt.\n\n## Passthrough\n\nI found the passthrough on the AirPods 4 to be a little unsettling since I was hearing ambient noise naturally as well as through the headphones. This made ambience a bit more grating. Not sure if I'll use passthrough mode, and just stick to either \"active noise cancellation\" or \"off\".\n\n## Misc Notes\n\nThey don't feel quite as secure in my ear as the AirPods 3, but still way better than the AirPods 1 and 2.\n\nThe AirPods 3 had an issue with stuttering music when I was using my MacBook in clamshell mode but that seems to not be an issue so far with these.\n\n[^1]: Listeners of the Accidental Tech Podcast know the product better as These AirPods.","src/content/blog/2024/notes-on-these-airpods.md","4d5c184f9b6f67e1",{"html":796,"metadata":797},"\u003Cp>My big purchase from the iPhone event a couple weeks ago was the AirPods 4 With Active Noise Cancellation\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>.\u003C/p>\n\u003Cp>I’ve only had them a few days at this point, and writing product reviews isn’t my strong suite, so I’ve collected up some notes on my experience with the new AirPods’ audio modes:\u003C/p>\n\u003Ch2 id=\"noise-cancellation\">Noise Cancellation\u003C/h2>\n\u003Cp>I’ve never owned a set of headphones with noise cancellation so I don’t really have anything to compare these to, but I feel like it works pretty well considering there are no rubber tips (and thus no seal to fully block out external noise).\u003C/p>\n\u003Cp>I’ve tried them when working at my desk and it does a real good job of blocking out most ambient noise, and I feel less distracted. I’ve also tried them working in a crowded cafe, and while I could still hear the chatter of the people around me, it was muffled enough to minimize any distraction.\u003C/p>\n\u003Cp>Speaking on the phone or in meetings is still a bit strange and I feel like I have to shout. Might default to turning off noise cancellation in these situations if I don’t adapt.\u003C/p>\n\u003Ch2 id=\"passthrough\">Passthrough\u003C/h2>\n\u003Cp>I found the passthrough on the AirPods 4 to be a little unsettling since I was hearing ambient noise naturally as well as through the headphones. This made ambience a bit more grating. Not sure if I’ll use passthrough mode, and just stick to either “active noise cancellation” or “off”.\u003C/p>\n\u003Ch2 id=\"misc-notes\">Misc Notes\u003C/h2>\n\u003Cp>They don’t feel quite as secure in my ear as the AirPods 3, but still way better than the AirPods 1 and 2.\u003C/p>\n\u003Cp>The AirPods 3 had an issue with stuttering music when I was using my MacBook in clamshell mode but that seems to not be an issue so far with these.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Listeners of the Accidental Tech Podcast know the product better as These AirPods. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":798,"imagePaths":809,"frontmatter":810},[799,802,805,808],{"depth":367,"slug":800,"text":801},"noise-cancellation","Noise Cancellation",{"depth":367,"slug":803,"text":804},"passthrough","Passthrough",{"depth":367,"slug":806,"text":807},"misc-notes","Misc Notes",{"depth":367,"slug":368,"text":369},[],{"title":789,"pubDate":811,"tags":812},"9/23/24, 9:10 PM",[94],"2024/notes-on-these-airpods.md","2024/playing-on-easy-mode",{"id":814,"data":816,"body":820,"filePath":821,"digest":822,"rendered":823,"legacyId":831},{"title":817,"pubDate":818,"tags":819},"Playing on \"Easy Mode\"",["Date","2024-04-09T04:00:00.000Z"],[220],"I have a confession to make; I am terrible at video games! Yes, I've played them regularly for almost 30 years but I still manage to really suck at them. Some genres I'm ok with, such as platformers and turn-based RPGs, but I feel like I just don't have the coordination to pull off shooters and other action games.\n\nI'm not sure if I've just got worse at video games with age, I'm 34 now, or if my patience for the struggle of powering through a particularly hard boss is just a lot lower than it used to be. After all, there are so many games I want to get to, and not enough time in the day. Whatever the case, I find myself turning to easy mode a lot more often.\n\nSometimes I find easy mode frustrating in a different way though. I recently finished Final Fantasy VII Rebirth, and I spent most of the game switching back-and-forth between easy and medium. I found easy a bit boring, but normal a little bit frustrating for my skill level. On easy, outside of boss fights, I didn't really feel any resistance from the game, and even then, some boss fights felt too...well...easy.\n\nYou could say, \"Well, what did you expect from easy mode?\" And that would be a fair point, easy mode is supposed to be just that. It's not really fair of me to expect anything more. But, at least for me, it robs the game of any sort of tension, and makes it nearly impossible to fail.\n\nOne relatively recent game I think did difficulty real well was Horizon Forbidden West. You had the standard \"easy, medium, or hard\" setting, but beyond that you could customize and tune the difficulty to your own specific preferences.\n\nFor example, you could tweak the damage modifiers for both you and your enemies. In my case, I found the enemies a little too weak on easy, so I tuned their damage up a little bit.\n\nOn the other hand I found Aloy, the character you play as in the Horizon series, to be a bit too beefed up on easy, so I was able to tune her down a bit as well. I was able to find this sweet spot between easy and medium that wasn't too frustrating but still gave me a satisfying experience.\n\nWhile this kind of feature is slowly becoming more common, we've still got a long way to go. I realize it's probably not the easiest thing to account for when programming a game – game dev is so far beyond what I do, so I can only begin to fathom the challenges that level of customization would add to the development process – but it's something I think should be taken into account more often, along with other accessibility features.","src/content/blog/2024/playing-on-easy-mode.md","1dc0a77e11b91736",{"html":824,"metadata":825},"\u003Cp>I have a confession to make; I am terrible at video games! Yes, I’ve played them regularly for almost 30 years but I still manage to really suck at them. Some genres I’m ok with, such as platformers and turn-based RPGs, but I feel like I just don’t have the coordination to pull off shooters and other action games.\u003C/p>\n\u003Cp>I’m not sure if I’ve just got worse at video games with age, I’m 34 now, or if my patience for the struggle of powering through a particularly hard boss is just a lot lower than it used to be. After all, there are so many games I want to get to, and not enough time in the day. Whatever the case, I find myself turning to easy mode a lot more often.\u003C/p>\n\u003Cp>Sometimes I find easy mode frustrating in a different way though. I recently finished Final Fantasy VII Rebirth, and I spent most of the game switching back-and-forth between easy and medium. I found easy a bit boring, but normal a little bit frustrating for my skill level. On easy, outside of boss fights, I didn’t really feel any resistance from the game, and even then, some boss fights felt too…well…easy.\u003C/p>\n\u003Cp>You could say, “Well, what did you expect from easy mode?” And that would be a fair point, easy mode is supposed to be just that. It’s not really fair of me to expect anything more. But, at least for me, it robs the game of any sort of tension, and makes it nearly impossible to fail.\u003C/p>\n\u003Cp>One relatively recent game I think did difficulty real well was Horizon Forbidden West. You had the standard “easy, medium, or hard” setting, but beyond that you could customize and tune the difficulty to your own specific preferences.\u003C/p>\n\u003Cp>For example, you could tweak the damage modifiers for both you and your enemies. In my case, I found the enemies a little too weak on easy, so I tuned their damage up a little bit.\u003C/p>\n\u003Cp>On the other hand I found Aloy, the character you play as in the Horizon series, to be a bit too beefed up on easy, so I was able to tune her down a bit as well. I was able to find this sweet spot between easy and medium that wasn’t too frustrating but still gave me a satisfying experience.\u003C/p>\n\u003Cp>While this kind of feature is slowly becoming more common, we’ve still got a long way to go. I realize it’s probably not the easiest thing to account for when programming a game – game dev is so far beyond what I do, so I can only begin to fathom the challenges that level of customization would add to the development process – but it’s something I think should be taken into account more often, along with other accessibility features.\u003C/p>",{"headings":826,"imagePaths":827,"frontmatter":828},[],[],{"title":817,"pubDate":829,"tags":830},"4/9/24",[220],"2024/playing-on-easy-mode.md","2024/ramblings-on-the-macintosh",{"id":832,"data":834,"body":838,"filePath":839,"digest":840,"rendered":841,"legacyId":850},{"title":835,"pubDate":836,"tags":837},"Ramblings On The Macintosh",["Date","2024-02-18T05:00:00.000Z"],[93,131,94],"2024 marks the 40th anniversary of the Macintosh. You've probably heard this a million times already this year, I'm pretty late to the party for writing a Macintosh retrospective, but I wanted to write this post anyway because of how important the Mac is to me. I might not be where I am today, especially not career-wise, if it weren't for the Macintosh.\n\nThat may seem like hyperbole, but it's really not. The Mac was the computer that ignighted my love of computers, not just using them but tinkering with them. The Mac showed me an entire world of near-infinite possibilities which I am still exploring to this day!\n\nOne of my earliest memories using a computer is playing Super Munchers on my grandparents' SE/30[^1]. I can't recall what originally caused me to become obsessed with this simple educational game, but I was hooked.\n\nSome of my earliest memories of actually tinkering with computers though came from having to spend time with my mom after work at a local university. This is where I discovered the Internet and network share drives. I remember finding a seemingly limitless repository of software and games-in retrospect, probably pirated-on the university network and taking whatever I could fit on a handful of floppies home to run on our Macintosh at home.\n\nI don't actually remember what model we had at home at the time, it looked like a Power Mac 7100 but did not have a CD-ROM drive–I distinctly remember going to pick up an external CD-ROM drive at CompUSA. My mom got it used, I can't recall where from but it was definitly not a new computer at the time. But I didn't care! I had games, both the 2 or 3 I had on CD-ROM, plus the many I had inadvertantly pirated.\n\nI remember it had an earlier version of System 7 (what I consider to be the quintissential \"Classic Mac OS\") so it was missing some small features that were on the newer university computers. A couple of those features that come to mind are the Control Strip, and the more 3D-esque UI style, both introduced in later version of System 7. I discovered that these features were merely system extensions so I resolved to copy those extensions onto a floppy disk, copy them into the Extensions folder on our Mac at home, and cross my fingers. To my shock and awe, it worked, and that's where my love for tinkering with computers blossomed.\n\nNot too long after, I discovered the application ResEdit, which could have been dangerous, but thankfully I was usually smart enough to make duplicates of anything before modifying them (guess I was born with good data hygene) and lucky enough to not trash any crucial system files.\n\nLater, in middle school and high school, I started making real simple websites, set up a forum (remember those?!), and learned some rudimentary C, tried (and failed) to learn Objective C. In addition, the Unix underpinnings of Mac OS X introduced me to tinkering via the command line.\n\nWould I have followed the same, or similar, path if I'd only ever used Windows PCs? What about if the Macintosh never existed? We'll never know, but I can say for sure that I wouldn't adore computers in quite the same way. Maybe that's a \"fanboi\" thing to say, but I do truly believe it.\n\nOh, and, fun fact; I wrote this entire post in BBEdit 4 inside the Basilisk II emulator running Mac OS 7.6.\n\n[^1]: I actually still have this exact computer, but it's long since bitten the dust.","src/content/blog/2024/ramblings-on-the-macintosh.md","c1cdfc0ecbc9b897",{"html":842,"metadata":843},"\u003Cp>2024 marks the 40th anniversary of the Macintosh. You’ve probably heard this a million times already this year, I’m pretty late to the party for writing a Macintosh retrospective, but I wanted to write this post anyway because of how important the Mac is to me. I might not be where I am today, especially not career-wise, if it weren’t for the Macintosh.\u003C/p>\n\u003Cp>That may seem like hyperbole, but it’s really not. The Mac was the computer that ignighted my love of computers, not just using them but tinkering with them. The Mac showed me an entire world of near-infinite possibilities which I am still exploring to this day!\u003C/p>\n\u003Cp>One of my earliest memories using a computer is playing Super Munchers on my grandparents’ SE/30\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>. I can’t recall what originally caused me to become obsessed with this simple educational game, but I was hooked.\u003C/p>\n\u003Cp>Some of my earliest memories of actually tinkering with computers though came from having to spend time with my mom after work at a local university. This is where I discovered the Internet and network share drives. I remember finding a seemingly limitless repository of software and games-in retrospect, probably pirated-on the university network and taking whatever I could fit on a handful of floppies home to run on our Macintosh at home.\u003C/p>\n\u003Cp>I don’t actually remember what model we had at home at the time, it looked like a Power Mac 7100 but did not have a CD-ROM drive–I distinctly remember going to pick up an external CD-ROM drive at CompUSA. My mom got it used, I can’t recall where from but it was definitly not a new computer at the time. But I didn’t care! I had games, both the 2 or 3 I had on CD-ROM, plus the many I had inadvertantly pirated.\u003C/p>\n\u003Cp>I remember it had an earlier version of System 7 (what I consider to be the quintissential “Classic Mac OS”) so it was missing some small features that were on the newer university computers. A couple of those features that come to mind are the Control Strip, and the more 3D-esque UI style, both introduced in later version of System 7. I discovered that these features were merely system extensions so I resolved to copy those extensions onto a floppy disk, copy them into the Extensions folder on our Mac at home, and cross my fingers. To my shock and awe, it worked, and that’s where my love for tinkering with computers blossomed.\u003C/p>\n\u003Cp>Not too long after, I discovered the application ResEdit, which could have been dangerous, but thankfully I was usually smart enough to make duplicates of anything before modifying them (guess I was born with good data hygene) and lucky enough to not trash any crucial system files.\u003C/p>\n\u003Cp>Later, in middle school and high school, I started making real simple websites, set up a forum (remember those?!), and learned some rudimentary C, tried (and failed) to learn Objective C. In addition, the Unix underpinnings of Mac OS X introduced me to tinkering via the command line.\u003C/p>\n\u003Cp>Would I have followed the same, or similar, path if I’d only ever used Windows PCs? What about if the Macintosh never existed? We’ll never know, but I can say for sure that I wouldn’t adore computers in quite the same way. Maybe that’s a “fanboi” thing to say, but I do truly believe it.\u003C/p>\n\u003Cp>Oh, and, fun fact; I wrote this entire post in BBEdit 4 inside the Basilisk II emulator running Mac OS 7.6.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I actually still have this exact computer, but it’s long since bitten the dust. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":844,"imagePaths":846,"frontmatter":847},[845],{"depth":367,"slug":368,"text":369},[],{"title":835,"pubDate":848,"tags":849},"2/18/24",[93,131,94],"2024/ramblings-on-the-macintosh.md","2024/rip-homepod-mini",{"id":851,"data":853,"body":857,"filePath":858,"digest":859,"rendered":860,"legacyId":869},{"title":854,"pubDate":855,"tags":856},"RIP HomePod Mini",["Date","2024-05-02T04:00:00.000Z"],[94],"Recently, my HomePod Mini broke. It will no longer even power on at all. I think I may have damaged the _NON-REMOVABLE_ cable, perhaps while moving furniture (I'm not entirely sure _when_ it broke, but I'll get into that), and my options are send it in to Apple for repair or buy a new one. I have zero motivation to do either.\n\nI've owned my fair share of Apple products over the years, and while most of them have had flaws that got under my skin (but honestly, what product doesn't), none of them have consistently frustrated me as much as the HomePod.\n\nBut first, let's start off with the things I like; It looks nice, sounds really good (at least to my ears, but I am admittedly _not_ an audiophile), and is just overall a well-made piece of hardware - non-removable power cable notwithstanding.\n\nHowever, all of that is totally undone by the software. Specifically, Siri.\n\nI never really understood the complains people had about Siri before I had a HomePod. Probably because I never really used Siri regularly on my other devices.[^1] But Siri is the primary way you interact with the HomePod. Sure you can just AirPlay some music to it from your phone, but it's, at least in theory, easier to say \"Hey Siri, play some music\" and have it intelligently play a selection of music that fits your tastes.\n\nWhen it worked, it was amazing. But when it didn't, which slowly became more and more common over time, it was infuriating. The number of times it would just fail to do something I asked it to do 100 times before without issue by responding \"I'm sorry, I can't do that\" was, as the meme says, Too Damn High!\n\nHowever, the last straw for me was during the period sometime after iOS 16 (can't remember exactly which update, but it was after the initial release of version 16), and leading up to the release of iOS 17, when it would consistently insist it wasn't connected to the internet. No amount of factory resets would resolve the issue for more than a day, and eventually even AirPlay would just decide to randomly stop working. I know it wasn't my network because during this period I moved to a new apartment and had to get a whole new network setup, and the issue still persisted.\n\nBy the time iOS 17 rolled around and the bulk of the issues seemed to be over though, I had already fell out of the habit of actually using my HomePod. Worst of all though, I lost trust that it would continue to function reliably. It just continued to sit on my shelf, in silence, for months after iOS 17 seemingly fixed my woes.\n\nThen one day I decided to play some music. Not sure what possessed me to try on that particular day, perhaps I was feeling a bit masochistic, but when I spoke the words, \"Hey Siri, play the new Taylor Swift album,\" I was met with silence. I asked again, still nothing. I tried the old \"turn it off and on again\", and the weird little lightshow it usually does didn't happen. I tried another outlet, and got the same result, and I finally accepted that thus cool-but-infuriating little speaker was dead. I hadn't used it in weeks, and I'd moved furniture around to clean several times in that period so I can only assume I damaged the (I'll repeat; _NON-REMOVABLE_) cable while doing that.\n\nMy first thought was, \"Well, surely I can just buy a replacement cable.\" That is when I learned the hard truth.\n\nMy second thought was, \"Well, I'll just buy a new one.\" So I went to Apple.com, added a nice dark blue HomePod Mini to my cart, and decided that I'd wait.\n\nIt's been a week, the HomePod is still in my cart, and I'm not sure I'll ever hit that checkout button. The truth is, I don't miss it. I'd love a little high-quality speaker to play music and podcasts out of, but it's just not worth the frustration for me. I'd pay at least $100 for a speaker that sounds as good as the HomePod Mini, supports AirPlay, and does not have Siri (or any other virtual assistant). That's the route I'd probably go _if_ I can find something like that, though I'm not crossing my fingers.\n\nSo, RIP to my HomePod Mini, the most infuriating Apple product I've ever used.\n\n[^1]: I use Siri occasionally on my iPhone, and not at all on my Mac or iPad.","src/content/blog/2024/rip-homepod-mini.md","d3efe122fb9807ba",{"html":861,"metadata":862},"\u003Cp>Recently, my HomePod Mini broke. It will no longer even power on at all. I think I may have damaged the \u003Cem>NON-REMOVABLE\u003C/em> cable, perhaps while moving furniture (I’m not entirely sure \u003Cem>when\u003C/em> it broke, but I’ll get into that), and my options are send it in to Apple for repair or buy a new one. I have zero motivation to do either.\u003C/p>\n\u003Cp>I’ve owned my fair share of Apple products over the years, and while most of them have had flaws that got under my skin (but honestly, what product doesn’t), none of them have consistently frustrated me as much as the HomePod.\u003C/p>\n\u003Cp>But first, let’s start off with the things I like; It looks nice, sounds really good (at least to my ears, but I am admittedly \u003Cem>not\u003C/em> an audiophile), and is just overall a well-made piece of hardware - non-removable power cable notwithstanding.\u003C/p>\n\u003Cp>However, all of that is totally undone by the software. Specifically, Siri.\u003C/p>\n\u003Cp>I never really understood the complains people had about Siri before I had a HomePod. Probably because I never really used Siri regularly on my other devices.\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup> But Siri is the primary way you interact with the HomePod. Sure you can just AirPlay some music to it from your phone, but it’s, at least in theory, easier to say “Hey Siri, play some music” and have it intelligently play a selection of music that fits your tastes.\u003C/p>\n\u003Cp>When it worked, it was amazing. But when it didn’t, which slowly became more and more common over time, it was infuriating. The number of times it would just fail to do something I asked it to do 100 times before without issue by responding “I’m sorry, I can’t do that” was, as the meme says, Too Damn High!\u003C/p>\n\u003Cp>However, the last straw for me was during the period sometime after iOS 16 (can’t remember exactly which update, but it was after the initial release of version 16), and leading up to the release of iOS 17, when it would consistently insist it wasn’t connected to the internet. No amount of factory resets would resolve the issue for more than a day, and eventually even AirPlay would just decide to randomly stop working. I know it wasn’t my network because during this period I moved to a new apartment and had to get a whole new network setup, and the issue still persisted.\u003C/p>\n\u003Cp>By the time iOS 17 rolled around and the bulk of the issues seemed to be over though, I had already fell out of the habit of actually using my HomePod. Worst of all though, I lost trust that it would continue to function reliably. It just continued to sit on my shelf, in silence, for months after iOS 17 seemingly fixed my woes.\u003C/p>\n\u003Cp>Then one day I decided to play some music. Not sure what possessed me to try on that particular day, perhaps I was feeling a bit masochistic, but when I spoke the words, “Hey Siri, play the new Taylor Swift album,” I was met with silence. I asked again, still nothing. I tried the old “turn it off and on again”, and the weird little lightshow it usually does didn’t happen. I tried another outlet, and got the same result, and I finally accepted that thus cool-but-infuriating little speaker was dead. I hadn’t used it in weeks, and I’d moved furniture around to clean several times in that period so I can only assume I damaged the (I’ll repeat; \u003Cem>NON-REMOVABLE\u003C/em>) cable while doing that.\u003C/p>\n\u003Cp>My first thought was, “Well, surely I can just buy a replacement cable.” That is when I learned the hard truth.\u003C/p>\n\u003Cp>My second thought was, “Well, I’ll just buy a new one.” So I went to Apple.com, added a nice dark blue HomePod Mini to my cart, and decided that I’d wait.\u003C/p>\n\u003Cp>It’s been a week, the HomePod is still in my cart, and I’m not sure I’ll ever hit that checkout button. The truth is, I don’t miss it. I’d love a little high-quality speaker to play music and podcasts out of, but it’s just not worth the frustration for me. I’d pay at least $100 for a speaker that sounds as good as the HomePod Mini, supports AirPlay, and does not have Siri (or any other virtual assistant). That’s the route I’d probably go \u003Cem>if\u003C/em> I can find something like that, though I’m not crossing my fingers.\u003C/p>\n\u003Cp>So, RIP to my HomePod Mini, the most infuriating Apple product I’ve ever used.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I use Siri occasionally on my iPhone, and not at all on my Mac or iPad. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":863,"imagePaths":865,"frontmatter":866},[864],{"depth":367,"slug":368,"text":369},[],{"title":854,"pubDate":867,"tags":868},"5/2/24",[94],"2024/rip-homepod-mini.md","2025/announcing-autodock",{"id":870,"data":872,"body":876,"filePath":877,"digest":878,"rendered":879,"legacyId":887},{"title":873,"pubDate":874,"tags":875},"Announcing AutoDock",["Date","2025-01-17T05:00:00.000Z"],[131,132,448],"I'm a MacBook Air user who often uses a larger external display, and I have a, perhaps, idiosyncratic desire to have the dock always visible on the larger display at my desk, but prefer it hidden when using the smaller, built-in one.\n\nWhile it's not all that inconvenient to manually swap the dock with a quick \u003Ckbd>opt\u003C/kbd> + \u003Ckbd>cmd\u003C/kbd> + \u003Ckbd>D\u003C/kbd>, I thought it would be cool to automate the process based on display size. I looked around for an app that would do this, and couldn't find one that worked reliably.\n\nSo, like any nerd with a bit too much free time, I thought I could make one myself. The problem is, I didn't know where to start, so I ended up putting the project off for months. Finally, last night I got a bit inspired to at least learn how to detect and read the displays connected to a Mac, which involved diving into the CoreGraphics API, something I was pretty unfamiliar with.\n\nOne thing led to another, and before I knew it I went from my original idea to working MVP in just a couple hours, which was not at all my plan. This morning, I had a few ideas to improve the UX which I then implemented and decided it was good enough to throw the 1.0 up online.\n\nIt's not perfect, but it's probably the first Mac app that I've made that I can say I'm truly proud of. The main thing I don't like is the fact that the app has to kill the Dock whenever autohiding gets switched on or off–though I've somewhat mitigated this by checking the Dock's current autohide status and only applying the changes if there's actually a change–but I'm not sure that's something that can be worked around. (If you do happen to know of a way, please [reach out to me on Mastodon](https://mastodon.social/@ghalldev) or [submit an issue](https://github.com/ghall89/AutoDock/issues/new?template=Blank+issue))\n\nFinally, due to the nature of the app, it is not sandboxed. If there is a way to handle updating the Dock in a way that will allow me to enable sandboxing I will implement it, but, based on my limited knowlege of Mac development, I don't think that's very likely.\n\nIf the app sounds useful to you, and you'd like to try it out, you can install it via Homebrew with `brew tap ghall89/tap && brew install --cask autodock`, or [download it manually](https://github.com/ghall89/AutoDock/releases).","src/content/blog/2025/announcing-autodock.md","68b9a725a6640561",{"html":880,"metadata":881},"\u003Cp>I’m a MacBook Air user who often uses a larger external display, and I have a, perhaps, idiosyncratic desire to have the dock always visible on the larger display at my desk, but prefer it hidden when using the smaller, built-in one.\u003C/p>\n\u003Cp>While it’s not all that inconvenient to manually swap the dock with a quick \u003Ckbd>opt\u003C/kbd> + \u003Ckbd>cmd\u003C/kbd> + \u003Ckbd>D\u003C/kbd>, I thought it would be cool to automate the process based on display size. I looked around for an app that would do this, and couldn’t find one that worked reliably.\u003C/p>\n\u003Cp>So, like any nerd with a bit too much free time, I thought I could make one myself. The problem is, I didn’t know where to start, so I ended up putting the project off for months. Finally, last night I got a bit inspired to at least learn how to detect and read the displays connected to a Mac, which involved diving into the CoreGraphics API, something I was pretty unfamiliar with.\u003C/p>\n\u003Cp>One thing led to another, and before I knew it I went from my original idea to working MVP in just a couple hours, which was not at all my plan. This morning, I had a few ideas to improve the UX which I then implemented and decided it was good enough to throw the 1.0 up online.\u003C/p>\n\u003Cp>It’s not perfect, but it’s probably the first Mac app that I’ve made that I can say I’m truly proud of. The main thing I don’t like is the fact that the app has to kill the Dock whenever autohiding gets switched on or off–though I’ve somewhat mitigated this by checking the Dock’s current autohide status and only applying the changes if there’s actually a change–but I’m not sure that’s something that can be worked around. (If you do happen to know of a way, please \u003Ca href=\"https://mastodon.social/@ghalldev\">reach out to me on Mastodon\u003C/a> or \u003Ca href=\"https://github.com/ghall89/AutoDock/issues/new?template=Blank+issue\">submit an issue\u003C/a>)\u003C/p>\n\u003Cp>Finally, due to the nature of the app, it is not sandboxed. If there is a way to handle updating the Dock in a way that will allow me to enable sandboxing I will implement it, but, based on my limited knowlege of Mac development, I don’t think that’s very likely.\u003C/p>\n\u003Cp>If the app sounds useful to you, and you’d like to try it out, you can install it via Homebrew with \u003Ccode>brew tap ghall89/tap && brew install --cask autodock\u003C/code>, or \u003Ca href=\"https://github.com/ghall89/AutoDock/releases\">download it manually\u003C/a>.\u003C/p>",{"headings":882,"imagePaths":883,"frontmatter":884},[],[],{"title":873,"pubDate":885,"tags":886},"1/17/25",[131,132,448],"2025/announcing-autodock.md","2025/music-blog-challenge",{"id":888,"data":890,"body":896,"filePath":897,"digest":898,"rendered":899,"legacyId":937},{"title":891,"pubDate":892,"tags":893},"Blog Questions Challenge: Music Edition",["Date","2025-02-07T05:00:00.000Z"],[894,895],"Music","Blog Challenge","For my very first Blog Question Challenge, I've been tagged by [Kyle](https://weblog.kylereddoch.me/2025/02/blog-questions-challenge-music-edition) to answer questions about music. This is going to be a bit of a challenge, but here we go...\n\n## What Are 5 Of Your Favorite Albums?\n\nThere are so many albums I'd consider favorites, narrowing them down to just 5 seems like an impossible task. Here's the 5 I've whittled my list down to, with the disclaimer that I don't necessarily like them more than other albums that didn't make the cut.\n\n- The Else - They Might Be Giants\n- Ocean Eyes - Owl City\n- Franz Ferdinand - Franz Ferdinand\n- Hey, I'm Just Like You - Tegan and Sara\n- White Blood Cells - The White Stripes\n\n## What Are 5 Of Your Favorite Songs?\n\nDitto for songs, but 100x more difficult...\n\n- Synopsis for Latecomers - They Might Be Giants\n- What Feels Like Eternity - Metric\n- The Last Great American Dynasty - Taylor Swift\n- This is Why - Paramore\n- Good Morning Tucson - Jonathan Coulton\n\n## Favorite Instrument(s)?\n\nI used to play the trumpet, so that's probably my favorite. After that, probably keyboard because I think it would be fun to play.\n\n## What Song Or Album Are You Currently Listening To?\n\nAs I write this, I am listening to Poké & Chill, which is an album of lo-fi renditions of music from the Pokémon video games.\n\n## Do You Listen To The Radio, And If So, How Often?\n\nI don't listen to the radio at all anymore. The one station I did listen to closed and got sold off years ago, and so my days of listening to the radio ended.\n\n## How Often Do You Listen To Music?\n\nAlmost constantly. I sometimes substitute it out for podcasts, but I'm generally listening to music while I work, clean, or just relax. I also listen to music while I write, but I generally only listen to various lo-fi albums.\n\n## How Often Do You Discover Music And How Do You Discover It?\n\nI don't discover as much new music as I would like to, but when I do it's through Apple Music in the New section, or from listening to some of their recommended playlists.\n\n## What’s A Song Or Album You Enjoy That You Wish Had More Recognition?\n\nI'm absolutely 100% biased here since I know the artist, but my pick is [Here's to the Sojourners](https://album.link/i/1598277466) by Nathan Landis Funk. Cool music by a cool guy.\n\n## What’s Your Favorite Song Of All Time?\n\nThis answer changes constantly, but at the moment I'd have to pick Birdhouse in Your Soul by They Might Be Giants. It's perhaps an odd choice, but it never fails to cheer me up when I'm feeling down and that's enough to cement it as my favorite...for the moment.\n\n## Has Your Taste Of Music Evolved Over The Years?\n\nI'd say it's expanded quite a bit, and I'd even say changed slighlty. I had a very limited taste in high school, and, while I still do like a lot of the music I listened to then, as my tastes have expanded I've found myself perferring a lot of different artists and genres. \"Alternative\" is still the most common genre in my Apple Music library, but over the last 16 years I've added electronic, folk, grunge, K-pop, and \"singer/songwriter\" (though I'm still not entirely sure what that means as a genre 🤷‍♂️).\n\nSo, after much overthinking, those are my answers to these musical questions. Thanks again to Kyle for tagging me. I'm tagging [Mark @ CodeMacLife](https://blog.codemaclife.net), good luck!","src/content/blog/2025/music-blog-challenge.md","6a14b92f68c390a8",{"html":900,"metadata":901},"\u003Cp>For my very first Blog Question Challenge, I’ve been tagged by \u003Ca href=\"https://weblog.kylereddoch.me/2025/02/blog-questions-challenge-music-edition\">Kyle\u003C/a> to answer questions about music. This is going to be a bit of a challenge, but here we go…\u003C/p>\n\u003Ch2 id=\"what-are-5-of-your-favorite-albums\">What Are 5 Of Your Favorite Albums?\u003C/h2>\n\u003Cp>There are so many albums I’d consider favorites, narrowing them down to just 5 seems like an impossible task. Here’s the 5 I’ve whittled my list down to, with the disclaimer that I don’t necessarily like them more than other albums that didn’t make the cut.\u003C/p>\n\u003Cul>\n\u003Cli>The Else - They Might Be Giants\u003C/li>\n\u003Cli>Ocean Eyes - Owl City\u003C/li>\n\u003Cli>Franz Ferdinand - Franz Ferdinand\u003C/li>\n\u003Cli>Hey, I’m Just Like You - Tegan and Sara\u003C/li>\n\u003Cli>White Blood Cells - The White Stripes\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"what-are-5-of-your-favorite-songs\">What Are 5 Of Your Favorite Songs?\u003C/h2>\n\u003Cp>Ditto for songs, but 100x more difficult…\u003C/p>\n\u003Cul>\n\u003Cli>Synopsis for Latecomers - They Might Be Giants\u003C/li>\n\u003Cli>What Feels Like Eternity - Metric\u003C/li>\n\u003Cli>The Last Great American Dynasty - Taylor Swift\u003C/li>\n\u003Cli>This is Why - Paramore\u003C/li>\n\u003Cli>Good Morning Tucson - Jonathan Coulton\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"favorite-instruments\">Favorite Instrument(s)?\u003C/h2>\n\u003Cp>I used to play the trumpet, so that’s probably my favorite. After that, probably keyboard because I think it would be fun to play.\u003C/p>\n\u003Ch2 id=\"what-song-or-album-are-you-currently-listening-to\">What Song Or Album Are You Currently Listening To?\u003C/h2>\n\u003Cp>As I write this, I am listening to Poké & Chill, which is an album of lo-fi renditions of music from the Pokémon video games.\u003C/p>\n\u003Ch2 id=\"do-you-listen-to-the-radio-and-if-so-how-often\">Do You Listen To The Radio, And If So, How Often?\u003C/h2>\n\u003Cp>I don’t listen to the radio at all anymore. The one station I did listen to closed and got sold off years ago, and so my days of listening to the radio ended.\u003C/p>\n\u003Ch2 id=\"how-often-do-you-listen-to-music\">How Often Do You Listen To Music?\u003C/h2>\n\u003Cp>Almost constantly. I sometimes substitute it out for podcasts, but I’m generally listening to music while I work, clean, or just relax. I also listen to music while I write, but I generally only listen to various lo-fi albums.\u003C/p>\n\u003Ch2 id=\"how-often-do-you-discover-music-and-how-do-you-discover-it\">How Often Do You Discover Music And How Do You Discover It?\u003C/h2>\n\u003Cp>I don’t discover as much new music as I would like to, but when I do it’s through Apple Music in the New section, or from listening to some of their recommended playlists.\u003C/p>\n\u003Ch2 id=\"whats-a-song-or-album-you-enjoy-that-you-wish-had-more-recognition\">What’s A Song Or Album You Enjoy That You Wish Had More Recognition?\u003C/h2>\n\u003Cp>I’m absolutely 100% biased here since I know the artist, but my pick is \u003Ca href=\"https://album.link/i/1598277466\">Here’s to the Sojourners\u003C/a> by Nathan Landis Funk. Cool music by a cool guy.\u003C/p>\n\u003Ch2 id=\"whats-your-favorite-song-of-all-time\">What’s Your Favorite Song Of All Time?\u003C/h2>\n\u003Cp>This answer changes constantly, but at the moment I’d have to pick Birdhouse in Your Soul by They Might Be Giants. It’s perhaps an odd choice, but it never fails to cheer me up when I’m feeling down and that’s enough to cement it as my favorite…for the moment.\u003C/p>\n\u003Ch2 id=\"has-your-taste-of-music-evolved-over-the-years\">Has Your Taste Of Music Evolved Over The Years?\u003C/h2>\n\u003Cp>I’d say it’s expanded quite a bit, and I’d even say changed slighlty. I had a very limited taste in high school, and, while I still do like a lot of the music I listened to then, as my tastes have expanded I’ve found myself perferring a lot of different artists and genres. “Alternative” is still the most common genre in my Apple Music library, but over the last 16 years I’ve added electronic, folk, grunge, K-pop, and “singer/songwriter” (though I’m still not entirely sure what that means as a genre 🤷‍♂️).\u003C/p>\n\u003Cp>So, after much overthinking, those are my answers to these musical questions. Thanks again to Kyle for tagging me. I’m tagging \u003Ca href=\"https://blog.codemaclife.net\">Mark @ CodeMacLife\u003C/a>, good luck!\u003C/p>",{"headings":902,"imagePaths":933,"frontmatter":934},[903,906,909,912,915,918,921,924,927,930],{"depth":367,"slug":904,"text":905},"what-are-5-of-your-favorite-albums","What Are 5 Of Your Favorite Albums?",{"depth":367,"slug":907,"text":908},"what-are-5-of-your-favorite-songs","What Are 5 Of Your Favorite Songs?",{"depth":367,"slug":910,"text":911},"favorite-instruments","Favorite Instrument(s)?",{"depth":367,"slug":913,"text":914},"what-song-or-album-are-you-currently-listening-to","What Song Or Album Are You Currently Listening To?",{"depth":367,"slug":916,"text":917},"do-you-listen-to-the-radio-and-if-so-how-often","Do You Listen To The Radio, And If So, How Often?",{"depth":367,"slug":919,"text":920},"how-often-do-you-listen-to-music","How Often Do You Listen To Music?",{"depth":367,"slug":922,"text":923},"how-often-do-you-discover-music-and-how-do-you-discover-it","How Often Do You Discover Music And How Do You Discover It?",{"depth":367,"slug":925,"text":926},"whats-a-song-or-album-you-enjoy-that-you-wish-had-more-recognition","What’s A Song Or Album You Enjoy That You Wish Had More Recognition?",{"depth":367,"slug":928,"text":929},"whats-your-favorite-song-of-all-time","What’s Your Favorite Song Of All Time?",{"depth":367,"slug":931,"text":932},"has-your-taste-of-music-evolved-over-the-years","Has Your Taste Of Music Evolved Over The Years?",[],{"title":891,"pubDate":935,"tags":936},"2/7/25",[894,895],"2025/music-blog-challenge.md"] \ No newline at end of file +[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.1.9","content-config-digest","4d06b0cb4cf5ac0b","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://ghall.blog\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true},\"redirects\":{\"/posts/[...slug]\":\"/blog/[...slug]\"},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":\"shiki\",\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"svg\":{\"mode\":\"inline\"}},\"legacy\":{\"collections\":false}}","blog",["Map",11,12,31,32,60,61,87,88,107,108,125,126,160,161,178,179,196,197,214,215,242,243,260,261,278,279,296,297,317,318,335,336,353,354,375,376,405,406,423,424,442,443,461,462,479,480,497,498,515,516,533,534,551,552,585,586,605,606,624,625,642,643,661,662,679,680,698,699,732,733,759,760,786,787,814,815,832,833,851,852,870,871,888,889,938,939],"2022/ask-the-darn-question",{"id":11,"data":13,"body":19,"filePath":20,"digest":21,"rendered":22,"legacyId":30},{"title":14,"pubDate":15,"tags":16},"Ask The Darn Question!",["Date","2022-11-05T00:00:00.000Z"],[17,18],"Web Dev","Mental Health","One of the areas I struggle with when it comes to working in a professional web development environment is asking questions. Whether it’s a problem I’m stuck on, or something about the codebase I don’t quite understand, I’m more likely to end up banging my head against the wall trying to find the answers myself than reach out and ask someone a question.\n\nIt’s not out of pride, at least I don’t think it is. It’s more about insecurity. I’m afraid asking for help will somehow reveal to the more experienced devs that I actually have no idea what I’m doing. I will expose myself as a fraud who doesn’t know the first thing about development, and I don’t deserve to get paid for it.\n\nOf course, logically speaking, this is not true. It’s a story told with a combination of imposter syndrome, an anxiety disorder, and a copious amount of logical fallacies. I’m not a fraud, I’m just inexperienced. I can write code, and it may not be the best code ever written but it generally works, and there’s room for me to improve.\n\nAll this to say, it’s ok to ask for help when you need it. I’m writing that as a reminder to myself as much as to you, the reader. No one person has all the answers, and in development there are a multitude of ways to solve a given problem. Consider this: you’re more competent than you give yourself credit for, but maybe you just need a fresh perspective.\n\nI had couple eye-opening experiences this week at work.\n\nFirstly, I was running into an issue where a particular set of values wasn’t getting passed through correctly in our beta environment even though everything was working perfectly when I tested locally on my machine. I was stumped. My boss took a look and suggested I get the values I needed from somewhere else. It worked like a charm! In retrospect, it seemed like the obvious solution, but its easy to get so caught up in looking at a problem in a particular way that you lose sight of other perspectives. In this case, it wasn’t that I didn’t understand what I was doing, I just needed another perspective.\n\nSecondly, earlier in the week I was struggling with trying to track down a particular issue in AWS. I couldn’t find the log I was looking for, and I was completely perplexed. I asked a co-worker, and he asked me if anyone showed me our naming convention for our serverless functions and how to navigate them in AWS. I said no, so he took about 10-15 minutes to show me the ropes. It was something I couldn’t have known, I’d had zero AWS experience before this job and I’m still in the process of getting to grips with our massive codebase. Nobody had taught me what I needed to know, and I had been too nervous to ask, so I just flat out didn’t know.\n\nSo, if there’s one thing I hope we all can take away from this it’s that, if we’re truly stuck on something, there’s more harm in not asking questions. There will always be something you don’t know, and there will always be another way of looking at a problem you’re facing. As long as you’re not asking for help as a first resort, and you’re putting in the effort to try and solve the problem yourself, then just ask the darn question!\n\nAnd if you’re ever feeling any doubt, come back and read this post. I know I will.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/ask-the-darn-question.md","4cb275af5430623a",{"html":23,"metadata":24},"\u003Cp>One of the areas I struggle with when it comes to working in a professional web development environment is asking questions. Whether it’s a problem I’m stuck on, or something about the codebase I don’t quite understand, I’m more likely to end up banging my head against the wall trying to find the answers myself than reach out and ask someone a question.\u003C/p>\n\u003Cp>It’s not out of pride, at least I don’t think it is. It’s more about insecurity. I’m afraid asking for help will somehow reveal to the more experienced devs that I actually have no idea what I’m doing. I will expose myself as a fraud who doesn’t know the first thing about development, and I don’t deserve to get paid for it.\u003C/p>\n\u003Cp>Of course, logically speaking, this is not true. It’s a story told with a combination of imposter syndrome, an anxiety disorder, and a copious amount of logical fallacies. I’m not a fraud, I’m just inexperienced. I can write code, and it may not be the best code ever written but it generally works, and there’s room for me to improve.\u003C/p>\n\u003Cp>All this to say, it’s ok to ask for help when you need it. I’m writing that as a reminder to myself as much as to you, the reader. No one person has all the answers, and in development there are a multitude of ways to solve a given problem. Consider this: you’re more competent than you give yourself credit for, but maybe you just need a fresh perspective.\u003C/p>\n\u003Cp>I had couple eye-opening experiences this week at work.\u003C/p>\n\u003Cp>Firstly, I was running into an issue where a particular set of values wasn’t getting passed through correctly in our beta environment even though everything was working perfectly when I tested locally on my machine. I was stumped. My boss took a look and suggested I get the values I needed from somewhere else. It worked like a charm! In retrospect, it seemed like the obvious solution, but its easy to get so caught up in looking at a problem in a particular way that you lose sight of other perspectives. In this case, it wasn’t that I didn’t understand what I was doing, I just needed another perspective.\u003C/p>\n\u003Cp>Secondly, earlier in the week I was struggling with trying to track down a particular issue in AWS. I couldn’t find the log I was looking for, and I was completely perplexed. I asked a co-worker, and he asked me if anyone showed me our naming convention for our serverless functions and how to navigate them in AWS. I said no, so he took about 10-15 minutes to show me the ropes. It was something I couldn’t have known, I’d had zero AWS experience before this job and I’m still in the process of getting to grips with our massive codebase. Nobody had taught me what I needed to know, and I had been too nervous to ask, so I just flat out didn’t know.\u003C/p>\n\u003Cp>So, if there’s one thing I hope we all can take away from this it’s that, if we’re truly stuck on something, there’s more harm in not asking questions. There will always be something you don’t know, and there will always be another way of looking at a problem you’re facing. As long as you’re not asking for help as a first resort, and you’re putting in the effort to try and solve the problem yourself, then just ask the darn question!\u003C/p>\n\u003Cp>And if you’re ever feeling any doubt, come back and read this post. I know I will.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":25,"imagePaths":26,"frontmatter":27},[],[],{"title":14,"pubDate":28,"tags":29},"2022-11-05",[17,18],"2022/ask-the-darn-question.md","2022/building-ghalldev-30",{"id":31,"data":33,"body":38,"filePath":39,"digest":40,"rendered":41,"legacyId":59},{"title":34,"pubDate":35,"tags":36},"Building ghall.dev 3.0",["Date","2022-10-16T00:00:00.000Z"],[17,37],"Making Stuff","Welcome to my brand new website, the 3rd iteration of ghall.dev! For the last year-and-a-half this has simply been home to my portfolio, but for a while now I’ve wanted to expand from a simple, single-page site to a multi-page site with a blog (which you are of course reading right now).\n\nIn the previous version of this site, I coded myself into a corner. I did a lot of little things I thought were cool, but maybe weren’t the best ideas design-wise, and put things together in such a way that I couldn’t simply tweak things very easily. One of the lessons I took from the experience of building and maintaining that site was to keep things simple, and not try to be too flashy for the sake of being flashy.\n\nAnother lesson I took was to plan ahead for any changes. I didn’t really think about wanting to start a blog until after the site was up, and if I had made things a little easier by planning for future changes it probably wouldn’t have taken a “nuke-and-pave” to cleanly integrate a blog.\n\nI’m also a much better developer than I was when I built version 2. Not saying I’m amazing, I’ve only been at this since late 2020 after all, but I’ve learned a lot about coding, and organizing code in a way that makes sense. Of course, a year from now I’ll be wondering what the heck I was thinking when I originally wrote the code for this site.\n\nAnyway, the first step to any project like this is deciding on the tech stack. As this is a solo project, being my personal site and all, I had a bit of leeway to experiment with different pieces of that puzzle, but I decided on the following:\n\n### Front-end Framework: Next.js\n\nI’m a relative newcomer to Next.js, as I’ve only been using it for about 2 months now. But the learning curve was really low coming from React, and I was able to pick it up pretty quickly when I started my current job.\n\nI prefer it to straight React in a few ways, one of the biggest being how easy it is to set up a multi-page site like this. While it’s definitely possible in React, Next.js makes it painfully simple. It was a no-brainer, and it got me rolling so fast I was able to built this website in a matter of days.\n\n[Check out Next.js](https://nextjs.org/)\n\nFor styling, I went with good old Tailwind, which I also used on the previous iteration of my site. I’m a very visual person, and Tailwind makes it so easy for me to just built the designs I have in my head.\n\n[Check out Tailwind](https://tailwindcss.com/)\n\n### Headless CMS: Cosmic\n\nOn the previous iteration of my website, I had built a rudimentary CMS in the command line using M3O for a database, which I then served to the front-end through a small API I built. It was slow and clunky, but it was good enough for periodically updating my portfolio. But, when M3O changed their pricing model, this system became economically infeasible, so I switched to essentially hardcoding my portoflio into my sourcecode, which was something I wanted to avoid. Also, it made the fact I was building my front-end in React a little silly since I had eliminated the one bit of dynamic content on my website. But it was serving its purpose, so I left it.\n\nFor this new iteration, since I wanted to not only go back to managing my portfolio on the back-end, but also build a blog, I knew the best thing to do was to find a pre-packaged solution so I could spend more time focusing on my strengths.\n\n[Check out Cosmic](https://www.cosmicjs.com/)\n\n### Final Notes\n\nThere are a couple little Node packages I’ve used to make things a little easier, such as [date-fns](https://date-fns.org/), [react-jsx-parser](https://github.com/TroyAlford/react-jsx-parser), and [Framer Motion](https://www.framer.com/motion/). I particularly had fun with Framer Motion, but I ended up really toning down some of the animations.\n\nAlso, I ended up using the ever-popular VS Code as my text editor instead of my usual go-to, [Nova](https://nova.app/). I started using VS Code again for the first time since early 2021 because of work, and I quickly got spoiled by a lot of the autocomplete features, expecially automatic imports. There will definitly be a breakdown of my thoughts about VS Code vs Nova at some point in the future.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/building-ghalldev-30.md","e613db37e72d2ffe",{"html":42,"metadata":43},"\u003Cp>Welcome to my brand new website, the 3rd iteration of ghall.dev! For the last year-and-a-half this has simply been home to my portfolio, but for a while now I’ve wanted to expand from a simple, single-page site to a multi-page site with a blog (which you are of course reading right now).\u003C/p>\n\u003Cp>In the previous version of this site, I coded myself into a corner. I did a lot of little things I thought were cool, but maybe weren’t the best ideas design-wise, and put things together in such a way that I couldn’t simply tweak things very easily. One of the lessons I took from the experience of building and maintaining that site was to keep things simple, and not try to be too flashy for the sake of being flashy.\u003C/p>\n\u003Cp>Another lesson I took was to plan ahead for any changes. I didn’t really think about wanting to start a blog until after the site was up, and if I had made things a little easier by planning for future changes it probably wouldn’t have taken a “nuke-and-pave” to cleanly integrate a blog.\u003C/p>\n\u003Cp>I’m also a much better developer than I was when I built version 2. Not saying I’m amazing, I’ve only been at this since late 2020 after all, but I’ve learned a lot about coding, and organizing code in a way that makes sense. Of course, a year from now I’ll be wondering what the heck I was thinking when I originally wrote the code for this site.\u003C/p>\n\u003Cp>Anyway, the first step to any project like this is deciding on the tech stack. As this is a solo project, being my personal site and all, I had a bit of leeway to experiment with different pieces of that puzzle, but I decided on the following:\u003C/p>\n\u003Ch3 id=\"front-end-framework-nextjs\">Front-end Framework: Next.js\u003C/h3>\n\u003Cp>I’m a relative newcomer to Next.js, as I’ve only been using it for about 2 months now. But the learning curve was really low coming from React, and I was able to pick it up pretty quickly when I started my current job.\u003C/p>\n\u003Cp>I prefer it to straight React in a few ways, one of the biggest being how easy it is to set up a multi-page site like this. While it’s definitely possible in React, Next.js makes it painfully simple. It was a no-brainer, and it got me rolling so fast I was able to built this website in a matter of days.\u003C/p>\n\u003Cp>\u003Ca href=\"https://nextjs.org/\">Check out Next.js\u003C/a>\u003C/p>\n\u003Cp>For styling, I went with good old Tailwind, which I also used on the previous iteration of my site. I’m a very visual person, and Tailwind makes it so easy for me to just built the designs I have in my head.\u003C/p>\n\u003Cp>\u003Ca href=\"https://tailwindcss.com/\">Check out Tailwind\u003C/a>\u003C/p>\n\u003Ch3 id=\"headless-cms-cosmic\">Headless CMS: Cosmic\u003C/h3>\n\u003Cp>On the previous iteration of my website, I had built a rudimentary CMS in the command line using M3O for a database, which I then served to the front-end through a small API I built. It was slow and clunky, but it was good enough for periodically updating my portfolio. But, when M3O changed their pricing model, this system became economically infeasible, so I switched to essentially hardcoding my portoflio into my sourcecode, which was something I wanted to avoid. Also, it made the fact I was building my front-end in React a little silly since I had eliminated the one bit of dynamic content on my website. But it was serving its purpose, so I left it.\u003C/p>\n\u003Cp>For this new iteration, since I wanted to not only go back to managing my portfolio on the back-end, but also build a blog, I knew the best thing to do was to find a pre-packaged solution so I could spend more time focusing on my strengths.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.cosmicjs.com/\">Check out Cosmic\u003C/a>\u003C/p>\n\u003Ch3 id=\"final-notes\">Final Notes\u003C/h3>\n\u003Cp>There are a couple little Node packages I’ve used to make things a little easier, such as \u003Ca href=\"https://date-fns.org/\">date-fns\u003C/a>, \u003Ca href=\"https://github.com/TroyAlford/react-jsx-parser\">react-jsx-parser\u003C/a>, and \u003Ca href=\"https://www.framer.com/motion/\">Framer Motion\u003C/a>. I particularly had fun with Framer Motion, but I ended up really toning down some of the animations.\u003C/p>\n\u003Cp>Also, I ended up using the ever-popular VS Code as my text editor instead of my usual go-to, \u003Ca href=\"https://nova.app/\">Nova\u003C/a>. I started using VS Code again for the first time since early 2021 because of work, and I quickly got spoiled by a lot of the autocomplete features, expecially automatic imports. There will definitly be a breakdown of my thoughts about VS Code vs Nova at some point in the future.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":44,"imagePaths":55,"frontmatter":56},[45,49,52],{"depth":46,"slug":47,"text":48},3,"front-end-framework-nextjs","Front-end Framework: Next.js",{"depth":46,"slug":50,"text":51},"headless-cms-cosmic","Headless CMS: Cosmic",{"depth":46,"slug":53,"text":54},"final-notes","Final Notes",[],{"title":34,"pubDate":57,"tags":58},"2022-10-16",[17,37],"2022/building-ghalldev-30.md","2022/coding-with-depression",{"id":60,"data":62,"body":66,"filePath":67,"digest":68,"rendered":69,"legacyId":86},{"title":63,"pubDate":64,"tags":65},"Coding With Depression",["Date","2022-11-11T00:00:00.000Z"],[17,18],"One of the reasons I started this blog, aside from wanting to share my thoughts and experiences as someone early in my web development career, was to write about mental illness as it relates to development. As you can imagine, it's not an easy topic by any means, as it's something that profoundly affects me personally on a daily basis.\n\nFor a decent chunk of this past week, I've been struggling with a bit of a depressive episode. For me this manifests as lack of motivation, and especially \"brain fog\", which just kills my logical thinking and problem solving skills. Obviously this is not ideal for web development, but I've found ways to make it work and maintain some level of productivity, even if it's not my absolute best.\n\n### Getting Motivated\n\nThe first step to overcoming anything is showing up.\n\nWhether I'm laying in bed wishing I could just go back to sleep, or sitting at my computer struggling to make myself just open my code editor, I have to find a way to get myself motivated. When I'm hitting these low points, I've found it incredibly helpful to break things down into tiny pieces and just work through them a piece at a time.\n\nIf I'm struggling to get out of bed, instead of trying to motivate myself to get up because I need to go to work, I focus on the process one step at a time. It's far easier to motivate myself to do a bunch of little things in sequence than it is to motivate myself to reach the end goal.\n\nThis even applies to just tackling things throughout the day. Today I had a rather large task to complete, and I was simply not motivated to do it. I took it one step at a time, down to the most mundane steps like executing a CLI command, or opening a file. I didn't have to be motivated to finish the task as a whole, I just had to motivate myself to tackle each step until I finished.\n\n### Navigating the Fog\n\nBrain fog is a complicated one. I first experienced the impact it has on coding when I was working on homework for boot camp. It's resulted in me blankly staring at a block of code and just totally forgetting how to read it, or just forgetting the name of a variable I defined less than a minute earlier.\n\nIt's so unbelievably frustrating to experience. The knowledge required to understand the code, the ability needed to problem solve the issue, it's all in there somewhere but it feels like that particular brain function is out of scope.\n\nOne of my bad habits to tackle this problem is coffee. I hate to admit it, but it does help take the edge of the fog.\n\nFirstly, I'd suggest some preventative measures like sleeping, getting some sun when you can, and using a light therapy lamp in the morning on those dark rainy mornings. It seems obvious, but it's worth mentioning these things help manage depression, and, by extension, brain fog.\n\nBut if you're in the moment, the best thing you can do is just step away from the computer for a few minutes. Get up, stretch, walk around, do some jumping jacks, go outside, whatever you can do to just get away from the problem and get your body moving. It's good advice for anyone facing a programming problem, but it's especially good if you're struggling with a bit of brain fog.\n\n### Be Kind to Yourself\n\nThrough all this, the most important thing to remember is to be kind to yourself.\n\nI tend to be extremely self-critical on the best of days, but when I'm struggling and not producing my best work I am even more so. I have to remind myself that this isn't typical, I'm not lazy or dumb, I'm just having a rough time. It's ok to slip up here and there and not be at 100% peak productivity, because I'm doing my best and I'm getting stuff done despite the challenges.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/coding-with-depression.md","d2bf7a0999d48ac1",{"html":70,"metadata":71},"\u003Cp>One of the reasons I started this blog, aside from wanting to share my thoughts and experiences as someone early in my web development career, was to write about mental illness as it relates to development. As you can imagine, it’s not an easy topic by any means, as it’s something that profoundly affects me personally on a daily basis.\u003C/p>\n\u003Cp>For a decent chunk of this past week, I’ve been struggling with a bit of a depressive episode. For me this manifests as lack of motivation, and especially “brain fog”, which just kills my logical thinking and problem solving skills. Obviously this is not ideal for web development, but I’ve found ways to make it work and maintain some level of productivity, even if it’s not my absolute best.\u003C/p>\n\u003Ch3 id=\"getting-motivated\">Getting Motivated\u003C/h3>\n\u003Cp>The first step to overcoming anything is showing up.\u003C/p>\n\u003Cp>Whether I’m laying in bed wishing I could just go back to sleep, or sitting at my computer struggling to make myself just open my code editor, I have to find a way to get myself motivated. When I’m hitting these low points, I’ve found it incredibly helpful to break things down into tiny pieces and just work through them a piece at a time.\u003C/p>\n\u003Cp>If I’m struggling to get out of bed, instead of trying to motivate myself to get up because I need to go to work, I focus on the process one step at a time. It’s far easier to motivate myself to do a bunch of little things in sequence than it is to motivate myself to reach the end goal.\u003C/p>\n\u003Cp>This even applies to just tackling things throughout the day. Today I had a rather large task to complete, and I was simply not motivated to do it. I took it one step at a time, down to the most mundane steps like executing a CLI command, or opening a file. I didn’t have to be motivated to finish the task as a whole, I just had to motivate myself to tackle each step until I finished.\u003C/p>\n\u003Ch3 id=\"navigating-the-fog\">Navigating the Fog\u003C/h3>\n\u003Cp>Brain fog is a complicated one. I first experienced the impact it has on coding when I was working on homework for boot camp. It’s resulted in me blankly staring at a block of code and just totally forgetting how to read it, or just forgetting the name of a variable I defined less than a minute earlier.\u003C/p>\n\u003Cp>It’s so unbelievably frustrating to experience. The knowledge required to understand the code, the ability needed to problem solve the issue, it’s all in there somewhere but it feels like that particular brain function is out of scope.\u003C/p>\n\u003Cp>One of my bad habits to tackle this problem is coffee. I hate to admit it, but it does help take the edge of the fog.\u003C/p>\n\u003Cp>Firstly, I’d suggest some preventative measures like sleeping, getting some sun when you can, and using a light therapy lamp in the morning on those dark rainy mornings. It seems obvious, but it’s worth mentioning these things help manage depression, and, by extension, brain fog.\u003C/p>\n\u003Cp>But if you’re in the moment, the best thing you can do is just step away from the computer for a few minutes. Get up, stretch, walk around, do some jumping jacks, go outside, whatever you can do to just get away from the problem and get your body moving. It’s good advice for anyone facing a programming problem, but it’s especially good if you’re struggling with a bit of brain fog.\u003C/p>\n\u003Ch3 id=\"be-kind-to-yourself\">Be Kind to Yourself\u003C/h3>\n\u003Cp>Through all this, the most important thing to remember is to be kind to yourself.\u003C/p>\n\u003Cp>I tend to be extremely self-critical on the best of days, but when I’m struggling and not producing my best work I am even more so. I have to remind myself that this isn’t typical, I’m not lazy or dumb, I’m just having a rough time. It’s ok to slip up here and there and not be at 100% peak productivity, because I’m doing my best and I’m getting stuff done despite the challenges.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":72,"imagePaths":82,"frontmatter":83},[73,76,79],{"depth":46,"slug":74,"text":75},"getting-motivated","Getting Motivated",{"depth":46,"slug":77,"text":78},"navigating-the-fog","Navigating the Fog",{"depth":46,"slug":80,"text":81},"be-kind-to-yourself","Be Kind to Yourself",[],{"title":63,"pubDate":84,"tags":85},"2022-11-11",[17,18],"2022/coding-with-depression.md","2022/creating-a-dating-profile-with-ai",{"id":87,"data":89,"body":95,"filePath":96,"digest":97,"rendered":98,"legacyId":106},{"title":90,"pubDate":91,"tags":92},"Creating a Dating Profile With AI",["Date","2022-12-10T00:00:00.000Z"],[93,94],"Life","Tech","I’ve been single for a few years now, and I haven’t had a whole lot of success in the dating game. I’m very introverted and socially anxious, so dating apps seemed like the way to go for me. Sadly, I’ve not had a lot of success, and since Covid it seems like the dating scene has only got worse. I’ve been feeling pretty down about it, but I decided to have a little fun and let an AI help me assemble a brand new profile.\n\nMy goal is to, for an entire week, use my AI generated dating profile. That means my bio and prompts would be written by an AI and all my photos would be selected by an AI. Finally, as long as it doesn’t end in disaster, all my opening messages will be generated by an AI–all further responses will be written by me, because otherwise what would be the point?\n\nI decided to use [OpenAI](https://openai.com/) for the written portion, and [Everypixel](https://aesthetics.everypixel.com/) to select the pictures. For the dating app itself, the most important ingredient in this experiment, I decided to go with [Hinge](https://hinge.co/), mainly because I've never used it before.\n\nI decided against using AI generated images because, even though I’m letting an AI create a dating profile for me, I want it to be somewhat genuine. Also I’m not looking to catfish anybody with this image I generated just to see how good AI could make me look:\n\n\u003Cimg src=\"/media/my-ai-portrait.jpg\" width=\"260\" alt=\"an AI-generated portrait of me\" />\n\nOriginally this was going to be one post I’d write over the course of a week, but as I was writing I decided I should split it into 2 parts: Part 1, this part, about setting up the dating profile, and part 2, coming at the end of the experiment, about the experience and how it went.\n\nMy first step was to sign up for Hinge. I went through the sign up process, and got to photos. Hinge requires 6 photos to create a profile, so it was Everypixel’s time to shine! I collected up 42 photos from the last few years—I wasn’t aiming for 42 but, as that’s the answer to life, the universe, and everything, I decided to take it as a good omen—and proceeded to feed them through this AI (which I have no doubt added to some collection of images to train machine learning algorithms. Your welcome for the coming robot apocalypse!).\n\nMy first photo didn’t go over very well, with a whopping 0.9% chance of being awesome. Oh well, 41 more pictures to go. After going through the first 5 photos, not a single one scored more than 8%. That’s when I noticed I could get more info about the result, and found this gem: “Surprised by the result? This service doesn't measure the coolness or beauty of a person or any object in a photo.”\n\nSo really all I learned was that my selfies and family photos are garbage. Good to know.\n\nI had to go back to the drawing board. I came across [AttractivenessTest.com](http://AttractivenessTest.com) which admittedly seems more dubious than Everypixel, but sometimes we gotta make sacrifices. Anyways, it seemed to go pretty well, but there was one photo I had to disqualify because the AI kept zeroing in on someone else's face, and 3 that it absolutely refused to process, most likely because it couldn't zero in on my face.\n\nAs I ran through the photos, I sorted them into folders based on the rating they got, from 1 to 10. I don’t mean to brag, but I got a couple 7’s. The problem though was I had 12 6’s, so I couldn’t simply combine these 2 categories so I decided to go back to our old friend Everypixel to pick the top 4 best photos of the ones rated 6. Within a few minutes I had my top 4, ranging from a 1.5% chance to 50% chance to be awesome. Quite a range, and not extremely encouraging but that’s the bed I’ve made for myself.\n\nInteresting note: what I consider the 2 best pictures of me with animals made it through the process and made it to the top 6.\n\nNext up was selecting and answering prompts. While not remotely AI, I decided it best to use a random number generator to help me select which prompts the AI should answer.\n\nThis is where I ran into my first major roadblock. Through the magic of random numbers, for the first prompt I landed on, “Give me travel tips for…” The AI, predictably, gave me some admittedly useful travel tips, but I’m not sure that was in the spirit of the prompt. I decided it best to remove the random factor and hand-select 3 prompts I think the AI might be able to handle.\n\nMy first selection was, “The hallmark of a good relationship is…” Boy did it deliver!\n\n> The hallmark of a good relationship is trust, respect, and open communication. When two people are in a relationship, they should be able to have honest and meaningful conversations, with enough understanding, patience, and empathy to make sure that both perspectives can be heard. A good relationship should also be based on mutual respect, with each person being able to express themselves and their feelings without feeling judged or belittled. Lastly, having a strong foundation of trust and honesty is essential for a healthy and fulfilling relationship.\n\nSadly, it was a little long but with a little bit of trimming I got it to fit into the 220-character limit.\n\nNext up I picked, “The key to my heart is…” To which the AI responded, weirdly in context with the previous prompt, with the following:\n\n> No single \"key\" can unlock a person's heart. The best way forward is to build a relationship based on the qualities mentioned above.\n\nFinally, I picked, “My best dad joke.” The AI did not disappoint.\n\n> Q: What did the sea say to the beach?\n>\n> A: Nothing, it just waved!\n\nWhen I was experimenting with OpenAI initially, I had it prepare a short bio. Unfortunately, it seems that Hinge doesn’t have a field for a bio, but here it is anyway, for posterity.\n\n> I'm an introverted geek who loves all things tech, sci-fi, and fantasy. I enjoy staying inside watching movies, playing video games, and reading comics. I'm looking for someone who shares my interests and is up for some exciting nerd-related activities. I'm a reliable and loyal person who loves to make people laugh. I'm also an animal lover and I like to spend time with cats and dogs. If you think we could be a great match, let's get to know each other better!\n\nSo, how well will this work? Will AI turn my love life around? Or will this backfire spectacularly? Nobody knows! But I’ll be sure to follow up in part 2. 🙂","src/content/blog/2022/creating-a-dating-profile-with-ai.md","cd44821db46d1ab3",{"html":99,"metadata":100},"\u003Cp>I’ve been single for a few years now, and I haven’t had a whole lot of success in the dating game. I’m very introverted and socially anxious, so dating apps seemed like the way to go for me. Sadly, I’ve not had a lot of success, and since Covid it seems like the dating scene has only got worse. I’ve been feeling pretty down about it, but I decided to have a little fun and let an AI help me assemble a brand new profile.\u003C/p>\n\u003Cp>My goal is to, for an entire week, use my AI generated dating profile. That means my bio and prompts would be written by an AI and all my photos would be selected by an AI. Finally, as long as it doesn’t end in disaster, all my opening messages will be generated by an AI–all further responses will be written by me, because otherwise what would be the point?\u003C/p>\n\u003Cp>I decided to use \u003Ca href=\"https://openai.com/\">OpenAI\u003C/a> for the written portion, and \u003Ca href=\"https://aesthetics.everypixel.com/\">Everypixel\u003C/a> to select the pictures. For the dating app itself, the most important ingredient in this experiment, I decided to go with \u003Ca href=\"https://hinge.co/\">Hinge\u003C/a>, mainly because I’ve never used it before.\u003C/p>\n\u003Cp>I decided against using AI generated images because, even though I’m letting an AI create a dating profile for me, I want it to be somewhat genuine. Also I’m not looking to catfish anybody with this image I generated just to see how good AI could make me look:\u003C/p>\n\u003Cimg src=\"/media/my-ai-portrait.jpg\" width=\"260\" alt=\"an AI-generated portrait of me\">\n\u003Cp>Originally this was going to be one post I’d write over the course of a week, but as I was writing I decided I should split it into 2 parts: Part 1, this part, about setting up the dating profile, and part 2, coming at the end of the experiment, about the experience and how it went.\u003C/p>\n\u003Cp>My first step was to sign up for Hinge. I went through the sign up process, and got to photos. Hinge requires 6 photos to create a profile, so it was Everypixel’s time to shine! I collected up 42 photos from the last few years—I wasn’t aiming for 42 but, as that’s the answer to life, the universe, and everything, I decided to take it as a good omen—and proceeded to feed them through this AI (which I have no doubt added to some collection of images to train machine learning algorithms. Your welcome for the coming robot apocalypse!).\u003C/p>\n\u003Cp>My first photo didn’t go over very well, with a whopping 0.9% chance of being awesome. Oh well, 41 more pictures to go. After going through the first 5 photos, not a single one scored more than 8%. That’s when I noticed I could get more info about the result, and found this gem: “Surprised by the result? This service doesn’t measure the coolness or beauty of a person or any object in a photo.”\u003C/p>\n\u003Cp>So really all I learned was that my selfies and family photos are garbage. Good to know.\u003C/p>\n\u003Cp>I had to go back to the drawing board. I came across \u003Ca href=\"http://AttractivenessTest.com\">AttractivenessTest.com\u003C/a> which admittedly seems more dubious than Everypixel, but sometimes we gotta make sacrifices. Anyways, it seemed to go pretty well, but there was one photo I had to disqualify because the AI kept zeroing in on someone else’s face, and 3 that it absolutely refused to process, most likely because it couldn’t zero in on my face.\u003C/p>\n\u003Cp>As I ran through the photos, I sorted them into folders based on the rating they got, from 1 to 10. I don’t mean to brag, but I got a couple 7’s. The problem though was I had 12 6’s, so I couldn’t simply combine these 2 categories so I decided to go back to our old friend Everypixel to pick the top 4 best photos of the ones rated 6. Within a few minutes I had my top 4, ranging from a 1.5% chance to 50% chance to be awesome. Quite a range, and not extremely encouraging but that’s the bed I’ve made for myself.\u003C/p>\n\u003Cp>Interesting note: what I consider the 2 best pictures of me with animals made it through the process and made it to the top 6.\u003C/p>\n\u003Cp>Next up was selecting and answering prompts. While not remotely AI, I decided it best to use a random number generator to help me select which prompts the AI should answer.\u003C/p>\n\u003Cp>This is where I ran into my first major roadblock. Through the magic of random numbers, for the first prompt I landed on, “Give me travel tips for…” The AI, predictably, gave me some admittedly useful travel tips, but I’m not sure that was in the spirit of the prompt. I decided it best to remove the random factor and hand-select 3 prompts I think the AI might be able to handle.\u003C/p>\n\u003Cp>My first selection was, “The hallmark of a good relationship is…” Boy did it deliver!\u003C/p>\n\u003Cblockquote>\n\u003Cp>The hallmark of a good relationship is trust, respect, and open communication. When two people are in a relationship, they should be able to have honest and meaningful conversations, with enough understanding, patience, and empathy to make sure that both perspectives can be heard. A good relationship should also be based on mutual respect, with each person being able to express themselves and their feelings without feeling judged or belittled. Lastly, having a strong foundation of trust and honesty is essential for a healthy and fulfilling relationship.\u003C/p>\n\u003C/blockquote>\n\u003Cp>Sadly, it was a little long but with a little bit of trimming I got it to fit into the 220-character limit.\u003C/p>\n\u003Cp>Next up I picked, “The key to my heart is…” To which the AI responded, weirdly in context with the previous prompt, with the following:\u003C/p>\n\u003Cblockquote>\n\u003Cp>No single “key” can unlock a person’s heart. The best way forward is to build a relationship based on the qualities mentioned above.\u003C/p>\n\u003C/blockquote>\n\u003Cp>Finally, I picked, “My best dad joke.” The AI did not disappoint.\u003C/p>\n\u003Cblockquote>\n\u003Cp>Q: What did the sea say to the beach?\u003C/p>\n\u003Cp>A: Nothing, it just waved!\u003C/p>\n\u003C/blockquote>\n\u003Cp>When I was experimenting with OpenAI initially, I had it prepare a short bio. Unfortunately, it seems that Hinge doesn’t have a field for a bio, but here it is anyway, for posterity.\u003C/p>\n\u003Cblockquote>\n\u003Cp>I’m an introverted geek who loves all things tech, sci-fi, and fantasy. I enjoy staying inside watching movies, playing video games, and reading comics. I’m looking for someone who shares my interests and is up for some exciting nerd-related activities. I’m a reliable and loyal person who loves to make people laugh. I’m also an animal lover and I like to spend time with cats and dogs. If you think we could be a great match, let’s get to know each other better!\u003C/p>\n\u003C/blockquote>\n\u003Cp>So, how well will this work? Will AI turn my love life around? Or will this backfire spectacularly? Nobody knows! But I’ll be sure to follow up in part 2. 🙂\u003C/p>",{"headings":101,"imagePaths":102,"frontmatter":103},[],[],{"title":90,"pubDate":104,"tags":105},"2022-12-10",[93,94],"2022/creating-a-dating-profile-with-ai.md","2022/getting-out-of-your-comfort-zone",{"id":107,"data":109,"body":114,"filePath":115,"digest":116,"rendered":117,"legacyId":124},{"title":110,"pubDate":111,"tags":112},"Getting Out of Your Comfort Zone",["Date","2022-12-10T00:00:00.000Z"],[93,113,17],"Learning","When it comes to frameworks, I’ve been firmly stuck in the React–and React-adjacent–world. Basically, my “coding comfort zone” has been vanilla JavaScript, React, and Next.js. The world of web development is much broader than that, but I’m going to be honest, I was a little scared to branch out.\n\nDespite my curiosity and eagerness to learn, I tend to stick to what’s comfortable, and I have to work a little harder to branch out. I’m comfortable with React, so my tendency is to learn everything I can about React. I’m comfortable with JavaScript, so it’s more natural for me to try to master that language.\n\nBut there was a time I didn’t know how to do anything beyond a simple website with HTML and CSS (and I barely knew CSS). Heck, there was a time I was building websites with [iWeb.](https://en.wikipedia.org/wiki/IWeb) I wouldn't be anywhere near where I am as a web developer if I didn't get out of my comfort zone.\n\nSo with that in mind, after a friend suggested I try out [Astro](https://astro.build/), I decided maybe it's time to branch out and try new things. I've also been wanting to build a blog site where I can write about my other interests outside of web development. So it all came together nicely.\n\nSo, the other night I sat down on the couch with my laptop, opened up the Astro documentation, and got to work. Over the course of that evening I built a fully-functional blog site, learned the fundamentals of Astro in the process, and added another tool to my web developer tool belt.\n\nThrough this experience, I proved to myself that learning new things isn’t as scary as it seems. Does this mean I’m going to go out and learn every framework? No, I don’t think that’s realistic or advisable for anybody to do. But it showed me how relatively easy it is to branch out, so I won’t be so nervous about stepping outside the comfort of the React world in the future.\n\nIf you’re feeling like you’re stuck in your comfort zone, using whatever technologies and languages you’re used to using, try mixing things up. Find a project you want to build, and try tackling it with a tool you’ve never used before.\n\nAlso, if you're curious, you can check out my Astro blog at [ghall.blog](http://ghall.blog).\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/getting-out-of-your-comfort-zone.md","aa2ec47f7048c7f2",{"html":118,"metadata":119},"\u003Cp>When it comes to frameworks, I’ve been firmly stuck in the React–and React-adjacent–world. Basically, my “coding comfort zone” has been vanilla JavaScript, React, and Next.js. The world of web development is much broader than that, but I’m going to be honest, I was a little scared to branch out.\u003C/p>\n\u003Cp>Despite my curiosity and eagerness to learn, I tend to stick to what’s comfortable, and I have to work a little harder to branch out. I’m comfortable with React, so my tendency is to learn everything I can about React. I’m comfortable with JavaScript, so it’s more natural for me to try to master that language.\u003C/p>\n\u003Cp>But there was a time I didn’t know how to do anything beyond a simple website with HTML and CSS (and I barely knew CSS). Heck, there was a time I was building websites with \u003Ca href=\"https://en.wikipedia.org/wiki/IWeb\">iWeb.\u003C/a> I wouldn’t be anywhere near where I am as a web developer if I didn’t get out of my comfort zone.\u003C/p>\n\u003Cp>So with that in mind, after a friend suggested I try out \u003Ca href=\"https://astro.build/\">Astro\u003C/a>, I decided maybe it’s time to branch out and try new things. I’ve also been wanting to build a blog site where I can write about my other interests outside of web development. So it all came together nicely.\u003C/p>\n\u003Cp>So, the other night I sat down on the couch with my laptop, opened up the Astro documentation, and got to work. Over the course of that evening I built a fully-functional blog site, learned the fundamentals of Astro in the process, and added another tool to my web developer tool belt.\u003C/p>\n\u003Cp>Through this experience, I proved to myself that learning new things isn’t as scary as it seems. Does this mean I’m going to go out and learn every framework? No, I don’t think that’s realistic or advisable for anybody to do. But it showed me how relatively easy it is to branch out, so I won’t be so nervous about stepping outside the comfort of the React world in the future.\u003C/p>\n\u003Cp>If you’re feeling like you’re stuck in your comfort zone, using whatever technologies and languages you’re used to using, try mixing things up. Find a project you want to build, and try tackling it with a tool you’ve never used before.\u003C/p>\n\u003Cp>Also, if you’re curious, you can check out my Astro blog at \u003Ca href=\"http://ghall.blog\">ghall.blog\u003C/a>.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":120,"imagePaths":121,"frontmatter":122},[],[],{"title":110,"pubDate":104,"tags":123},[93,113,17],"2022/getting-out-of-your-comfort-zone.md","2022/my-favorite-little-apps",{"id":125,"data":127,"body":133,"filePath":134,"digest":135,"rendered":136,"legacyId":159},{"title":128,"pubDate":129,"tags":130},"My Favorite Little Apps",["Date","2022-11-28T00:00:00.000Z"],[131,132],"MacOS","Apps","There are a lot of apps on my Macs that I use every day. There’s the big ones like Nova for coding, Brave for testing and dev tools, Craft for taking notes and keeping track of projects, and many more. But I wanted to pay special attention to the smaller apps that I use that just hang out in the menu bar or the background that make working in MacOS that much more seamless and enjoyable.\n\n### Itsycal\n\nThis is a cool little free that puts a calendar in your menubar. It’s a great way to get a quick glance at my day, and join Zoom/Google Meet calls without opening a full calendar app.\n\n[Download Here](https://www.mowglii.com/itsycal/)\n\n### Tot\n\nA note pad that lives in your menu bar! I use it for jotting down notes during meetings, temporarily storing snippets of text and code, making quick lists, storing links for later…you get the idea.\n\nThe Mac app is free, but you can also buy an iOS version.\n\n[Download Here](https://apps.apple.com/us/app/tot/id1491071483?mt=12)\n\n### Rectangle Pro\n\nSnap, resize, and align windows with keyboard shortcuts, or by dragging then across the screen. It’s highly customizable, and I’m going to be honest I haven’t even scratched the surface of the variety of options the Pro version provides, I just bought it to support development.\n\nThere are a lot of apps for Mac that do similar things, but this is, in my opinion, the best available.\n\n[Download/Buy Here](https://rectangleapp.com/)\n\n### Velja\n\nBecause I use Safari as my primary browser, but prefer to use Brave for development, this app saves me time and mouse clicks. Basically Velja routes links opened from any app to any browser you have installed. For example, I have it set up to open any ‘localhost’ URLs in Brave.\n\nIt offers a variety of built-in filters that will even work with certain apps (like Apple Music, Discord, Zoom, etc).\n\n[Download Here](https://apps.apple.com/us/app/velja/id1607635845?mt=12)\n\n### Contexts\n\nIt’s the built-in command + tab app switcher on steroids! Instead of a row of icons, you get a list of every window that you can either tab through or even search by app or window title. It’s another app I feel lost with if I’m using a computer without it installed.\n\n[Buy Here](https://contexts.co/)\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/my-favorite-little-apps.md","561165d463c24f48",{"html":137,"metadata":138},"\u003Cp>There are a lot of apps on my Macs that I use every day. There’s the big ones like Nova for coding, Brave for testing and dev tools, Craft for taking notes and keeping track of projects, and many more. But I wanted to pay special attention to the smaller apps that I use that just hang out in the menu bar or the background that make working in MacOS that much more seamless and enjoyable.\u003C/p>\n\u003Ch3 id=\"itsycal\">Itsycal\u003C/h3>\n\u003Cp>This is a cool little free that puts a calendar in your menubar. It’s a great way to get a quick glance at my day, and join Zoom/Google Meet calls without opening a full calendar app.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.mowglii.com/itsycal/\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"tot\">Tot\u003C/h3>\n\u003Cp>A note pad that lives in your menu bar! I use it for jotting down notes during meetings, temporarily storing snippets of text and code, making quick lists, storing links for later…you get the idea.\u003C/p>\n\u003Cp>The Mac app is free, but you can also buy an iOS version.\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app/tot/id1491071483?mt=12\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"rectangle-pro\">Rectangle Pro\u003C/h3>\n\u003Cp>Snap, resize, and align windows with keyboard shortcuts, or by dragging then across the screen. It’s highly customizable, and I’m going to be honest I haven’t even scratched the surface of the variety of options the Pro version provides, I just bought it to support development.\u003C/p>\n\u003Cp>There are a lot of apps for Mac that do similar things, but this is, in my opinion, the best available.\u003C/p>\n\u003Cp>\u003Ca href=\"https://rectangleapp.com/\">Download/Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"velja\">Velja\u003C/h3>\n\u003Cp>Because I use Safari as my primary browser, but prefer to use Brave for development, this app saves me time and mouse clicks. Basically Velja routes links opened from any app to any browser you have installed. For example, I have it set up to open any ‘localhost’ URLs in Brave.\u003C/p>\n\u003Cp>It offers a variety of built-in filters that will even work with certain apps (like Apple Music, Discord, Zoom, etc).\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app/velja/id1607635845?mt=12\">Download Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"contexts\">Contexts\u003C/h3>\n\u003Cp>It’s the built-in command + tab app switcher on steroids! Instead of a row of icons, you get a list of every window that you can either tab through or even search by app or window title. It’s another app I feel lost with if I’m using a computer without it installed.\u003C/p>\n\u003Cp>\u003Ca href=\"https://contexts.co/\">Buy Here\u003C/a>\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":139,"imagePaths":155,"frontmatter":156},[140,143,146,149,152],{"depth":46,"slug":141,"text":142},"itsycal","Itsycal",{"depth":46,"slug":144,"text":145},"tot","Tot",{"depth":46,"slug":147,"text":148},"rectangle-pro","Rectangle Pro",{"depth":46,"slug":150,"text":151},"velja","Velja",{"depth":46,"slug":153,"text":154},"contexts","Contexts",[],{"title":128,"pubDate":157,"tags":158},"2022-11-28",[131,132],"2022/my-favorite-little-apps.md","2022/ileopard-a-retrospective",{"id":160,"data":162,"body":166,"filePath":167,"digest":168,"rendered":169,"legacyId":177},{"title":163,"pubDate":164,"tags":165},"iLeopard - A Retrospective",["Date","2022-12-26T00:00:00.000Z"],[94,131,37],"I few months ago I rediscovered among some old project folders the source code and markdown files for an old blog I ran in the early 2010s. With nothing to do on the afternoon of Christmas Eve, which was a brisk 15°F, I decided I wanted to search through and try to find a rather lengthy retrospective I wrote on Star Trek: The Next Generation. Now that I’ve finally started up a new blog I thought it would be fun to touch it up and republish it, since I put so many hours worth of work into it back in the day. Upsettingly, it was not there.\n\nBut I did find a rather salty post I wrote about a Mac theme I created back when I was a senior in high school. I thought it would be nice to go back and take a fresh look at the project, and how I feel about it now, being another 10 years removed from it.\n\nIf you were around the Mac customization scene–specifically on the now-defunct MacThemes.net–around 2007, you probably remember a little project called iLeopard. Admittedly, the chance that you’re in that extremely specific niché is incredibly small. The best data I could find is this [Ars Technica article](https://arstechnica.com/gadgets/2007/03/7296/) from March 2007 saying the Mac hit about 6% marketshare. And only a tiny subset of those users even had the thought that customizing the look of Mac OS X was something they wanted to do.\n\n\u003Cimg src=\"/media/ileopard/mac-os-10-1.png\" width=\"90%\" alt=\"a screenshot of Mac OS X 10.1 with various apps open\" />\n\n*Mac OS X 10.1 and the Aqua Interface, from* [_GUIdebook_](https://guidebookgallery.org/screenshots/macosx101)\n\nI was one of the few that had that had that idea pop into my head. I was super into finding and downloading cool themes, including one I distinctly remember that looked like Windows Vista for some reason. It was 2007, the Aqua Interface (the playful, plastic-looking interface style Apple used for about a decade) was already feeling a little passé to me. I wanted something new, and weirdly enough that new thing came from Apple, in the form of iTunes 7.\n\n\u003Cimg src=\"/media/ileopard/itunes-7.gif\" width=\"80%\" alt=\"a screenshot iTunes 7 with the iTunes Music Store open\" />\n\n_iTunes 7 screenshot, from [AppleInsider](https://appleinsider.com/articles/06/09/12/apple_introduces_itunes_7_previews_itv_device)_\n\nIn retrospect, and with the hindsight of 15 years of UI design evolution, it’s not exactly pretty, but I liked it at the time. It was classy, and simple, and I thought it was the future of the Mac OS X design language.\n\nFast-forward to the release of Mac OS X Leopard, and I was disappointed to see that the bubbly, lick-able scrollbars and buttons were still quite prominent. Having dabbled in the Mac OS X theming scene already, I decided to take matters into my own hands.\n\nThere was a small problem though. With the release of Leopard, Apple changed the format the system used for UI resources, and introduced a new framework to power it all, called CoreUI. The tools that had existed to make theming the OS relatively simple were useless.\n\nIf you’re curious, [here’s a writeup](https://arstechnica.com/gadgets/2007/10/mac-os-x-10-5/10/) from John Siracusa’s Mac OS X Leopard review about CoreUI, which was, if I recall, what served as the starting point on the road to being able to even locate the system files I needed to crack open.\n\nNow, just as a heads up, most of what follows is based on memory and a fairly cringy blog post I wrote 10 years ago and found in the bowls of my digital archives. Also, my memory on the timeline is a bit fuzzy, but with some digging I found that this mostly takes place between April and June 2008.\n\nBasically, the main barrier to theming Mac OS X Leopard were 2 files; ArtFile.bin, and SArtFile.bin. This is where nearly all the UI resources were stored, aside from scroll bars, which were stored in a file called Extras.rsrc, a file that had been cracked ages before. If I recall–and I could be totally wrong so if anybody knows better feel free to tell me–Extras.rsrc, and its sister file Extras2.rsrc, still contained all the UI resources, but only the scrollbars were actually used by the system.\n\nI want to make it clear that I can’t take the credit for cracking open ArtFile.bin and SArtFile.bin. I believe it was someone on the MacThemes.net forum, and I wish I could remember or find their name–if you’re out there reading this, thank you! Those files were essentially encrypted ZIP files, and this genius of a human build a command line tool to decrypt and extract them. This was actually the experience that got me comfortable with the command line, and we’ll say indirectly led to my current career as a web developer, but I digress…\n\nAnyway, I knew where to find the files. I had the tool to decrypt the files. The only thing that stood in my way was the mass of nonsensical folder names filled with equally nonsensically named bitmap images that got extracted from the files.\n\nBeing that I was a bored teenager in high school with way too much time on my hands, I decided to figure out exactly what every bitmap image was by methodically changing the graphics to the most garish colors I could, recreating the bin files–which if I recall was as easy as zipping them up and renaming them, but this was 15 years ago so I could definitely be misremembering–restarting my computer, and hunting down the various neon hues while taking notes.\n\nAfter dozens of restarts, and a couple corrupted OS installs, I had figured out a good chunk of the building blocks making up Leopard’s UI. Even still, after weeks of this, there was still so much to be done. Bear in mind, there was no documentation on any of this stuff. I was about to create, as far as I know, the first theme for Mac OS X Leopard.\n\n\u003Cimg src=\"/media/ileopard/ileopard-2-0-1.png\" width=\"75%\" alt=\"a screenshot of the Mac OS X Appearance preference pane showing off the modifications made by iLeopard\" />\n\n_iLeopard 2.0.1 screenshot, from [AmazingHenry on MacRumors](https://forums.macrumors.com/threads/ileopard-theme.2045553/), released by fellow MacThemes.net user ‘gcamp' after I essentially handed off the project_\n\nI started pulling elements from iTunes, and, using a “totally legal, I swear” copy of Adobe PhotoShop, tweaked them to fit in their new home. I shared the very first version of the theme, which I called iLeopard, a portmanteau of iTunes and Leopard, on the MacThemes.net forum (thankfully archived [here](https://web.archive.org/web/20080702015727/http://macthemes2.net:80/forum/viewtopic.php?id=16785679&p=1) by the Wayback Machine!!), and it kind of took off more than I expected. By that, I mean people actually used it. Then it made the MacThemes.net front page. Yeah, it was all a bit overwhelming.\n\nAt some point, I got an offer to help out with the theme from fellow forum user ‘gcamp’. This was probably the best possible thing to happen for the longevity of the theme. He initially started by contributing custom graphics, and ended up taking the reigns on the project after I graduated high school and lost my passion for the project. He kept the project alive, I believe until Apple effectively killed Mac theming for good a few releases later.\n\nThe sad news is I lost all my original work on iLeopard, along with countless other digital relics from that era of my life, when my MacBook suffered a major hard drive crash in 2011. I had to go on a crazy archeological dig through the internet just to find the above screenshot, and it’s from after I handed off the project. I did reach out on Mastodon on the extremely off-chance that someone had some more screenshots, or even a pre-2.0 installer, but I haven't got back anything substantial as of this writing.\n\nWhat’s been interesting as I’ve written and researched this piece is the contrast between the Apple of 15+ years ago, and the Apple of today. It was a weird time, they had just completed transitioning the Mac from PowerPC to Intel–interestingly, we’re currently in the midst of a transition from Intel to Apple Silicon–and the first iPhone was brand new.\n\nSecurity on the Mac was pretty laissez-faire, to the point where a dorky high school kid could modify system files and create a simple tool to let other people install those modifications. These days, as a more security-conscious user, that idea horrifies me. But at the same time, I do miss being able to tinker with the little parts of software that weren’t made to be tinkered with.","src/content/blog/2022/ileopard-a-retrospective.md","e9c929df4b77a7b6",{"html":170,"metadata":171},"\u003Cp>I few months ago I rediscovered among some old project folders the source code and markdown files for an old blog I ran in the early 2010s. With nothing to do on the afternoon of Christmas Eve, which was a brisk 15°F, I decided I wanted to search through and try to find a rather lengthy retrospective I wrote on Star Trek: The Next Generation. Now that I’ve finally started up a new blog I thought it would be fun to touch it up and republish it, since I put so many hours worth of work into it back in the day. Upsettingly, it was not there.\u003C/p>\n\u003Cp>But I did find a rather salty post I wrote about a Mac theme I created back when I was a senior in high school. I thought it would be nice to go back and take a fresh look at the project, and how I feel about it now, being another 10 years removed from it.\u003C/p>\n\u003Cp>If you were around the Mac customization scene–specifically on the now-defunct MacThemes.net–around 2007, you probably remember a little project called iLeopard. Admittedly, the chance that you’re in that extremely specific niché is incredibly small. The best data I could find is this \u003Ca href=\"https://arstechnica.com/gadgets/2007/03/7296/\">Ars Technica article\u003C/a> from March 2007 saying the Mac hit about 6% marketshare. And only a tiny subset of those users even had the thought that customizing the look of Mac OS X was something they wanted to do.\u003C/p>\n\u003Cimg src=\"/media/ileopard/mac-os-10-1.png\" width=\"90%\" alt=\"a screenshot of Mac OS X 10.1 with various apps open\">\n\u003Cp>\u003Cem>Mac OS X 10.1 and the Aqua Interface, from\u003C/em> \u003Ca href=\"https://guidebookgallery.org/screenshots/macosx101\">\u003Cem>GUIdebook\u003C/em>\u003C/a>\u003C/p>\n\u003Cp>I was one of the few that had that had that idea pop into my head. I was super into finding and downloading cool themes, including one I distinctly remember that looked like Windows Vista for some reason. It was 2007, the Aqua Interface (the playful, plastic-looking interface style Apple used for about a decade) was already feeling a little passé to me. I wanted something new, and weirdly enough that new thing came from Apple, in the form of iTunes 7.\u003C/p>\n\u003Cimg src=\"/media/ileopard/itunes-7.gif\" width=\"80%\" alt=\"a screenshot iTunes 7 with the iTunes Music Store open\">\n\u003Cp>\u003Cem>iTunes 7 screenshot, from \u003Ca href=\"https://appleinsider.com/articles/06/09/12/apple_introduces_itunes_7_previews_itv_device\">AppleInsider\u003C/a>\u003C/em>\u003C/p>\n\u003Cp>In retrospect, and with the hindsight of 15 years of UI design evolution, it’s not exactly pretty, but I liked it at the time. It was classy, and simple, and I thought it was the future of the Mac OS X design language.\u003C/p>\n\u003Cp>Fast-forward to the release of Mac OS X Leopard, and I was disappointed to see that the bubbly, lick-able scrollbars and buttons were still quite prominent. Having dabbled in the Mac OS X theming scene already, I decided to take matters into my own hands.\u003C/p>\n\u003Cp>There was a small problem though. With the release of Leopard, Apple changed the format the system used for UI resources, and introduced a new framework to power it all, called CoreUI. The tools that had existed to make theming the OS relatively simple were useless.\u003C/p>\n\u003Cp>If you’re curious, \u003Ca href=\"https://arstechnica.com/gadgets/2007/10/mac-os-x-10-5/10/\">here’s a writeup\u003C/a> from John Siracusa’s Mac OS X Leopard review about CoreUI, which was, if I recall, what served as the starting point on the road to being able to even locate the system files I needed to crack open.\u003C/p>\n\u003Cp>Now, just as a heads up, most of what follows is based on memory and a fairly cringy blog post I wrote 10 years ago and found in the bowls of my digital archives. Also, my memory on the timeline is a bit fuzzy, but with some digging I found that this mostly takes place between April and June 2008.\u003C/p>\n\u003Cp>Basically, the main barrier to theming Mac OS X Leopard were 2 files; ArtFile.bin, and SArtFile.bin. This is where nearly all the UI resources were stored, aside from scroll bars, which were stored in a file called Extras.rsrc, a file that had been cracked ages before. If I recall–and I could be totally wrong so if anybody knows better feel free to tell me–Extras.rsrc, and its sister file Extras2.rsrc, still contained all the UI resources, but only the scrollbars were actually used by the system.\u003C/p>\n\u003Cp>I want to make it clear that I can’t take the credit for cracking open ArtFile.bin and SArtFile.bin. I believe it was someone on the MacThemes.net forum, and I wish I could remember or find their name–if you’re out there reading this, thank you! Those files were essentially encrypted ZIP files, and this genius of a human build a command line tool to decrypt and extract them. This was actually the experience that got me comfortable with the command line, and we’ll say indirectly led to my current career as a web developer, but I digress…\u003C/p>\n\u003Cp>Anyway, I knew where to find the files. I had the tool to decrypt the files. The only thing that stood in my way was the mass of nonsensical folder names filled with equally nonsensically named bitmap images that got extracted from the files.\u003C/p>\n\u003Cp>Being that I was a bored teenager in high school with way too much time on my hands, I decided to figure out exactly what every bitmap image was by methodically changing the graphics to the most garish colors I could, recreating the bin files–which if I recall was as easy as zipping them up and renaming them, but this was 15 years ago so I could definitely be misremembering–restarting my computer, and hunting down the various neon hues while taking notes.\u003C/p>\n\u003Cp>After dozens of restarts, and a couple corrupted OS installs, I had figured out a good chunk of the building blocks making up Leopard’s UI. Even still, after weeks of this, there was still so much to be done. Bear in mind, there was no documentation on any of this stuff. I was about to create, as far as I know, the first theme for Mac OS X Leopard.\u003C/p>\n\u003Cimg src=\"/media/ileopard/ileopard-2-0-1.png\" width=\"75%\" alt=\"a screenshot of the Mac OS X Appearance preference pane showing off the modifications made by iLeopard\">\n\u003Cp>\u003Cem>iLeopard 2.0.1 screenshot, from \u003Ca href=\"https://forums.macrumors.com/threads/ileopard-theme.2045553/\">AmazingHenry on MacRumors\u003C/a>, released by fellow MacThemes.net user ‘gcamp’ after I essentially handed off the project\u003C/em>\u003C/p>\n\u003Cp>I started pulling elements from iTunes, and, using a “totally legal, I swear” copy of Adobe PhotoShop, tweaked them to fit in their new home. I shared the very first version of the theme, which I called iLeopard, a portmanteau of iTunes and Leopard, on the MacThemes.net forum (thankfully archived \u003Ca href=\"https://web.archive.org/web/20080702015727/http://macthemes2.net:80/forum/viewtopic.php?id=16785679&p=1\">here\u003C/a> by the Wayback Machine!!), and it kind of took off more than I expected. By that, I mean people actually used it. Then it made the MacThemes.net front page. Yeah, it was all a bit overwhelming.\u003C/p>\n\u003Cp>At some point, I got an offer to help out with the theme from fellow forum user ‘gcamp’. This was probably the best possible thing to happen for the longevity of the theme. He initially started by contributing custom graphics, and ended up taking the reigns on the project after I graduated high school and lost my passion for the project. He kept the project alive, I believe until Apple effectively killed Mac theming for good a few releases later.\u003C/p>\n\u003Cp>The sad news is I lost all my original work on iLeopard, along with countless other digital relics from that era of my life, when my MacBook suffered a major hard drive crash in 2011. I had to go on a crazy archeological dig through the internet just to find the above screenshot, and it’s from after I handed off the project. I did reach out on Mastodon on the extremely off-chance that someone had some more screenshots, or even a pre-2.0 installer, but I haven’t got back anything substantial as of this writing.\u003C/p>\n\u003Cp>What’s been interesting as I’ve written and researched this piece is the contrast between the Apple of 15+ years ago, and the Apple of today. It was a weird time, they had just completed transitioning the Mac from PowerPC to Intel–interestingly, we’re currently in the midst of a transition from Intel to Apple Silicon–and the first iPhone was brand new.\u003C/p>\n\u003Cp>Security on the Mac was pretty laissez-faire, to the point where a dorky high school kid could modify system files and create a simple tool to let other people install those modifications. These days, as a more security-conscious user, that idea horrifies me. But at the same time, I do miss being able to tinker with the little parts of software that weren’t made to be tinkered with.\u003C/p>",{"headings":172,"imagePaths":173,"frontmatter":174},[],[],{"title":163,"pubDate":175,"tags":176},"2022-12-26",[94,131,37],"2022/ileopard-a-retrospective.md","2022/my-macos-home-directory-overview",{"id":178,"data":180,"body":184,"filePath":185,"digest":186,"rendered":187,"legacyId":195},{"title":181,"pubDate":182,"tags":183},"My MacOS Home Directory Overview",["Date","2022-12-23T00:00:00.000Z"],[131,94],"On [the latest episode of ATP](https://atp.fm/514), Casey, John, and Marco discussed MacOS home directories. After I was done cringing at John keeping his git clones in the root level of his home directory, I started thinking about how I use my own home folder, and how I keep it organized. I won’t go into the hidden items, because I don’t think either of us want that (with hidden items included, my home directory has 34 documents, and 47 folders 😅).\n\nAnyway, here’s my overview...\n\n- Applications - Honestly, all that’s in here are a handful of Shortcuts, and I’m not sure why because I never put them there.\n- Desktop - This is empty, because I don’t keep anything on my desktop.\n- Developer - Now this is where git clones go. Mostly web projects, a folder for all my work repos, and the [Playdate SDK](https://play.date/dev/) from when I was fiddling with that a couple months ago.\n- Documents - Basically just a folder where Divinity: Original Sin 2 keeps its saves, and where I keep various Pages documents and PDFs for some reason (I should probably sort through that at some point)\n- Downloads - Self-explanatory. I tend to keep this clean manually and with Hazel scripts, so there’s nothing of note in here at the moment.\n- Movies - Empty, except for my TV.app library.\n- Music - Same as above, except with my Music.app library.\n- Pictures - My Photos.app library, as well as a hodgepodge of scanned photos, drawings, desktop wallpapers, and GIFs I like. All sorted by folder, of course. I’m not a monster!\n- Postman - From when I tried Postman, and then immediately switched back to Insomnia.\n- Public - I don’t think I’ve ever used this folder.\n- Sites - Same as above.\n- Sync - A synced folder, used by an app called Sync, that syncs little bits and bobs like shell scripts and Hazel rules between my 2 Macs.\n\nI didn’t bother listing my Library folder because there’s not much to say about that–it’s the same as it is on anyone else’s Mac.\n\nOn an additional note, I would really like an iCloud Drive folder in the home directory. I could add one with an alias or symlink, but it just seems weird to me that it’s squirreled away in the Library folder, cryptically named ‘Mobile Documents’.","src/content/blog/2022/my-macos-home-directory-overview.md","c1d7b4f1e53ad3d1",{"html":188,"metadata":189},"\u003Cp>On \u003Ca href=\"https://atp.fm/514\">the latest episode of ATP\u003C/a>, Casey, John, and Marco discussed MacOS home directories. After I was done cringing at John keeping his git clones in the root level of his home directory, I started thinking about how I use my own home folder, and how I keep it organized. I won’t go into the hidden items, because I don’t think either of us want that (with hidden items included, my home directory has 34 documents, and 47 folders 😅).\u003C/p>\n\u003Cp>Anyway, here’s my overview…\u003C/p>\n\u003Cul>\n\u003Cli>Applications - Honestly, all that’s in here are a handful of Shortcuts, and I’m not sure why because I never put them there.\u003C/li>\n\u003Cli>Desktop - This is empty, because I don’t keep anything on my desktop.\u003C/li>\n\u003Cli>Developer - Now this is where git clones go. Mostly web projects, a folder for all my work repos, and the \u003Ca href=\"https://play.date/dev/\">Playdate SDK\u003C/a> from when I was fiddling with that a couple months ago.\u003C/li>\n\u003Cli>Documents - Basically just a folder where Divinity: Original Sin 2 keeps its saves, and where I keep various Pages documents and PDFs for some reason (I should probably sort through that at some point)\u003C/li>\n\u003Cli>Downloads - Self-explanatory. I tend to keep this clean manually and with Hazel scripts, so there’s nothing of note in here at the moment.\u003C/li>\n\u003Cli>Movies - Empty, except for my TV.app library.\u003C/li>\n\u003Cli>Music - Same as above, except with my Music.app library.\u003C/li>\n\u003Cli>Pictures - My Photos.app library, as well as a hodgepodge of scanned photos, drawings, desktop wallpapers, and GIFs I like. All sorted by folder, of course. I’m not a monster!\u003C/li>\n\u003Cli>Postman - From when I tried Postman, and then immediately switched back to Insomnia.\u003C/li>\n\u003Cli>Public - I don’t think I’ve ever used this folder.\u003C/li>\n\u003Cli>Sites - Same as above.\u003C/li>\n\u003Cli>Sync - A synced folder, used by an app called Sync, that syncs little bits and bobs like shell scripts and Hazel rules between my 2 Macs.\u003C/li>\n\u003C/ul>\n\u003Cp>I didn’t bother listing my Library folder because there’s not much to say about that–it’s the same as it is on anyone else’s Mac.\u003C/p>\n\u003Cp>On an additional note, I would really like an iCloud Drive folder in the home directory. I could add one with an alias or symlink, but it just seems weird to me that it’s squirreled away in the Library folder, cryptically named ‘Mobile Documents’.\u003C/p>",{"headings":190,"imagePaths":191,"frontmatter":192},[],[],{"title":181,"pubDate":193,"tags":194},"2022-12-23",[131,94],"2022/my-macos-home-directory-overview.md","2022/nextjs-13-and-exploring-new-technologies",{"id":196,"data":198,"body":202,"filePath":203,"digest":204,"rendered":205,"legacyId":213},{"title":199,"pubDate":200,"tags":201},"Next.js 13 and Exploring New Technologies",["Date","2022-10-28T00:00:00.000Z"],[17,113],"Next.js 13 was launched a few days ago ([More details here!](https://nextjs.org/blog/next-13)), and I’ve been slowly working my way through the new stuff. As a relative newcomer to the world of Next.js I’m very excited by what I see, but I also don’t want to get too bogged down in what’s new because I’m already feeling a little bombarded with new stuff at my day job. Besides, it might be a while before I get to use Next.js 13 in a professional setting.\n\nYes I’m a tech nerd, and I become easily enamored with the shiny new thing, perhaps to a fault, especially when that shiny new thing is a piece of software. I’m the guy who installs OS updates on day one—MacOS Ventura seems to be running fine so far, _knock on wood_—and I just want to just dive head-first into Next.js 13.\n\nBut, when you’re as new to the industry as I am, there are already so many new tools and technologies to learn it can already seem overwhelming without throwing in trying to keep up with the latest in the ever-evolving world of web development.\n\nMy attitude is embrace the curiosity, but focus on mastering the tools you’re currently using on a daily basis. Whether you’re using an entirely different set of frameworks,, or if you’re like me and just using an older version of Next.js, the new shiny stuff will still be there when you’re ready. And possibly, by the time you’re ready, an even newer, shinier technology will be around for you to check out.\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/nextjs-13-and-exploring-new-technologies.md","ea18592c3f2fe135",{"html":206,"metadata":207},"\u003Cp>Next.js 13 was launched a few days ago (\u003Ca href=\"https://nextjs.org/blog/next-13\">More details here!\u003C/a>), and I’ve been slowly working my way through the new stuff. As a relative newcomer to the world of Next.js I’m very excited by what I see, but I also don’t want to get too bogged down in what’s new because I’m already feeling a little bombarded with new stuff at my day job. Besides, it might be a while before I get to use Next.js 13 in a professional setting.\u003C/p>\n\u003Cp>Yes I’m a tech nerd, and I become easily enamored with the shiny new thing, perhaps to a fault, especially when that shiny new thing is a piece of software. I’m the guy who installs OS updates on day one—MacOS Ventura seems to be running fine so far, \u003Cem>knock on wood\u003C/em>—and I just want to just dive head-first into Next.js 13.\u003C/p>\n\u003Cp>But, when you’re as new to the industry as I am, there are already so many new tools and technologies to learn it can already seem overwhelming without throwing in trying to keep up with the latest in the ever-evolving world of web development.\u003C/p>\n\u003Cp>My attitude is embrace the curiosity, but focus on mastering the tools you’re currently using on a daily basis. Whether you’re using an entirely different set of frameworks,, or if you’re like me and just using an older version of Next.js, the new shiny stuff will still be there when you’re ready. And possibly, by the time you’re ready, an even newer, shinier technology will be around for you to check out.\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":208,"imagePaths":209,"frontmatter":210},[],[],{"title":199,"pubDate":211,"tags":212},"2022-10-28",[17,113],"2022/nextjs-13-and-exploring-new-technologies.md","2022/my-top-3-games-of-2022",{"id":214,"data":216,"body":221,"filePath":222,"digest":223,"rendered":224,"legacyId":241},{"title":217,"pubDate":218,"tags":219},"My Top 3 Games of 2022",["Date","2022-12-09T00:00:00.000Z"],[220],"Gaming","The Game Awards were last night, so I was inspired to take some time and write about my personal game of the year. But I couldn't narrow it down to just one, so I picked 3 games which were nominated for several awards but didn't get much, if any, recognition.\n\n### Xenoblade Chronicles 3\n\nI'm not a huge JRPG fan, but with the original Xenoblade Chronicles being among the few I've finished, I had to check this out. It ended up being pretty much the only game I played for weeks.\n\nIt scratches several RPG itches for me; a compelling cast of characters, a fun combat system that you can spend hours just experimenting with, and an intriguing world I still long to go back to even months later. This is definitely a game I will keep coming back to, between all the side content I still have left, and the DLC that's slowly rolling out.\n\nIs it a masterpiece? Probably not. But it stands among Persona 5 and Dragon Quest XI as another modern JRPG that I can not only stomach, but thoroughly enjoy. And to think, I almost skipped out on it because I thought Xenoblade Chronicles 2 was absolute cringe.\n\n### Tunic\n\nI don't play as many indie games as I would like, and I finish even fewer. I love indie games, perhaps a little too much, because I'm always jumping around to the latest one that's grabbed my attention. Thankfully, Tunic is one I managed to finish.\n\nIt came at just the right time, I had just wrapped up Xenoblade Chronicles 3, and I was in the modo for a light action-adventure game. I was ready to start another playthrough of Link's Awakening HD, but I happened to see that this adorable looking game starring a cute fox was about to drop on PS5 and Switch (it had been on Xbox since March I believe, but I don't have an Xbox).\n\nI was not prepared for the challenge this game posed, but it was just the right kind of challenging that made me go, \"Ok, I need to show this game who's boss!\" Beyond challenging bosses, the game mechanics are never tutorialized. Instead, you collect pages of the game's \"manual\" as you play, and have to figure things out from there. Even simple things like how to upgrade your stats isn't explained to you in plain terms.\n\n### Horizon Forbidden West\n\nHorizon Zero Dawn launched in a crowded year for good games, but it stood out to me for its incredibly engrossing story, and its primary mechanic of fighting giant friggin' robots. I was captivated from the start, and was chomping at the bit for a sequel. That sequel finally came, and once again got buried by other games (yeah, I'm looking at you, Elden Ring). But I didn't care, I wanted to see the next chapter in Aloy's story.\n\nI will confess, the story didn't grab me as much as the first game's. It was a satisfying continuation for me, without a doubt, but part of the mystery that made the first game so compelling–namely; how the world ended up in the state it is in the game–was already solved.\n\nThe gameplay in this sequel, however, was a _huge_ improvement. Melee combat, world traversal, side content, it was all so much better in this game, and showed that the developers took the feedback of the first game to heart. I couldn't put this game down, and once the new game plus patch dropped I jumped right back in. And I'm anxiously awaiting the Burning Shores DLC dropping next year!","src/content/blog/2022/my-top-3-games-of-2022.md","ba3d0b0794128043",{"html":225,"metadata":226},"\u003Cp>The Game Awards were last night, so I was inspired to take some time and write about my personal game of the year. But I couldn’t narrow it down to just one, so I picked 3 games which were nominated for several awards but didn’t get much, if any, recognition.\u003C/p>\n\u003Ch3 id=\"xenoblade-chronicles-3\">Xenoblade Chronicles 3\u003C/h3>\n\u003Cp>I’m not a huge JRPG fan, but with the original Xenoblade Chronicles being among the few I’ve finished, I had to check this out. It ended up being pretty much the only game I played for weeks.\u003C/p>\n\u003Cp>It scratches several RPG itches for me; a compelling cast of characters, a fun combat system that you can spend hours just experimenting with, and an intriguing world I still long to go back to even months later. This is definitely a game I will keep coming back to, between all the side content I still have left, and the DLC that’s slowly rolling out.\u003C/p>\n\u003Cp>Is it a masterpiece? Probably not. But it stands among Persona 5 and Dragon Quest XI as another modern JRPG that I can not only stomach, but thoroughly enjoy. And to think, I almost skipped out on it because I thought Xenoblade Chronicles 2 was absolute cringe.\u003C/p>\n\u003Ch3 id=\"tunic\">Tunic\u003C/h3>\n\u003Cp>I don’t play as many indie games as I would like, and I finish even fewer. I love indie games, perhaps a little too much, because I’m always jumping around to the latest one that’s grabbed my attention. Thankfully, Tunic is one I managed to finish.\u003C/p>\n\u003Cp>It came at just the right time, I had just wrapped up Xenoblade Chronicles 3, and I was in the modo for a light action-adventure game. I was ready to start another playthrough of Link’s Awakening HD, but I happened to see that this adorable looking game starring a cute fox was about to drop on PS5 and Switch (it had been on Xbox since March I believe, but I don’t have an Xbox).\u003C/p>\n\u003Cp>I was not prepared for the challenge this game posed, but it was just the right kind of challenging that made me go, “Ok, I need to show this game who’s boss!” Beyond challenging bosses, the game mechanics are never tutorialized. Instead, you collect pages of the game’s “manual” as you play, and have to figure things out from there. Even simple things like how to upgrade your stats isn’t explained to you in plain terms.\u003C/p>\n\u003Ch3 id=\"horizon-forbidden-west\">Horizon Forbidden West\u003C/h3>\n\u003Cp>Horizon Zero Dawn launched in a crowded year for good games, but it stood out to me for its incredibly engrossing story, and its primary mechanic of fighting giant friggin’ robots. I was captivated from the start, and was chomping at the bit for a sequel. That sequel finally came, and once again got buried by other games (yeah, I’m looking at you, Elden Ring). But I didn’t care, I wanted to see the next chapter in Aloy’s story.\u003C/p>\n\u003Cp>I will confess, the story didn’t grab me as much as the first game’s. It was a satisfying continuation for me, without a doubt, but part of the mystery that made the first game so compelling–namely; how the world ended up in the state it is in the game–was already solved.\u003C/p>\n\u003Cp>The gameplay in this sequel, however, was a \u003Cem>huge\u003C/em> improvement. Melee combat, world traversal, side content, it was all so much better in this game, and showed that the developers took the feedback of the first game to heart. I couldn’t put this game down, and once the new game plus patch dropped I jumped right back in. And I’m anxiously awaiting the Burning Shores DLC dropping next year!\u003C/p>",{"headings":227,"imagePaths":237,"frontmatter":238},[228,231,234],{"depth":46,"slug":229,"text":230},"xenoblade-chronicles-3","Xenoblade Chronicles 3",{"depth":46,"slug":232,"text":233},"tunic","Tunic",{"depth":46,"slug":235,"text":236},"horizon-forbidden-west","Horizon Forbidden West",[],{"title":217,"pubDate":239,"tags":240},"2022-12-09",[220],"2022/my-top-3-games-of-2022.md","2022/on-text-editors",{"id":242,"data":244,"body":248,"filePath":249,"digest":250,"rendered":251,"legacyId":259},{"title":245,"pubDate":246,"tags":247},"On Text Editors",["Date","2022-10-22T00:00:00.000Z"],[94,132,17],"Among the various types of software tools I use every day, the one I spend a majority of my time in is a text editor. If I’m going to be spending most of my working day using one of these tools, I want it to be something that I enjoy using, and helps me work the way I like to work.\n\nThere are certainly no shortage of text editors out there. I’ve tried more than I can name, and I haven’t even scratched the surface of what’s out there. The most popular out there is Visual Studio Code, and it’s no mystery why. It’s absolutely packed with features, code completion is top notch, and there’s an extension for just about anything you could ever imagine.\n\nBut I’m going to be honest, I’m a Mac user and a bit of a software snob. I do use good old VS Code when the mood strikes me, but I’ve come to far prefer Nova, a fantastic piece of software from the people at [Panic Inc.](https://www.panic.com/) It’s fast, it’s clean, and most importantly for me, it’s MacOS native.\n\nNova has its drawbacks. It’s extension support is nowhere near VS Code’s. It’s also got some janky-ness when working with JSX files, at least in my experience. On the other hand, while some people might find its code completion leaves much to be desired, for me, outside of automatic imports, it’s a lot less frustrating.\n\nBasically, I still use VS Code from time to time. I turn to it when I’m working my day job, which involves working on a fairly large Next.js codebase, and I need to collaborate on something, or if I’m building out new components I need to import. I also built this website entirely in VS Code. Still, I far prefer using Nova.\n\nAt the end of the day, the tool you use doesn’t really matter. Using a particular text editor isn’t going to make you a better developer. The only thing that really matters is you use the tool that you like. Don’t just use VS Code because it’s trendy, or Nova because I’m singing its praises. I know people who swear by Sublime Text, WebStorm, and BBEdit. The best tool for web development is the one that works for you.\n\nEven if that tool is vim. 😉\n\n---\n\n_This post was originally published on my (now defunct) blog on my portfolio site [ghall.dev](https://ghall.dev), and was republished here for archival purposes._","src/content/blog/2022/on-text-editors.md","71d6bf519c412ce1",{"html":252,"metadata":253},"\u003Cp>Among the various types of software tools I use every day, the one I spend a majority of my time in is a text editor. If I’m going to be spending most of my working day using one of these tools, I want it to be something that I enjoy using, and helps me work the way I like to work.\u003C/p>\n\u003Cp>There are certainly no shortage of text editors out there. I’ve tried more than I can name, and I haven’t even scratched the surface of what’s out there. The most popular out there is Visual Studio Code, and it’s no mystery why. It’s absolutely packed with features, code completion is top notch, and there’s an extension for just about anything you could ever imagine.\u003C/p>\n\u003Cp>But I’m going to be honest, I’m a Mac user and a bit of a software snob. I do use good old VS Code when the mood strikes me, but I’ve come to far prefer Nova, a fantastic piece of software from the people at \u003Ca href=\"https://www.panic.com/\">Panic Inc.\u003C/a> It’s fast, it’s clean, and most importantly for me, it’s MacOS native.\u003C/p>\n\u003Cp>Nova has its drawbacks. It’s extension support is nowhere near VS Code’s. It’s also got some janky-ness when working with JSX files, at least in my experience. On the other hand, while some people might find its code completion leaves much to be desired, for me, outside of automatic imports, it’s a lot less frustrating.\u003C/p>\n\u003Cp>Basically, I still use VS Code from time to time. I turn to it when I’m working my day job, which involves working on a fairly large Next.js codebase, and I need to collaborate on something, or if I’m building out new components I need to import. I also built this website entirely in VS Code. Still, I far prefer using Nova.\u003C/p>\n\u003Cp>At the end of the day, the tool you use doesn’t really matter. Using a particular text editor isn’t going to make you a better developer. The only thing that really matters is you use the tool that you like. Don’t just use VS Code because it’s trendy, or Nova because I’m singing its praises. I know people who swear by Sublime Text, WebStorm, and BBEdit. The best tool for web development is the one that works for you.\u003C/p>\n\u003Cp>Even if that tool is vim. 😉\u003C/p>\n\u003Chr>\n\u003Cp>\u003Cem>This post was originally published on my (now defunct) blog on my portfolio site \u003Ca href=\"https://ghall.dev\">ghall.dev\u003C/a>, and was republished here for archival purposes.\u003C/em>\u003C/p>",{"headings":254,"imagePaths":255,"frontmatter":256},[],[],{"title":245,"pubDate":257,"tags":258},"2022-10-22",[94,132,17],"2022/on-text-editors.md","2023/an-update-on-my-ai-dating-profile",{"id":260,"data":262,"body":266,"filePath":267,"digest":268,"rendered":269,"legacyId":277},{"title":263,"pubDate":264,"tags":265},"An Update on my AI Dating Profile",["Date","2023-01-14T00:00:00.000Z"],[93,94],"Back in early December I posted about [how I created a dating profile using AI](/posts/2022/creating-a-dating-profile-with-ai). I haven't forgotten about my promise to follow up on the results from that very unscientific experiment. Though I stated I'd commit to using my AI profile for a week, I quickly realized that was not a reasonable amount of time. So a week, turned into 2, which turned into just over a month, and I finally reached a point where I feel like a follow up is warranted.\n\nNow, I wish I had some interesting stats to share. I wish I could say that my AI-assisted dating profile resulted in X% greater or fewer matches. The truth is there was nothing remarkable about my results. I got 5 matches in the first week-and-a-half, and zero after that.\n\nThe only standout event was that I received a message from a woman saying she really liked my outlook on relationships, so thank you AI for so eloquently phrasing my thoughts and feelings.\n\nThat was another thing I noticed in this experiment; it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\n\nSo, to answer the question I posed at the end of my previous post; did this turn my love-life around, or did it backfire? The truth is, neither. It was just an uncomfortably weird and disappointing experience, which is just par for the course when dating in a post-2020 world–at least in my experience. 🤷‍♂️","src/content/blog/2023/an-update-on-my-ai-dating-profile.md","db64faaaad105b1a",{"html":270,"metadata":271},"\u003Cp>Back in early December I posted about \u003Ca href=\"/posts/2022/creating-a-dating-profile-with-ai\">how I created a dating profile using AI\u003C/a>. I haven’t forgotten about my promise to follow up on the results from that very unscientific experiment. Though I stated I’d commit to using my AI profile for a week, I quickly realized that was not a reasonable amount of time. So a week, turned into 2, which turned into just over a month, and I finally reached a point where I feel like a follow up is warranted.\u003C/p>\n\u003Cp>Now, I wish I had some interesting stats to share. I wish I could say that my AI-assisted dating profile resulted in X% greater or fewer matches. The truth is there was nothing remarkable about my results. I got 5 matches in the first week-and-a-half, and zero after that.\u003C/p>\n\u003Cp>The only standout event was that I received a message from a woman saying she really liked my outlook on relationships, so thank you AI for so eloquently phrasing my thoughts and feelings.\u003C/p>\n\u003Cp>That was another thing I noticed in this experiment; it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\u003C/p>\n\u003Cp>So, to answer the question I posed at the end of my previous post; did this turn my love-life around, or did it backfire? The truth is, neither. It was just an uncomfortably weird and disappointing experience, which is just par for the course when dating in a post-2020 world–at least in my experience. 🤷‍♂️\u003C/p>",{"headings":272,"imagePaths":273,"frontmatter":274},[],[],{"title":263,"pubDate":275,"tags":276},"2023-01-14",[93,94],"2023/an-update-on-my-ai-dating-profile.md","2023/baldurs-gate-3-feels",{"id":278,"data":280,"body":284,"filePath":285,"digest":286,"rendered":287,"legacyId":295},{"title":281,"pubDate":282,"tags":283},"Baldur's Gate 3, and Lots of Feels About Video Games",["Date","2023-11-01T04:00:00.000Z"],[220,18],"2023 has been insane for games. We've seen such an influx of quality titles that it's been hard to even keep track, or even dedicate the time to the ones I have been able to keep track of. One of the two games that has really captured my attention – the other being Tears of the Kingdom – is Baldur's Gate 3.\n\nI’ve typically have had a difficult time getting invested in deep, Western-made RPGs, with the notable exception of The Witcher 3. The specific sub-genre that Baldur’s Gate 3 belongs to, the CRPG (or, Computer Role Playing Game) has been particularly challenging for me to latch on to.\n\nAround late-2020 or early-2021 I started playing Dungeons and Dragons remotely with a couple internet friends. It was in the midst of Covid, so we all had too much time to kill, and would spend a good chunk of our Sundays adventuring across the Forgotten Realms. I’d played D&D before, but it wasn’t something I really got into until that point.\n\nIf I didn’t have this experience I don’t think I would have been open to playing Baldur’s Gate. Because its mechanics are based on the same D&D rules I had spent hours immersed in every Sunday for nearly a year, I was going into the game already knowing the mechanics I usually find overwhelming and obtuse in these types of games.\n\nFor my first playthrough, I decided to port my wood elf ranger, the character I played as in the aforementioned remote D&D campaigns. I tried to recreate him as closely as the game allowed – Baldur’s Gate 3 actually uses a slightly modified version of the current D&D ruleset – and tried to role-play him the same. Basically my head canon was, after his previous adventures, he was thrust into this story.\n\nI never actually finished this playthrough. I got to the final story quest and decided to start over, I’d made so many mistakes, missed out on 3 major companions (Wyll, Karlach, and Halsin), and was only just getting comfortable with the freedom the game offers. Maybe someday I’ll finish my plucky wood elf’s journey, but until then...\n\nFor my second character, I chose to play as the Dark Urge. Unlike a purely custom character like I used for my first playthrough, the Dark Urge is not a blank slate, and has a story that interlinks with the game’s overall story.\n\nFor the Dark Urge I went with a human rogue, and I’ve had a lot more fun leaning into the game’s mechanics this time around. She’s basically a badass assassin, a master of deception, who disguises herself using this magical mask – which I got as part of the deluxe edition – to reach her targets.\n\nThis subtly altered my approach to the game in more ways than I had anticipated. For instance, during the early stages of the game, there's a quest to infiltrate a goblin camp and eliminate their three leaders. On both occasions, I successfully gained entry by persuading the goblins that I belonged to the nefarious cult that plays a significant role in the story. The first attempt required passing a series of deception checks, while during the second attempt, I employed the aforementioned magical mask to transform my character into a Drow – a race of dark elves – allowing me to waltz right into the camp.\n\nCarrying out the quest to take out the 3 goblin leaders played out quite a bit differently, at least on a mechanical level. The first time around I went in guns (er, arrows) blazing to take out the first 2 leaders, and then somehow convincing the 3rd I was on her side, leading her to a Druid grove, and having an all-out battle.\n\nThe second time I took full advantage of my party’s range of capabilities at that point, as well as the environment, to ambush the 3 leaders and get out with as little damage to my team as possible. I had a much easier time using this method, but it was so much more fulfilling to pull off. It didn’t feel cheap because I wasn’t cheesing the mechanics, I was figuring out how to best use them to my advantage.\n\nOn the surface, Baldur’s Gate 3 seems to share very little in common with Tears of the Kingdom, but I think it has enraptured me in much the same way. Both games not only allow you to push their mechanics to the limit to find your own solutions to the challenges they present you, but they make doing so extremely rewarding. These are games that are at their best when you think outside the box and get creative with the tools they give you.\n\nLast year I wrote about [my 3 favorite games of 2022](/posts/2022/my-top-3-games-of-2022) with the intention of doing a similar thing this year, but I don’t think I can. I’ve played a few games that could be the 3rd game in a potential “3 Favorite Games of 2023”, Sea of Stars, Spider-Man 2, and Star Wars: Jedi Survivor come to mind, and while they’re all very good games worthy of the spot, they just didn't come close to impacting me in the same way.\n\nTears of the Kingdom [gave me a place to feel at home](/posts/2023/finding-home-in-hyrule) at a time when I felt out of place after moving apartments. Baldur’s Gate 3 has given me a sense of camaraderie, albeit a virtual one, in a point in my life when I’ve been feeling alone and lost trying to find myself in a new city. No other game I’ve played this year has been a fraction as meaningful as these two have been.","src/content/blog/2023/baldurs-gate-3-feels.md","8e61cb1d5d95716f",{"html":288,"metadata":289},"\u003Cp>2023 has been insane for games. We’ve seen such an influx of quality titles that it’s been hard to even keep track, or even dedicate the time to the ones I have been able to keep track of. One of the two games that has really captured my attention – the other being Tears of the Kingdom – is Baldur’s Gate 3.\u003C/p>\n\u003Cp>I’ve typically have had a difficult time getting invested in deep, Western-made RPGs, with the notable exception of The Witcher 3. The specific sub-genre that Baldur’s Gate 3 belongs to, the CRPG (or, Computer Role Playing Game) has been particularly challenging for me to latch on to.\u003C/p>\n\u003Cp>Around late-2020 or early-2021 I started playing Dungeons and Dragons remotely with a couple internet friends. It was in the midst of Covid, so we all had too much time to kill, and would spend a good chunk of our Sundays adventuring across the Forgotten Realms. I’d played D&D before, but it wasn’t something I really got into until that point.\u003C/p>\n\u003Cp>If I didn’t have this experience I don’t think I would have been open to playing Baldur’s Gate. Because its mechanics are based on the same D&D rules I had spent hours immersed in every Sunday for nearly a year, I was going into the game already knowing the mechanics I usually find overwhelming and obtuse in these types of games.\u003C/p>\n\u003Cp>For my first playthrough, I decided to port my wood elf ranger, the character I played as in the aforementioned remote D&D campaigns. I tried to recreate him as closely as the game allowed – Baldur’s Gate 3 actually uses a slightly modified version of the current D&D ruleset – and tried to role-play him the same. Basically my head canon was, after his previous adventures, he was thrust into this story.\u003C/p>\n\u003Cp>I never actually finished this playthrough. I got to the final story quest and decided to start over, I’d made so many mistakes, missed out on 3 major companions (Wyll, Karlach, and Halsin), and was only just getting comfortable with the freedom the game offers. Maybe someday I’ll finish my plucky wood elf’s journey, but until then…\u003C/p>\n\u003Cp>For my second character, I chose to play as the Dark Urge. Unlike a purely custom character like I used for my first playthrough, the Dark Urge is not a blank slate, and has a story that interlinks with the game’s overall story.\u003C/p>\n\u003Cp>For the Dark Urge I went with a human rogue, and I’ve had a lot more fun leaning into the game’s mechanics this time around. She’s basically a badass assassin, a master of deception, who disguises herself using this magical mask – which I got as part of the deluxe edition – to reach her targets.\u003C/p>\n\u003Cp>This subtly altered my approach to the game in more ways than I had anticipated. For instance, during the early stages of the game, there’s a quest to infiltrate a goblin camp and eliminate their three leaders. On both occasions, I successfully gained entry by persuading the goblins that I belonged to the nefarious cult that plays a significant role in the story. The first attempt required passing a series of deception checks, while during the second attempt, I employed the aforementioned magical mask to transform my character into a Drow – a race of dark elves – allowing me to waltz right into the camp.\u003C/p>\n\u003Cp>Carrying out the quest to take out the 3 goblin leaders played out quite a bit differently, at least on a mechanical level. The first time around I went in guns (er, arrows) blazing to take out the first 2 leaders, and then somehow convincing the 3rd I was on her side, leading her to a Druid grove, and having an all-out battle.\u003C/p>\n\u003Cp>The second time I took full advantage of my party’s range of capabilities at that point, as well as the environment, to ambush the 3 leaders and get out with as little damage to my team as possible. I had a much easier time using this method, but it was so much more fulfilling to pull off. It didn’t feel cheap because I wasn’t cheesing the mechanics, I was figuring out how to best use them to my advantage.\u003C/p>\n\u003Cp>On the surface, Baldur’s Gate 3 seems to share very little in common with Tears of the Kingdom, but I think it has enraptured me in much the same way. Both games not only allow you to push their mechanics to the limit to find your own solutions to the challenges they present you, but they make doing so extremely rewarding. These are games that are at their best when you think outside the box and get creative with the tools they give you.\u003C/p>\n\u003Cp>Last year I wrote about \u003Ca href=\"/posts/2022/my-top-3-games-of-2022\">my 3 favorite games of 2022\u003C/a> with the intention of doing a similar thing this year, but I don’t think I can. I’ve played a few games that could be the 3rd game in a potential “3 Favorite Games of 2023”, Sea of Stars, Spider-Man 2, and Star Wars: Jedi Survivor come to mind, and while they’re all very good games worthy of the spot, they just didn’t come close to impacting me in the same way.\u003C/p>\n\u003Cp>Tears of the Kingdom \u003Ca href=\"/posts/2023/finding-home-in-hyrule\">gave me a place to feel at home\u003C/a> at a time when I felt out of place after moving apartments. Baldur’s Gate 3 has given me a sense of camaraderie, albeit a virtual one, in a point in my life when I’ve been feeling alone and lost trying to find myself in a new city. No other game I’ve played this year has been a fraction as meaningful as these two have been.\u003C/p>",{"headings":290,"imagePaths":291,"frontmatter":292},[],[],{"title":281,"pubDate":293,"tags":294},"11/1/23",[220,18],"2023/baldurs-gate-3-feels.md","2023/default-apps-2023",{"id":296,"data":298,"body":302,"filePath":303,"digest":304,"rendered":305,"legacyId":316},{"title":299,"pubDate":300,"tags":301},"Default Apps 2023",["Date","2023-11-25T05:00:00.000Z"],[132,94],"Inspired by [this post](https://chriscoyier.net/2023/11/25/default-apps-2023/) from Chris Coyier (which was in turn inpsired by [this post](https://mattcool.tech/posts/default-apps-2023)).\n\nI changed up some of the categories to avoid any entries with \"none\" or \"N/A\".\n\n---\n\n✉️ Mail Client: [Mail.app](https://support.apple.com/guide/mail/welcome/mac)\n\n📮 Mail Server: [Hover](https://www.hover.com/email)\n\n📓 Notes: [Bear](https://bear.app/), [Tot](https://tot.rocks/)\n\n✅ To Do: [Reminders](https://support.apple.com/guide/reminders/welcome/mac)\n\n📷 Photo Shooting: [iPhone 14](https://www.apple.com/shop/buy-iphone/iphone-14)\n\n🎨 Photo Editing: [Affinity Photo](https://affinity.serif.com/en-us/photo/)\n\n📆 Calendar: [Calendar](https://support.apple.com/guide/calendar/welcome/mac), [Dato](https://sindresorhus.com/dato), synced with [Google Calendar](https://calendar.google.com)\n\n☁️ Cloud Storage: [iCloud](https://www.icloud.com/)\n\n📰 RSS: [Reeder](https://www.reederapp.com/), synced with [Inoreeder](https://www.inoreader.com/)\n\n📇 Contacts: [Contacts.app](https://support.apple.com/guide/contacts/welcome/mac)\n\n🌐 Browser: [Safari](https://www.apple.com/safari/) for personal use, [Vivaldi](https://vivaldi.com/?mtm_ad=79027606064265&mtm_kwd=broswers) for work\n\n💬 Chat: [Messages](https://support.apple.com/guide/messages/welcome/mac), [Slack](https://slack.com/), [WhatsApp](https://www.whatsapp.com/)\n\n🔖 Bookmarks: [Anybox](https://anybox.app/)\n\n📑 Read It Later: [Reeder](https://www.reederapp.com/) (synced with [iCloud](https://www.icloud.com/))\n\n📝 Writing & Text Editing: [BBEdit](https://www.barebones.com/products/bbedit/index.html)\n\n📈 Spreadsheets: [Numbers](https://www.apple.com/numbers/)\n\n🪟 Window Management: [Rectangle Pro](https://rectangleapp.com/pro)\n\n🛒 Shopping Lists: [Tot](https://tot.rocks/)\n\n🏋️‍♀️Workout Tracking: [Gentler Streaks](https://www.gentler.app/)\n\n💰 Budgeting: [Numbers](https://www.apple.com/numbers/)\n\n🗞 News: [RSS](https://en.wikipedia.org/wiki/RSS)\n\n🎵 Music: [Apple Music](https://www.apple.com/apple-music/)\n\n🎙 Podcasts: [Overcast](https://overcast.fm/)\n\n🔑 Password Management: [iCloud Keychain](https://support.apple.com/en-us/HT204085)\n\n👨‍💻 Code Editor: [Nova](https://nova.app/), [Xcode](https://developer.apple.com/xcode/), [VSCode](https://code.visualstudio.com/)\n\n🐘 Mastodon Client: [Ivory](https://tapbots.com/ivory/)\n\n### Honorable Mentions\n\n- [Collections](https://collectionsdb.com/) - Personal Database\n- [Vinegar](https://andadinosaur.com/launch-vinegar) - Replaces YouTube player with standard HTML `\u003Cvideo>` tag\n- [Contexts](https://contexts.co/) - \u003Ckbd>⌘\u003C/kbd> + \u003Ckbd>tab\u003C/kbd> replacement","src/content/blog/2023/default-apps-2023.md","02920a3d7bf4c282",{"html":306,"metadata":307},"\u003Cp>Inspired by \u003Ca href=\"https://chriscoyier.net/2023/11/25/default-apps-2023/\">this post\u003C/a> from Chris Coyier (which was in turn inpsired by \u003Ca href=\"https://mattcool.tech/posts/default-apps-2023\">this post\u003C/a>).\u003C/p>\n\u003Cp>I changed up some of the categories to avoid any entries with “none” or “N/A”.\u003C/p>\n\u003Chr>\n\u003Cp>✉️ Mail Client: \u003Ca href=\"https://support.apple.com/guide/mail/welcome/mac\">Mail.app\u003C/a>\u003C/p>\n\u003Cp>📮 Mail Server: \u003Ca href=\"https://www.hover.com/email\">Hover\u003C/a>\u003C/p>\n\u003Cp>📓 Notes: \u003Ca href=\"https://bear.app/\">Bear\u003C/a>, \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>✅ To Do: \u003Ca href=\"https://support.apple.com/guide/reminders/welcome/mac\">Reminders\u003C/a>\u003C/p>\n\u003Cp>📷 Photo Shooting: \u003Ca href=\"https://www.apple.com/shop/buy-iphone/iphone-14\">iPhone 14\u003C/a>\u003C/p>\n\u003Cp>🎨 Photo Editing: \u003Ca href=\"https://affinity.serif.com/en-us/photo/\">Affinity Photo\u003C/a>\u003C/p>\n\u003Cp>📆 Calendar: \u003Ca href=\"https://support.apple.com/guide/calendar/welcome/mac\">Calendar\u003C/a>, \u003Ca href=\"https://sindresorhus.com/dato\">Dato\u003C/a>, synced with \u003Ca href=\"https://calendar.google.com\">Google Calendar\u003C/a>\u003C/p>\n\u003Cp>☁️ Cloud Storage: \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>\u003C/p>\n\u003Cp>📰 RSS: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>, synced with \u003Ca href=\"https://www.inoreader.com/\">Inoreeder\u003C/a>\u003C/p>\n\u003Cp>📇 Contacts: \u003Ca href=\"https://support.apple.com/guide/contacts/welcome/mac\">Contacts.app\u003C/a>\u003C/p>\n\u003Cp>🌐 Browser: \u003Ca href=\"https://www.apple.com/safari/\">Safari\u003C/a> for personal use, \u003Ca href=\"https://vivaldi.com/?mtm_ad=79027606064265&mtm_kwd=broswers\">Vivaldi\u003C/a> for work\u003C/p>\n\u003Cp>💬 Chat: \u003Ca href=\"https://support.apple.com/guide/messages/welcome/mac\">Messages\u003C/a>, \u003Ca href=\"https://slack.com/\">Slack\u003C/a>, \u003Ca href=\"https://www.whatsapp.com/\">WhatsApp\u003C/a>\u003C/p>\n\u003Cp>🔖 Bookmarks: \u003Ca href=\"https://anybox.app/\">Anybox\u003C/a>\u003C/p>\n\u003Cp>📑 Read It Later: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a> (synced with \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>)\u003C/p>\n\u003Cp>📝 Writing & Text Editing: \u003Ca href=\"https://www.barebones.com/products/bbedit/index.html\">BBEdit\u003C/a>\u003C/p>\n\u003Cp>📈 Spreadsheets: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🪟 Window Management: \u003Ca href=\"https://rectangleapp.com/pro\">Rectangle Pro\u003C/a>\u003C/p>\n\u003Cp>🛒 Shopping Lists: \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>🏋️‍♀️Workout Tracking: \u003Ca href=\"https://www.gentler.app/\">Gentler Streaks\u003C/a>\u003C/p>\n\u003Cp>💰 Budgeting: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🗞 News: \u003Ca href=\"https://en.wikipedia.org/wiki/RSS\">RSS\u003C/a>\u003C/p>\n\u003Cp>🎵 Music: \u003Ca href=\"https://www.apple.com/apple-music/\">Apple Music\u003C/a>\u003C/p>\n\u003Cp>🎙 Podcasts: \u003Ca href=\"https://overcast.fm/\">Overcast\u003C/a>\u003C/p>\n\u003Cp>🔑 Password Management: \u003Ca href=\"https://support.apple.com/en-us/HT204085\">iCloud Keychain\u003C/a>\u003C/p>\n\u003Cp>👨‍💻 Code Editor: \u003Ca href=\"https://nova.app/\">Nova\u003C/a>, \u003Ca href=\"https://developer.apple.com/xcode/\">Xcode\u003C/a>, \u003Ca href=\"https://code.visualstudio.com/\">VSCode\u003C/a>\u003C/p>\n\u003Cp>🐘 Mastodon Client: \u003Ca href=\"https://tapbots.com/ivory/\">Ivory\u003C/a>\u003C/p>\n\u003Ch3 id=\"honorable-mentions\">Honorable Mentions\u003C/h3>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://collectionsdb.com/\">Collections\u003C/a> - Personal Database\u003C/li>\n\u003Cli>\u003Ca href=\"https://andadinosaur.com/launch-vinegar\">Vinegar\u003C/a> - Replaces YouTube player with standard HTML \u003Ccode><video>\u003C/code> tag\u003C/li>\n\u003Cli>\u003Ca href=\"https://contexts.co/\">Contexts\u003C/a> - \u003Ckbd>⌘\u003C/kbd> + \u003Ckbd>tab\u003C/kbd> replacement\u003C/li>\n\u003C/ul>",{"headings":308,"imagePaths":312,"frontmatter":313},[309],{"depth":46,"slug":310,"text":311},"honorable-mentions","Honorable Mentions",[],{"title":299,"pubDate":314,"tags":315},"11/25/23",[132,94],"2023/default-apps-2023.md","2023/handheld-gaming",{"id":317,"data":319,"body":323,"filePath":324,"digest":325,"rendered":326,"legacyId":334},{"title":320,"pubDate":321,"tags":322},"Handheld Gaming",["Date","2023-01-07T00:00:00.000Z"],[220],"I don’t know if it’s the particular mood I’ve been in, the colder weather, or some combination of the 2, but something about cozying up with a handheld game console has been incredibly appealing lately. My PS5 sits under my TV, streaming the occasional movie or show, and begging me to jump into that Witcher 3 update, or continue playing Tales of Arise. Meanwhile, my Switch Lite is getting all the love.\n\nGenerally speaking, I feel like I’ve logged most of the game time over the course of my life on a handheld of some kind, from my GameBoy Pocket, all the way up to the Switch Lite. The first console I ever bought with my own money was a GameBoy Advance SP. Portable gaming is in my blood! (Ok, maybe that’s a touch dramatic…)\n\nThat’s not to say I didn’t ever play home consoles. I’ve had every Nintendo system since the SNES–yup, that includes the Wii U–and got into PlayStation around the mid-PS3 era.\n\nThe thing is, my parents were divorced by the time I was into gaming, and the home consoles lived at my dad’s house. But I spent a majority of my childhood at my mom’s, and she didn’t want those things around, and I was only allowed to have my GameBoy. To this day, I’m not sure why that was. Maybe because she found it less annoying.\n\nGrowing up, console games were a treat I got on the weekend, so most of my afternoons after school were spent playing Pokémon, Super Mario Land 2, Link’s Awakening, and others that I could take this whole blog post listing.\n\nI had some big gaming firsts on handhelds; My first RPG? Pokémon Red. My first Final Fantasy? Final Fantasy IV Advance. My first Zelda? The aforementioned Link’s Awakening. The first game I put 100+ hours into? Pokémon Silver.\n\nHandheld gaming even kept me sane during lockdown in 2020. Let’s not talk about how many hours I logged in Animal Crossing and Fire Emblem Three Houses I logged during that time. Yeah I played some console games–notably, I replayed and re-completed Horizon Zero Dawn–but I practically wore out my original Switch Lite that year.\n\nMaybe there’s something nostalgic about handheld gaming that draws me in when I just want to get cozy, even if I’m playing a newer game that I’m not necessarily nostalgic for. Maybe my brain gets tired of the flashy, blockbuster-level graphics of home consoles, and just longs for something simpler.\n\nWhatever the case, my biggest trivial fear in life is handheld gaming going away, because mobile games do not cut it at all.","src/content/blog/2023/handheld-gaming.md","378580903305b18d",{"html":327,"metadata":328},"\u003Cp>I don’t know if it’s the particular mood I’ve been in, the colder weather, or some combination of the 2, but something about cozying up with a handheld game console has been incredibly appealing lately. My PS5 sits under my TV, streaming the occasional movie or show, and begging me to jump into that Witcher 3 update, or continue playing Tales of Arise. Meanwhile, my Switch Lite is getting all the love.\u003C/p>\n\u003Cp>Generally speaking, I feel like I’ve logged most of the game time over the course of my life on a handheld of some kind, from my GameBoy Pocket, all the way up to the Switch Lite. The first console I ever bought with my own money was a GameBoy Advance SP. Portable gaming is in my blood! (Ok, maybe that’s a touch dramatic…)\u003C/p>\n\u003Cp>That’s not to say I didn’t ever play home consoles. I’ve had every Nintendo system since the SNES–yup, that includes the Wii U–and got into PlayStation around the mid-PS3 era.\u003C/p>\n\u003Cp>The thing is, my parents were divorced by the time I was into gaming, and the home consoles lived at my dad’s house. But I spent a majority of my childhood at my mom’s, and she didn’t want those things around, and I was only allowed to have my GameBoy. To this day, I’m not sure why that was. Maybe because she found it less annoying.\u003C/p>\n\u003Cp>Growing up, console games were a treat I got on the weekend, so most of my afternoons after school were spent playing Pokémon, Super Mario Land 2, Link’s Awakening, and others that I could take this whole blog post listing.\u003C/p>\n\u003Cp>I had some big gaming firsts on handhelds; My first RPG? Pokémon Red. My first Final Fantasy? Final Fantasy IV Advance. My first Zelda? The aforementioned Link’s Awakening. The first game I put 100+ hours into? Pokémon Silver.\u003C/p>\n\u003Cp>Handheld gaming even kept me sane during lockdown in 2020. Let’s not talk about how many hours I logged in Animal Crossing and Fire Emblem Three Houses I logged during that time. Yeah I played some console games–notably, I replayed and re-completed Horizon Zero Dawn–but I practically wore out my original Switch Lite that year.\u003C/p>\n\u003Cp>Maybe there’s something nostalgic about handheld gaming that draws me in when I just want to get cozy, even if I’m playing a newer game that I’m not necessarily nostalgic for. Maybe my brain gets tired of the flashy, blockbuster-level graphics of home consoles, and just longs for something simpler.\u003C/p>\n\u003Cp>Whatever the case, my biggest trivial fear in life is handheld gaming going away, because mobile games do not cut it at all.\u003C/p>",{"headings":329,"imagePaths":330,"frontmatter":331},[],[],{"title":320,"pubDate":332,"tags":333},"2023-01-07",[220],"2023/handheld-gaming.md","2023/finding-home-in-hyrule",{"id":335,"data":337,"body":341,"filePath":342,"digest":343,"rendered":344,"legacyId":352},{"title":338,"pubDate":339,"tags":340},"Finding Home in Hyrule",["Date","2023-05-22T04:00:00.000Z"],[220,18],"5 years ago I underwent a big change in my life, my girlfriend of 8 years and I split up. One of the things that got me through that particularly tough change was a little game called The Legend of Zelda: Breath of the Wild. I had played it the year previous on the Wii U, but I had finally upgraded to the Switch and was in the middle of my second play through when it all went down. I would spend a couple hours every day just aimlessly wandering around Hyrule, it made me feel a strange comfort. My sadness about the situation I found myself in melted away whenever I took these little virtual treks across the map, finding little nooks and crannies I’d never seen before.\n\nFast forward to last week, and I underwent another drastic life change; I moved from the apartment I’ve lived in for most of my adult life to a totally new place in a totally new city. I was, and still am, overwhelmed, homesick, and questioning all my decisions that led me to this point. Coincidentally, a little game called The Legend of Zelda Tears of the Kingdom dropped the day before I was to embark on this IRL adventure.\n\nMy first night in the new place involved staying up well past midnight diving into Hyrule once again, but this time it brought be a different kind of comfort. Fortuitously for me, Nintendo decided to reuse the world map from the previous game and just build upon it, and that has made this game feel a lot like coming home to me. Hyrule was a world that got me through a rough point in my life, and here it is again giving me a little taste of familiarity, of home, at a time when I need it the most.\n\nLast night I made a point to find a place Hateno Village, a town where you can buy a little house in Breath of the Wild. I wanted to visit it again, and see what had become of this virtual home-away-from-home. So, over the course of the evening I made my journey, and eventually came to the little house, sitting there at the edge of the village. I walked inside, and, for the first time in a week, I felt at home.","src/content/blog/2023/finding-home-in-hyrule.md","cbba225ac107c916",{"html":345,"metadata":346},"\u003Cp>5 years ago I underwent a big change in my life, my girlfriend of 8 years and I split up. One of the things that got me through that particularly tough change was a little game called The Legend of Zelda: Breath of the Wild. I had played it the year previous on the Wii U, but I had finally upgraded to the Switch and was in the middle of my second play through when it all went down. I would spend a couple hours every day just aimlessly wandering around Hyrule, it made me feel a strange comfort. My sadness about the situation I found myself in melted away whenever I took these little virtual treks across the map, finding little nooks and crannies I’d never seen before.\u003C/p>\n\u003Cp>Fast forward to last week, and I underwent another drastic life change; I moved from the apartment I’ve lived in for most of my adult life to a totally new place in a totally new city. I was, and still am, overwhelmed, homesick, and questioning all my decisions that led me to this point. Coincidentally, a little game called The Legend of Zelda Tears of the Kingdom dropped the day before I was to embark on this IRL adventure.\u003C/p>\n\u003Cp>My first night in the new place involved staying up well past midnight diving into Hyrule once again, but this time it brought be a different kind of comfort. Fortuitously for me, Nintendo decided to reuse the world map from the previous game and just build upon it, and that has made this game feel a lot like coming home to me. Hyrule was a world that got me through a rough point in my life, and here it is again giving me a little taste of familiarity, of home, at a time when I need it the most.\u003C/p>\n\u003Cp>Last night I made a point to find a place Hateno Village, a town where you can buy a little house in Breath of the Wild. I wanted to visit it again, and see what had become of this virtual home-away-from-home. So, over the course of the evening I made my journey, and eventually came to the little house, sitting there at the edge of the village. I walked inside, and, for the first time in a week, I felt at home.\u003C/p>",{"headings":347,"imagePaths":348,"frontmatter":349},[],[],{"title":338,"pubDate":350,"tags":351},"5/22/23",[220,18],"2023/finding-home-in-hyrule.md","2023/journal-app-impressions",{"id":353,"data":355,"body":359,"filePath":360,"digest":361,"rendered":362,"legacyId":374},{"title":356,"pubDate":357,"tags":358},"Apple's Journal App: First Impressions",["Date","2023-11-12T05:00:00.000Z"],[94,132,18],"With the upcoming iOS 17.2 update, we’ll finally get our hands on the new Journal app Apple announced at WWDC earlier this year. I decided to be brave and install the public beta so I could take a look and get some first impressions. As someone with mental health struggles, I appreciate the recent efforts Apple has put into making these kinds of features available, so I was really excited to take a look at this latest addition.\n\nFirst off, I like the simplicity of the interface. It doesn’t have much going on, and I think that’s a point in its favor. You can open the app and get journaling right away. It even offers you journaling prompt which is excellent for those like me who are not always sure what to write about. [^1]\n\nIt doesn’t have the bells and whistles an app like Day One has, but when it comes to writing a journal entry you’re given the option to add photos, location, and even an audio recording. It’s pretty barebones, but I think that’s ok. The one thing I would like is the ability to tie into the mood tracking on Apple Watch and either be able to set your current mood from the app, or tie mood tracking into the Journaling Suggestions feature.\n\nSpeaking of, I actually don’t have much to say about the Journaling Suggestions feature. At the moment it can only suggest journaling based on your workouts, music and podcasts, messages and calls you make, your photos, and significant locations. That’s not at all how I like to journal, so I actually have those turned off. Apparently there’s an API that 3rd party apps can use, but we won’t see what that will bring until iOS 17.2 officially comes out later this year.\n\nSome other things I like are the ability to lock your journal with its own password, which I think is an absolute must for this kind of app, and the ability to set a journal schedule, which is nice for helping to build – or rebuild – a regular journaling habit.\n\nThe one thing I do not like, and this could be the dealbreaker for me, is that, at the moment, Journal is iPhone only. No iPad, no Mac, just iPhone. This severely limits its usability for me, I generally do not like writing anything more than a sentence or 2 on an iPhone. It really needs to be available on all Apple’s platforms and I’m puzzled that it isn’t. Even just making it available on iPad would be acceptable, but as it stands now I don’t think I can make use of it.\n\n[^1]: Shameless plug: I built [a webpage to solve this very problem](https://www.journal-prompt.com).","src/content/blog/2023/journal-app-impressions.md","5e466d3aa46de587",{"html":363,"metadata":364},"\u003Cp>With the upcoming iOS 17.2 update, we’ll finally get our hands on the new Journal app Apple announced at WWDC earlier this year. I decided to be brave and install the public beta so I could take a look and get some first impressions. As someone with mental health struggles, I appreciate the recent efforts Apple has put into making these kinds of features available, so I was really excited to take a look at this latest addition.\u003C/p>\n\u003Cp>First off, I like the simplicity of the interface. It doesn’t have much going on, and I think that’s a point in its favor. You can open the app and get journaling right away. It even offers you journaling prompt which is excellent for those like me who are not always sure what to write about. \u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>\u003C/p>\n\u003Cp>It doesn’t have the bells and whistles an app like Day One has, but when it comes to writing a journal entry you’re given the option to add photos, location, and even an audio recording. It’s pretty barebones, but I think that’s ok. The one thing I would like is the ability to tie into the mood tracking on Apple Watch and either be able to set your current mood from the app, or tie mood tracking into the Journaling Suggestions feature.\u003C/p>\n\u003Cp>Speaking of, I actually don’t have much to say about the Journaling Suggestions feature. At the moment it can only suggest journaling based on your workouts, music and podcasts, messages and calls you make, your photos, and significant locations. That’s not at all how I like to journal, so I actually have those turned off. Apparently there’s an API that 3rd party apps can use, but we won’t see what that will bring until iOS 17.2 officially comes out later this year.\u003C/p>\n\u003Cp>Some other things I like are the ability to lock your journal with its own password, which I think is an absolute must for this kind of app, and the ability to set a journal schedule, which is nice for helping to build – or rebuild – a regular journaling habit.\u003C/p>\n\u003Cp>The one thing I do not like, and this could be the dealbreaker for me, is that, at the moment, Journal is iPhone only. No iPad, no Mac, just iPhone. This severely limits its usability for me, I generally do not like writing anything more than a sentence or 2 on an iPhone. It really needs to be available on all Apple’s platforms and I’m puzzled that it isn’t. Even just making it available on iPad would be acceptable, but as it stands now I don’t think I can make use of it.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Shameless plug: I built \u003Ca href=\"https://www.journal-prompt.com\">a webpage to solve this very problem\u003C/a>. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":365,"imagePaths":370,"frontmatter":371},[366],{"depth":367,"slug":368,"text":369},2,"footnote-label","Footnotes",[],{"title":356,"pubDate":372,"tags":373},"11/12/23",[94,132,18],"2023/journal-app-impressions.md","2023/my-favorite-little-apps-part-2",{"id":375,"data":377,"body":381,"filePath":382,"digest":383,"rendered":384,"legacyId":404},{"title":378,"pubDate":379,"tags":380},"My Favorite Little Apps, Part 2",["Date","2023-01-21T00:00:00.000Z"],[131,132],"A few months ago, I wrote about [my favorite little Mac apps](/posts/2022/my-favorite-little-apps). This post was originally published on my portfolio blog (which I have since merged with this one), so it had more of a focus on web development and productivity, so I wanted to write up a part 2 with more general-use apps I use frequently.\n\n### Vinegar\n\nI use YouTube a lot, but I hate their video player, and the constant ads are obnoxious (nothing is worse than watching a dev tutorial and having it get interrupted by an ad for Wix). Vinegar is a Safari extension that replaces the YouTube player with a standard HTML 5 player, and blocks ads. It's made YouTube so much more enjoyable to use on both my Mac and iOS devices. I suggest getting it in a bundle with Baking Soda, which replaces custom video players on other websites with standard HTML 5 players.\n\n[Buy Here](https://apps.apple.com/us/app-bundle/fizzy-water-bundle/id1601247237)\n\n### Rocket\n\nRocket gives you quick and easy access to the full swath of Emoji with a simple search function you can either access via the menu bar, or in any text field via a trigger key (for example, Rocket pops up when I type `::`). And that's just the free version! With the pro version, you can store and search custom text snippets, ASCII art, images, and even gifs. Furthermore, you can search various symbols and glyphs like ↺, ◆, ∭, etc...\n\n[Download/Buy Here](https://matthewpalmer.net/rocket/)\n\n### QLMarkdown\n\nI do 90% of my writing in Markdown (heck, this blog is just a collection of Markdown files), and I wanted to see if there was a way to preview Markdown in QuickLook. After some searching, I found QLMarkdown! While it is an app you install to your Applications folder, it is primarily a QuickLook plugin that will display any `.md` file as a fully styled Markdown preview. The app itself is simply a interface to change various settings for how you want the preview to look and function. Best of all, it's open source!\n\n[Download Here](https://github.com/toland/qlmarkdown/releases)\n\nOr, if you use Homebrew, you can install it with `brew install --cask qlmarkdown`.\n\n### Keka\n\nEven though MacOS handles ZIP files, and other similar formats, it does have some limitations. I used the Unarchiver for many years, but I recently discovered Keka. I find it to be faster, and has a lot more options for compression and encyption if you're into that.\n\n[Download Here](https://www.keka.io/en/)","src/content/blog/2023/my-favorite-little-apps-part-2.md","d010e1b1a6fe4e97",{"html":385,"metadata":386},"\u003Cp>A few months ago, I wrote about \u003Ca href=\"/posts/2022/my-favorite-little-apps\">my favorite little Mac apps\u003C/a>. This post was originally published on my portfolio blog (which I have since merged with this one), so it had more of a focus on web development and productivity, so I wanted to write up a part 2 with more general-use apps I use frequently.\u003C/p>\n\u003Ch3 id=\"vinegar\">Vinegar\u003C/h3>\n\u003Cp>I use YouTube a lot, but I hate their video player, and the constant ads are obnoxious (nothing is worse than watching a dev tutorial and having it get interrupted by an ad for Wix). Vinegar is a Safari extension that replaces the YouTube player with a standard HTML 5 player, and blocks ads. It’s made YouTube so much more enjoyable to use on both my Mac and iOS devices. I suggest getting it in a bundle with Baking Soda, which replaces custom video players on other websites with standard HTML 5 players.\u003C/p>\n\u003Cp>\u003Ca href=\"https://apps.apple.com/us/app-bundle/fizzy-water-bundle/id1601247237\">Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"rocket\">Rocket\u003C/h3>\n\u003Cp>Rocket gives you quick and easy access to the full swath of Emoji with a simple search function you can either access via the menu bar, or in any text field via a trigger key (for example, Rocket pops up when I type \u003Ccode>::\u003C/code>). And that’s just the free version! With the pro version, you can store and search custom text snippets, ASCII art, images, and even gifs. Furthermore, you can search various symbols and glyphs like ↺, ◆, ∭, etc…\u003C/p>\n\u003Cp>\u003Ca href=\"https://matthewpalmer.net/rocket/\">Download/Buy Here\u003C/a>\u003C/p>\n\u003Ch3 id=\"qlmarkdown\">QLMarkdown\u003C/h3>\n\u003Cp>I do 90% of my writing in Markdown (heck, this blog is just a collection of Markdown files), and I wanted to see if there was a way to preview Markdown in QuickLook. After some searching, I found QLMarkdown! While it is an app you install to your Applications folder, it is primarily a QuickLook plugin that will display any \u003Ccode>.md\u003C/code> file as a fully styled Markdown preview. The app itself is simply a interface to change various settings for how you want the preview to look and function. Best of all, it’s open source!\u003C/p>\n\u003Cp>\u003Ca href=\"https://github.com/toland/qlmarkdown/releases\">Download Here\u003C/a>\u003C/p>\n\u003Cp>Or, if you use Homebrew, you can install it with \u003Ccode>brew install --cask qlmarkdown\u003C/code>.\u003C/p>\n\u003Ch3 id=\"keka\">Keka\u003C/h3>\n\u003Cp>Even though MacOS handles ZIP files, and other similar formats, it does have some limitations. I used the Unarchiver for many years, but I recently discovered Keka. I find it to be faster, and has a lot more options for compression and encyption if you’re into that.\u003C/p>\n\u003Cp>\u003Ca href=\"https://www.keka.io/en/\">Download Here\u003C/a>\u003C/p>",{"headings":387,"imagePaths":400,"frontmatter":401},[388,391,394,397],{"depth":46,"slug":389,"text":390},"vinegar","Vinegar",{"depth":46,"slug":392,"text":393},"rocket","Rocket",{"depth":46,"slug":395,"text":396},"qlmarkdown","QLMarkdown",{"depth":46,"slug":398,"text":399},"keka","Keka",[],{"title":378,"pubDate":402,"tags":403},"2023-01-21",[131,132],"2023/my-favorite-little-apps-part-2.md","2023/my-gunpla-adventure",{"id":405,"data":407,"body":411,"filePath":412,"digest":413,"rendered":414,"legacyId":422},{"title":408,"pubDate":409,"tags":410},"My Gunpla Adventure",["Date","2023-01-28T00:00:00.000Z"],[37],"Back in my teenage years I used to build model kits. Mostly Star Trek, some Star Wars, and 1 or 2 model planes. It was sort of a continuation of my Lego obsession from my pre-teen days, but at some point I just kind of fell of. Fast-forward Summer 2022, I was going through a rough patch and wanted to focus on some hobbies that would get me away from the screen, and I decided to pick up model building again. Because the YouTube algorithm is a thing, as I watched more and more reviews and tutorials, I naturally ended up in a strange corner of the model kit scene called Gunpla.\n\nSo, what the heck is Gunpla? Best I can understand is that it's a portmanteau of [Gundam](https://en.wikipedia.org/wiki/Gundam) and plastic. So simply put, it's about building robots (sorry, mecha) out of plastic.\n\nI've never been a Gundam fan, the genre just never really appealed to me. But I became enamored with watching Gunpla videos on YouTube, which is a whole genre of ASMR-like videos like [this one](https://www.youtube.com/watch?v=Nq88NAAD25k). The level of engineering behind these kits was just so fascinating to me, but I'm not super big on buying merch for franchises I don't really enjoy. Happily, that ended up not being a problem.\n\nSo, there was a little anime I watched back in high school called [Full Metal Panic](https://en.wikipedia.org/wiki/Full_Metal_Panic!) which, like Gundam, features people piloting giant mecha. As luck would have it, Bandai, the makers of Gunpla kits, have/had the license to make kits for the series. Not-so-luckily, the kit I wanted based on the main character's mech is impossible to find at a reasonable price at the moment, so I settled for my second pick:\n\n\u003Cimg src=\"/media/gunpla/box.jpg\" width=\"90%\" alt=\"a box sitting on a table with an image of a mech and text that reads 'M9 Gernsback ver IV (Agressor Squadron)'\" />\n\nSo, with the kit in hand, I opened the box and was greeted by a handful of plastic pouches containing what seemed like a thousand parts connected on plastic sprues in a variety of blues and grays. I took out the contents and perused through the included instructions, which read very much like it was designed by Ikea, if Ikea sold miniature giant robots. The writing was all in Japanese, but the illustrations were enough to guide one through the process no matter what language they can read.\n\n\u003Cimg src=\"/media/gunpla/all-the-parts.jpg\" width=\"90%\" alt=\"neatly piled plastic sprues sorted by color, an instruction booklet, and a model of R2-D2 lurking in the corner\" />\n\nSeparating the individual pieces from each sprue was pretty painless. They came off very cleanly and I barely had to use my handy hobby knife to clean up bits of excess plastic, and when I did it cut through like butter. Not a drop of glue was needed, everything snapped together perfectly. I struggled a bit with the smaller parts (of which there were plenty), and there were a couple seemingly microscopic stickers I had to apply, so my iFixIt tweezers came in handy quite a few times.\n\nAfter a couple hours, I had a pretty sweet looking miniature mecha.\n\n\u003Cimg src=\"/media/gunpla/final.jpg\" width=\"90%\" alt=\"the finished model, standing tall, and holding a scary looking gun\" />\n\nPutting it together, I was just so amazed by the level of engineering that went into this kit. Putting it all together, I could tell someone put a lot of care and attention into designing this thing, rivaling some of the Lego kits I've built, from the near-seamless fit of all the pieces, to the various types of joints enabling a quite frankly insane level of pose-ability for something this size.\n\nI had a lot of fun doing this, and it was cool to see what this little subculture of model building is like. Would I build another one? For sure, but I don't think it will be a regular thing for me because of how expensive it could get. This kit cost me around $50, and I tend to go hard on stuff like this (see my obscene collection of 2016-2017-era Magic The Gathering cards), so I could see myself spending way too much money on this if I'm not careful.\n\nI'm sure I'll get another kit eventually, but in the meantime there's a seemingly infinite number of those ASMR-style assembly videos, so I can marvel at the the engineering behind these kits second-hand for now.","src/content/blog/2023/my-gunpla-adventure.md","0151531fdef3e9eb",{"html":415,"metadata":416},"\u003Cp>Back in my teenage years I used to build model kits. Mostly Star Trek, some Star Wars, and 1 or 2 model planes. It was sort of a continuation of my Lego obsession from my pre-teen days, but at some point I just kind of fell of. Fast-forward Summer 2022, I was going through a rough patch and wanted to focus on some hobbies that would get me away from the screen, and I decided to pick up model building again. Because the YouTube algorithm is a thing, as I watched more and more reviews and tutorials, I naturally ended up in a strange corner of the model kit scene called Gunpla.\u003C/p>\n\u003Cp>So, what the heck is Gunpla? Best I can understand is that it’s a portmanteau of \u003Ca href=\"https://en.wikipedia.org/wiki/Gundam\">Gundam\u003C/a> and plastic. So simply put, it’s about building robots (sorry, mecha) out of plastic.\u003C/p>\n\u003Cp>I’ve never been a Gundam fan, the genre just never really appealed to me. But I became enamored with watching Gunpla videos on YouTube, which is a whole genre of ASMR-like videos like \u003Ca href=\"https://www.youtube.com/watch?v=Nq88NAAD25k\">this one\u003C/a>. The level of engineering behind these kits was just so fascinating to me, but I’m not super big on buying merch for franchises I don’t really enjoy. Happily, that ended up not being a problem.\u003C/p>\n\u003Cp>So, there was a little anime I watched back in high school called \u003Ca href=\"https://en.wikipedia.org/wiki/Full_Metal_Panic!\">Full Metal Panic\u003C/a> which, like Gundam, features people piloting giant mecha. As luck would have it, Bandai, the makers of Gunpla kits, have/had the license to make kits for the series. Not-so-luckily, the kit I wanted based on the main character’s mech is impossible to find at a reasonable price at the moment, so I settled for my second pick:\u003C/p>\n\u003Cimg src=\"/media/gunpla/box.jpg\" width=\"90%\" alt=\"a box sitting on a table with an image of a mech and text that reads 'M9 Gernsback ver IV (Agressor Squadron)'\">\n\u003Cp>So, with the kit in hand, I opened the box and was greeted by a handful of plastic pouches containing what seemed like a thousand parts connected on plastic sprues in a variety of blues and grays. I took out the contents and perused through the included instructions, which read very much like it was designed by Ikea, if Ikea sold miniature giant robots. The writing was all in Japanese, but the illustrations were enough to guide one through the process no matter what language they can read.\u003C/p>\n\u003Cimg src=\"/media/gunpla/all-the-parts.jpg\" width=\"90%\" alt=\"neatly piled plastic sprues sorted by color, an instruction booklet, and a model of R2-D2 lurking in the corner\">\n\u003Cp>Separating the individual pieces from each sprue was pretty painless. They came off very cleanly and I barely had to use my handy hobby knife to clean up bits of excess plastic, and when I did it cut through like butter. Not a drop of glue was needed, everything snapped together perfectly. I struggled a bit with the smaller parts (of which there were plenty), and there were a couple seemingly microscopic stickers I had to apply, so my iFixIt tweezers came in handy quite a few times.\u003C/p>\n\u003Cp>After a couple hours, I had a pretty sweet looking miniature mecha.\u003C/p>\n\u003Cimg src=\"/media/gunpla/final.jpg\" width=\"90%\" alt=\"the finished model, standing tall, and holding a scary looking gun\">\n\u003Cp>Putting it together, I was just so amazed by the level of engineering that went into this kit. Putting it all together, I could tell someone put a lot of care and attention into designing this thing, rivaling some of the Lego kits I’ve built, from the near-seamless fit of all the pieces, to the various types of joints enabling a quite frankly insane level of pose-ability for something this size.\u003C/p>\n\u003Cp>I had a lot of fun doing this, and it was cool to see what this little subculture of model building is like. Would I build another one? For sure, but I don’t think it will be a regular thing for me because of how expensive it could get. This kit cost me around $50, and I tend to go hard on stuff like this (see my obscene collection of 2016-2017-era Magic The Gathering cards), so I could see myself spending way too much money on this if I’m not careful.\u003C/p>\n\u003Cp>I’m sure I’ll get another kit eventually, but in the meantime there’s a seemingly infinite number of those ASMR-style assembly videos, so I can marvel at the the engineering behind these kits second-hand for now.\u003C/p>",{"headings":417,"imagePaths":418,"frontmatter":419},[],[],{"title":408,"pubDate":420,"tags":421},"2023-01-28",[37],"2023/my-gunpla-adventure.md","2023/nostalgia",{"id":423,"data":425,"body":430,"filePath":431,"digest":432,"rendered":433,"legacyId":441},{"title":426,"pubDate":427,"tags":428},"Nostalgia",["Date","2023-03-04T00:00:00.000Z"],[93,220,429],"Movies & TV","I've recently been playing 2 games that would be considered \"retro\", but referring to them as such would make me feel old, so we'll call them \"classics\". These classics are Metroid Prime, via the recent remaster on Switch, and The Legend of Zelda: The Minish Cap, via the Switch Online GameBoy Advance collection. It got me thinking about how nostalgia can color our opinions of certain pieces of media, primarily when comparing media of a similar vintage.\n\nMetroid Prime originally came out on the GameCube in 2002, my the extent of my knowledge of the series was via Samus in Super Smash Bros, and I never played the game until the Wii version, which I hated due to the controls.\n\nTo contrast, Minish Cap came out on the GameBoy Advance in 2004, and I've been a Zelda fan since Link's Awakening DX on the GameBoy Color. I played this game to death when it released, and spent countless hours searching the (admittedly small) game world seeking out secrets and collectables.\n\nThese 2 games are both well-regarded and loved among their respective fans. Both of them are quality, well-made games in their own right. But I've found myself enjoying the time I've spent replaying Minish Cap more than my time experiencing much of Metroid Prime for the first time. Is Minish Cap just more my style of game? Could it just be a better game? Or maybe my nostalgia is influencing my opinions.\n\nThere's also the fact that my first experience with the Wii version of Metroid Prime was suboptimal. Could that be coloring my opinion of the Switch version, even though none of the issues I had on the Wii exist–or, more accurately, they are not mandatory, as motion controls can be turned on in the game's settings.\n\nThis kind of thing isn't exclusive to video games. As a child of the 90's I grew up in the so-called \"Disney Renaissance\" and, as I've been re-exploring that era thanks to Disney Plus, I've found myself gravitating towards certain movies. Aladdin, Lion King, Mulan, Pocahontas, the Disney films I watched the most growing up, were the ones I enjoyed the most. And I found myself wholly uninterested in The Little Mermaid, Beauty and the Beast, Tarzan, or Hercules. None of this is a reflection on the quality of these movies. My feelings about them are entirely down to the ones I remember watching the most, the ones I could picture in my head as clear as day.\n\nMaybe, objectively speaking, Metroid Prime is a better game than Minish Cap. I'm sure there are many people who would be insisting that's the case, and many others who would argue the opposite. But I don't know if trying to settle that, or similar debates, would be all that productive. Whether we're talking Nintendo games from the early 2000's, or Disney movies from the 1990's, their perceived quality is wholly determined by how they made us feel when we first experienced them.\n\nPerhaps asking someone today, someone who has yet to experience either game, to play both Minish Cap and Metroid Prime and pick their favorite of the 2 would produce some useful insight. But on the other hand, would their opinions be colored by the ever-evolving experiences games have produced over the last 20 years? Someone who played Breath of the Wild before experiencing Minish Cap for the first time is going to experience the game differently than someone who played it back in 2004.\n\nAdmittedly, as someone who un-ironically enjoys Star Wars Episode II–purely due to nostalgia, even though I can recognize and point out the movies many flaws–I'm perhaps not the best person to examine nostalgia vs. objective quality.","src/content/blog/2023/nostalgia.md","02495bfc28d1a357",{"html":434,"metadata":435},"\u003Cp>I’ve recently been playing 2 games that would be considered “retro”, but referring to them as such would make me feel old, so we’ll call them “classics”. These classics are Metroid Prime, via the recent remaster on Switch, and The Legend of Zelda: The Minish Cap, via the Switch Online GameBoy Advance collection. It got me thinking about how nostalgia can color our opinions of certain pieces of media, primarily when comparing media of a similar vintage.\u003C/p>\n\u003Cp>Metroid Prime originally came out on the GameCube in 2002, my the extent of my knowledge of the series was via Samus in Super Smash Bros, and I never played the game until the Wii version, which I hated due to the controls.\u003C/p>\n\u003Cp>To contrast, Minish Cap came out on the GameBoy Advance in 2004, and I’ve been a Zelda fan since Link’s Awakening DX on the GameBoy Color. I played this game to death when it released, and spent countless hours searching the (admittedly small) game world seeking out secrets and collectables.\u003C/p>\n\u003Cp>These 2 games are both well-regarded and loved among their respective fans. Both of them are quality, well-made games in their own right. But I’ve found myself enjoying the time I’ve spent replaying Minish Cap more than my time experiencing much of Metroid Prime for the first time. Is Minish Cap just more my style of game? Could it just be a better game? Or maybe my nostalgia is influencing my opinions.\u003C/p>\n\u003Cp>There’s also the fact that my first experience with the Wii version of Metroid Prime was suboptimal. Could that be coloring my opinion of the Switch version, even though none of the issues I had on the Wii exist–or, more accurately, they are not mandatory, as motion controls can be turned on in the game’s settings.\u003C/p>\n\u003Cp>This kind of thing isn’t exclusive to video games. As a child of the 90’s I grew up in the so-called “Disney Renaissance” and, as I’ve been re-exploring that era thanks to Disney Plus, I’ve found myself gravitating towards certain movies. Aladdin, Lion King, Mulan, Pocahontas, the Disney films I watched the most growing up, were the ones I enjoyed the most. And I found myself wholly uninterested in The Little Mermaid, Beauty and the Beast, Tarzan, or Hercules. None of this is a reflection on the quality of these movies. My feelings about them are entirely down to the ones I remember watching the most, the ones I could picture in my head as clear as day.\u003C/p>\n\u003Cp>Maybe, objectively speaking, Metroid Prime is a better game than Minish Cap. I’m sure there are many people who would be insisting that’s the case, and many others who would argue the opposite. But I don’t know if trying to settle that, or similar debates, would be all that productive. Whether we’re talking Nintendo games from the early 2000’s, or Disney movies from the 1990’s, their perceived quality is wholly determined by how they made us feel when we first experienced them.\u003C/p>\n\u003Cp>Perhaps asking someone today, someone who has yet to experience either game, to play both Minish Cap and Metroid Prime and pick their favorite of the 2 would produce some useful insight. But on the other hand, would their opinions be colored by the ever-evolving experiences games have produced over the last 20 years? Someone who played Breath of the Wild before experiencing Minish Cap for the first time is going to experience the game differently than someone who played it back in 2004.\u003C/p>\n\u003Cp>Admittedly, as someone who un-ironically enjoys Star Wars Episode II–purely due to nostalgia, even though I can recognize and point out the movies many flaws–I’m perhaps not the best person to examine nostalgia vs. objective quality.\u003C/p>",{"headings":436,"imagePaths":437,"frontmatter":438},[],[],{"title":426,"pubDate":439,"tags":440},"2023-03-04",[93,220,429],"2023/nostalgia.md","2023/questlogger-from-ios-to-mac",{"id":442,"data":444,"body":449,"filePath":450,"digest":451,"rendered":452,"legacyId":460},{"title":445,"pubDate":446,"tags":447},"QuestLogger - From Closed-Source iOS App to Open-Source Mac App",["Date","2023-09-03T04:00:00.000Z"],[37,448,132],"Programming","A few weeks ago I relaunched my work-in-progress iOS app, QuestLogger, as [an open-source Mac app](https://github.com/ghall89/questlogger-mac). That’s quite a shift, but I felt it was best for the project itself, and my interest in carrying it on.\n\nWithout getting too into the technical details, it required a bit of work to pull off. The app was originally written specifically for the iPhone, and used a bit of custom nonsense that would’t work at all on macOS, so I had to rewrite a non-insignificant part of the user interface. Thankfully I had the forethought to break up my interface code into smaller components, so a lot of that code could be reused (once any iOS-specific code was stripped out). The bulk of the work was rewriting the entire layout to use the screen real estate of the Mac more effectively.\n\nSo, I guess the big question is, “Why did I do this?”\n\nThe answer? Subscriptions.\n\nFrom the get-go I was adamant about making this app a pay once type of deal. I wasn’t looking to make a lot of money, I just wanted to build something that people might want to use. Maybe use it as a way to build towards more lucrative projects if I was lucky. And I didn’t want the to deal with the pressure of subscriptions and the demands that could bring. Maybe this would be something I’d be more comfortable with down the line with an app or 2 under my belt, or if I were doing this full time, but as a little side project I’m just not comfortable with asking people to pay a recurring subscription\n\nBut after running a relatively short TestFlight beta over the summer, and witnessing the drama with the Reddit API, I got very nervous about running an app with the payment structure I wanted off an API I have no control over, and an estimated 30¢ cost per user to run a proxy server on AWS to access that API. That doesn’t sound like a lot, but if for some reason my app happened to blow up (unlikely, but not impossible) I could be stuck with a sizable AWS bill, and no recurring revenue to cover it.\n\nI should probably explain that QuestLogger gets its data from IGDB (Internet Game Database) through an API. In order to access the API, an app first needs to authenticate with their server by sending a pair of authentication keys and receiving back a special “bearer token”. This token can then be used to access the API itself, but as a developer my app can only request a very limited number of tokens at a time across all instances. That’s not a problem if you have only a couple users, but it could become one very quickly if say I had even 50 people using my app. So the best way around that is to set up a proxy server for the app to communicate with instead, and essentially let all users share the same token.\n\nI was feeling super discouraged. I don’t think I wrote a single line of code for QuestLogger throughout the month of July. Then, in early August, I decided I didn’t want all the work I put into the app go to waste, so I had the idea to convert the whole thing into a Mac app and release it as an open source project.\n\nI think this change allows the project to be a lot more flexible. First, I was able to circumvent the token issue by requiring users to provide their own authentication keys–which is, as I understand it, against Apple’s rules for the App Store–and request the token on-device. It also gives a lot more freedom in terms of being able to switch to another source of data as it seems there are more options for non-commercial projects.\n\nMost importantly though, it’s reignited my interest in building this project, and honing my Swift skills. I don’t need to worry about optimal subscription prices, or making sure people are getting their money’s worth. I can just focus on making something I think is cool, and hopefully others do too.","src/content/blog/2023/questlogger-from-ios-to-mac.md","80a59f8bec0f36dc",{"html":453,"metadata":454},"\u003Cp>A few weeks ago I relaunched my work-in-progress iOS app, QuestLogger, as \u003Ca href=\"https://github.com/ghall89/questlogger-mac\">an open-source Mac app\u003C/a>. That’s quite a shift, but I felt it was best for the project itself, and my interest in carrying it on.\u003C/p>\n\u003Cp>Without getting too into the technical details, it required a bit of work to pull off. The app was originally written specifically for the iPhone, and used a bit of custom nonsense that would’t work at all on macOS, so I had to rewrite a non-insignificant part of the user interface. Thankfully I had the forethought to break up my interface code into smaller components, so a lot of that code could be reused (once any iOS-specific code was stripped out). The bulk of the work was rewriting the entire layout to use the screen real estate of the Mac more effectively.\u003C/p>\n\u003Cp>So, I guess the big question is, “Why did I do this?”\u003C/p>\n\u003Cp>The answer? Subscriptions.\u003C/p>\n\u003Cp>From the get-go I was adamant about making this app a pay once type of deal. I wasn’t looking to make a lot of money, I just wanted to build something that people might want to use. Maybe use it as a way to build towards more lucrative projects if I was lucky. And I didn’t want the to deal with the pressure of subscriptions and the demands that could bring. Maybe this would be something I’d be more comfortable with down the line with an app or 2 under my belt, or if I were doing this full time, but as a little side project I’m just not comfortable with asking people to pay a recurring subscription\u003C/p>\n\u003Cp>But after running a relatively short TestFlight beta over the summer, and witnessing the drama with the Reddit API, I got very nervous about running an app with the payment structure I wanted off an API I have no control over, and an estimated 30¢ cost per user to run a proxy server on AWS to access that API. That doesn’t sound like a lot, but if for some reason my app happened to blow up (unlikely, but not impossible) I could be stuck with a sizable AWS bill, and no recurring revenue to cover it.\u003C/p>\n\u003Cp>I should probably explain that QuestLogger gets its data from IGDB (Internet Game Database) through an API. In order to access the API, an app first needs to authenticate with their server by sending a pair of authentication keys and receiving back a special “bearer token”. This token can then be used to access the API itself, but as a developer my app can only request a very limited number of tokens at a time across all instances. That’s not a problem if you have only a couple users, but it could become one very quickly if say I had even 50 people using my app. So the best way around that is to set up a proxy server for the app to communicate with instead, and essentially let all users share the same token.\u003C/p>\n\u003Cp>I was feeling super discouraged. I don’t think I wrote a single line of code for QuestLogger throughout the month of July. Then, in early August, I decided I didn’t want all the work I put into the app go to waste, so I had the idea to convert the whole thing into a Mac app and release it as an open source project.\u003C/p>\n\u003Cp>I think this change allows the project to be a lot more flexible. First, I was able to circumvent the token issue by requiring users to provide their own authentication keys–which is, as I understand it, against Apple’s rules for the App Store–and request the token on-device. It also gives a lot more freedom in terms of being able to switch to another source of data as it seems there are more options for non-commercial projects.\u003C/p>\n\u003Cp>Most importantly though, it’s reignited my interest in building this project, and honing my Swift skills. I don’t need to worry about optimal subscription prices, or making sure people are getting their money’s worth. I can just focus on making something I think is cool, and hopefully others do too.\u003C/p>",{"headings":455,"imagePaths":456,"frontmatter":457},[],[],{"title":445,"pubDate":458,"tags":459},"9/3/23",[37,448,132],"2023/questlogger-from-ios-to-mac.md","2023/on-using-chat-gpt",{"id":461,"data":463,"body":467,"filePath":468,"digest":469,"rendered":470,"legacyId":478},{"title":464,"pubDate":465,"tags":466},"Quick Thoughts On Using Chat GPT as a Coding Assistant",["Date","2023-04-30T04:00:00.000Z"],[113,448],"When I was learning to code, the line my tutor kept repeating was, “Half of programming is knowing how to use Google.” That can be pretty much boiled down to half of programming is knowing how to look things up, whether that’s in a book, online, or with a language model. You can’t know everything there is to know about programming, so you have to be good at looking things up when you don’t have the answer to a problem, and you have to be able to do it effectively with whatever tool\n\nFor the last several weeks I’ve been using ChatGPT in lieu of Google for looking up code examples when I’m stuck on a problem at work, or when working on side-projects. It’s been hugely beneficial to my productivity and workflow, but it’s not perfect.\n\nGoing in you need to have enough knowledge to be able to call it on its BS. I’ve found ChatGPT will get things wrong, give you code that maybe doesn’t quite do what you’re looking for, or sometimes try to get you to use non-existent or deprecated packages or language features.\n\nEspecially when I’m going in trying to learn something new, whether its a web technology I’m not experienced in, or trying to [learn Swift from scratch](/posts/2023/reflecting-on-building-my-first-app), I’ve found it helpful to go in at least knowing what I’m looking for. That means reading documentation, and trying a few things out on my own. If I’m stuck, or if the documentation has poor or non-existent sample code (looking at you Apple), I’ll use ChatGPT to generate some generic starter code I can use as a jumping off point.","src/content/blog/2023/on-using-chat-gpt.md","d0468670ada28309",{"html":471,"metadata":472},"\u003Cp>When I was learning to code, the line my tutor kept repeating was, “Half of programming is knowing how to use Google.” That can be pretty much boiled down to half of programming is knowing how to look things up, whether that’s in a book, online, or with a language model. You can’t know everything there is to know about programming, so you have to be good at looking things up when you don’t have the answer to a problem, and you have to be able to do it effectively with whatever tool\u003C/p>\n\u003Cp>For the last several weeks I’ve been using ChatGPT in lieu of Google for looking up code examples when I’m stuck on a problem at work, or when working on side-projects. It’s been hugely beneficial to my productivity and workflow, but it’s not perfect.\u003C/p>\n\u003Cp>Going in you need to have enough knowledge to be able to call it on its BS. I’ve found ChatGPT will get things wrong, give you code that maybe doesn’t quite do what you’re looking for, or sometimes try to get you to use non-existent or deprecated packages or language features.\u003C/p>\n\u003Cp>Especially when I’m going in trying to learn something new, whether its a web technology I’m not experienced in, or trying to \u003Ca href=\"/posts/2023/reflecting-on-building-my-first-app\">learn Swift from scratch\u003C/a>, I’ve found it helpful to go in at least knowing what I’m looking for. That means reading documentation, and trying a few things out on my own. If I’m stuck, or if the documentation has poor or non-existent sample code (looking at you Apple), I’ll use ChatGPT to generate some generic starter code I can use as a jumping off point.\u003C/p>",{"headings":473,"imagePaths":474,"frontmatter":475},[],[],{"title":464,"pubDate":476,"tags":477},"4/30/23",[113,448],"2023/on-using-chat-gpt.md","2023/reflecting-on-building-my-first-app",{"id":479,"data":481,"body":485,"filePath":486,"digest":487,"rendered":488,"legacyId":496},{"title":482,"pubDate":483,"tags":484},"Reflecting on Building My First App",["Date","2023-02-28T00:00:00.000Z"],[113,37,131,448],"I'm primarily a web developer. Everything I build, whether it's for work or for fun, is destined for the web. I love it, building stuff for the web has been a part of my life since I first cobbled together a Star Trek fan site in my tween years. But I've also wanted to broaden my horizons a bit beyond the web, and create something for another platform I love; the Mac.\n\nI've dipped my toes into building desktop apps in Electron with my app [Classic Calc](https://github.com/ghall89/classic-calc), but I wasn't all that fulfilled by building it. It was a good exercise, but it felt inauthentic, like I was cheating, so I lost interest. That was about a year-and-a-half ago.\n\nMore recently, I decided to tackle building something more substantial. I started fiddling around with Swift Playgrounds on my MacBook, trying to use the built-in learning tools to create a basic UI. Coming from JavaScript, I found Swift as a language fairly easy to grasp the basics of. But when it came to SwiftUI, I quickly found myself struggling.\n\nAfter a few days of this, I decided to try my hand at building a basic app: a Markdown text editor. Over the course of a couple nights (and one or two lunch breaks), I built [Scrib](https://github.com/ghall89/Scrib). Is it something I'd suggest using? Nope. But to be fair, I'd readily suggest it over [CSS Shadow Tool](https://ghall89.github.io/css-shadow-tool/), one of my first attempts at an interactive web app.\n\nI pushed this project aside too. Unlike my Electron app though, I wasn’t unfulfilled or bored. I was overwhelmed. SwiftUI can be a finicky beast for seasoned developers, but I’d never written a line of it until recently so I was feeling totally lost. I felt stupid. The pride I felt in creating a functional Mac app was replaced with harsh self-critique. So I dove headfirst back into web development projects, my comfort zone.\n\nBut the thing is, web development wasn’t always my comfort zone. I used to be scared, overwhelmed, at the prospect of building for the web. Hell, it still scares me sometimes, but it’s what I know. I don’t know Swift very well yet, and I certainly am not very familiar with SwiftUI, and I often forget there was a time I was in the same boat with JavaScript (not to say I’m an expert, far from it, but I think you get my point).\n\nSo what did I learn that I can apply to my future endeavors to build a Mac app? Honestly, it’s something I already knew, but maybe I just needed to be reminded of: Start small, and don’t try to do everything at once.\n\nI made a mistake trying to just immerse myself in everything Swift, but, as a result, I feel like I actually learned very little. What I should have done, and will do when I’m ready to dive back in, is start at step one. I know the fundamentals of programming, but that’s like trying to speak a language when you know the grammar but not the vocabulary. So I need to just forget about SwiftUI and building functional apps, and just start with the core language and get comfortable with that. Maybe write some command line tools and work my way up from there.\n\nIt’s definitely hard for me when learning something new to not immediately put myself down for not being good at it on my first go. It’s unrealistic, and unproductive, but for some reason it’s my natural inclination. The boot camp format mitigated that a bit, between the structured lessons and interacting with people who were in the same boat of having no idea what the frick we were doing.","src/content/blog/2023/reflecting-on-building-my-first-app.md","0a22fbc38e358da1",{"html":489,"metadata":490},"\u003Cp>I’m primarily a web developer. Everything I build, whether it’s for work or for fun, is destined for the web. I love it, building stuff for the web has been a part of my life since I first cobbled together a Star Trek fan site in my tween years. But I’ve also wanted to broaden my horizons a bit beyond the web, and create something for another platform I love; the Mac.\u003C/p>\n\u003Cp>I’ve dipped my toes into building desktop apps in Electron with my app \u003Ca href=\"https://github.com/ghall89/classic-calc\">Classic Calc\u003C/a>, but I wasn’t all that fulfilled by building it. It was a good exercise, but it felt inauthentic, like I was cheating, so I lost interest. That was about a year-and-a-half ago.\u003C/p>\n\u003Cp>More recently, I decided to tackle building something more substantial. I started fiddling around with Swift Playgrounds on my MacBook, trying to use the built-in learning tools to create a basic UI. Coming from JavaScript, I found Swift as a language fairly easy to grasp the basics of. But when it came to SwiftUI, I quickly found myself struggling.\u003C/p>\n\u003Cp>After a few days of this, I decided to try my hand at building a basic app: a Markdown text editor. Over the course of a couple nights (and one or two lunch breaks), I built \u003Ca href=\"https://github.com/ghall89/Scrib\">Scrib\u003C/a>. Is it something I’d suggest using? Nope. But to be fair, I’d readily suggest it over \u003Ca href=\"https://ghall89.github.io/css-shadow-tool/\">CSS Shadow Tool\u003C/a>, one of my first attempts at an interactive web app.\u003C/p>\n\u003Cp>I pushed this project aside too. Unlike my Electron app though, I wasn’t unfulfilled or bored. I was overwhelmed. SwiftUI can be a finicky beast for seasoned developers, but I’d never written a line of it until recently so I was feeling totally lost. I felt stupid. The pride I felt in creating a functional Mac app was replaced with harsh self-critique. So I dove headfirst back into web development projects, my comfort zone.\u003C/p>\n\u003Cp>But the thing is, web development wasn’t always my comfort zone. I used to be scared, overwhelmed, at the prospect of building for the web. Hell, it still scares me sometimes, but it’s what I know. I don’t know Swift very well yet, and I certainly am not very familiar with SwiftUI, and I often forget there was a time I was in the same boat with JavaScript (not to say I’m an expert, far from it, but I think you get my point).\u003C/p>\n\u003Cp>So what did I learn that I can apply to my future endeavors to build a Mac app? Honestly, it’s something I already knew, but maybe I just needed to be reminded of: Start small, and don’t try to do everything at once.\u003C/p>\n\u003Cp>I made a mistake trying to just immerse myself in everything Swift, but, as a result, I feel like I actually learned very little. What I should have done, and will do when I’m ready to dive back in, is start at step one. I know the fundamentals of programming, but that’s like trying to speak a language when you know the grammar but not the vocabulary. So I need to just forget about SwiftUI and building functional apps, and just start with the core language and get comfortable with that. Maybe write some command line tools and work my way up from there.\u003C/p>\n\u003Cp>It’s definitely hard for me when learning something new to not immediately put myself down for not being good at it on my first go. It’s unrealistic, and unproductive, but for some reason it’s my natural inclination. The boot camp format mitigated that a bit, between the structured lessons and interacting with people who were in the same boat of having no idea what the frick we were doing.\u003C/p>",{"headings":491,"imagePaths":492,"frontmatter":493},[],[],{"title":482,"pubDate":494,"tags":495},"2023-02-28",[113,37,131,448],"2023/reflecting-on-building-my-first-app.md","2023/reflecting-on-my-first-year-as-a-developer",{"id":497,"data":499,"body":503,"filePath":504,"digest":505,"rendered":506,"legacyId":514},{"title":500,"pubDate":501,"tags":502},"Reflecting On My First Year as a Developer",["Date","2023-08-07T04:00:00.000Z"],[93,113,448],"Next week will mark the end of my first year (of hopefully many more) working as a software developer. This fact blows my mind, and feels wholly unreal. It’s still difficult for me to believe that I made it this far. I still remember thinking my interview was a total disaster and being genuinely shocked when I got the job offer.\n\nI can’t understate how life changing this last year has been. Last summer I was at a low point. My year-long job search was proving unfruitful, and I was not really feeling good about myself. I had been working at a small startup doing quality control for short-form video clips on a contract basis, and I was slowly losing my mind.\n\nI’ve grown a lot in the last year, not just as a developer, but also as a person. Financially, being a full time job, it’s given me stability I didn’t have doing contract work. Emotionally, it isn’t as overwhelming to deal with (when I’m not having a bout of Imposter Syndrome). It’s given me the space to work on myself in a way I haven’t really had in a long time.\n\nHell, even the job itself has allowed me to grow as a person. Right off the bat, I had to learn Next.js, and over time I’ve learned and grown more comfortable with a multitude of technologies that I lacked the confidence to touch or expand my knowledge of. Things like working with databases, something that I’ve found very intimidating in the past, has become not _quite_ second nature, but a lot less overwhelming.\n\nThe most important thing I learned, the one common thread tying this last year together, is the importance of just _doing_. I have a tendency to not believe in myself, and that has led to me saying “I can’t” to a lot of things. “I can’t learn to code.” “I can’t handle working with databases.” “I can’t live in a new place.” “I can’t find happiness.”\n\nFor Star Wars Day this year I rewatched The Empire Strikes Back. In that movie, after Luke is unable to use the Force to lift his X-Wing out of the swamp on Dagobah, exclaiming that it’s “impossible”. Yoda sighs and pulls the starfighter out of the swamp himself. Luke, upon seeing this, says, “I don’t believe it.” To which Yoda responds, “That is why you failed.” This scene really struck a chord with me when I watched it this past May. For so long I had been Luke, failing because I didn’t have faith I could succeed.\n\nOf course, belief does not always equal success, though it would be nice if it did. But, what this last year–and honestly, my entire journey into the world of software development–has taught me is that the only guarantee is that not trying, not taking the chance, will always lead to failure. But sometimes, every once in a while, if you believe in yourself and take that chance, you might just succeed.","src/content/blog/2023/reflecting-on-my-first-year-as-a-developer.md","59ccb49a7a592e63",{"html":507,"metadata":508},"\u003Cp>Next week will mark the end of my first year (of hopefully many more) working as a software developer. This fact blows my mind, and feels wholly unreal. It’s still difficult for me to believe that I made it this far. I still remember thinking my interview was a total disaster and being genuinely shocked when I got the job offer.\u003C/p>\n\u003Cp>I can’t understate how life changing this last year has been. Last summer I was at a low point. My year-long job search was proving unfruitful, and I was not really feeling good about myself. I had been working at a small startup doing quality control for short-form video clips on a contract basis, and I was slowly losing my mind.\u003C/p>\n\u003Cp>I’ve grown a lot in the last year, not just as a developer, but also as a person. Financially, being a full time job, it’s given me stability I didn’t have doing contract work. Emotionally, it isn’t as overwhelming to deal with (when I’m not having a bout of Imposter Syndrome). It’s given me the space to work on myself in a way I haven’t really had in a long time.\u003C/p>\n\u003Cp>Hell, even the job itself has allowed me to grow as a person. Right off the bat, I had to learn Next.js, and over time I’ve learned and grown more comfortable with a multitude of technologies that I lacked the confidence to touch or expand my knowledge of. Things like working with databases, something that I’ve found very intimidating in the past, has become not \u003Cem>quite\u003C/em> second nature, but a lot less overwhelming.\u003C/p>\n\u003Cp>The most important thing I learned, the one common thread tying this last year together, is the importance of just \u003Cem>doing\u003C/em>. I have a tendency to not believe in myself, and that has led to me saying “I can’t” to a lot of things. “I can’t learn to code.” “I can’t handle working with databases.” “I can’t live in a new place.” “I can’t find happiness.”\u003C/p>\n\u003Cp>For Star Wars Day this year I rewatched The Empire Strikes Back. In that movie, after Luke is unable to use the Force to lift his X-Wing out of the swamp on Dagobah, exclaiming that it’s “impossible”. Yoda sighs and pulls the starfighter out of the swamp himself. Luke, upon seeing this, says, “I don’t believe it.” To which Yoda responds, “That is why you failed.” This scene really struck a chord with me when I watched it this past May. For so long I had been Luke, failing because I didn’t have faith I could succeed.\u003C/p>\n\u003Cp>Of course, belief does not always equal success, though it would be nice if it did. But, what this last year–and honestly, my entire journey into the world of software development–has taught me is that the only guarantee is that not trying, not taking the chance, will always lead to failure. But sometimes, every once in a while, if you believe in yourself and take that chance, you might just succeed.\u003C/p>",{"headings":509,"imagePaths":510,"frontmatter":511},[],[],{"title":500,"pubDate":512,"tags":513},"8/7/23",[93,113,448],"2023/reflecting-on-my-first-year-as-a-developer.md","2023/thoughs-on-macos",{"id":515,"data":517,"body":521,"filePath":522,"digest":523,"rendered":524,"legacyId":532},{"title":518,"pubDate":519,"tags":520},"Thoughts on macOS",["Date","2023-06-04T04:00:00.000Z"],[131,94],"So, as of this writing, WWDC 2023 kicks off _tomorrow_. As a web developer who’s recently started dabbling in Swift, and building apps for Apple platforms, I’m excited to see what gets shown off that I can start sinking my teeth into. On the other hand, as a longtime Mac user, I’m a little apprehensive about what we’ll see there.\n\nHardware-wise, the Mac is in a fantastic place. We’re 3 years into the transition from Intel to Apple Silicon, and the design aesthetic is changing up for the first time in like a decade (maybe more??). However, in terms of software, specifically macOS itself, we’re kind of in a weird place.\n\nJust looking at macOS 13 Ventura, the latest version until the next one is most likely announced tomorrow, there are so many little oddities that range from minor annoyances to showstoppers. Some bugs introduced in the betas from last year, for example the infamous launch item notification bug, are _still_ present in the currently shipping version (13.4). Then there’s the mess that is System Settings, which received a major redesign last year for the first time since the Mac OS X betas from 23 years ago.\n\nThen there are some long-standing issues, like a memory leak in the WindowServer system process that has existed since at least Monterey in 2021 (though I feel like I’ve been experiencing it longer). Or the fact that the TV app straight up doesn’t work most of the time.\n\nThen there’s Launchpad (which may not be long for this world as the dedicated key on Apple’s keyboard has been replaced with Spotlight) which I’ve tried to use since it was introduced in Mac OS X Lion all the way back in 2010, but has a bug that will randomly just reorder the icons, which has been an issue since day 1.\n\nOne other long-standing issue that I’ve experienced is how unreliable network drives are. I have a Mac Mini set up as a home server, and the amount of times it’ll just fail to connect when I need to access one of the drives, or Time Machine just fails to recognize that there’s a network volume, is exceedingly frustrating.\n\nThe reliability of macOS varies so much from person to person. Some people experience just one, or maybe even none, of the issues I’ve mentioned. Others experience totally different issues that I’ve never run into. It’s just so wild that an operating system that has been around for 23 years (33 if you count NeXTSTEP as part of the lineage) has so many little issues. Yes, every piece of software has bugs, especially when working with the bogglingly large codebase of an operating system, but so many of what people encounter on the Mac are not small issues.\n\nAll this to say, my one wish for WWDC 2023 is that we _don’t_ see a new version of macOS, and if we do, it’s purely focused on fixing the outstanding issues (and, if we want to get really crazy, fixing the System Settings design). I doubt either of those will happen, but I can certainly dream.","src/content/blog/2023/thoughs-on-macos.md","ab22dd606410397d",{"html":525,"metadata":526},"\u003Cp>So, as of this writing, WWDC 2023 kicks off \u003Cem>tomorrow\u003C/em>. As a web developer who’s recently started dabbling in Swift, and building apps for Apple platforms, I’m excited to see what gets shown off that I can start sinking my teeth into. On the other hand, as a longtime Mac user, I’m a little apprehensive about what we’ll see there.\u003C/p>\n\u003Cp>Hardware-wise, the Mac is in a fantastic place. We’re 3 years into the transition from Intel to Apple Silicon, and the design aesthetic is changing up for the first time in like a decade (maybe more??). However, in terms of software, specifically macOS itself, we’re kind of in a weird place.\u003C/p>\n\u003Cp>Just looking at macOS 13 Ventura, the latest version until the next one is most likely announced tomorrow, there are so many little oddities that range from minor annoyances to showstoppers. Some bugs introduced in the betas from last year, for example the infamous launch item notification bug, are \u003Cem>still\u003C/em> present in the currently shipping version (13.4). Then there’s the mess that is System Settings, which received a major redesign last year for the first time since the Mac OS X betas from 23 years ago.\u003C/p>\n\u003Cp>Then there are some long-standing issues, like a memory leak in the WindowServer system process that has existed since at least Monterey in 2021 (though I feel like I’ve been experiencing it longer). Or the fact that the TV app straight up doesn’t work most of the time.\u003C/p>\n\u003Cp>Then there’s Launchpad (which may not be long for this world as the dedicated key on Apple’s keyboard has been replaced with Spotlight) which I’ve tried to use since it was introduced in Mac OS X Lion all the way back in 2010, but has a bug that will randomly just reorder the icons, which has been an issue since day 1.\u003C/p>\n\u003Cp>One other long-standing issue that I’ve experienced is how unreliable network drives are. I have a Mac Mini set up as a home server, and the amount of times it’ll just fail to connect when I need to access one of the drives, or Time Machine just fails to recognize that there’s a network volume, is exceedingly frustrating.\u003C/p>\n\u003Cp>The reliability of macOS varies so much from person to person. Some people experience just one, or maybe even none, of the issues I’ve mentioned. Others experience totally different issues that I’ve never run into. It’s just so wild that an operating system that has been around for 23 years (33 if you count NeXTSTEP as part of the lineage) has so many little issues. Yes, every piece of software has bugs, especially when working with the bogglingly large codebase of an operating system, but so many of what people encounter on the Mac are not small issues.\u003C/p>\n\u003Cp>All this to say, my one wish for WWDC 2023 is that we \u003Cem>don’t\u003C/em> see a new version of macOS, and if we do, it’s purely focused on fixing the outstanding issues (and, if we want to get really crazy, fixing the System Settings design). I doubt either of those will happen, but I can certainly dream.\u003C/p>",{"headings":527,"imagePaths":528,"frontmatter":529},[],[],{"title":518,"pubDate":530,"tags":531},"6/4/23",[131,94],"2023/thoughs-on-macos.md","2023/using-json-for-data-storage",{"id":533,"data":535,"body":539,"filePath":540,"digest":541,"rendered":542,"legacyId":550},{"title":536,"pubDate":537,"tags":538},"More Swift Learnings: Using JSON For Data Storage",["Date","2023-04-09T04:00:00.000Z"],[131,113,448],"Back at the end of February, I built [a simple Markdown editor](https://github.com/ghall89/Scrib) using SwiftUI. It was an interesting learning experience, not just in terms of learning a new programming language, but also in terms of _how_ to learn said programming language. So, I decided to take a step back and approach this educational journey from another angle.\n\nI decided to take a project I built before for the web and recreate it in a native Mac app, rather than try to do something I’d never done before (like, for example, a document-based application). AI is sort of a big deal right now, so I decided to revisit [a project I made last year](https://github.com/ghall89/openai-challenge) using the OpenAI API.\n\nSo, over the course of the last couple weeks, I’ve been working on the incredibly cleverly named [SwiftGPT](https://github.com/ghall89/swiftgpt), and it’s proven to be quite the interesting challenge translating what I know about building data-focused applications for the web into building them for the Mac.\n\nThe biggest challenge for me, by far, was dealing with storing and retrieving user data. My experience is in NoSQL databases like MongoDB, as well as local and session storage in the browser. But how, I wondered, should I go about persisting user data in a native Mac app? In this case, this primarily means the chat history between the user and the OpenAI assistant.\n\nI tinkered a bit with Core Data, but I had a hard time wrapping my head around it, and, from what little I did understand, it seemed like overkill anyway. My inspiration came in the form of [episode \\#87 of the CoRecursive podcast](https://corecursive.com/json-vs-xml-douglas-crockford/), which featured an interview with Douglas Crockford, the creator of a little format called JSON (a.k.a., JavaScript Object Notation).\n\nJavaScript being my primary language, I knew all about JSON. I also happened to know that Swift has some built-in support for it, so it seemed like the natural direction to go. However, the main problem was, while I somewhat knew how to read JSON data in Swift, I had no idea how to create it, much less save it to a file and read that file back reliably.\n\nI’m sure any Mac or iOS developer with an ounce of experience reading this is screaming, “Just use [JSONEncoder](https://developer.apple.com/documentation/foundation/jsonencoder/) and [FileManager](https://developer.apple.com/documentation/foundation/filemanager)!” Well, you’ll be happy to know–unless there’s some better method I overlooked–that’s exactly what I used. Though I’m sure my code is filled with flaws. 😅\n\nIf I were doing something more complex, beyond storing a list of messages and who “wrote” them, I would probably be better served by sucking it up and learning Core Data. But, as I’m working with a small set of very simple data, I’m not sure there are any downsides to my solution. I will say though, my curiosity has been piqued, and I wonder what other sorts of things I can build with this method.","src/content/blog/2023/using-json-for-data-storage.md","65f8b3445085777a",{"html":543,"metadata":544},"\u003Cp>Back at the end of February, I built \u003Ca href=\"https://github.com/ghall89/Scrib\">a simple Markdown editor\u003C/a> using SwiftUI. It was an interesting learning experience, not just in terms of learning a new programming language, but also in terms of \u003Cem>how\u003C/em> to learn said programming language. So, I decided to take a step back and approach this educational journey from another angle.\u003C/p>\n\u003Cp>I decided to take a project I built before for the web and recreate it in a native Mac app, rather than try to do something I’d never done before (like, for example, a document-based application). AI is sort of a big deal right now, so I decided to revisit \u003Ca href=\"https://github.com/ghall89/openai-challenge\">a project I made last year\u003C/a> using the OpenAI API.\u003C/p>\n\u003Cp>So, over the course of the last couple weeks, I’ve been working on the incredibly cleverly named \u003Ca href=\"https://github.com/ghall89/swiftgpt\">SwiftGPT\u003C/a>, and it’s proven to be quite the interesting challenge translating what I know about building data-focused applications for the web into building them for the Mac.\u003C/p>\n\u003Cp>The biggest challenge for me, by far, was dealing with storing and retrieving user data. My experience is in NoSQL databases like MongoDB, as well as local and session storage in the browser. But how, I wondered, should I go about persisting user data in a native Mac app? In this case, this primarily means the chat history between the user and the OpenAI assistant.\u003C/p>\n\u003Cp>I tinkered a bit with Core Data, but I had a hard time wrapping my head around it, and, from what little I did understand, it seemed like overkill anyway. My inspiration came in the form of \u003Ca href=\"https://corecursive.com/json-vs-xml-douglas-crockford/\">episode #87 of the CoRecursive podcast\u003C/a>, which featured an interview with Douglas Crockford, the creator of a little format called JSON (a.k.a., JavaScript Object Notation).\u003C/p>\n\u003Cp>JavaScript being my primary language, I knew all about JSON. I also happened to know that Swift has some built-in support for it, so it seemed like the natural direction to go. However, the main problem was, while I somewhat knew how to read JSON data in Swift, I had no idea how to create it, much less save it to a file and read that file back reliably.\u003C/p>\n\u003Cp>I’m sure any Mac or iOS developer with an ounce of experience reading this is screaming, “Just use \u003Ca href=\"https://developer.apple.com/documentation/foundation/jsonencoder/\">JSONEncoder\u003C/a> and \u003Ca href=\"https://developer.apple.com/documentation/foundation/filemanager\">FileManager\u003C/a>!” Well, you’ll be happy to know–unless there’s some better method I overlooked–that’s exactly what I used. Though I’m sure my code is filled with flaws. 😅\u003C/p>\n\u003Cp>If I were doing something more complex, beyond storing a list of messages and who “wrote” them, I would probably be better served by sucking it up and learning Core Data. But, as I’m working with a small set of very simple data, I’m not sure there are any downsides to my solution. I will say though, my curiosity has been piqued, and I wonder what other sorts of things I can build with this method.\u003C/p>",{"headings":545,"imagePaths":546,"frontmatter":547},[],[],{"title":536,"pubDate":548,"tags":549},"4/9/23",[131,113,448],"2023/using-json-for-data-storage.md","2023/using-tailwind-with-mui-base",{"id":551,"data":553,"body":558,"filePath":559,"digest":560,"rendered":561,"legacyId":584},{"title":554,"pubDate":555,"tags":556},"Using Tailwind With MUI Base",["Date","2023-03-11T05:00:00.000Z"],[17,557],"Tutorial","I've had some frustration lately working with [MUI](https://mui.com), a styled component library for React. I decided to try and experiment with combining [MUI Base](https://mui.com/base/getting-started/overview/), the barebones version of the MUI library, with [Tailwind](https://tailwindcss.com) to allow easier customization. Here's an overview of how I set up a test project using [Next.js](https://nextjs.org). This writeup assumes you have some experience with Next.js, using the terminal, and ideally some experience with MUI and Tailwind.\n\n## Step 1: Set Up Next.js\n\nNothing special is going on here. You can use `npx create-next-app@latest` or `yarn create next-app` depending on which package manager you prefer. I personally like Yarn, so that's what I'll be using. If you use NPM though the commands are similar so you'll be able to follow along.\n\nFollow the prompts to set up your Next.js project. These are the choices I went with:\n\n- Project name: mui-tailwind\n- Typescript: No\n- ESLint: Yes\n- Use 'src/' directory: Yes\n- Experimental 'app/' directory: No\n\nI also chose not to set up any import aliases for now. These can be easily added later if you so choose.\n\nIt will take a few moments for Next.js to download and for the project to set up, but when that's done, cd into '/mui-tailwind' (or whatever you named the project).\n\n## Step 2: Install MUI Base & Tailwind\n\nInstalling MUI Base is simple. Just run `yarn add @mui/base`, and you're good to go. There will be some config to do later, but once the package is done installing we're ready to install Tailwind with `yarn add -D tailwindcss postcss autoprefixer`.\n\nOnce both MUI Base and Tailwind are installed, we next need to run `yarn tailwindcss init -p`, which will create 2 files, one called 'tailwind.config.js', and another called 'postcss.config.js'. Now we're ready to do some setup.\n\n## Step 3: Configuration\n\nFirst thing's first, open up the project folder in your code editor of choice and at the root of the project you should see the 'tailwind.config.js' we created in step 2. Open that, and under `module.exports` you should see an empty array named 'content'. Add the following to the array: `'./src/**/*.{js,jsx,ts,tsx}'` Your config file should look like this:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/tailwind-config.png\" width=\"80%\" alt=\"module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}'], theme: { extend: {}, }, plugins: [],};\">\n\nNext, we need to import Tailwind into our 'globals.css' file, which is located in 'src/styles/'. We can delete everything in the file as we won't be needing any of it. Then, add the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/global-css.png\" width=\"80%\" alt=\"@tailwind base; @tailwind components; @tailwind utilities;\">\n\nAnd that's it! We're ready to start creating something!\n\n## Step 4: Creating Your First Component\n\nIdeally, we'd want to create smaller, reusable component files, but that's beyond the scope of this post, and is something you're most likely already familiar with if you have any experience with Next.js. Instead, we're going to work entirely in 'src/pages/index.js'.\n\nFirst, we should delete everything we don't need so that our 'index.js' file looks like this:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/index-js.png\" width=\"80%\" alt=\"export default function Home() { return() }\">\n\nWe're going to create a simple button, nothing too fancy. So first we need to import the MUI Unstyled Button component by adding `import { ButtonUnstyled as Button } from '@mui/base'` on the first line of our file.\n\n_Note: The official MUI docs say to import as `import ButtonUnstyled from '@mui/base/ButtonUnstyled'`, which also works, but I prefer to use destructing which allows you to import multiple components with a single import statement'_\n\nNow we can create our button. Inside the return statement, add the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button-code.png\" width=\"80%\" alt=\"\u003CButton>Click Me!\u003C/Button>\" />\n\nNext, go back to your terminal and run `yarn dev` to start up the dev server, and click the 'localhost' link that appears (most likely 'localhost:3000'). We'll be greeted by what looks like just a bit of text (it's a button, I promise), which isn't what we want, but that's because we haven't added any styles yet!\n\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button.png\" width=\"40%\" alt=\"A plain old 'button' that reads 'Click Me!'\" />\n\nAll we need to do is add the `className` prop with some nice Tailwind utility classes:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button-code.png\" width=\"80%\" alt=\"\u003CButton className='rounded-lg border-2 border-sky-500 bg-sky-600 py-2 px-10 font-medium text-slate-300 shadow hover:bg-sky-700 active:translate-y-0.5'>\n Click Me!\n\u003C/Button>\" />\n\nNow, when we go back to the browser, we should see the following:\n\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button.png\" width=\"40%\" alt=\"A styled blue button that reads 'Click Me!'\" />\n\nNice! That looks a lot more like a button.\n\n## Step 5: Further Reading\n\nThis tutorial is just the basics of setting up a project using Next.js, MUI Base, and Tailwind. Of course, there's so much more to all these tools than I can possibly cover. For a more in-depth overview, I recommend you check out [this documentation](https://mui.com/base/guides/working-with-tailwind-css/) for using MUI Base with Tailwind, which I used as the basis for this guide, in combination with [this documentation](https://tailwindcss.com/docs/guides/nextjs) for using Tailwind with Next.js.\n\nOf course, the documentation I linked to at the top of this post is also suggested reading if you're not familiar with any of what I've written about here.","src/content/blog/2023/using-tailwind-with-mui-base.md","85446e6b16a9ad0a",{"html":562,"metadata":563},"\u003Cp>I’ve had some frustration lately working with \u003Ca href=\"https://mui.com\">MUI\u003C/a>, a styled component library for React. I decided to try and experiment with combining \u003Ca href=\"https://mui.com/base/getting-started/overview/\">MUI Base\u003C/a>, the barebones version of the MUI library, with \u003Ca href=\"https://tailwindcss.com\">Tailwind\u003C/a> to allow easier customization. Here’s an overview of how I set up a test project using \u003Ca href=\"https://nextjs.org\">Next.js\u003C/a>. This writeup assumes you have some experience with Next.js, using the terminal, and ideally some experience with MUI and Tailwind.\u003C/p>\n\u003Ch2 id=\"step-1-set-up-nextjs\">Step 1: Set Up Next.js\u003C/h2>\n\u003Cp>Nothing special is going on here. You can use \u003Ccode>npx create-next-app@latest\u003C/code> or \u003Ccode>yarn create next-app\u003C/code> depending on which package manager you prefer. I personally like Yarn, so that’s what I’ll be using. If you use NPM though the commands are similar so you’ll be able to follow along.\u003C/p>\n\u003Cp>Follow the prompts to set up your Next.js project. These are the choices I went with:\u003C/p>\n\u003Cul>\n\u003Cli>Project name: mui-tailwind\u003C/li>\n\u003Cli>Typescript: No\u003C/li>\n\u003Cli>ESLint: Yes\u003C/li>\n\u003Cli>Use ‘src/’ directory: Yes\u003C/li>\n\u003Cli>Experimental ‘app/’ directory: No\u003C/li>\n\u003C/ul>\n\u003Cp>I also chose not to set up any import aliases for now. These can be easily added later if you so choose.\u003C/p>\n\u003Cp>It will take a few moments for Next.js to download and for the project to set up, but when that’s done, cd into ‘/mui-tailwind’ (or whatever you named the project).\u003C/p>\n\u003Ch2 id=\"step-2-install-mui-base--tailwind\">Step 2: Install MUI Base & Tailwind\u003C/h2>\n\u003Cp>Installing MUI Base is simple. Just run \u003Ccode>yarn add @mui/base\u003C/code>, and you’re good to go. There will be some config to do later, but once the package is done installing we’re ready to install Tailwind with \u003Ccode>yarn add -D tailwindcss postcss autoprefixer\u003C/code>.\u003C/p>\n\u003Cp>Once both MUI Base and Tailwind are installed, we next need to run \u003Ccode>yarn tailwindcss init -p\u003C/code>, which will create 2 files, one called ‘tailwind.config.js’, and another called ‘postcss.config.js’. Now we’re ready to do some setup.\u003C/p>\n\u003Ch2 id=\"step-3-configuration\">Step 3: Configuration\u003C/h2>\n\u003Cp>First thing’s first, open up the project folder in your code editor of choice and at the root of the project you should see the ‘tailwind.config.js’ we created in step 2. Open that, and under \u003Ccode>module.exports\u003C/code> you should see an empty array named ‘content’. Add the following to the array: \u003Ccode>'./src/**/*.{js,jsx,ts,tsx}'\u003C/code> Your config file should look like this:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/tailwind-config.png\" width=\"80%\" alt=\"module.exports = { content: ['./src/**/*.{js,jsx,ts,tsx}'], theme: { extend: {}, }, plugins: [],};\">\n\u003Cp>Next, we need to import Tailwind into our ‘globals.css’ file, which is located in ‘src/styles/’. We can delete everything in the file as we won’t be needing any of it. Then, add the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/global-css.png\" width=\"80%\" alt=\"@tailwind base; @tailwind components; @tailwind utilities;\">\n\u003Cp>And that’s it! We’re ready to start creating something!\u003C/p>\n\u003Ch2 id=\"step-4-creating-your-first-component\">Step 4: Creating Your First Component\u003C/h2>\n\u003Cp>Ideally, we’d want to create smaller, reusable component files, but that’s beyond the scope of this post, and is something you’re most likely already familiar with if you have any experience with Next.js. Instead, we’re going to work entirely in ‘src/pages/index.js’.\u003C/p>\n\u003Cp>First, we should delete everything we don’t need so that our ‘index.js’ file looks like this:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/index-js.png\" width=\"80%\" alt=\"export default function Home() { return() }\">\n\u003Cp>We’re going to create a simple button, nothing too fancy. So first we need to import the MUI Unstyled Button component by adding \u003Ccode>import { ButtonUnstyled as Button } from '@mui/base'\u003C/code> on the first line of our file.\u003C/p>\n\u003Cp>\u003Cem>Note: The official MUI docs say to import as \u003Ccode>import ButtonUnstyled from '@mui/base/ButtonUnstyled'\u003C/code>, which also works, but I prefer to use destructing which allows you to import multiple components with a single import statement’\u003C/em>\u003C/p>\n\u003Cp>Now we can create our button. Inside the return statement, add the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button-code.png\" width=\"80%\" alt=\"\u003CButton>Click Me!\u003C/Button>\">\n\u003Cp>Next, go back to your terminal and run \u003Ccode>yarn dev\u003C/code> to start up the dev server, and click the ‘localhost’ link that appears (most likely ‘localhost:3000’). We’ll be greeted by what looks like just a bit of text (it’s a button, I promise), which isn’t what we want, but that’s because we haven’t added any styles yet!\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/unstyled-button.png\" width=\"40%\" alt=\"A plain old 'button' that reads 'Click Me!'\">\n\u003Cp>All we need to do is add the \u003Ccode>className\u003C/code> prop with some nice Tailwind utility classes:\u003C/p>\n\u003Cp>\u003Cimg src=\"/media/mui-plus-tailwind/styled-button-code.png\" width=\"80%\" alt=\"\u003CButton className='rounded-lg border-2 border-sky-500 bg-sky-600 py-2 px-10 font-medium text-slate-300 shadow hover:bg-sky-700 active:translate-y-0.5'>\nClick Me!\n\u003C/Button>\">\u003C/p>\n\u003Cp>Now, when we go back to the browser, we should see the following:\u003C/p>\n\u003Cimg src=\"/media/mui-plus-tailwind/styled-button.png\" width=\"40%\" alt=\"A styled blue button that reads 'Click Me!'\">\n\u003Cp>Nice! That looks a lot more like a button.\u003C/p>\n\u003Ch2 id=\"step-5-further-reading\">Step 5: Further Reading\u003C/h2>\n\u003Cp>This tutorial is just the basics of setting up a project using Next.js, MUI Base, and Tailwind. Of course, there’s so much more to all these tools than I can possibly cover. For a more in-depth overview, I recommend you check out \u003Ca href=\"https://mui.com/base/guides/working-with-tailwind-css/\">this documentation\u003C/a> for using MUI Base with Tailwind, which I used as the basis for this guide, in combination with \u003Ca href=\"https://tailwindcss.com/docs/guides/nextjs\">this documentation\u003C/a> for using Tailwind with Next.js.\u003C/p>\n\u003Cp>Of course, the documentation I linked to at the top of this post is also suggested reading if you’re not familiar with any of what I’ve written about here.\u003C/p>",{"headings":564,"imagePaths":580,"frontmatter":581},[565,568,571,574,577],{"depth":367,"slug":566,"text":567},"step-1-set-up-nextjs","Step 1: Set Up Next.js",{"depth":367,"slug":569,"text":570},"step-2-install-mui-base--tailwind","Step 2: Install MUI Base & Tailwind",{"depth":367,"slug":572,"text":573},"step-3-configuration","Step 3: Configuration",{"depth":367,"slug":575,"text":576},"step-4-creating-your-first-component","Step 4: Creating Your First Component",{"depth":367,"slug":578,"text":579},"step-5-further-reading","Step 5: Further Reading",[],{"title":554,"pubDate":582,"tags":583},"3/11/23",[17,557],"2023/using-tailwind-with-mui-base.md","2024/ai-and-creativity",{"id":585,"data":587,"body":592,"filePath":593,"digest":594,"rendered":595,"legacyId":604},{"title":588,"pubDate":589,"tags":590},"AI & Creativity",["Date","2024-11-11T05:00:00.000Z"],[94,591],"Creativity","Recently, I’ve been pondering generative AI and its effects. Not on jobs, the economy, or even the damage it’s done to our ability to trust information we see online (whether it’s something generated by a malicious actor looking to mislead, or a simple “hallucination” causing an innocent mistake). No, I’ve been pondering its effects on human creativity, and our capacity to learn and grow as creative creatures. This is something I’ve had in the back of my mind for a quite a while, and I think I’ve finally reached a point where I can put my feelings into words.\n\nMy experience with generative AI started way back at the end of 2022 with [an AI-assisted dating profile](https://ghall.blog/posts/2022/creating-a-dating-profile-with-ai/). Just over a month later, I posted a [follow up](https://ghall.blog/posts/2023/an-update-on-my-ai-dating-profile/), in which I said the following:\n\n> …it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\n\nI’ve used AI on and off for different reasons since then. I’ve used it to help solve programming issues at work and on side projects, to generate images in various art styles that I don’t have the patience or talent to draw in, and even tinkered with it for writing letters. But I kept experiencing the same feelings I had from “creating” my AI dating profile; these creations were far more a product of the machine than my own humanity.\n\nIt can be–and has been–argued that generative AI democratizes creativity. A person who can barely draw a stick figure can create intricate works of art just by writing some words and feeding them into an algorithm. Or someone with no sense of rhythm or tune can make music that sounds clean and professional. As someone who lacks skill in both those areas (and many more), that sounds incredibly liberating.\n\nBut, the more I think about it, even when ignoring the plagiarism inherent in using generative AI, the more problematic it feels. Yes, generative AI is a tool like any other, and requires a human to operate it[^1], but at what point does a tool eclipse the creative input of the human behind it?\n\nArt, writing, any sort of creative output, is the result of our emotions, our thoughts, our experiences. Perhaps even more important is the journey we must take to create. We can’t be good at everything, and part of the joy of creation is finding the things that we can be good at, and honing that skill. The best painters in history didn’t wake up one day and start making masterpieces, the best writers didn’t start writing classics from the moment they put pen to paper, and the best photographers weren’t masters of framing when they picked up a camera for the first time.\n\nI would argue that Generative AI does not democratize art or self-expression. It enables us to create a hollow facsimile of those things, something that doesn’t truly express to the world who we are. If an AI wrote my blog posts, they might convey some broad thought or opinion I may share, but you wouldn’t be any closer to understanding how I truly feel about whatever it is I’m writing about.\n\nWhy does any of this even matter? Perhaps, in the grand scheme of things, it doesn’t. But, I would argue that, whether it’s commercial art or just art for the sake of art, a personal blog or a best-selling novel, a side project or just a small piece of a larger piece of software, it’s the human element, the emotions and experiences of the creator, that makes any art worth creating or consuming.\n\nGenerative AI is already writing articles for publications like Sports Illustrated, creating motion graphics for shows like Marvel’s Secret Invasion, and being pushed into countless tools for creatives, developers, and designers. Even Apple, which has prided itself for decades on making products that appeal to artists, has got into the generative AI game with their upcoming Image Playground app.\n\nNone of this is to say AI has no place in our lives–I for one would love an AI to do my taxes, create meal plans, and handle whatever other drudgery we need to deal with. Like any tool, it should supplement, not replace, the human touch.\n\nThe question I think we need to ponder is this; Where do we draw the line?\n\nSurely, purely AI-generated works are a bridge too far. But is there room for AI to assist in the creative process, and to what extent? How do we strike a balance and use this tool in a way that maximizes its positive impact on our lives while minimizing the negative impact on society? I hope that this is a question we can answer as a society sooner than later…\n\n[^1]: For now, anyway… _Cue dramatic music_. 🎵","src/content/blog/2024/ai-and-creativity.md","58d356fe670a1a7d",{"html":596,"metadata":597},"\u003Cp>Recently, I’ve been pondering generative AI and its effects. Not on jobs, the economy, or even the damage it’s done to our ability to trust information we see online (whether it’s something generated by a malicious actor looking to mislead, or a simple “hallucination” causing an innocent mistake). No, I’ve been pondering its effects on human creativity, and our capacity to learn and grow as creative creatures. This is something I’ve had in the back of my mind for a quite a while, and I think I’ve finally reached a point where I can put my feelings into words.\u003C/p>\n\u003Cp>My experience with generative AI started way back at the end of 2022 with \u003Ca href=\"https://ghall.blog/posts/2022/creating-a-dating-profile-with-ai/\">an AI-assisted dating profile\u003C/a>. Just over a month later, I posted a \u003Ca href=\"https://ghall.blog/posts/2023/an-update-on-my-ai-dating-profile/\">follow up\u003C/a>, in which I said the following:\u003C/p>\n\u003Cblockquote>\n\u003Cp>…it didn’t feel like I was presenting my authentic self. Yes, I vetted the text generated by the AI to ensure it wasn’t falsely representing me, but I still felt dirty. Like the few matches I did get weren’t matching with me, but with the AI. My profile may have been technically accurate to who I am as a person, but I felt somewhat removed from it.\u003C/p>\n\u003C/blockquote>\n\u003Cp>I’ve used AI on and off for different reasons since then. I’ve used it to help solve programming issues at work and on side projects, to generate images in various art styles that I don’t have the patience or talent to draw in, and even tinkered with it for writing letters. But I kept experiencing the same feelings I had from “creating” my AI dating profile; these creations were far more a product of the machine than my own humanity.\u003C/p>\n\u003Cp>It can be–and has been–argued that generative AI democratizes creativity. A person who can barely draw a stick figure can create intricate works of art just by writing some words and feeding them into an algorithm. Or someone with no sense of rhythm or tune can make music that sounds clean and professional. As someone who lacks skill in both those areas (and many more), that sounds incredibly liberating.\u003C/p>\n\u003Cp>But, the more I think about it, even when ignoring the plagiarism inherent in using generative AI, the more problematic it feels. Yes, generative AI is a tool like any other, and requires a human to operate it\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>, but at what point does a tool eclipse the creative input of the human behind it?\u003C/p>\n\u003Cp>Art, writing, any sort of creative output, is the result of our emotions, our thoughts, our experiences. Perhaps even more important is the journey we must take to create. We can’t be good at everything, and part of the joy of creation is finding the things that we can be good at, and honing that skill. The best painters in history didn’t wake up one day and start making masterpieces, the best writers didn’t start writing classics from the moment they put pen to paper, and the best photographers weren’t masters of framing when they picked up a camera for the first time.\u003C/p>\n\u003Cp>I would argue that Generative AI does not democratize art or self-expression. It enables us to create a hollow facsimile of those things, something that doesn’t truly express to the world who we are. If an AI wrote my blog posts, they might convey some broad thought or opinion I may share, but you wouldn’t be any closer to understanding how I truly feel about whatever it is I’m writing about.\u003C/p>\n\u003Cp>Why does any of this even matter? Perhaps, in the grand scheme of things, it doesn’t. But, I would argue that, whether it’s commercial art or just art for the sake of art, a personal blog or a best-selling novel, a side project or just a small piece of a larger piece of software, it’s the human element, the emotions and experiences of the creator, that makes any art worth creating or consuming.\u003C/p>\n\u003Cp>Generative AI is already writing articles for publications like Sports Illustrated, creating motion graphics for shows like Marvel’s Secret Invasion, and being pushed into countless tools for creatives, developers, and designers. Even Apple, which has prided itself for decades on making products that appeal to artists, has got into the generative AI game with their upcoming Image Playground app.\u003C/p>\n\u003Cp>None of this is to say AI has no place in our lives–I for one would love an AI to do my taxes, create meal plans, and handle whatever other drudgery we need to deal with. Like any tool, it should supplement, not replace, the human touch.\u003C/p>\n\u003Cp>The question I think we need to ponder is this; Where do we draw the line?\u003C/p>\n\u003Cp>Surely, purely AI-generated works are a bridge too far. But is there room for AI to assist in the creative process, and to what extent? How do we strike a balance and use this tool in a way that maximizes its positive impact on our lives while minimizing the negative impact on society? I hope that this is a question we can answer as a society sooner than later…\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>For now, anyway… \u003Cem>Cue dramatic music\u003C/em>. 🎵 \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":598,"imagePaths":600,"frontmatter":601},[599],{"depth":367,"slug":368,"text":369},[],{"title":588,"pubDate":602,"tags":603},"11/11/24",[94,591],"2024/ai-and-creativity.md","2024/am-i-switching-to-zed",{"id":605,"data":607,"body":611,"filePath":612,"digest":613,"rendered":614,"legacyId":623},{"title":608,"pubDate":609,"tags":610},"Am I Switching From Nova To Zed?",["Date","2024-04-14T13:20:00.000Z"],[132,448,17],"For the past several days I've been using the [Zed](https://zed.dev/) editor at work, and on my personal web projects. It started out as just curiosity, but I wasn't immediately sold. I even went so far as to [toot](https://mastodon.social/@ghalldev/112243389407945338) that I'd be going back to Nova as my daily driver.\n\nBut then something weird happened. The next day, I signed into my day job, opened up Nova, and then worked for maybe an hour before Zed started calling to me. After using Zed for 8 hours the previous day, Nova suddenly felt overwhelming and clunky in the same way VSCode felt when I first started using Nova.\n\nNova is, on paper, everything I want from a Mac app; it's slick, it's fast, and it feels right at home on macOS. Zed on the other hand, while fast (perhaps more so than Nova), is not all that pretty, and does not feel like a native Mac app.\n\nBut it has one huge advantage over Nova; it's a code editor first and foremost. And once you figure out the [various JSON incantations](https://zed.dev/docs/configuring-zed) to disable the extraneous AI and collaboration features, it's a pretty barebones app that puts your code front-and-center. Even something like git integration, which is a big deal in both VSCode and Nova, is pretty limited, necessitating the use of the command line tool, or an app like Fork, to perform any action besides seeing which lines and files have been changed.\n\nThis isn't to say I don't have any concerns about Zed, and the team behind it. Their business model doesn't seem all that clear to me, and their AI focus as outlined on their [roadmap](https://zed.dev/roadmap) doesn't exactly indicate to me that this is a product I want to use long term – I'd rather they focus those resources on just trying to build a good editor.\n\nOn an emotional level I'd rather give my business to a company like Panic, who have a clear business model with Nova, and who are very good at targeting the niche I happen to fall into - namely, the discerning, if not extremely nit-picky, Mac user. But Zed makes me _feel_ more productive (the science is still out on if it _actually_ makes me more productive), and the extension ecosystem, while still much smaller than the one around Nova, seems a lot healthier[^1].\n\nOf course, this whole post could be totally premature, and, once the honeymoon period is over, I'll find myself crawling back from the cold utilitarianism of Zed to the warm friendliness of Nova. After all, I am known, among those who know my computing habits, to be extremely finicky about the software I choose to use...\n\n[^1]: Example: Nova's TypeScript extension hasn't been updated in about a year, and the developer archived the project on GitHub in late December. 🙁","src/content/blog/2024/am-i-switching-to-zed.md","187937ad7baf7428",{"html":615,"metadata":616},"\u003Cp>For the past several days I’ve been using the \u003Ca href=\"https://zed.dev/\">Zed\u003C/a> editor at work, and on my personal web projects. It started out as just curiosity, but I wasn’t immediately sold. I even went so far as to \u003Ca href=\"https://mastodon.social/@ghalldev/112243389407945338\">toot\u003C/a> that I’d be going back to Nova as my daily driver.\u003C/p>\n\u003Cp>But then something weird happened. The next day, I signed into my day job, opened up Nova, and then worked for maybe an hour before Zed started calling to me. After using Zed for 8 hours the previous day, Nova suddenly felt overwhelming and clunky in the same way VSCode felt when I first started using Nova.\u003C/p>\n\u003Cp>Nova is, on paper, everything I want from a Mac app; it’s slick, it’s fast, and it feels right at home on macOS. Zed on the other hand, while fast (perhaps more so than Nova), is not all that pretty, and does not feel like a native Mac app.\u003C/p>\n\u003Cp>But it has one huge advantage over Nova; it’s a code editor first and foremost. And once you figure out the \u003Ca href=\"https://zed.dev/docs/configuring-zed\">various JSON incantations\u003C/a> to disable the extraneous AI and collaboration features, it’s a pretty barebones app that puts your code front-and-center. Even something like git integration, which is a big deal in both VSCode and Nova, is pretty limited, necessitating the use of the command line tool, or an app like Fork, to perform any action besides seeing which lines and files have been changed.\u003C/p>\n\u003Cp>This isn’t to say I don’t have any concerns about Zed, and the team behind it. Their business model doesn’t seem all that clear to me, and their AI focus as outlined on their \u003Ca href=\"https://zed.dev/roadmap\">roadmap\u003C/a> doesn’t exactly indicate to me that this is a product I want to use long term – I’d rather they focus those resources on just trying to build a good editor.\u003C/p>\n\u003Cp>On an emotional level I’d rather give my business to a company like Panic, who have a clear business model with Nova, and who are very good at targeting the niche I happen to fall into - namely, the discerning, if not extremely nit-picky, Mac user. But Zed makes me \u003Cem>feel\u003C/em> more productive (the science is still out on if it \u003Cem>actually\u003C/em> makes me more productive), and the extension ecosystem, while still much smaller than the one around Nova, seems a lot healthier\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>.\u003C/p>\n\u003Cp>Of course, this whole post could be totally premature, and, once the honeymoon period is over, I’ll find myself crawling back from the cold utilitarianism of Zed to the warm friendliness of Nova. After all, I am known, among those who know my computing habits, to be extremely finicky about the software I choose to use…\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Example: Nova’s TypeScript extension hasn’t been updated in about a year, and the developer archived the project on GitHub in late December. 🙁 \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":617,"imagePaths":619,"frontmatter":620},[618],{"depth":367,"slug":368,"text":369},[],{"title":608,"pubDate":621,"tags":622},"4/14/24, 9:20 AM",[132,448,17],"2024/am-i-switching-to-zed.md","2024/default-apps-2024",{"id":624,"data":626,"body":630,"filePath":631,"digest":632,"rendered":633,"legacyId":641},{"title":627,"pubDate":628,"tags":629},"Default Apps 2024",["Date","2024-12-29T05:00:00.000Z"],[132,94],"An updated version of [this post](/posts/2023/default-apps-2023) from 2023, inspired by [this post](https://chriscoyier.net/2023/11/25/default-apps-2023/) from Chris Coyier (which was in turn inpsired by [this post](https://mattcool.tech/posts/default-apps-2023)).\n\nI changed up some of the categories to avoid any entries with \"none\" or \"N/A\".\n\n---\n\n✉️ Mail Client: [Mail.app](https://support.apple.com/guide/mail/welcome/mac)\n\n📮 Mail Server: [Proton](https://proton.me/)\n\n📓 Notes: [Bear](https://bear.app/), [Tot](https://tot.rocks/)\n\n✅ To Do: [Reminders](https://support.apple.com/guide/reminders/welcome/mac)\n\n📷 Photo Shooting: [iPhone 14](https://www.apple.com/shop/buy-iphone/iphone-14)\n\n🎨 Photo Editing: [Affinity Photo](https://affinity.serif.com/en-us/photo/)\n\n📆 Calendar: [Fantastical](https://flexibits.com/fantastical), synced with [Google Calendar](https://calendar.google.com)\n\n☁️ Cloud Storage: [iCloud](https://www.icloud.com/)\n\n📰 RSS: [Reeder](https://www.reederapp.com/)\n\n📇 Contacts: [Contacts.app](https://support.apple.com/guide/contacts/welcome/mac)\n\n🌐 Browser: [Arc](https://www.apple.com/safari/)\n\n💬 Chat: [Messages](https://support.apple.com/guide/messages/welcome/mac), [Slack](https://slack.com/), [WhatsApp](https://www.whatsapp.com/)\n\n🔖 Bookmarks: [Anybox](https://anybox.app/)\n\n📑 Read It Later: [Reeder](https://www.reederapp.com/)\n\n📝 Writing & Text Editing: [BBEdit](https://www.barebones.com/products/bbedit/index.html)\n\n📈 Spreadsheets: [Numbers](https://www.apple.com/numbers/)\n\n🪟 Window Management: [Rectangle Pro](https://rectangleapp.com/pro)\n\n🛒 Shopping Lists: [Tot](https://tot.rocks/)\n\n🏋️‍♀️Workout Tracking: [Fitness](https://apps.apple.com/us/app/fitness/id1208224953)\n\n💰 Budgeting: [Expenses](https://getexpenses.app/)\n\n🗞 News: [RSS](https://en.wikipedia.org/wiki/RSS)\n\n🎵 Music: [Apple Music](https://www.apple.com/apple-music/)\n\n🎙 Podcasts: [Overcast](https://overcast.fm/)\n\n🔑 Password Management: [Passwords](https://support.apple.com/en-us/120758)\n\n👨‍💻 Code Editor: [Zed](https://zed.dev/), [Xcode](https://developer.apple.com/xcode/)\n\n🐘 Mastodon Client: [Ivory](https://tapbots.com/ivory/)","src/content/blog/2024/default-apps-2024.md","e29513d601ee8ea8",{"html":634,"metadata":635},"\u003Cp>An updated version of \u003Ca href=\"/posts/2023/default-apps-2023\">this post\u003C/a> from 2023, inspired by \u003Ca href=\"https://chriscoyier.net/2023/11/25/default-apps-2023/\">this post\u003C/a> from Chris Coyier (which was in turn inpsired by \u003Ca href=\"https://mattcool.tech/posts/default-apps-2023\">this post\u003C/a>).\u003C/p>\n\u003Cp>I changed up some of the categories to avoid any entries with “none” or “N/A”.\u003C/p>\n\u003Chr>\n\u003Cp>✉️ Mail Client: \u003Ca href=\"https://support.apple.com/guide/mail/welcome/mac\">Mail.app\u003C/a>\u003C/p>\n\u003Cp>📮 Mail Server: \u003Ca href=\"https://proton.me/\">Proton\u003C/a>\u003C/p>\n\u003Cp>📓 Notes: \u003Ca href=\"https://bear.app/\">Bear\u003C/a>, \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>✅ To Do: \u003Ca href=\"https://support.apple.com/guide/reminders/welcome/mac\">Reminders\u003C/a>\u003C/p>\n\u003Cp>📷 Photo Shooting: \u003Ca href=\"https://www.apple.com/shop/buy-iphone/iphone-14\">iPhone 14\u003C/a>\u003C/p>\n\u003Cp>🎨 Photo Editing: \u003Ca href=\"https://affinity.serif.com/en-us/photo/\">Affinity Photo\u003C/a>\u003C/p>\n\u003Cp>📆 Calendar: \u003Ca href=\"https://flexibits.com/fantastical\">Fantastical\u003C/a>, synced with \u003Ca href=\"https://calendar.google.com\">Google Calendar\u003C/a>\u003C/p>\n\u003Cp>☁️ Cloud Storage: \u003Ca href=\"https://www.icloud.com/\">iCloud\u003C/a>\u003C/p>\n\u003Cp>📰 RSS: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>\u003C/p>\n\u003Cp>📇 Contacts: \u003Ca href=\"https://support.apple.com/guide/contacts/welcome/mac\">Contacts.app\u003C/a>\u003C/p>\n\u003Cp>🌐 Browser: \u003Ca href=\"https://www.apple.com/safari/\">Arc\u003C/a>\u003C/p>\n\u003Cp>💬 Chat: \u003Ca href=\"https://support.apple.com/guide/messages/welcome/mac\">Messages\u003C/a>, \u003Ca href=\"https://slack.com/\">Slack\u003C/a>, \u003Ca href=\"https://www.whatsapp.com/\">WhatsApp\u003C/a>\u003C/p>\n\u003Cp>🔖 Bookmarks: \u003Ca href=\"https://anybox.app/\">Anybox\u003C/a>\u003C/p>\n\u003Cp>📑 Read It Later: \u003Ca href=\"https://www.reederapp.com/\">Reeder\u003C/a>\u003C/p>\n\u003Cp>📝 Writing & Text Editing: \u003Ca href=\"https://www.barebones.com/products/bbedit/index.html\">BBEdit\u003C/a>\u003C/p>\n\u003Cp>📈 Spreadsheets: \u003Ca href=\"https://www.apple.com/numbers/\">Numbers\u003C/a>\u003C/p>\n\u003Cp>🪟 Window Management: \u003Ca href=\"https://rectangleapp.com/pro\">Rectangle Pro\u003C/a>\u003C/p>\n\u003Cp>🛒 Shopping Lists: \u003Ca href=\"https://tot.rocks/\">Tot\u003C/a>\u003C/p>\n\u003Cp>🏋️‍♀️Workout Tracking: \u003Ca href=\"https://apps.apple.com/us/app/fitness/id1208224953\">Fitness\u003C/a>\u003C/p>\n\u003Cp>💰 Budgeting: \u003Ca href=\"https://getexpenses.app/\">Expenses\u003C/a>\u003C/p>\n\u003Cp>🗞 News: \u003Ca href=\"https://en.wikipedia.org/wiki/RSS\">RSS\u003C/a>\u003C/p>\n\u003Cp>🎵 Music: \u003Ca href=\"https://www.apple.com/apple-music/\">Apple Music\u003C/a>\u003C/p>\n\u003Cp>🎙 Podcasts: \u003Ca href=\"https://overcast.fm/\">Overcast\u003C/a>\u003C/p>\n\u003Cp>🔑 Password Management: \u003Ca href=\"https://support.apple.com/en-us/120758\">Passwords\u003C/a>\u003C/p>\n\u003Cp>👨‍💻 Code Editor: \u003Ca href=\"https://zed.dev/\">Zed\u003C/a>, \u003Ca href=\"https://developer.apple.com/xcode/\">Xcode\u003C/a>\u003C/p>\n\u003Cp>🐘 Mastodon Client: \u003Ca href=\"https://tapbots.com/ivory/\">Ivory\u003C/a>\u003C/p>",{"headings":636,"imagePaths":637,"frontmatter":638},[],[],{"title":627,"pubDate":639,"tags":640},"12/29/24",[132,94],"2024/default-apps-2024.md","2024/doctor-type-love",{"id":642,"data":644,"body":648,"filePath":649,"digest":650,"rendered":651,"legacyId":660},{"title":645,"pubDate":646,"tags":647},"How I Learned to Stop Worrying and Love TypeScript",["Date","2024-02-21T05:00:00.000Z"],[113,448],"One of the first steps I took on my post-boot camp webdev journey was to learn TypeScript. It wasn't something that was covered–though I wish it had been, I'll get into why in a second–but it was something we were encouraged to study on our own. I immediately got frustrated, and determined that there was no point. Why would I need to go through the trouble of assigning types to my variables when it was all just getting compiled into vanilla JavaScript anyway?\n\nTwo major things happened since then that changed my tune; I learned Swift, and I started using Bun for personal projects.\n\nFirst, I'll tackle Swift.\n\nLearning Swift was both pretty straightforward coming from JavaScript. The syntax, while pretty different, has some concepts that were familiar to me. By the same token though, Swift is a statically-typed[^1] language and I found that difficult to wrap my head around at first–I had, after all, given up on TypeScript in frustration.\n\nAs I got more comfortable with Swift, I starte to miss the benefits of static typing when working in JavaScript. The ability to just tell my code \"hey, this variable here is an integer\" and have my code crash, or even just fail to even compile, with a super specific error when I inevitably do something stupid and try to treat that variable as a string is infinitely less frustrating than the alternative.\n\nSecondly, there's Bun.\n\nBun is amazing, and I could write an entire post about how much I love working with bun. Heck, maybe I will, but that's something for another day...\n\nThe main thing about Bun that's relevant to my TypeScript journey is the fact that it can natively interpret TypeScript without having to compile to JavaScript. That means that right out of the box, with no dependencies, Bun can just run your TypeScript code just as easily as it can run JavaScript.[^2]\n\nWhile any code getting shipped to the browser will still need to be compiled to vanilla JavaScript, you could, as I understand it, theoretically write your entire back-end in TypeScript and just skip the build step. 🤯\n\nI started off being annoyed with using types in my code because, to be quite frank, they are annoying. They'll make your code throw errors whenever you try to multiply a string, or something silly like that. But that's part of the beauty I've come to appreciate. They're there to help you write better code, and to point you in the right direction when something inevitably goes wrong.\n\n[^1]: [Here](https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages) is a StackOverflow thread on the difference between dynamic and static typing put far better than I ever could explain it\n[^2]: As an example, I rewrote [my CLI clone of Wordle](https://github.com/ghall89/wordle-cli) in TypeScript","src/content/blog/2024/doctor-type-love.md","eab4c600e07f3ed1",{"html":652,"metadata":653},"\u003Cp>One of the first steps I took on my post-boot camp webdev journey was to learn TypeScript. It wasn’t something that was covered–though I wish it had been, I’ll get into why in a second–but it was something we were encouraged to study on our own. I immediately got frustrated, and determined that there was no point. Why would I need to go through the trouble of assigning types to my variables when it was all just getting compiled into vanilla JavaScript anyway?\u003C/p>\n\u003Cp>Two major things happened since then that changed my tune; I learned Swift, and I started using Bun for personal projects.\u003C/p>\n\u003Cp>First, I’ll tackle Swift.\u003C/p>\n\u003Cp>Learning Swift was both pretty straightforward coming from JavaScript. The syntax, while pretty different, has some concepts that were familiar to me. By the same token though, Swift is a statically-typed\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup> language and I found that difficult to wrap my head around at first–I had, after all, given up on TypeScript in frustration.\u003C/p>\n\u003Cp>As I got more comfortable with Swift, I starte to miss the benefits of static typing when working in JavaScript. The ability to just tell my code “hey, this variable here is an integer” and have my code crash, or even just fail to even compile, with a super specific error when I inevitably do something stupid and try to treat that variable as a string is infinitely less frustrating than the alternative.\u003C/p>\n\u003Cp>Secondly, there’s Bun.\u003C/p>\n\u003Cp>Bun is amazing, and I could write an entire post about how much I love working with bun. Heck, maybe I will, but that’s something for another day…\u003C/p>\n\u003Cp>The main thing about Bun that’s relevant to my TypeScript journey is the fact that it can natively interpret TypeScript without having to compile to JavaScript. That means that right out of the box, with no dependencies, Bun can just run your TypeScript code just as easily as it can run JavaScript.\u003Csup>\u003Ca href=\"#user-content-fn-2\" id=\"user-content-fnref-2\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">2\u003C/a>\u003C/sup>\u003C/p>\n\u003Cp>While any code getting shipped to the browser will still need to be compiled to vanilla JavaScript, you could, as I understand it, theoretically write your entire back-end in TypeScript and just skip the build step. 🤯\u003C/p>\n\u003Cp>I started off being annoyed with using types in my code because, to be quite frank, they are annoying. They’ll make your code throw errors whenever you try to multiply a string, or something silly like that. But that’s part of the beauty I’ve come to appreciate. They’re there to help you write better code, and to point you in the right direction when something inevitably goes wrong.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>\u003Ca href=\"https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages\">Here\u003C/a> is a StackOverflow thread on the difference between dynamic and static typing put far better than I ever could explain it \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003Cli id=\"user-content-fn-2\">\n\u003Cp>As an example, I rewrote \u003Ca href=\"https://github.com/ghall89/wordle-cli\">my CLI clone of Wordle\u003C/a> in TypeScript \u003Ca href=\"#user-content-fnref-2\" data-footnote-backref=\"\" aria-label=\"Back to reference 2\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":654,"imagePaths":656,"frontmatter":657},[655],{"depth":367,"slug":368,"text":369},[],{"title":645,"pubDate":658,"tags":659},"2/21/24",[113,448],"2024/doctor-type-love.md","2024/finishing-stuff",{"id":661,"data":663,"body":667,"filePath":668,"digest":669,"rendered":670,"legacyId":678},{"title":664,"pubDate":665,"tags":666},"Finishing Stuff",["Date","2024-07-08T04:00:00.000Z"],[18],"It's been a while, longer than usual, since I've posted something here.\n\nI often have a hard time finishing stuff if I don't have some kind of external pressure (like, say, my job depends on it), and it seems like it's been worse over the last several months.\n\nIf you were to take a look into my WIP folder for this blog, you'll see about a dozen or so posts in various states of unfinished. The next big update for my app is in limbo. My gaming backlog is littered with games I started and never finished. My sink always has a couple dishes I couldn't bring myself to just wash along with the rest of them.\n\nIt feels bad to have all these unfinished things hanging over my head. There's the guilt of course, but then there's the frustration and lack of fulfillment that comes with leaving so many things unfinished.\n\nI have so many reasons for leaving things unfinished.\n\nWhen it comes to writing or programming, it's lack of confidence in my work. With writing it's because I decided I have a bad take, or that my writing is just poor quality. With programming it's because I feel like I don't know what I'm doing (especially when working with Swift...).\n\nFor games, it's the desire to move on to the new shiny thing even though I'm still having fun with the game I'm playing.\n\nWith chores, my brain just gets bored and I feel the need to do something more mentally stimulating.\n\nThe cycle repeats, and eventually I'm overwhelmed. I have too many projects to finish. Too many blog posts to write. Too many games to play. Trying to go back and finish these things becomes less about the joy of creating or enjoying a hobby, and more about checking things off a list. So I lose the passion to even finish them.\n\nI've never been diagnosed with Attention Deficit Disorder, but sometimes I wonder if that's something I should pursue (yet another unfinished task I suppose). I tend to blam it on my anxiety since I seem to have more of a challenge during periods of high anxiety (like I've had for the last few months), but maybe this is something I should look into.\n\nIn the meantime though, I did finish this blog post (finally), _and_ posted it, so I'm going to have a mini celebratory cup of tea.","src/content/blog/2024/finishing-stuff.md","88795150a7cb9ac6",{"html":671,"metadata":672},"\u003Cp>It’s been a while, longer than usual, since I’ve posted something here.\u003C/p>\n\u003Cp>I often have a hard time finishing stuff if I don’t have some kind of external pressure (like, say, my job depends on it), and it seems like it’s been worse over the last several months.\u003C/p>\n\u003Cp>If you were to take a look into my WIP folder for this blog, you’ll see about a dozen or so posts in various states of unfinished. The next big update for my app is in limbo. My gaming backlog is littered with games I started and never finished. My sink always has a couple dishes I couldn’t bring myself to just wash along with the rest of them.\u003C/p>\n\u003Cp>It feels bad to have all these unfinished things hanging over my head. There’s the guilt of course, but then there’s the frustration and lack of fulfillment that comes with leaving so many things unfinished.\u003C/p>\n\u003Cp>I have so many reasons for leaving things unfinished.\u003C/p>\n\u003Cp>When it comes to writing or programming, it’s lack of confidence in my work. With writing it’s because I decided I have a bad take, or that my writing is just poor quality. With programming it’s because I feel like I don’t know what I’m doing (especially when working with Swift…).\u003C/p>\n\u003Cp>For games, it’s the desire to move on to the new shiny thing even though I’m still having fun with the game I’m playing.\u003C/p>\n\u003Cp>With chores, my brain just gets bored and I feel the need to do something more mentally stimulating.\u003C/p>\n\u003Cp>The cycle repeats, and eventually I’m overwhelmed. I have too many projects to finish. Too many blog posts to write. Too many games to play. Trying to go back and finish these things becomes less about the joy of creating or enjoying a hobby, and more about checking things off a list. So I lose the passion to even finish them.\u003C/p>\n\u003Cp>I’ve never been diagnosed with Attention Deficit Disorder, but sometimes I wonder if that’s something I should pursue (yet another unfinished task I suppose). I tend to blam it on my anxiety since I seem to have more of a challenge during periods of high anxiety (like I’ve had for the last few months), but maybe this is something I should look into.\u003C/p>\n\u003Cp>In the meantime though, I did finish this blog post (finally), \u003Cem>and\u003C/em> posted it, so I’m going to have a mini celebratory cup of tea.\u003C/p>",{"headings":673,"imagePaths":674,"frontmatter":675},[],[],{"title":664,"pubDate":676,"tags":677},"7/8/24",[18],"2024/finishing-stuff.md","2024/my-backup-solution",{"id":679,"data":681,"body":686,"filePath":687,"digest":688,"rendered":689,"legacyId":697},{"title":682,"pubDate":683,"tags":684},"My Backup Solution",["Date","2024-01-27T05:00:00.000Z"],[94,685],"Digital Life","Backing up your data is probably the most important thing you can do with it. This is something I learned the hard way, a little over 10 years ago now, when I lost almost everything on a failed hard drive. Photos, school projects, personal projects, a bunch of terrible stories I wrote (to be fair, that last one wasn't a huge loss). It was then I decided to get serious about backing up, and scrounged up what little money I had at the time to buy a 500GB external drive.\n\nSince then, though my backup solution has evolved, I haven't lost a single bit of data. Outside of my own stupidity of course, but that's another story...\n\nMy current backup solution is 2-fold:\n\nFirst, my entire MacBook is backed up over my local network to an external 4TB drive connected to Mac Mini server using [Carbon Copy Cloner](https://bombich.com/).\n\nSecond, the Mac Mini server is then backed up to the cloud via [Backblaze](https://www.backblaze.com/).\n\nTo complicate things a tad, I also have a 1TB external SSD connected to the Mac Mini which I use as extra storage for files I don't really need on my MacBook, but still want to keep. This SSD is also backed up to the 4TB drive (via another install of Carbon Copy Cloner), and is thus included in the Backblaze backup.\n\nI've opted to use Carbon Copy Cloner instead of Time Machine because it offers a lot more flexibility, both in scheduling and in how my backups are organized.\n\nFor example, the external SSD on the Mac Mini doesn't get written to a whole lot, so I have it scheduled to backup once a day. It's probably a little excessive for how often I actually need to save files there, but I figure it's better to backup more often than I actually need.\n\nOn my MacBook, I have it set to backup every 6 hours. I figured this was a good balance between safety and convenience. Most of my mission-critical work is code, which I commit to GitHub on a regular basis, and I'd rather not have to tie up my network every hour.\n\nFinally, I have both these backups separated into their own folders on the 4TB drive for organizational purposes, which I don't think is possible, or at least not that easy to set up, with Time Machine.\n\nBut my solution is not perfect, and I have identified a few weaknesses in my setup:\n\nFirstly, my backup is not bootable. This is more of a convenience than anything else, but because of how I have everything configured it's not possible to boot from my network backup.\n\nAlso, because my backups are over my local network, I can only backup from home. This isn't the end of the world since I don't often take my MacBook with me for more than a few hours but there have been instances where I've been away for a few days with it in tow. But again, it would be mostly an inconvenience because my mission-critical work gets pushed to GitHub regularly.\n\nThirdly, I don't have a great solution for keeping backups of my photos and anything else I have in iCloud. While both my local Photos library and the \"Mobile Documents\" folder–where macOS stores iCloud Drive locally–are included in the backup, the way iCloud handles files, and its overall reliability, makes me a little nervous. What if some of my photos are missing from the local library, or some document in my iCloud Drive isn't properly downloaded. I don't have a great solution to this, but I am open to suggestions. Please [hit me up on Mastodon](https://mastodon.social/@ghalldev) if you have any.\n\nAnd finally, I don't have another offsite backup, so if my apartment burns down AND Backblaze for some reason loses all my data (which is an unlikely, but not impossible, scenario) I'm SOL. Even having a backup drive at a relative's house that I backup to once in a while would be better than relying entirely on local network backups and the cloud.\n\nBut if there's one thing I learned, and would like to impart on anyone who, in the year 2024, doesn't have a backup, is that _any_ backup is better than _no_ backup. It all depends on your risk tolerance and how much complexity you want to introduce. But I think, at the very least, backing up to an external drive connected to your computer is a must.","src/content/blog/2024/my-backup-solution.md","cb0af27199af223d",{"html":690,"metadata":691},"\u003Cp>Backing up your data is probably the most important thing you can do with it. This is something I learned the hard way, a little over 10 years ago now, when I lost almost everything on a failed hard drive. Photos, school projects, personal projects, a bunch of terrible stories I wrote (to be fair, that last one wasn’t a huge loss). It was then I decided to get serious about backing up, and scrounged up what little money I had at the time to buy a 500GB external drive.\u003C/p>\n\u003Cp>Since then, though my backup solution has evolved, I haven’t lost a single bit of data. Outside of my own stupidity of course, but that’s another story…\u003C/p>\n\u003Cp>My current backup solution is 2-fold:\u003C/p>\n\u003Cp>First, my entire MacBook is backed up over my local network to an external 4TB drive connected to Mac Mini server using \u003Ca href=\"https://bombich.com/\">Carbon Copy Cloner\u003C/a>.\u003C/p>\n\u003Cp>Second, the Mac Mini server is then backed up to the cloud via \u003Ca href=\"https://www.backblaze.com/\">Backblaze\u003C/a>.\u003C/p>\n\u003Cp>To complicate things a tad, I also have a 1TB external SSD connected to the Mac Mini which I use as extra storage for files I don’t really need on my MacBook, but still want to keep. This SSD is also backed up to the 4TB drive (via another install of Carbon Copy Cloner), and is thus included in the Backblaze backup.\u003C/p>\n\u003Cp>I’ve opted to use Carbon Copy Cloner instead of Time Machine because it offers a lot more flexibility, both in scheduling and in how my backups are organized.\u003C/p>\n\u003Cp>For example, the external SSD on the Mac Mini doesn’t get written to a whole lot, so I have it scheduled to backup once a day. It’s probably a little excessive for how often I actually need to save files there, but I figure it’s better to backup more often than I actually need.\u003C/p>\n\u003Cp>On my MacBook, I have it set to backup every 6 hours. I figured this was a good balance between safety and convenience. Most of my mission-critical work is code, which I commit to GitHub on a regular basis, and I’d rather not have to tie up my network every hour.\u003C/p>\n\u003Cp>Finally, I have both these backups separated into their own folders on the 4TB drive for organizational purposes, which I don’t think is possible, or at least not that easy to set up, with Time Machine.\u003C/p>\n\u003Cp>But my solution is not perfect, and I have identified a few weaknesses in my setup:\u003C/p>\n\u003Cp>Firstly, my backup is not bootable. This is more of a convenience than anything else, but because of how I have everything configured it’s not possible to boot from my network backup.\u003C/p>\n\u003Cp>Also, because my backups are over my local network, I can only backup from home. This isn’t the end of the world since I don’t often take my MacBook with me for more than a few hours but there have been instances where I’ve been away for a few days with it in tow. But again, it would be mostly an inconvenience because my mission-critical work gets pushed to GitHub regularly.\u003C/p>\n\u003Cp>Thirdly, I don’t have a great solution for keeping backups of my photos and anything else I have in iCloud. While both my local Photos library and the “Mobile Documents” folder–where macOS stores iCloud Drive locally–are included in the backup, the way iCloud handles files, and its overall reliability, makes me a little nervous. What if some of my photos are missing from the local library, or some document in my iCloud Drive isn’t properly downloaded. I don’t have a great solution to this, but I am open to suggestions. Please \u003Ca href=\"https://mastodon.social/@ghalldev\">hit me up on Mastodon\u003C/a> if you have any.\u003C/p>\n\u003Cp>And finally, I don’t have another offsite backup, so if my apartment burns down AND Backblaze for some reason loses all my data (which is an unlikely, but not impossible, scenario) I’m SOL. Even having a backup drive at a relative’s house that I backup to once in a while would be better than relying entirely on local network backups and the cloud.\u003C/p>\n\u003Cp>But if there’s one thing I learned, and would like to impart on anyone who, in the year 2024, doesn’t have a backup, is that \u003Cem>any\u003C/em> backup is better than \u003Cem>no\u003C/em> backup. It all depends on your risk tolerance and how much complexity you want to introduce. But I think, at the very least, backing up to an external drive connected to your computer is a must.\u003C/p>",{"headings":692,"imagePaths":693,"frontmatter":694},[],[],{"title":682,"pubDate":695,"tags":696},"1/27/24",[94,685],"2024/my-backup-solution.md","2024/my-five-formative-games",{"id":698,"data":700,"body":704,"filePath":705,"digest":706,"rendered":707,"legacyId":731},{"title":701,"pubDate":702,"tags":703},"My Five Formative Video Games",["Date","2024-07-18T04:00:00.000Z"],[220],"This week, the Triple Click podcast posted to their main feed [a bonus episode from a couple years ago](https://overcast.fm/+AAZusZIrU4E) about the hosts' top 5 formative games. It got me thinking about some of my most formative video game experiences, and what shaped me into the gamer I am today.\n\nLike the postcast, I've picked 5 games I consider to be important to me personally. They're in no particular order, and they're not all my favorites, but they are the games that contributed most to my love of gaming.\n\n## Donkey Kong Country\n\nThis game hold a special place in my heart as my first ever video game. When I was 6, my dad bought me a Super Nintendo bundled with this game, and it blew my little mind. While I think its sequel, Donkey Kong Country 2: Diddy's Kong Quest, is the better game, the original still has a warm place in my heart, and I revisit it from time to time.\n\n## Super Mario Land 2: Six Golden Coins\n\nMy parents got divorced when I was young, and I wasn't really allowed to have a console at my mom's house. I was, however, allowed to have my GameBoy, which my mom bought for me alongside a copy of this game.\n\nIt's not what I'd call a favorite of mine–sorry to everyone who loves this game–but it was my first experience with portable gaming, and the start of my preference for that kind of experience. And it eventually led to my next formative game...\n\n## Pokémon Red[^1]\n\nIf you're a gamer in your early-to-mid-30's, Pokémon is probably the game that introduced to you to the genre of role-playing games. That was definitely the case for me. I didn't know anything about RPGs, but I was just the right age for Pokémon fever and I had to play it. In the years since, RPGs have become my favorite type of game to play, and I owe it all to Pokémon.\n\n## The Legend of Zelda: The Wind Waker\n\nI went back and forth between including this or Ocarina of Time, but in the grand scheme of things I think Wind Waker had a much larger effect on me personally. It's my earliest memory of a game that really captivated me, and drew me into its world in a way that I could believe it was alive. I didn't care enough to know about the controversy around the cartoony graphics, if anything that's what really made the game for me at the time.\n\n## Sim Copter\n\nThis is probably a strange pick, and it's the only game on this list I'd never recommend to anyone. But I was absolutely obsessed with this game for a time. I hated doing the missions, I just enjoyed flying the helicopter around. I spent most of my time playing with an included tool called the SimCity Urban Renewal Kit, building my own intricate cities, and loading them into the game to fly around in 3D.\n\n[^1]: I specifically chose Pokémon Red because that's the version I had growing up.","src/content/blog/2024/my-five-formative-games.md","8934d26bee452399",{"html":708,"metadata":709},"\u003Cp>This week, the Triple Click podcast posted to their main feed \u003Ca href=\"https://overcast.fm/+AAZusZIrU4E\">a bonus episode from a couple years ago\u003C/a> about the hosts’ top 5 formative games. It got me thinking about some of my most formative video game experiences, and what shaped me into the gamer I am today.\u003C/p>\n\u003Cp>Like the postcast, I’ve picked 5 games I consider to be important to me personally. They’re in no particular order, and they’re not all my favorites, but they are the games that contributed most to my love of gaming.\u003C/p>\n\u003Ch2 id=\"donkey-kong-country\">Donkey Kong Country\u003C/h2>\n\u003Cp>This game hold a special place in my heart as my first ever video game. When I was 6, my dad bought me a Super Nintendo bundled with this game, and it blew my little mind. While I think its sequel, Donkey Kong Country 2: Diddy’s Kong Quest, is the better game, the original still has a warm place in my heart, and I revisit it from time to time.\u003C/p>\n\u003Ch2 id=\"super-mario-land-2-six-golden-coins\">Super Mario Land 2: Six Golden Coins\u003C/h2>\n\u003Cp>My parents got divorced when I was young, and I wasn’t really allowed to have a console at my mom’s house. I was, however, allowed to have my GameBoy, which my mom bought for me alongside a copy of this game.\u003C/p>\n\u003Cp>It’s not what I’d call a favorite of mine–sorry to everyone who loves this game–but it was my first experience with portable gaming, and the start of my preference for that kind of experience. And it eventually led to my next formative game…\u003C/p>\n\u003Ch2 id=\"pokémon-red1\">Pokémon Red\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>\u003C/h2>\n\u003Cp>If you’re a gamer in your early-to-mid-30’s, Pokémon is probably the game that introduced to you to the genre of role-playing games. That was definitely the case for me. I didn’t know anything about RPGs, but I was just the right age for Pokémon fever and I had to play it. In the years since, RPGs have become my favorite type of game to play, and I owe it all to Pokémon.\u003C/p>\n\u003Ch2 id=\"the-legend-of-zelda-the-wind-waker\">The Legend of Zelda: The Wind Waker\u003C/h2>\n\u003Cp>I went back and forth between including this or Ocarina of Time, but in the grand scheme of things I think Wind Waker had a much larger effect on me personally. It’s my earliest memory of a game that really captivated me, and drew me into its world in a way that I could believe it was alive. I didn’t care enough to know about the controversy around the cartoony graphics, if anything that’s what really made the game for me at the time.\u003C/p>\n\u003Ch2 id=\"sim-copter\">Sim Copter\u003C/h2>\n\u003Cp>This is probably a strange pick, and it’s the only game on this list I’d never recommend to anyone. But I was absolutely obsessed with this game for a time. I hated doing the missions, I just enjoyed flying the helicopter around. I spent most of my time playing with an included tool called the SimCity Urban Renewal Kit, building my own intricate cities, and loading them into the game to fly around in 3D.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I specifically chose Pokémon Red because that’s the version I had growing up. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":710,"imagePaths":727,"frontmatter":728},[711,714,717,720,723,726],{"depth":367,"slug":712,"text":713},"donkey-kong-country","Donkey Kong Country",{"depth":367,"slug":715,"text":716},"super-mario-land-2-six-golden-coins","Super Mario Land 2: Six Golden Coins",{"depth":367,"slug":718,"text":719},"pokémon-red1","Pokémon Red1",{"depth":367,"slug":721,"text":722},"the-legend-of-zelda-the-wind-waker","The Legend of Zelda: The Wind Waker",{"depth":367,"slug":724,"text":725},"sim-copter","Sim Copter",{"depth":367,"slug":368,"text":369},[],{"title":701,"pubDate":729,"tags":730},"7/18/24",[220],"2024/my-five-formative-games.md","2024/my-terminal-setup",{"id":732,"data":734,"body":738,"filePath":739,"digest":740,"rendered":741,"legacyId":758},{"title":735,"pubDate":736,"tags":737},"My Terminal Setup",["Date","2024-03-09T05:00:00.000Z"],[131,94],"The command line is something I've tinkered with for years. Ever since I discovered Terminal.app in the Utilities folder on my PowerBook G4 back in the day, I've been curious about the kinds of things I could do with it. For most of that time, I've really only used it to change hidden settings, and run tools like 'diskutil', but since entering the world of software development the terminal has become an indispensable tool.\n\nOne of the things I enjoy about the terminal is how customizable it is. If you're on macOS like I am, it can be a nice little reprieve from the relatively locked-down GUI. As such, I've had a lot of fun tweaking the Unix underpinnings of the Mac to my own preferences.\n\n### The Basics\n\nTo start off, let's look at the basic setup. Though macOS comes with the built-in Terminal.app I mentioned earlier, I prefer to use an app called [iTerm 2](https://iterm2.com). There are a lot of alternative terminal emulators out there, and I've tried most of them, but I keep coming back to iTerm because it just feels at home on the Mac in the way Warp, Alacritty, and the like, just don't.\n\nFor the shell itself, I use ZSH, which is what ships by default on Mac. I'll admit I'm not sure what the pros and cons are versus something like Bash, but it works for me. I also use [ohmyzsh](https://github.com/ohmyzsh/ohmyzsh) for an extra level of customization.\n\nFinally, I use [Homebrew](https://brew.sh) for my package manager. That seems to be the go-to solution for Mac. I use it to not only install and manage the CLI tools I use, but also any GUI apps I install outside the App Store. There's even a nice little app called [Cork](https://github.com/buresdv/Cork) which is a GUI app that makes dealing with Homebrew a lot nicer.\n\n### Themes and Plugins\n\nUsing ohmyzsh opens the door for a lot of easy customization. One of the other tools I use is [Powerlevel10k](https://github.com/romkatv/powerlevel10k), which can be used with or without ohmyzsh. This allows you to create a theme by mixing and matching several preset options. I went with a pretty barebones, minimal look, but you don't have to go that route.\n\nFor plugins, I use [zsh-autocomplete](https://github.com/marlonrichert/zsh-autocomplete), which is basically a search function and autocompletion for terminal commands. I also use [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting), which not only adds a bit of color, but can be useful as well because it will color code valid commands in green and invalid ones in red.\n\n### Useful Tools\n\nThere are also a handful of useful tools I have installed that make using the command line a much more pleasant experience. I'm going to skip over ones like git and Homebrew, they're pretty much a necessity for developers, and instead focus on some tools I'd consider nice to have.\n\nAll of these tools can be installed via Homebrew.\n\n**gum**\n\nThis isn't so much a standalone tool as it is a way to easily add some interactivity to shell scripts. You can easily add text inputs, confirmation dialogs, list selections, and even loading spinners to your shell scripts. There's a lot, so I'd suggest checking out [the readme](https://github.com/charmbracelet/gum/blob/main/README.md) to see if it's something you'd find useful.\n\n**mas**\n\nA CLI for the Mac App Store. It may seem a little redundant, but I find it a much more reliable way to update apps installed via the App Store since auto-update seems pretty hit-or-miss, and many times updates will not show for me at all in the GUI interface. Simply running `mas upgrade` will find and install updates much more reliably in my experience.\n\n**thefuck**\n\nEven with all my autocomplete and syntax highlighting shenanigans, I still sometimes make mistakes (ever do a git push without setting an origin?). All I have to do when I make these silly mistakes is run the command `fuck` and it will pretty reliably find and run the command you meant to run.\n\n**yt-dlp**\n\nI don't always have to download YouTube videos, but when I do, I use yt-dlp. It makes it pretty simple to download videos, and it's feels a lot less sketchy than using one of those YouTube downloader websites. Shameless plug, I also [built a GUI front end for it](https://github.com/ghall89/Siphon).\n\n**zoxide**\n\nUsing cd to navigate our computers is an everyday part of using the terminal, but zoxide makes that experience much better. On top just being able to navigate your folders just like with cd, zoxide can keep track of your most visited folders and lets you quickly navigate to them with a fuzzy search. So, say you have a folder you navigate to a lot with `cd ~/Developer/web/personal/my-cool-blog`, instead of having to type that out you can simply type `z web blog` and it will, like magic, take you right there. Also, if you're like me and have the cd command burned into your brain, you can set cd as an alias of z.","src/content/blog/2024/my-terminal-setup.md","8dfb2c1b5e92ae77",{"html":742,"metadata":743},"\u003Cp>The command line is something I’ve tinkered with for years. Ever since I discovered Terminal.app in the Utilities folder on my PowerBook G4 back in the day, I’ve been curious about the kinds of things I could do with it. For most of that time, I’ve really only used it to change hidden settings, and run tools like ‘diskutil’, but since entering the world of software development the terminal has become an indispensable tool.\u003C/p>\n\u003Cp>One of the things I enjoy about the terminal is how customizable it is. If you’re on macOS like I am, it can be a nice little reprieve from the relatively locked-down GUI. As such, I’ve had a lot of fun tweaking the Unix underpinnings of the Mac to my own preferences.\u003C/p>\n\u003Ch3 id=\"the-basics\">The Basics\u003C/h3>\n\u003Cp>To start off, let’s look at the basic setup. Though macOS comes with the built-in Terminal.app I mentioned earlier, I prefer to use an app called \u003Ca href=\"https://iterm2.com\">iTerm 2\u003C/a>. There are a lot of alternative terminal emulators out there, and I’ve tried most of them, but I keep coming back to iTerm because it just feels at home on the Mac in the way Warp, Alacritty, and the like, just don’t.\u003C/p>\n\u003Cp>For the shell itself, I use ZSH, which is what ships by default on Mac. I’ll admit I’m not sure what the pros and cons are versus something like Bash, but it works for me. I also use \u003Ca href=\"https://github.com/ohmyzsh/ohmyzsh\">ohmyzsh\u003C/a> for an extra level of customization.\u003C/p>\n\u003Cp>Finally, I use \u003Ca href=\"https://brew.sh\">Homebrew\u003C/a> for my package manager. That seems to be the go-to solution for Mac. I use it to not only install and manage the CLI tools I use, but also any GUI apps I install outside the App Store. There’s even a nice little app called \u003Ca href=\"https://github.com/buresdv/Cork\">Cork\u003C/a> which is a GUI app that makes dealing with Homebrew a lot nicer.\u003C/p>\n\u003Ch3 id=\"themes-and-plugins\">Themes and Plugins\u003C/h3>\n\u003Cp>Using ohmyzsh opens the door for a lot of easy customization. One of the other tools I use is \u003Ca href=\"https://github.com/romkatv/powerlevel10k\">Powerlevel10k\u003C/a>, which can be used with or without ohmyzsh. This allows you to create a theme by mixing and matching several preset options. I went with a pretty barebones, minimal look, but you don’t have to go that route.\u003C/p>\n\u003Cp>For plugins, I use \u003Ca href=\"https://github.com/marlonrichert/zsh-autocomplete\">zsh-autocomplete\u003C/a>, which is basically a search function and autocompletion for terminal commands. I also use \u003Ca href=\"https://github.com/zsh-users/zsh-syntax-highlighting\">zsh-syntax-highlighting\u003C/a>, which not only adds a bit of color, but can be useful as well because it will color code valid commands in green and invalid ones in red.\u003C/p>\n\u003Ch3 id=\"useful-tools\">Useful Tools\u003C/h3>\n\u003Cp>There are also a handful of useful tools I have installed that make using the command line a much more pleasant experience. I’m going to skip over ones like git and Homebrew, they’re pretty much a necessity for developers, and instead focus on some tools I’d consider nice to have.\u003C/p>\n\u003Cp>All of these tools can be installed via Homebrew.\u003C/p>\n\u003Cp>\u003Cstrong>gum\u003C/strong>\u003C/p>\n\u003Cp>This isn’t so much a standalone tool as it is a way to easily add some interactivity to shell scripts. You can easily add text inputs, confirmation dialogs, list selections, and even loading spinners to your shell scripts. There’s a lot, so I’d suggest checking out \u003Ca href=\"https://github.com/charmbracelet/gum/blob/main/README.md\">the readme\u003C/a> to see if it’s something you’d find useful.\u003C/p>\n\u003Cp>\u003Cstrong>mas\u003C/strong>\u003C/p>\n\u003Cp>A CLI for the Mac App Store. It may seem a little redundant, but I find it a much more reliable way to update apps installed via the App Store since auto-update seems pretty hit-or-miss, and many times updates will not show for me at all in the GUI interface. Simply running \u003Ccode>mas upgrade\u003C/code> will find and install updates much more reliably in my experience.\u003C/p>\n\u003Cp>\u003Cstrong>thefuck\u003C/strong>\u003C/p>\n\u003Cp>Even with all my autocomplete and syntax highlighting shenanigans, I still sometimes make mistakes (ever do a git push without setting an origin?). All I have to do when I make these silly mistakes is run the command \u003Ccode>fuck\u003C/code> and it will pretty reliably find and run the command you meant to run.\u003C/p>\n\u003Cp>\u003Cstrong>yt-dlp\u003C/strong>\u003C/p>\n\u003Cp>I don’t always have to download YouTube videos, but when I do, I use yt-dlp. It makes it pretty simple to download videos, and it’s feels a lot less sketchy than using one of those YouTube downloader websites. Shameless plug, I also \u003Ca href=\"https://github.com/ghall89/Siphon\">built a GUI front end for it\u003C/a>.\u003C/p>\n\u003Cp>\u003Cstrong>zoxide\u003C/strong>\u003C/p>\n\u003Cp>Using cd to navigate our computers is an everyday part of using the terminal, but zoxide makes that experience much better. On top just being able to navigate your folders just like with cd, zoxide can keep track of your most visited folders and lets you quickly navigate to them with a fuzzy search. So, say you have a folder you navigate to a lot with \u003Ccode>cd ~/Developer/web/personal/my-cool-blog\u003C/code>, instead of having to type that out you can simply type \u003Ccode>z web blog\u003C/code> and it will, like magic, take you right there. Also, if you’re like me and have the cd command burned into your brain, you can set cd as an alias of z.\u003C/p>",{"headings":744,"imagePaths":754,"frontmatter":755},[745,748,751],{"depth":46,"slug":746,"text":747},"the-basics","The Basics",{"depth":46,"slug":749,"text":750},"themes-and-plugins","Themes and Plugins",{"depth":46,"slug":752,"text":753},"useful-tools","Useful Tools",[],{"title":735,"pubDate":756,"tags":757},"3/9/24",[131,94],"2024/my-terminal-setup.md","2024/my-top-3-games-of-2024",{"id":759,"data":761,"body":765,"filePath":766,"digest":767,"rendered":768,"legacyId":785},{"title":762,"pubDate":763,"tags":764},"My Top 3 Games of 2024",["Date","2024-12-12T00:00:00.000Z"],[220],"Back in December 2022, I wrote about [my top 3 games of that year](/posts/2022/my-top-3-games-of-2022/) in what I hoped would be a yearly tradition. For 2023, Tears of the Kingdom and Baldur’s Gate 3 blew me away that I couldn’t fathom selecting a third game that stood up to them. This year however, I’m returning to the originally envisioned format for my top 3 games of 2024.\n\nOne of my regrets from the 2022 post was that I didn’t go into very much detail as to why I liked the games, so this time around I wanted to make sure to go more in-depth (but not too in-depth). So, over the course of the year, I’ve kept a journal of every game I finished in 2024, and wrote down what I thought about it while the experience was still fresh in my mind. I chose this list by re-reading my journal and picking the 3 games that, upon reflection, still resonate with me in the same way.\n\n### Star Wars: Outlaws\n\nOk, this is a controversial pick, but, despite its many flaws, Star Wars: Outlaws is a game I genuinely enjoyed from start to finish. Granted, many of its strengths are a result of it being a Star Wars game, but as a fan of the franchise that’s enough for me.\n\nTo me, this game nailed the feeling of being a roguish scoundrel going on adventures across the Star Wars galaxy. From classic locations such as Mos Eisley, to new places like Mirogana, it all felt authentically a part of that galaxy far, far away. It’s clear the people behind the game are big fans of the universe George Lucas created.\n\nEven the typical Ubisoft open-world tropes didn’t detract from the experience. In fact, setting the game across multiple planets, and therefore segmenting the game into smaller open areas instead of one huge map, did a lot to remove the tedium that comes with open-world games.\n\nAnother aspect of the game I enjoyed was the “Reputation System”. During the course of the game you’ll encounter and do missions for various criminal syndicates; The Hutts, The Pykes, Crimson Dawn, and the Ashiga Clan. Which missions you do, and whether you succeed or fail, will affect your standing with these organizations. Raising your reputation with a particular group can unlock special merchants, allow you to take higher paying missions, and freely move about the gangs territory. However, betraying a gang, stealing from them, entering restricted areas, or just being a menace towards them, will lower your reputation. It’s a cool system, and I think it has plenty of room for iteration in a sequel.\n\n### Final Fantasy VII Rebirth\n\nI have to say, this is the game that most surprised me this year. While I enjoyed Final Fantasy VII Remake–the first entry in this trilogy-to-be of games re-imagining the classic 90’s RPG–when I originally played it during Covid lockdown in 2020, I found it very tedious when I revisited it a couple years ago In addition, 2023’s Final Fantasy XVI left me a bit down on the series as a whole. But I gave Rebirth a shot anyway, and I’m glad I did.\n\nOne thing this game shares in common with the first entry is how well it handles real-time combat, especially compared to the more recent “mainline” entries. Final Fantasy XV’s real-time combat was tedious, while XVI’s was frustrating and shallow. I really appreciate the ability in this game to switch characters in combat to not only keep gameplay interesting, but provide a level of depth and control that the aforementioned mainline games just don’t.\n\nThe world design, similar to Star Wars: Outlaws, is more segmented, which makes the exploration much less tedious, and far more varied. Each map is littered with side objectives to encourage exploration, but it’s not so much that it’s overwhelming. The only 2 exceptions were Cosmo Canyon and Gongaga, which I found extremely convoluted and not at all enjoyable to navigate.\n\nThe game has a multitude of mini-games, which felt like a throwback to an older style of video game design, and I thought it was fun. They weren’t all bangers, but I did find myself engaging in Gwen…sorry, I mean, Queen’s Blood. Also, Chocobo Racing ended up being another big time sink. It was enough to keep me coming back for many more hours, even after I finished the story (and is probably why I didn’t finish more games this year 😬).\n\n### The Legend of Zelda: Echoes of Wisdom\n\nIt goes without saying, if there’s a new Zelda game out it’s going to make my top 3 games of the year, no question. Like any other game, it’s not perfect. As the first brand-new “2D” Zelda in a decade, and the first in the series to star the titular princess, it had high expectations to live up to, but I think it ran away with them.\n\nIt’s the first Zelda game of this style to take on the open-world design of the 2 most recent 3D games–Breath of the Wild, and Tears of the Kingdom–and it really fit a lot better that I was expecting. In fact, I’d say it did the open-world much better, because it was reigned in just enough to not impede on the storytelling (such as it is in a Nintendo title), but still gave the player a good level of freedom to explore.\n\nAnother area this game excels is the puzzles. Much like in Tears of the Kingdom, the puzzles in this game are more focused on player creativity and finding fun solutions than simply trying to figure out the one solution the designers intended. Much of this creativity comes from what this game calls “echoes”, basically various objects and enemies you can conjure up.\n\nI hope this is a concept Nintendo revisits, because I really want to see a successor to this game that iterates upon what is already great, and improves on what didn’t quite work. Basically, what Tears of the Kingdom did for Breath of the Wild.","src/content/blog/2024/my-top-3-games-of-2024.md","aeb241061d662d08",{"html":769,"metadata":770},"\u003Cp>Back in December 2022, I wrote about \u003Ca href=\"/posts/2022/my-top-3-games-of-2022/\">my top 3 games of that year\u003C/a> in what I hoped would be a yearly tradition. For 2023, Tears of the Kingdom and Baldur’s Gate 3 blew me away that I couldn’t fathom selecting a third game that stood up to them. This year however, I’m returning to the originally envisioned format for my top 3 games of 2024.\u003C/p>\n\u003Cp>One of my regrets from the 2022 post was that I didn’t go into very much detail as to why I liked the games, so this time around I wanted to make sure to go more in-depth (but not too in-depth). So, over the course of the year, I’ve kept a journal of every game I finished in 2024, and wrote down what I thought about it while the experience was still fresh in my mind. I chose this list by re-reading my journal and picking the 3 games that, upon reflection, still resonate with me in the same way.\u003C/p>\n\u003Ch3 id=\"star-wars-outlaws\">Star Wars: Outlaws\u003C/h3>\n\u003Cp>Ok, this is a controversial pick, but, despite its many flaws, Star Wars: Outlaws is a game I genuinely enjoyed from start to finish. Granted, many of its strengths are a result of it being a Star Wars game, but as a fan of the franchise that’s enough for me.\u003C/p>\n\u003Cp>To me, this game nailed the feeling of being a roguish scoundrel going on adventures across the Star Wars galaxy. From classic locations such as Mos Eisley, to new places like Mirogana, it all felt authentically a part of that galaxy far, far away. It’s clear the people behind the game are big fans of the universe George Lucas created.\u003C/p>\n\u003Cp>Even the typical Ubisoft open-world tropes didn’t detract from the experience. In fact, setting the game across multiple planets, and therefore segmenting the game into smaller open areas instead of one huge map, did a lot to remove the tedium that comes with open-world games.\u003C/p>\n\u003Cp>Another aspect of the game I enjoyed was the “Reputation System”. During the course of the game you’ll encounter and do missions for various criminal syndicates; The Hutts, The Pykes, Crimson Dawn, and the Ashiga Clan. Which missions you do, and whether you succeed or fail, will affect your standing with these organizations. Raising your reputation with a particular group can unlock special merchants, allow you to take higher paying missions, and freely move about the gangs territory. However, betraying a gang, stealing from them, entering restricted areas, or just being a menace towards them, will lower your reputation. It’s a cool system, and I think it has plenty of room for iteration in a sequel.\u003C/p>\n\u003Ch3 id=\"final-fantasy-vii-rebirth\">Final Fantasy VII Rebirth\u003C/h3>\n\u003Cp>I have to say, this is the game that most surprised me this year. While I enjoyed Final Fantasy VII Remake–the first entry in this trilogy-to-be of games re-imagining the classic 90’s RPG–when I originally played it during Covid lockdown in 2020, I found it very tedious when I revisited it a couple years ago In addition, 2023’s Final Fantasy XVI left me a bit down on the series as a whole. But I gave Rebirth a shot anyway, and I’m glad I did.\u003C/p>\n\u003Cp>One thing this game shares in common with the first entry is how well it handles real-time combat, especially compared to the more recent “mainline” entries. Final Fantasy XV’s real-time combat was tedious, while XVI’s was frustrating and shallow. I really appreciate the ability in this game to switch characters in combat to not only keep gameplay interesting, but provide a level of depth and control that the aforementioned mainline games just don’t.\u003C/p>\n\u003Cp>The world design, similar to Star Wars: Outlaws, is more segmented, which makes the exploration much less tedious, and far more varied. Each map is littered with side objectives to encourage exploration, but it’s not so much that it’s overwhelming. The only 2 exceptions were Cosmo Canyon and Gongaga, which I found extremely convoluted and not at all enjoyable to navigate.\u003C/p>\n\u003Cp>The game has a multitude of mini-games, which felt like a throwback to an older style of video game design, and I thought it was fun. They weren’t all bangers, but I did find myself engaging in Gwen…sorry, I mean, Queen’s Blood. Also, Chocobo Racing ended up being another big time sink. It was enough to keep me coming back for many more hours, even after I finished the story (and is probably why I didn’t finish more games this year 😬).\u003C/p>\n\u003Ch3 id=\"the-legend-of-zelda-echoes-of-wisdom\">The Legend of Zelda: Echoes of Wisdom\u003C/h3>\n\u003Cp>It goes without saying, if there’s a new Zelda game out it’s going to make my top 3 games of the year, no question. Like any other game, it’s not perfect. As the first brand-new “2D” Zelda in a decade, and the first in the series to star the titular princess, it had high expectations to live up to, but I think it ran away with them.\u003C/p>\n\u003Cp>It’s the first Zelda game of this style to take on the open-world design of the 2 most recent 3D games–Breath of the Wild, and Tears of the Kingdom–and it really fit a lot better that I was expecting. In fact, I’d say it did the open-world much better, because it was reigned in just enough to not impede on the storytelling (such as it is in a Nintendo title), but still gave the player a good level of freedom to explore.\u003C/p>\n\u003Cp>Another area this game excels is the puzzles. Much like in Tears of the Kingdom, the puzzles in this game are more focused on player creativity and finding fun solutions than simply trying to figure out the one solution the designers intended. Much of this creativity comes from what this game calls “echoes”, basically various objects and enemies you can conjure up.\u003C/p>\n\u003Cp>I hope this is a concept Nintendo revisits, because I really want to see a successor to this game that iterates upon what is already great, and improves on what didn’t quite work. Basically, what Tears of the Kingdom did for Breath of the Wild.\u003C/p>",{"headings":771,"imagePaths":781,"frontmatter":782},[772,775,778],{"depth":46,"slug":773,"text":774},"star-wars-outlaws","Star Wars: Outlaws",{"depth":46,"slug":776,"text":777},"final-fantasy-vii-rebirth","Final Fantasy VII Rebirth",{"depth":46,"slug":779,"text":780},"the-legend-of-zelda-echoes-of-wisdom","The Legend of Zelda: Echoes of Wisdom",[],{"title":762,"pubDate":783,"tags":784},"2024-12-12",[220],"2024/my-top-3-games-of-2024.md","2024/notes-on-these-airpods",{"id":786,"data":788,"body":792,"filePath":793,"digest":794,"rendered":795,"legacyId":813},{"title":789,"pubDate":790,"tags":791},"Notes on the AirPods 4",["Date","2024-09-24T01:10:00.000Z"],[94],"My big purchase from the iPhone event a couple weeks ago was the AirPods 4 With Active Noise Cancellation[^1].\n\nI've only had them a few days at this point, and writing product reviews isn't my strong suite, so I've collected up some notes on my experience with the new AirPods' audio modes:\n\n## Noise Cancellation\n\nI've never owned a set of headphones with noise cancellation so I don't really have anything to compare these to, but I feel like it works pretty well considering there are no rubber tips (and thus no seal to fully block out external noise).\n\nI've tried them when working at my desk and it does a real good job of blocking out most ambient noise, and I feel less distracted. I've also tried them working in a crowded cafe, and while I could still hear the chatter of the people around me, it was muffled enough to minimize any distraction.\n\nSpeaking on the phone or in meetings is still a bit strange and I feel like I have to shout. Might default to turning off noise cancellation in these situations if I don't adapt.\n\n## Passthrough\n\nI found the passthrough on the AirPods 4 to be a little unsettling since I was hearing ambient noise naturally as well as through the headphones. This made ambience a bit more grating. Not sure if I'll use passthrough mode, and just stick to either \"active noise cancellation\" or \"off\".\n\n## Misc Notes\n\nThey don't feel quite as secure in my ear as the AirPods 3, but still way better than the AirPods 1 and 2.\n\nThe AirPods 3 had an issue with stuttering music when I was using my MacBook in clamshell mode but that seems to not be an issue so far with these.\n\n[^1]: Listeners of the Accidental Tech Podcast know the product better as These AirPods.","src/content/blog/2024/notes-on-these-airpods.md","4d5c184f9b6f67e1",{"html":796,"metadata":797},"\u003Cp>My big purchase from the iPhone event a couple weeks ago was the AirPods 4 With Active Noise Cancellation\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>.\u003C/p>\n\u003Cp>I’ve only had them a few days at this point, and writing product reviews isn’t my strong suite, so I’ve collected up some notes on my experience with the new AirPods’ audio modes:\u003C/p>\n\u003Ch2 id=\"noise-cancellation\">Noise Cancellation\u003C/h2>\n\u003Cp>I’ve never owned a set of headphones with noise cancellation so I don’t really have anything to compare these to, but I feel like it works pretty well considering there are no rubber tips (and thus no seal to fully block out external noise).\u003C/p>\n\u003Cp>I’ve tried them when working at my desk and it does a real good job of blocking out most ambient noise, and I feel less distracted. I’ve also tried them working in a crowded cafe, and while I could still hear the chatter of the people around me, it was muffled enough to minimize any distraction.\u003C/p>\n\u003Cp>Speaking on the phone or in meetings is still a bit strange and I feel like I have to shout. Might default to turning off noise cancellation in these situations if I don’t adapt.\u003C/p>\n\u003Ch2 id=\"passthrough\">Passthrough\u003C/h2>\n\u003Cp>I found the passthrough on the AirPods 4 to be a little unsettling since I was hearing ambient noise naturally as well as through the headphones. This made ambience a bit more grating. Not sure if I’ll use passthrough mode, and just stick to either “active noise cancellation” or “off”.\u003C/p>\n\u003Ch2 id=\"misc-notes\">Misc Notes\u003C/h2>\n\u003Cp>They don’t feel quite as secure in my ear as the AirPods 3, but still way better than the AirPods 1 and 2.\u003C/p>\n\u003Cp>The AirPods 3 had an issue with stuttering music when I was using my MacBook in clamshell mode but that seems to not be an issue so far with these.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>Listeners of the Accidental Tech Podcast know the product better as These AirPods. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":798,"imagePaths":809,"frontmatter":810},[799,802,805,808],{"depth":367,"slug":800,"text":801},"noise-cancellation","Noise Cancellation",{"depth":367,"slug":803,"text":804},"passthrough","Passthrough",{"depth":367,"slug":806,"text":807},"misc-notes","Misc Notes",{"depth":367,"slug":368,"text":369},[],{"title":789,"pubDate":811,"tags":812},"9/23/24, 9:10 PM",[94],"2024/notes-on-these-airpods.md","2024/playing-on-easy-mode",{"id":814,"data":816,"body":820,"filePath":821,"digest":822,"rendered":823,"legacyId":831},{"title":817,"pubDate":818,"tags":819},"Playing on \"Easy Mode\"",["Date","2024-04-09T04:00:00.000Z"],[220],"I have a confession to make; I am terrible at video games! Yes, I've played them regularly for almost 30 years but I still manage to really suck at them. Some genres I'm ok with, such as platformers and turn-based RPGs, but I feel like I just don't have the coordination to pull off shooters and other action games.\n\nI'm not sure if I've just got worse at video games with age, I'm 34 now, or if my patience for the struggle of powering through a particularly hard boss is just a lot lower than it used to be. After all, there are so many games I want to get to, and not enough time in the day. Whatever the case, I find myself turning to easy mode a lot more often.\n\nSometimes I find easy mode frustrating in a different way though. I recently finished Final Fantasy VII Rebirth, and I spent most of the game switching back-and-forth between easy and medium. I found easy a bit boring, but normal a little bit frustrating for my skill level. On easy, outside of boss fights, I didn't really feel any resistance from the game, and even then, some boss fights felt too...well...easy.\n\nYou could say, \"Well, what did you expect from easy mode?\" And that would be a fair point, easy mode is supposed to be just that. It's not really fair of me to expect anything more. But, at least for me, it robs the game of any sort of tension, and makes it nearly impossible to fail.\n\nOne relatively recent game I think did difficulty real well was Horizon Forbidden West. You had the standard \"easy, medium, or hard\" setting, but beyond that you could customize and tune the difficulty to your own specific preferences.\n\nFor example, you could tweak the damage modifiers for both you and your enemies. In my case, I found the enemies a little too weak on easy, so I tuned their damage up a little bit.\n\nOn the other hand I found Aloy, the character you play as in the Horizon series, to be a bit too beefed up on easy, so I was able to tune her down a bit as well. I was able to find this sweet spot between easy and medium that wasn't too frustrating but still gave me a satisfying experience.\n\nWhile this kind of feature is slowly becoming more common, we've still got a long way to go. I realize it's probably not the easiest thing to account for when programming a game – game dev is so far beyond what I do, so I can only begin to fathom the challenges that level of customization would add to the development process – but it's something I think should be taken into account more often, along with other accessibility features.","src/content/blog/2024/playing-on-easy-mode.md","1dc0a77e11b91736",{"html":824,"metadata":825},"\u003Cp>I have a confession to make; I am terrible at video games! Yes, I’ve played them regularly for almost 30 years but I still manage to really suck at them. Some genres I’m ok with, such as platformers and turn-based RPGs, but I feel like I just don’t have the coordination to pull off shooters and other action games.\u003C/p>\n\u003Cp>I’m not sure if I’ve just got worse at video games with age, I’m 34 now, or if my patience for the struggle of powering through a particularly hard boss is just a lot lower than it used to be. After all, there are so many games I want to get to, and not enough time in the day. Whatever the case, I find myself turning to easy mode a lot more often.\u003C/p>\n\u003Cp>Sometimes I find easy mode frustrating in a different way though. I recently finished Final Fantasy VII Rebirth, and I spent most of the game switching back-and-forth between easy and medium. I found easy a bit boring, but normal a little bit frustrating for my skill level. On easy, outside of boss fights, I didn’t really feel any resistance from the game, and even then, some boss fights felt too…well…easy.\u003C/p>\n\u003Cp>You could say, “Well, what did you expect from easy mode?” And that would be a fair point, easy mode is supposed to be just that. It’s not really fair of me to expect anything more. But, at least for me, it robs the game of any sort of tension, and makes it nearly impossible to fail.\u003C/p>\n\u003Cp>One relatively recent game I think did difficulty real well was Horizon Forbidden West. You had the standard “easy, medium, or hard” setting, but beyond that you could customize and tune the difficulty to your own specific preferences.\u003C/p>\n\u003Cp>For example, you could tweak the damage modifiers for both you and your enemies. In my case, I found the enemies a little too weak on easy, so I tuned their damage up a little bit.\u003C/p>\n\u003Cp>On the other hand I found Aloy, the character you play as in the Horizon series, to be a bit too beefed up on easy, so I was able to tune her down a bit as well. I was able to find this sweet spot between easy and medium that wasn’t too frustrating but still gave me a satisfying experience.\u003C/p>\n\u003Cp>While this kind of feature is slowly becoming more common, we’ve still got a long way to go. I realize it’s probably not the easiest thing to account for when programming a game – game dev is so far beyond what I do, so I can only begin to fathom the challenges that level of customization would add to the development process – but it’s something I think should be taken into account more often, along with other accessibility features.\u003C/p>",{"headings":826,"imagePaths":827,"frontmatter":828},[],[],{"title":817,"pubDate":829,"tags":830},"4/9/24",[220],"2024/playing-on-easy-mode.md","2024/ramblings-on-the-macintosh",{"id":832,"data":834,"body":838,"filePath":839,"digest":840,"rendered":841,"legacyId":850},{"title":835,"pubDate":836,"tags":837},"Ramblings On The Macintosh",["Date","2024-02-18T05:00:00.000Z"],[93,131,94],"2024 marks the 40th anniversary of the Macintosh. You've probably heard this a million times already this year, I'm pretty late to the party for writing a Macintosh retrospective, but I wanted to write this post anyway because of how important the Mac is to me. I might not be where I am today, especially not career-wise, if it weren't for the Macintosh.\n\nThat may seem like hyperbole, but it's really not. The Mac was the computer that ignighted my love of computers, not just using them but tinkering with them. The Mac showed me an entire world of near-infinite possibilities which I am still exploring to this day!\n\nOne of my earliest memories using a computer is playing Super Munchers on my grandparents' SE/30[^1]. I can't recall what originally caused me to become obsessed with this simple educational game, but I was hooked.\n\nSome of my earliest memories of actually tinkering with computers though came from having to spend time with my mom after work at a local university. This is where I discovered the Internet and network share drives. I remember finding a seemingly limitless repository of software and games-in retrospect, probably pirated-on the university network and taking whatever I could fit on a handful of floppies home to run on our Macintosh at home.\n\nI don't actually remember what model we had at home at the time, it looked like a Power Mac 7100 but did not have a CD-ROM drive–I distinctly remember going to pick up an external CD-ROM drive at CompUSA. My mom got it used, I can't recall where from but it was definitly not a new computer at the time. But I didn't care! I had games, both the 2 or 3 I had on CD-ROM, plus the many I had inadvertantly pirated.\n\nI remember it had an earlier version of System 7 (what I consider to be the quintissential \"Classic Mac OS\") so it was missing some small features that were on the newer university computers. A couple of those features that come to mind are the Control Strip, and the more 3D-esque UI style, both introduced in later version of System 7. I discovered that these features were merely system extensions so I resolved to copy those extensions onto a floppy disk, copy them into the Extensions folder on our Mac at home, and cross my fingers. To my shock and awe, it worked, and that's where my love for tinkering with computers blossomed.\n\nNot too long after, I discovered the application ResEdit, which could have been dangerous, but thankfully I was usually smart enough to make duplicates of anything before modifying them (guess I was born with good data hygene) and lucky enough to not trash any crucial system files.\n\nLater, in middle school and high school, I started making real simple websites, set up a forum (remember those?!), and learned some rudimentary C, tried (and failed) to learn Objective C. In addition, the Unix underpinnings of Mac OS X introduced me to tinkering via the command line.\n\nWould I have followed the same, or similar, path if I'd only ever used Windows PCs? What about if the Macintosh never existed? We'll never know, but I can say for sure that I wouldn't adore computers in quite the same way. Maybe that's a \"fanboi\" thing to say, but I do truly believe it.\n\nOh, and, fun fact; I wrote this entire post in BBEdit 4 inside the Basilisk II emulator running Mac OS 7.6.\n\n[^1]: I actually still have this exact computer, but it's long since bitten the dust.","src/content/blog/2024/ramblings-on-the-macintosh.md","c1cdfc0ecbc9b897",{"html":842,"metadata":843},"\u003Cp>2024 marks the 40th anniversary of the Macintosh. You’ve probably heard this a million times already this year, I’m pretty late to the party for writing a Macintosh retrospective, but I wanted to write this post anyway because of how important the Mac is to me. I might not be where I am today, especially not career-wise, if it weren’t for the Macintosh.\u003C/p>\n\u003Cp>That may seem like hyperbole, but it’s really not. The Mac was the computer that ignighted my love of computers, not just using them but tinkering with them. The Mac showed me an entire world of near-infinite possibilities which I am still exploring to this day!\u003C/p>\n\u003Cp>One of my earliest memories using a computer is playing Super Munchers on my grandparents’ SE/30\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup>. I can’t recall what originally caused me to become obsessed with this simple educational game, but I was hooked.\u003C/p>\n\u003Cp>Some of my earliest memories of actually tinkering with computers though came from having to spend time with my mom after work at a local university. This is where I discovered the Internet and network share drives. I remember finding a seemingly limitless repository of software and games-in retrospect, probably pirated-on the university network and taking whatever I could fit on a handful of floppies home to run on our Macintosh at home.\u003C/p>\n\u003Cp>I don’t actually remember what model we had at home at the time, it looked like a Power Mac 7100 but did not have a CD-ROM drive–I distinctly remember going to pick up an external CD-ROM drive at CompUSA. My mom got it used, I can’t recall where from but it was definitly not a new computer at the time. But I didn’t care! I had games, both the 2 or 3 I had on CD-ROM, plus the many I had inadvertantly pirated.\u003C/p>\n\u003Cp>I remember it had an earlier version of System 7 (what I consider to be the quintissential “Classic Mac OS”) so it was missing some small features that were on the newer university computers. A couple of those features that come to mind are the Control Strip, and the more 3D-esque UI style, both introduced in later version of System 7. I discovered that these features were merely system extensions so I resolved to copy those extensions onto a floppy disk, copy them into the Extensions folder on our Mac at home, and cross my fingers. To my shock and awe, it worked, and that’s where my love for tinkering with computers blossomed.\u003C/p>\n\u003Cp>Not too long after, I discovered the application ResEdit, which could have been dangerous, but thankfully I was usually smart enough to make duplicates of anything before modifying them (guess I was born with good data hygene) and lucky enough to not trash any crucial system files.\u003C/p>\n\u003Cp>Later, in middle school and high school, I started making real simple websites, set up a forum (remember those?!), and learned some rudimentary C, tried (and failed) to learn Objective C. In addition, the Unix underpinnings of Mac OS X introduced me to tinkering via the command line.\u003C/p>\n\u003Cp>Would I have followed the same, or similar, path if I’d only ever used Windows PCs? What about if the Macintosh never existed? We’ll never know, but I can say for sure that I wouldn’t adore computers in quite the same way. Maybe that’s a “fanboi” thing to say, but I do truly believe it.\u003C/p>\n\u003Cp>Oh, and, fun fact; I wrote this entire post in BBEdit 4 inside the Basilisk II emulator running Mac OS 7.6.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I actually still have this exact computer, but it’s long since bitten the dust. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":844,"imagePaths":846,"frontmatter":847},[845],{"depth":367,"slug":368,"text":369},[],{"title":835,"pubDate":848,"tags":849},"2/18/24",[93,131,94],"2024/ramblings-on-the-macintosh.md","2024/rip-homepod-mini",{"id":851,"data":853,"body":857,"filePath":858,"digest":859,"rendered":860,"legacyId":869},{"title":854,"pubDate":855,"tags":856},"RIP HomePod Mini",["Date","2024-05-02T04:00:00.000Z"],[94],"Recently, my HomePod Mini broke. It will no longer even power on at all. I think I may have damaged the _NON-REMOVABLE_ cable, perhaps while moving furniture (I'm not entirely sure _when_ it broke, but I'll get into that), and my options are send it in to Apple for repair or buy a new one. I have zero motivation to do either.\n\nI've owned my fair share of Apple products over the years, and while most of them have had flaws that got under my skin (but honestly, what product doesn't), none of them have consistently frustrated me as much as the HomePod.\n\nBut first, let's start off with the things I like; It looks nice, sounds really good (at least to my ears, but I am admittedly _not_ an audiophile), and is just overall a well-made piece of hardware - non-removable power cable notwithstanding.\n\nHowever, all of that is totally undone by the software. Specifically, Siri.\n\nI never really understood the complains people had about Siri before I had a HomePod. Probably because I never really used Siri regularly on my other devices.[^1] But Siri is the primary way you interact with the HomePod. Sure you can just AirPlay some music to it from your phone, but it's, at least in theory, easier to say \"Hey Siri, play some music\" and have it intelligently play a selection of music that fits your tastes.\n\nWhen it worked, it was amazing. But when it didn't, which slowly became more and more common over time, it was infuriating. The number of times it would just fail to do something I asked it to do 100 times before without issue by responding \"I'm sorry, I can't do that\" was, as the meme says, Too Damn High!\n\nHowever, the last straw for me was during the period sometime after iOS 16 (can't remember exactly which update, but it was after the initial release of version 16), and leading up to the release of iOS 17, when it would consistently insist it wasn't connected to the internet. No amount of factory resets would resolve the issue for more than a day, and eventually even AirPlay would just decide to randomly stop working. I know it wasn't my network because during this period I moved to a new apartment and had to get a whole new network setup, and the issue still persisted.\n\nBy the time iOS 17 rolled around and the bulk of the issues seemed to be over though, I had already fell out of the habit of actually using my HomePod. Worst of all though, I lost trust that it would continue to function reliably. It just continued to sit on my shelf, in silence, for months after iOS 17 seemingly fixed my woes.\n\nThen one day I decided to play some music. Not sure what possessed me to try on that particular day, perhaps I was feeling a bit masochistic, but when I spoke the words, \"Hey Siri, play the new Taylor Swift album,\" I was met with silence. I asked again, still nothing. I tried the old \"turn it off and on again\", and the weird little lightshow it usually does didn't happen. I tried another outlet, and got the same result, and I finally accepted that thus cool-but-infuriating little speaker was dead. I hadn't used it in weeks, and I'd moved furniture around to clean several times in that period so I can only assume I damaged the (I'll repeat; _NON-REMOVABLE_) cable while doing that.\n\nMy first thought was, \"Well, surely I can just buy a replacement cable.\" That is when I learned the hard truth.\n\nMy second thought was, \"Well, I'll just buy a new one.\" So I went to Apple.com, added a nice dark blue HomePod Mini to my cart, and decided that I'd wait.\n\nIt's been a week, the HomePod is still in my cart, and I'm not sure I'll ever hit that checkout button. The truth is, I don't miss it. I'd love a little high-quality speaker to play music and podcasts out of, but it's just not worth the frustration for me. I'd pay at least $100 for a speaker that sounds as good as the HomePod Mini, supports AirPlay, and does not have Siri (or any other virtual assistant). That's the route I'd probably go _if_ I can find something like that, though I'm not crossing my fingers.\n\nSo, RIP to my HomePod Mini, the most infuriating Apple product I've ever used.\n\n[^1]: I use Siri occasionally on my iPhone, and not at all on my Mac or iPad.","src/content/blog/2024/rip-homepod-mini.md","d3efe122fb9807ba",{"html":861,"metadata":862},"\u003Cp>Recently, my HomePod Mini broke. It will no longer even power on at all. I think I may have damaged the \u003Cem>NON-REMOVABLE\u003C/em> cable, perhaps while moving furniture (I’m not entirely sure \u003Cem>when\u003C/em> it broke, but I’ll get into that), and my options are send it in to Apple for repair or buy a new one. I have zero motivation to do either.\u003C/p>\n\u003Cp>I’ve owned my fair share of Apple products over the years, and while most of them have had flaws that got under my skin (but honestly, what product doesn’t), none of them have consistently frustrated me as much as the HomePod.\u003C/p>\n\u003Cp>But first, let’s start off with the things I like; It looks nice, sounds really good (at least to my ears, but I am admittedly \u003Cem>not\u003C/em> an audiophile), and is just overall a well-made piece of hardware - non-removable power cable notwithstanding.\u003C/p>\n\u003Cp>However, all of that is totally undone by the software. Specifically, Siri.\u003C/p>\n\u003Cp>I never really understood the complains people had about Siri before I had a HomePod. Probably because I never really used Siri regularly on my other devices.\u003Csup>\u003Ca href=\"#user-content-fn-1\" id=\"user-content-fnref-1\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">1\u003C/a>\u003C/sup> But Siri is the primary way you interact with the HomePod. Sure you can just AirPlay some music to it from your phone, but it’s, at least in theory, easier to say “Hey Siri, play some music” and have it intelligently play a selection of music that fits your tastes.\u003C/p>\n\u003Cp>When it worked, it was amazing. But when it didn’t, which slowly became more and more common over time, it was infuriating. The number of times it would just fail to do something I asked it to do 100 times before without issue by responding “I’m sorry, I can’t do that” was, as the meme says, Too Damn High!\u003C/p>\n\u003Cp>However, the last straw for me was during the period sometime after iOS 16 (can’t remember exactly which update, but it was after the initial release of version 16), and leading up to the release of iOS 17, when it would consistently insist it wasn’t connected to the internet. No amount of factory resets would resolve the issue for more than a day, and eventually even AirPlay would just decide to randomly stop working. I know it wasn’t my network because during this period I moved to a new apartment and had to get a whole new network setup, and the issue still persisted.\u003C/p>\n\u003Cp>By the time iOS 17 rolled around and the bulk of the issues seemed to be over though, I had already fell out of the habit of actually using my HomePod. Worst of all though, I lost trust that it would continue to function reliably. It just continued to sit on my shelf, in silence, for months after iOS 17 seemingly fixed my woes.\u003C/p>\n\u003Cp>Then one day I decided to play some music. Not sure what possessed me to try on that particular day, perhaps I was feeling a bit masochistic, but when I spoke the words, “Hey Siri, play the new Taylor Swift album,” I was met with silence. I asked again, still nothing. I tried the old “turn it off and on again”, and the weird little lightshow it usually does didn’t happen. I tried another outlet, and got the same result, and I finally accepted that thus cool-but-infuriating little speaker was dead. I hadn’t used it in weeks, and I’d moved furniture around to clean several times in that period so I can only assume I damaged the (I’ll repeat; \u003Cem>NON-REMOVABLE\u003C/em>) cable while doing that.\u003C/p>\n\u003Cp>My first thought was, “Well, surely I can just buy a replacement cable.” That is when I learned the hard truth.\u003C/p>\n\u003Cp>My second thought was, “Well, I’ll just buy a new one.” So I went to Apple.com, added a nice dark blue HomePod Mini to my cart, and decided that I’d wait.\u003C/p>\n\u003Cp>It’s been a week, the HomePod is still in my cart, and I’m not sure I’ll ever hit that checkout button. The truth is, I don’t miss it. I’d love a little high-quality speaker to play music and podcasts out of, but it’s just not worth the frustration for me. I’d pay at least $100 for a speaker that sounds as good as the HomePod Mini, supports AirPlay, and does not have Siri (or any other virtual assistant). That’s the route I’d probably go \u003Cem>if\u003C/em> I can find something like that, though I’m not crossing my fingers.\u003C/p>\n\u003Cp>So, RIP to my HomePod Mini, the most infuriating Apple product I’ve ever used.\u003C/p>\n\u003Csection data-footnotes=\"\" class=\"footnotes\">\u003Ch2 class=\"sr-only\" id=\"footnote-label\">Footnotes\u003C/h2>\n\u003Col>\n\u003Cli id=\"user-content-fn-1\">\n\u003Cp>I use Siri occasionally on my iPhone, and not at all on my Mac or iPad. \u003Ca href=\"#user-content-fnref-1\" data-footnote-backref=\"\" aria-label=\"Back to reference 1\" class=\"data-footnote-backref\">↩\u003C/a>\u003C/p>\n\u003C/li>\n\u003C/ol>\n\u003C/section>",{"headings":863,"imagePaths":865,"frontmatter":866},[864],{"depth":367,"slug":368,"text":369},[],{"title":854,"pubDate":867,"tags":868},"5/2/24",[94],"2024/rip-homepod-mini.md","2025/announcing-autodock",{"id":870,"data":872,"body":876,"filePath":877,"digest":878,"rendered":879,"legacyId":887},{"title":873,"pubDate":874,"tags":875},"Announcing AutoDock",["Date","2025-01-17T05:00:00.000Z"],[131,132,448],"I'm a MacBook Air user who often uses a larger external display, and I have a, perhaps, idiosyncratic desire to have the dock always visible on the larger display at my desk, but prefer it hidden when using the smaller, built-in one.\n\nWhile it's not all that inconvenient to manually swap the dock with a quick \u003Ckbd>opt\u003C/kbd> + \u003Ckbd>cmd\u003C/kbd> + \u003Ckbd>D\u003C/kbd>, I thought it would be cool to automate the process based on display size. I looked around for an app that would do this, and couldn't find one that worked reliably.\n\nSo, like any nerd with a bit too much free time, I thought I could make one myself. The problem is, I didn't know where to start, so I ended up putting the project off for months. Finally, last night I got a bit inspired to at least learn how to detect and read the displays connected to a Mac, which involved diving into the CoreGraphics API, something I was pretty unfamiliar with.\n\nOne thing led to another, and before I knew it I went from my original idea to working MVP in just a couple hours, which was not at all my plan. This morning, I had a few ideas to improve the UX which I then implemented and decided it was good enough to throw the 1.0 up online.\n\nIt's not perfect, but it's probably the first Mac app that I've made that I can say I'm truly proud of. The main thing I don't like is the fact that the app has to kill the Dock whenever autohiding gets switched on or off–though I've somewhat mitigated this by checking the Dock's current autohide status and only applying the changes if there's actually a change–but I'm not sure that's something that can be worked around. (If you do happen to know of a way, please [reach out to me on Mastodon](https://mastodon.social/@ghalldev) or [submit an issue](https://github.com/ghall89/AutoDock/issues/new?template=Blank+issue))\n\nFinally, due to the nature of the app, it is not sandboxed. If there is a way to handle updating the Dock in a way that will allow me to enable sandboxing I will implement it, but, based on my limited knowlege of Mac development, I don't think that's very likely.\n\nIf the app sounds useful to you, and you'd like to try it out, you can install it via Homebrew with `brew tap ghall89/tap && brew install --cask autodock`, or [download it manually](https://github.com/ghall89/AutoDock/releases).","src/content/blog/2025/announcing-autodock.md","68b9a725a6640561",{"html":880,"metadata":881},"\u003Cp>I’m a MacBook Air user who often uses a larger external display, and I have a, perhaps, idiosyncratic desire to have the dock always visible on the larger display at my desk, but prefer it hidden when using the smaller, built-in one.\u003C/p>\n\u003Cp>While it’s not all that inconvenient to manually swap the dock with a quick \u003Ckbd>opt\u003C/kbd> + \u003Ckbd>cmd\u003C/kbd> + \u003Ckbd>D\u003C/kbd>, I thought it would be cool to automate the process based on display size. I looked around for an app that would do this, and couldn’t find one that worked reliably.\u003C/p>\n\u003Cp>So, like any nerd with a bit too much free time, I thought I could make one myself. The problem is, I didn’t know where to start, so I ended up putting the project off for months. Finally, last night I got a bit inspired to at least learn how to detect and read the displays connected to a Mac, which involved diving into the CoreGraphics API, something I was pretty unfamiliar with.\u003C/p>\n\u003Cp>One thing led to another, and before I knew it I went from my original idea to working MVP in just a couple hours, which was not at all my plan. This morning, I had a few ideas to improve the UX which I then implemented and decided it was good enough to throw the 1.0 up online.\u003C/p>\n\u003Cp>It’s not perfect, but it’s probably the first Mac app that I’ve made that I can say I’m truly proud of. The main thing I don’t like is the fact that the app has to kill the Dock whenever autohiding gets switched on or off–though I’ve somewhat mitigated this by checking the Dock’s current autohide status and only applying the changes if there’s actually a change–but I’m not sure that’s something that can be worked around. (If you do happen to know of a way, please \u003Ca href=\"https://mastodon.social/@ghalldev\">reach out to me on Mastodon\u003C/a> or \u003Ca href=\"https://github.com/ghall89/AutoDock/issues/new?template=Blank+issue\">submit an issue\u003C/a>)\u003C/p>\n\u003Cp>Finally, due to the nature of the app, it is not sandboxed. If there is a way to handle updating the Dock in a way that will allow me to enable sandboxing I will implement it, but, based on my limited knowlege of Mac development, I don’t think that’s very likely.\u003C/p>\n\u003Cp>If the app sounds useful to you, and you’d like to try it out, you can install it via Homebrew with \u003Ccode>brew tap ghall89/tap && brew install --cask autodock\u003C/code>, or \u003Ca href=\"https://github.com/ghall89/AutoDock/releases\">download it manually\u003C/a>.\u003C/p>",{"headings":882,"imagePaths":883,"frontmatter":884},[],[],{"title":873,"pubDate":885,"tags":886},"1/17/25",[131,132,448],"2025/announcing-autodock.md","2025/music-blog-challenge",{"id":888,"data":890,"body":896,"filePath":897,"digest":898,"rendered":899,"legacyId":937},{"title":891,"pubDate":892,"tags":893},"Blog Questions Challenge: Music Edition",["Date","2025-02-07T05:00:00.000Z"],[894,895],"Music","Blog Challenge","For my very first Blog Question Challenge, I've been tagged by [Kyle](https://weblog.kylereddoch.me/2025/02/blog-questions-challenge-music-edition) to answer questions about music. This is going to be a bit of a challenge, but here we go...\n\n## What Are 5 Of Your Favorite Albums?\n\nThere are so many albums I'd consider favorites, narrowing them down to just 5 seems like an impossible task. Here's the 5 I've whittled my list down to, with the disclaimer that I don't necessarily like them more than other albums that didn't make the cut.\n\n- The Else - They Might Be Giants\n- Ocean Eyes - Owl City\n- Franz Ferdinand - Franz Ferdinand\n- Hey, I'm Just Like You - Tegan and Sara\n- White Blood Cells - The White Stripes\n\n## What Are 5 Of Your Favorite Songs?\n\nDitto for songs, but 100x more difficult...\n\n- Synopsis for Latecomers - They Might Be Giants\n- What Feels Like Eternity - Metric\n- The Last Great American Dynasty - Taylor Swift\n- This is Why - Paramore\n- Good Morning Tucson - Jonathan Coulton\n\n## Favorite Instrument(s)?\n\nI used to play the trumpet, so that's probably my favorite. After that, probably keyboard because I think it would be fun to play.\n\n## What Song Or Album Are You Currently Listening To?\n\nAs I write this, I am listening to Poké & Chill, which is an album of lo-fi renditions of music from the Pokémon video games.\n\n## Do You Listen To The Radio, And If So, How Often?\n\nI don't listen to the radio at all anymore. The one station I did listen to closed and got sold off years ago, and so my days of listening to the radio ended.\n\n## How Often Do You Listen To Music?\n\nAlmost constantly. I sometimes substitute it out for podcasts, but I'm generally listening to music while I work, clean, or just relax. I also listen to music while I write, but I generally only listen to various lo-fi albums.\n\n## How Often Do You Discover Music And How Do You Discover It?\n\nI don't discover as much new music as I would like to, but when I do it's through Apple Music in the New section, or from listening to some of their recommended playlists.\n\n## What’s A Song Or Album You Enjoy That You Wish Had More Recognition?\n\nI'm absolutely 100% biased here since I know the artist, but my pick is [Here's to the Sojourners](https://album.link/i/1598277466) by Nathan Landis Funk. Cool music by a cool guy.\n\n## What’s Your Favorite Song Of All Time?\n\nThis answer changes constantly, but at the moment I'd have to pick Birdhouse in Your Soul by They Might Be Giants. It's perhaps an odd choice, but it never fails to cheer me up when I'm feeling down and that's enough to cement it as my favorite...for the moment.\n\n## Has Your Taste Of Music Evolved Over The Years?\n\nI'd say it's expanded quite a bit, and I'd even say changed slighlty. I had a very limited taste in high school, and, while I still do like a lot of the music I listened to then, as my tastes have expanded I've found myself perferring a lot of different artists and genres. \"Alternative\" is still the most common genre in my Apple Music library, but over the last 16 years I've added electronic, folk, grunge, K-pop, and \"singer/songwriter\" (though I'm still not entirely sure what that means as a genre 🤷‍♂️).\n\nSo, after much overthinking, those are my answers to these musical questions. Thanks again to Kyle for tagging me. I'm tagging [Mark @ CodeMacLife](https://blog.codemaclife.net), good luck!","src/content/blog/2025/music-blog-challenge.md","6a14b92f68c390a8",{"html":900,"metadata":901},"\u003Cp>For my very first Blog Question Challenge, I’ve been tagged by \u003Ca href=\"https://weblog.kylereddoch.me/2025/02/blog-questions-challenge-music-edition\">Kyle\u003C/a> to answer questions about music. This is going to be a bit of a challenge, but here we go…\u003C/p>\n\u003Ch2 id=\"what-are-5-of-your-favorite-albums\">What Are 5 Of Your Favorite Albums?\u003C/h2>\n\u003Cp>There are so many albums I’d consider favorites, narrowing them down to just 5 seems like an impossible task. Here’s the 5 I’ve whittled my list down to, with the disclaimer that I don’t necessarily like them more than other albums that didn’t make the cut.\u003C/p>\n\u003Cul>\n\u003Cli>The Else - They Might Be Giants\u003C/li>\n\u003Cli>Ocean Eyes - Owl City\u003C/li>\n\u003Cli>Franz Ferdinand - Franz Ferdinand\u003C/li>\n\u003Cli>Hey, I’m Just Like You - Tegan and Sara\u003C/li>\n\u003Cli>White Blood Cells - The White Stripes\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"what-are-5-of-your-favorite-songs\">What Are 5 Of Your Favorite Songs?\u003C/h2>\n\u003Cp>Ditto for songs, but 100x more difficult…\u003C/p>\n\u003Cul>\n\u003Cli>Synopsis for Latecomers - They Might Be Giants\u003C/li>\n\u003Cli>What Feels Like Eternity - Metric\u003C/li>\n\u003Cli>The Last Great American Dynasty - Taylor Swift\u003C/li>\n\u003Cli>This is Why - Paramore\u003C/li>\n\u003Cli>Good Morning Tucson - Jonathan Coulton\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"favorite-instruments\">Favorite Instrument(s)?\u003C/h2>\n\u003Cp>I used to play the trumpet, so that’s probably my favorite. After that, probably keyboard because I think it would be fun to play.\u003C/p>\n\u003Ch2 id=\"what-song-or-album-are-you-currently-listening-to\">What Song Or Album Are You Currently Listening To?\u003C/h2>\n\u003Cp>As I write this, I am listening to Poké & Chill, which is an album of lo-fi renditions of music from the Pokémon video games.\u003C/p>\n\u003Ch2 id=\"do-you-listen-to-the-radio-and-if-so-how-often\">Do You Listen To The Radio, And If So, How Often?\u003C/h2>\n\u003Cp>I don’t listen to the radio at all anymore. The one station I did listen to closed and got sold off years ago, and so my days of listening to the radio ended.\u003C/p>\n\u003Ch2 id=\"how-often-do-you-listen-to-music\">How Often Do You Listen To Music?\u003C/h2>\n\u003Cp>Almost constantly. I sometimes substitute it out for podcasts, but I’m generally listening to music while I work, clean, or just relax. I also listen to music while I write, but I generally only listen to various lo-fi albums.\u003C/p>\n\u003Ch2 id=\"how-often-do-you-discover-music-and-how-do-you-discover-it\">How Often Do You Discover Music And How Do You Discover It?\u003C/h2>\n\u003Cp>I don’t discover as much new music as I would like to, but when I do it’s through Apple Music in the New section, or from listening to some of their recommended playlists.\u003C/p>\n\u003Ch2 id=\"whats-a-song-or-album-you-enjoy-that-you-wish-had-more-recognition\">What’s A Song Or Album You Enjoy That You Wish Had More Recognition?\u003C/h2>\n\u003Cp>I’m absolutely 100% biased here since I know the artist, but my pick is \u003Ca href=\"https://album.link/i/1598277466\">Here’s to the Sojourners\u003C/a> by Nathan Landis Funk. Cool music by a cool guy.\u003C/p>\n\u003Ch2 id=\"whats-your-favorite-song-of-all-time\">What’s Your Favorite Song Of All Time?\u003C/h2>\n\u003Cp>This answer changes constantly, but at the moment I’d have to pick Birdhouse in Your Soul by They Might Be Giants. It’s perhaps an odd choice, but it never fails to cheer me up when I’m feeling down and that’s enough to cement it as my favorite…for the moment.\u003C/p>\n\u003Ch2 id=\"has-your-taste-of-music-evolved-over-the-years\">Has Your Taste Of Music Evolved Over The Years?\u003C/h2>\n\u003Cp>I’d say it’s expanded quite a bit, and I’d even say changed slighlty. I had a very limited taste in high school, and, while I still do like a lot of the music I listened to then, as my tastes have expanded I’ve found myself perferring a lot of different artists and genres. “Alternative” is still the most common genre in my Apple Music library, but over the last 16 years I’ve added electronic, folk, grunge, K-pop, and “singer/songwriter” (though I’m still not entirely sure what that means as a genre 🤷‍♂️).\u003C/p>\n\u003Cp>So, after much overthinking, those are my answers to these musical questions. Thanks again to Kyle for tagging me. I’m tagging \u003Ca href=\"https://blog.codemaclife.net\">Mark @ CodeMacLife\u003C/a>, good luck!\u003C/p>",{"headings":902,"imagePaths":933,"frontmatter":934},[903,906,909,912,915,918,921,924,927,930],{"depth":367,"slug":904,"text":905},"what-are-5-of-your-favorite-albums","What Are 5 Of Your Favorite Albums?",{"depth":367,"slug":907,"text":908},"what-are-5-of-your-favorite-songs","What Are 5 Of Your Favorite Songs?",{"depth":367,"slug":910,"text":911},"favorite-instruments","Favorite Instrument(s)?",{"depth":367,"slug":913,"text":914},"what-song-or-album-are-you-currently-listening-to","What Song Or Album Are You Currently Listening To?",{"depth":367,"slug":916,"text":917},"do-you-listen-to-the-radio-and-if-so-how-often","Do You Listen To The Radio, And If So, How Often?",{"depth":367,"slug":919,"text":920},"how-often-do-you-listen-to-music","How Often Do You Listen To Music?",{"depth":367,"slug":922,"text":923},"how-often-do-you-discover-music-and-how-do-you-discover-it","How Often Do You Discover Music And How Do You Discover It?",{"depth":367,"slug":925,"text":926},"whats-a-song-or-album-you-enjoy-that-you-wish-had-more-recognition","What’s A Song Or Album You Enjoy That You Wish Had More Recognition?",{"depth":367,"slug":928,"text":929},"whats-your-favorite-song-of-all-time","What’s Your Favorite Song Of All Time?",{"depth":367,"slug":931,"text":932},"has-your-taste-of-music-evolved-over-the-years","Has Your Taste Of Music Evolved Over The Years?",[],{"title":891,"pubDate":935,"tags":936},"2/7/25",[894,895],"2025/music-blog-challenge.md","2025/being-your-own-online-curator",{"id":938,"data":940,"body":945,"filePath":946,"digest":947,"rendered":948,"legacyId":956},{"title":941,"pubDate":942,"tags":943},"Skip the Algorithm: Be Your Own Online Curator",["Date","2025-03-01T05:00:00.000Z"],[94,944,132],"Mindfulness","Ever since I started using Mastodon, I've become a lot more interested in reducing the presence of algorithmic content in my digital life. I've never been particularly thrilled with algorithmic feeds of content. I was among the people who was quite furious when Instagram ditched the chronological timeline, and then started inserting content from accounts I didn't even follow.\n\nSomewhere along the line, I think I just started accepting what I assumed was inevitable. I think I was probably naive, and didn't consider the ills – both social and psychological – that resulted algorithmically curated content. It was just an annoying thing that I just had to accept.\n\nMastodon reminded me that not only do things not have to be this way, but connecting with people more naturally online is, at least in my experience, a lot more meaningful. I can't tell you the name of a single person I interacted with on Twitter, but I will always remember the small number of infinitely more meaningful connections I've made on Mastodon. With the exception of a couple friends I made on Reddit during Covid lockdown, I don't think I really formed any memorable or meaningful connections online since the App.net days.\n\nNot too long after joining Mastodon I started using an RSS reader for my news once again, something I hadn't considered since the Google Reader days (RIP). It not only gave me the freedom to curate my news feed myself, picking the articles I found interesting or important rather than letting Google News spoon feed me what it thought I'd want to read, but it also got me to follow blogs again.\n\nMost recently, I decided to totally restructure how I consume YouTube content. At some point, probably around the time YouTube started prioritizing suggested content over subscriptions, I picked up the habit of just watching what they put in front of my face. I lost touch with a lot of cool creators whos content was meaningful for me. So I went through my subscriptions, added those channels' RSS feeds to my RSS reader of choice ([Reeder](https://reeder.app) if you're curious), and deleted my Google account. We'll see how it goes longer term, but for right now I couldn't be happier with my choice.\n\nBeing the curator of your own online experience is a bit more of a cognitive load at first, but I think the empowerment it provides is more than worth the initial investment. The connections and content you mindfully choose to engage with are far more meaningful and enriching than any algorithm that's designed to consume your attention for as long as possible.\n\nThere are no shortage of tools out there to help you curate your online experience. In addition to an RSS reader, check out independent Podcast clients (my personal favorite is [Overcast](https://overcast.fm)). If you're on Mastodon or Bluesky, follow hashtags for topics that interest you and join in on the conversation (and, of course, be kind when you do 🙂).","src/content/blog/2025/being-your-own-online-curator.md","3e0a218f763052a1",{"html":949,"metadata":950},"\u003Cp>Ever since I started using Mastodon, I’ve become a lot more interested in reducing the presence of algorithmic content in my digital life. I’ve never been particularly thrilled with algorithmic feeds of content. I was among the people who was quite furious when Instagram ditched the chronological timeline, and then started inserting content from accounts I didn’t even follow.\u003C/p>\n\u003Cp>Somewhere along the line, I think I just started accepting what I assumed was inevitable. I think I was probably naive, and didn’t consider the ills – both social and psychological – that resulted algorithmically curated content. It was just an annoying thing that I just had to accept.\u003C/p>\n\u003Cp>Mastodon reminded me that not only do things not have to be this way, but connecting with people more naturally online is, at least in my experience, a lot more meaningful. I can’t tell you the name of a single person I interacted with on Twitter, but I will always remember the small number of infinitely more meaningful connections I’ve made on Mastodon. With the exception of a couple friends I made on Reddit during Covid lockdown, I don’t think I really formed any memorable or meaningful connections online since the App.net days.\u003C/p>\n\u003Cp>Not too long after joining Mastodon I started using an RSS reader for my news once again, something I hadn’t considered since the Google Reader days (RIP). It not only gave me the freedom to curate my news feed myself, picking the articles I found interesting or important rather than letting Google News spoon feed me what it thought I’d want to read, but it also got me to follow blogs again.\u003C/p>\n\u003Cp>Most recently, I decided to totally restructure how I consume YouTube content. At some point, probably around the time YouTube started prioritizing suggested content over subscriptions, I picked up the habit of just watching what they put in front of my face. I lost touch with a lot of cool creators whos content was meaningful for me. So I went through my subscriptions, added those channels’ RSS feeds to my RSS reader of choice (\u003Ca href=\"https://reeder.app\">Reeder\u003C/a> if you’re curious), and deleted my Google account. We’ll see how it goes longer term, but for right now I couldn’t be happier with my choice.\u003C/p>\n\u003Cp>Being the curator of your own online experience is a bit more of a cognitive load at first, but I think the empowerment it provides is more than worth the initial investment. The connections and content you mindfully choose to engage with are far more meaningful and enriching than any algorithm that’s designed to consume your attention for as long as possible.\u003C/p>\n\u003Cp>There are no shortage of tools out there to help you curate your online experience. In addition to an RSS reader, check out independent Podcast clients (my personal favorite is \u003Ca href=\"https://overcast.fm\">Overcast\u003C/a>). If you’re on Mastodon or Bluesky, follow hashtags for topics that interest you and join in on the conversation (and, of course, be kind when you do 🙂).\u003C/p>",{"headings":951,"imagePaths":952,"frontmatter":953},[],[],{"title":941,"pubDate":954,"tags":955},"3/1/25",[94,944,132],"2025/being-your-own-online-curator.md"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json index 40fffa6..2a7fcfc 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,5 +1,5 @@ { "_variables": { - "lastUpdateCheck": 1739331457547 + "lastUpdateCheck": 1740622899949 } } \ No newline at end of file diff --git a/src/content/blog/2025/being-your-own-online-curator.md b/src/content/blog/2025/being-your-own-online-curator.md new file mode 100644 index 0000000..863f646 --- /dev/null +++ b/src/content/blog/2025/being-your-own-online-curator.md @@ -0,0 +1,18 @@ +--- +title: 'Skip the Algorithm: Be Your Own Online Curator' +pubDate: '3/1/25' +tags: ['Tech', 'Mindfulness', 'Apps'] +--- +Ever since I started using Mastodon, I've become a lot more interested in reducing the presence of algorithmic content in my digital life. I've never been particularly thrilled with algorithmic feeds of content. I was among the people who was quite furious when Instagram ditched the chronological timeline, and then started inserting content from accounts I didn't even follow. + +Somewhere along the line, I think I just started accepting what I assumed was inevitable. I think I was probably naive, and didn't consider the ills – both social and psychological – that resulted algorithmically curated content. It was just an annoying thing that I just had to accept. + +Mastodon reminded me that not only do things not have to be this way, but connecting with people more naturally online is, at least in my experience, a lot more meaningful. I can't tell you the name of a single person I interacted with on Twitter, but I will always remember the small number of infinitely more meaningful connections I've made on Mastodon. With the exception of a couple friends I made on Reddit during Covid lockdown, I don't think I really formed any memorable or meaningful connections online since the App.net days. + +Not too long after joining Mastodon I started using an RSS reader for my news once again, something I hadn't considered since the Google Reader days (RIP). It not only gave me the freedom to curate my news feed myself, picking the articles I found interesting or important rather than letting Google News spoon feed me what it thought I'd want to read, but it also got me to follow blogs again. + +Most recently, I decided to totally restructure how I consume YouTube content. At some point, probably around the time YouTube started prioritizing suggested content over subscriptions, I picked up the habit of just watching what they put in front of my face. I lost touch with a lot of cool creators whos content was meaningful for me. So I went through my subscriptions, added those channels' RSS feeds to my RSS reader of choice ([Reeder](https://reeder.app) if you're curious), and deleted my Google account. We'll see how it goes longer term, but for right now I couldn't be happier with my choice. + +Being the curator of your own online experience is a bit more of a cognitive load at first, but I think the empowerment it provides is more than worth the initial investment. The connections and content you mindfully choose to engage with are far more meaningful and enriching than any algorithm that's designed to consume your attention for as long as possible. + +There are no shortage of tools out there to help you curate your online experience. In addition to an RSS reader, check out independent Podcast clients (my personal favorite is [Overcast](https://overcast.fm)). If you're on Mastodon or Bluesky, follow hashtags for topics that interest you and join in on the conversation (and, of course, be kind when you do 🙂). diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index cca11f3..5bb41d6 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -21,7 +21,7 @@ const posts = await getCollection('blog'); { posts.length < 6 ? null : ( ) }