<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Hey I&apos;m Jay 👋</title><description>It&apos;s me. I&apos;m the problem.</description><link>https://heyjaywilson.com/</link><item><title>Hummingbird version 2 has been realesed! Now to update FindRelief&apos;s server to use the latest release</title><link>https://heyjaywilson.com/blog/2024/09/12-hummingbird-v2/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/09/12-hummingbird-v2/</guid><pubDate>Thu, 12 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/hummingbird-project/hummingbird&quot;&gt;Hummingbird&lt;/a&gt; version 2 has been &lt;a href=&quot;https://github.com/hummingbird-project/hummingbird/releases/tag/2.0.0&quot;&gt;realesed&lt;/a&gt;! Now to update FindRelief&apos;s server to use the latest release&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>Readme.md - How to work with Jay</title><link>https://heyjaywilson.com/blog/2023/11/01-readme/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/11/01-readme/</guid><pubDate>Mon, 13 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Quick facts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pronouns: He/Him&lt;/li&gt;
&lt;li&gt;Working hours: 8am - 5pm Central Time&lt;/li&gt;
&lt;li&gt;Current Role: iOS Developer&lt;/li&gt;
&lt;li&gt;Preferred communication tool: Work chat app&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Intro&lt;/h2&gt;
&lt;p&gt;I&apos;m Jay! I live in Austin, Texas with my wife. I have 3 pets, 🐶🐱🐱, that are all very needy and love being on Zoom. I like the Seattle Kraken hockey team and usually stay up way too late to watch the games. I spend a lot of free time making apps and working with tech I find interesting. When not doing that, my wife and I like to play board games and watch Top Chef reruns.&lt;/p&gt;
&lt;h2&gt;Role&lt;/h2&gt;
&lt;p&gt;I&apos;m an iOS Developer. I have a major strength in architecting SwiftUI apps using Core Data as the database. My focus is to make sure we ship a great iOS app that users enjoy using.&lt;/p&gt;
&lt;p&gt;I bring a lot of my past experience into this role. Before I dove into making apps full time, I was a product support/sales support specialist at &lt;a href=&quot;https://www.etcconnect.com/&quot;&gt;Electronic Theatre Controls&lt;/a&gt;. I did tech support and trained users how to use the products. This gave me a lot of sympathy for the end user and how to view products from their eyes. This also means I try to use a product like they would and not just how a developer or product person wants it to be used.&lt;/p&gt;
&lt;h2&gt;Working Style&lt;/h2&gt;
&lt;p&gt;I like to work &lt;em&gt;with&lt;/em&gt; people to make products. This means open collaboration and communication is something I want to happen as much as possible. I am very open to feedback of any kind.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My work style&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I like to collaborate to solve problems as quickly as possible but in a sustainable way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;My values&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Humans are first&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I like to know the people I work with and am genuinely interested in who you are as a person. If you want to get to know me, schedule a 1 on 1 or just message me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Always be Learning&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&apos;m always open to learning a new process, tool, or paradigm. I love learning and want to foster that with my teammates. I know that learning and applying new ideas will cause me to be wrong sometimes. I am great with being wrong so please don&apos;t be afraid to tell me. My favorite ways to receive feedback are found &lt;a href=&quot;#feedback&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Systems over goals&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I spent a lot of time trying to achieve goals in my personal life and have realized that hitting goals helps in the short term but to maintain success you need a good system.&lt;/p&gt;
&lt;p&gt;A good system is one that allows itself to be followed and iterated on overtime to work best for the people in the system.&lt;/p&gt;
&lt;p&gt;If working in a good system, each task that the system has setup should allow the goal to be hit fairly easily.&lt;/p&gt;
&lt;h3&gt;My strengths&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Making/adjusting systems&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As I mentioned above I like systems. I take time to learn and reflect on what is and isn&apos;t working on a larger level than just myself. I also like discussing what needs to be better.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Swift/SwiftUI architecture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&apos;ve been working with SwiftUI since it was announced and try to keep up with best practices as much as possible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iOS user expectations and experience&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I use iOS as my primary driver and a wide range of apps from indie built to instagram on a daily basis. I use apps that follow the &lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/&quot;&gt;HIG&lt;/a&gt; to a T and ones that break it or don&apos;t follow it. I bring a good balance of wanting to do right by the platform and user expectation.&lt;/p&gt;
&lt;h3&gt;My weaknesses&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Real time feedback&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I personally am not one that can handle confrontation or challenging ideas in the moment. I like to take time to think about what&apos;s being presented and collect my thoughts. This allows me to bring my best thoughts to the table. The issue with this is that sometimes there isn&apos;t a lot of time to do this. If you need my input faster, then please let me know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Getting to know people&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As much as I’m about people and getting to know each other, I’m really bad at initiating it. I’m really good at talking about work especially if I haven’t talked to you a lot outside of very focused meetings.&lt;/p&gt;
&lt;h3&gt;Working Together&lt;/h3&gt;
&lt;p&gt;What can you expect from me as a teammate?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Willingness to share ideas&lt;/li&gt;
&lt;li&gt;Trust that you know what you are doing&lt;/li&gt;
&lt;li&gt;Documentation when decisions are made&lt;/li&gt;
&lt;li&gt;Questions around clarity to make sure everyone is on the same page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What do I appreciate the most from teammates?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Openness to collaborating&lt;/li&gt;
&lt;li&gt;Challenge my idea/approach&lt;/li&gt;
&lt;li&gt;Feedback about how I can improve collaboration&lt;/li&gt;
&lt;li&gt;Questions around clarity to make sure everyone is on the same page&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;For my manager&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Expectations for my manager&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My manager is there to facilitate inter company relationships, manage team dynamics, and to make sure that I have what I need to complete my tasks/goals. My manager also cares about my personal goals and how those can benefit the company.&lt;/p&gt;
&lt;p&gt;I expect my manager to know the product strategy and to help guide the team towards that strategy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What my manager can expect from me&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I will always be a team player and do what&apos;s best for the team. I will give feedback on what&apos;s working/not working in our 1 on 1s or whenever asked.&lt;/p&gt;
&lt;h2&gt;Communication&lt;/h2&gt;
&lt;h3&gt;Channels&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Matrix/Slack/Teams&lt;/strong&gt;(work place chat app) - Most used form of communication. I keep this open all the time and it&apos;s the best way to get ahold of me&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zoom/Google Meets/Video platform&lt;/strong&gt; - I&apos;m always down for a quick video chat if you think it&apos;ll help solve the problem sooner or if you just want to say hi!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub/Notion/Google Docs/JIRA/Confluence&lt;/strong&gt;(Any application that can @ me) - I check these a few times a day and prefer having issue specific conversations there. Keep conversation close to where the issue was raised. If it bleeds into Matrix or email, then let&apos;s make sure to document where appropriate.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt; - Least used form of communication. I only check this once or twice a day&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Time&lt;/h3&gt;
&lt;p&gt;I work from &lt;strong&gt;8am Central to 5pm Central&lt;/strong&gt; Monday through Thursday. I usually have meetings in the morning and leave my mornings open for collaboration. I try to respect your working hours as much as possible as well, but if you see a message from me outside of your working hours, please feel the need to ignore until you are &amp;quot;clocked in.&amp;quot;&lt;/p&gt;
&lt;p&gt;Rough schedule:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mornings&lt;/strong&gt;: Meetings and collaboration time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;9:30am CT&lt;/strong&gt;: Break to feed the cats and take the dogs out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1pm CT&lt;/strong&gt;: Lunch time&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1:30pm CT&lt;/strong&gt;: Break to feed the dogs and cats and to take the dogs out&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Afternoons&lt;/strong&gt;: Heads down work like coding or complicated PRs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Feedback&lt;/h3&gt;
&lt;p&gt;Most feedback can be given publicly, and I always appreciate it. If there is feedback about something I&apos;m doing &lt;strong&gt;wrong&lt;/strong&gt;, please let me know privately though. My ideas can be challenged publicly but if it&apos;s an action I&apos;ve taken, that should be handled privately.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If I communicate outside your working hours, do not feel you need to respond right then. Working async and across timezones means communication happens when it happens.&lt;/li&gt;
&lt;li&gt;I&apos;m okay with teammates following me on any and all social media. Most places you can find me @heyjaywilson or my &lt;a href=&quot;https://instagram.com/justjaysnaps&quot;&gt;personal instagram&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Changelog&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;lt;span class=&amp;quot;font-mono&amp;quot;&amp;gt;2024-09-10&amp;lt;/span&amp;gt;: Update pets 😢&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;lt;span class=&amp;quot;font-mono&amp;quot;&amp;gt;2024-07-25&amp;lt;/span&amp;gt;: Starting a changelog. Adjusting time to be more specific that I leave mornings open for collaboration.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>What I take with me on a weekend away</title><link>https://heyjaywilson.com/blog/2024/09/09-weekend-away/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/09/09-weekend-away/</guid><pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
&lt;p&gt;Recently, I went on road trip to see my wife&apos;s family. I thought I&apos;d make a list of what I take in my backpack. There was no expectation of me doing any type of work. I thought I might need to do some task management and maybe want to take some photos/video so that&apos;s what I packed for.&lt;/p&gt;
&lt;p&gt;&amp;lt;blockquote class=&amp;quot;instagram-media&amp;quot; data-instgrm-captioned data-instgrm-permalink=&amp;quot;https://www.instagram.com/reel/C_srRJxAf3F/?utm_source=ig_embed&amp;amp;utm_campaign=loading&amp;quot; data-instgrm-version=&amp;quot;14&amp;quot; style=&amp;quot; background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;padding:16px;&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://www.instagram.com/reel/C_srRJxAf3F/?utm_source=ig_embed&amp;amp;utm_campaign=loading&amp;quot; style=&amp;quot; background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; display: flex; flex-direction: row; align-items: center;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot;background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;display: flex; flex-direction: column; flex-grow: 1; justify-content: center;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 19% 0;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;display:block; height:50px; margin:0 auto 12px; width:50px;&amp;quot;&amp;gt;&amp;lt;svg width=&amp;quot;50px&amp;quot; height=&amp;quot;50px&amp;quot; viewBox=&amp;quot;0 0 60 60&amp;quot; version=&amp;quot;1.1&amp;quot; xmlns=&amp;quot;https://www.w3.org/2000/svg&amp;quot; xmlns:xlink=&amp;quot;https://www.w3.org/1999/xlink&amp;quot;&amp;gt;&amp;lt;g stroke=&amp;quot;none&amp;quot; stroke-width=&amp;quot;1&amp;quot; fill=&amp;quot;none&amp;quot; fill-rule=&amp;quot;evenodd&amp;quot;&amp;gt;&amp;lt;g transform=&amp;quot;translate(-511.000000, -20.000000)&amp;quot; fill=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;g&amp;gt;&amp;lt;path d=&amp;quot;M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;&amp;lt;/g&amp;gt;&amp;lt;/g&amp;gt;&amp;lt;/g&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding-top: 8px;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;&amp;quot;&amp;gt;View this post on Instagram&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 12.5% 0;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;&amp;quot;&amp;gt;&amp;lt;div&amp;gt; &amp;lt;div style=&amp;quot;background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-left: 8px;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;margin-left: auto;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot;display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;p style=&amp;quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.instagram.com/reel/C_srRJxAf3F/?utm_source=ig_embed&amp;amp;utm_campaign=loading&amp;quot; style=&amp;quot; color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;A post shared by Jay (@heyjaywilson)&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/blockquote&amp;gt;
&amp;lt;script async src=&amp;quot;//www.instagram.com/embed.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;h2&gt;The Bag&lt;/h2&gt;
&lt;p&gt;The bag I use is the &lt;a href=&quot;https://shareasale.com/r.cfm?b=1361905&amp;amp;u=3088014&amp;amp;m=79898&amp;amp;urllink=&amp;amp;afftrack=&quot;&gt;Wandrd PRVKE&lt;/a&gt; 21L. I also have this bag in the 31L size, and I really like it. The organization is great and there&apos;s a lot of space.&lt;/p&gt;
&lt;h2&gt;Gear&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/3ZgE1Ko&quot;&gt;iPad Pro M4 13&amp;quot;&lt;/a&gt; with &lt;a href=&quot;https://amzn.to/47r8RCk&quot;&gt;Apple Pencil Pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Camera: &lt;a href=&quot;https://amzn.to/3ZegsBV&quot;&gt;RX100v&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Camera: &lt;a href=&quot;https://amzn.to/4gkOWZC&quot;&gt;Sonvy ZVE-1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AirPods Pro&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Power&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Anker braided &lt;a href=&quot;https://amzn.to/4d4mPeq&quot;&gt;USB C cables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Anker &lt;a href=&quot;https://amzn.to/4d2Ukh8&quot;&gt;525 charging station&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Anker &lt;a href=&quot;https://amzn.to/4dUv6mw&quot;&gt;3 in 1 power cube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Altoids can with headache medicine&lt;/li&gt;
&lt;li&gt;USB C memory card reader&lt;/li&gt;
&lt;li&gt;USB C hard drive&lt;/li&gt;
&lt;li&gt;MagSafe battery charger&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>FindRelief - Project Log 3</title><link>https://heyjaywilson.com/blog/2024/09/01-find-relief/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/09/01-find-relief/</guid><pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;What I accomplished this week&lt;/h2&gt;
&lt;p&gt;I didn&apos;t do too much this week, but I did settle on how the lists of places will look. I usually design in code cause it&apos;s easier and quicker, but this was not one of those times. I have a lot of information I want to present in each row, so I decided to turn to work in Sketch and figure out what it should look like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./01-images/sketch.png&quot; alt=&quot;Two designs&quot;&gt;&lt;/p&gt;
&lt;p&gt;There are 3 states here.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Add a place&lt;/strong&gt;. It doesn&apos;t exist in my database. This is Target in the screenshot. It has the the &lt;code&gt;+&lt;/code&gt; sign.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not selected place&lt;/strong&gt;. It exists in my database, but the user has not selected it to get more info. It&apos;s a lot of icons in the top row, but that&apos;s okay. The user can also upvote/downvote and update the location.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selected place&lt;/strong&gt;. It exists in my database, and the user has selected it. This is Houndstooth in the design on the right. It explains the icons and what the location has restroom wise. The user still has access to upvote/downvote and edit.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Again, these are all designs and my intentions. Here&apos;s what I ended up with in SwiftUI previews.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./01-images/preview.png&quot; alt=&quot;What I ended up coding&quot;&gt;&lt;/p&gt;
&lt;p&gt;The key differences is the size of the arrows, the number of upvotes and downvotes, and the edit button is gone. I made the choice to remove the edit button and replace it with either a swipe action or a context menu, since I don&apos;t think it will be used too often and it wasn&apos;t a crazy thought since &lt;a href=&quot;https://www.threads.net/@steve228uk&quot;&gt;@steve228uk&lt;/a&gt; suggested it on my &lt;a href=&quot;https://www.threads.net/@steve228uk/post/C_V5B7UtLb5?xmt=AQGzJhNNJbxi4nSc08lLiySJEfJ8uMEKAk-7pHkpK8gb1A&quot;&gt;threads post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;What&apos;s next?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Update the data and get the view to adjust in real time. This might take some actual work since I don&apos;t think I really built this in a way to respond to the data like that&lt;/li&gt;
&lt;li&gt;Update the server to retrieve the data&lt;/li&gt;
&lt;li&gt;Update the server to edit for specific properties like upvoting/downvoting&lt;/li&gt;
&lt;li&gt;Implement favorites. Which I think will be the paid part of this app. A small yearly subscription to help cover server costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Will I meet the Ship-a-ton deadline?&lt;/h2&gt;
&lt;p&gt;I don&apos;t think I will and that&apos;s okay. I&apos;ll keep working and trying to though and see how close I get.&lt;/p&gt;
&lt;h2&gt;Previous Dev Logs for FindRelief&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2024/08/13-ship-a-ton&quot;&gt;Log 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/2024/08/16-ship-a-ton-log-2&quot;&gt;Log 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>well the second week of September is already full</title><link>https://heyjaywilson.com/blog/2024/08/27-full-september/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/27-full-september/</guid><pubDate>Tue, 27 Aug 2024 08:22:00 GMT</pubDate><content:encoded>&lt;p&gt;Well the second week of September is already full:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sept 9th Apple Event&lt;/li&gt;
&lt;li&gt;Sept 10th Pres debate&lt;/li&gt;
&lt;li&gt;Sept 11th VMAs&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>FindRelief - Project Log 2</title><link>https://heyjaywilson.com/blog/2024/08/16-ship-a-ton-log-2/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/16-ship-a-ton-log-2/</guid><pubDate>Sun, 25 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;What I accomplished since &lt;a href=&quot;13-ship-a-ton&quot;&gt;Log 1&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Setup dev vs prod builds using XCConfig files, which I wrote a &lt;a href=&quot;https://heyjaywilson.com/blog/2024/08/18-run-different-builds/&quot;&gt;blog post&lt;/a&gt; for
&lt;img src=&quot;https://share.heyjay.lol/grcTztNoQgy8.png&quot; alt=&quot;Screen shot of both production and dev icons from the simulator&quot;&gt;&lt;/li&gt;
&lt;li&gt;Started using packages due to some reason the previews not working in the Xcode project
&lt;ul&gt;
&lt;li&gt;I should&apos;ve really figured this issue out, but I decided to not worry about it and keep building&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Searching for a place based on a region in a user’s map&lt;/li&gt;
&lt;li&gt;Figure out how to use a Swift Actor to manage the search service
&lt;ul&gt;
&lt;li&gt;I need to still dive into Swift Concurrency a lot more&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Create a route to add a place on the server&lt;/li&gt;
&lt;li&gt;Allow a user to Add a Place from the app&lt;/li&gt;
&lt;li&gt;Create a &lt;a href=&quot;https://lnk.heyjay.coffee/find-relief-trello&quot;&gt;Trello board&lt;/a&gt; to track tasks and any features/feedback that people might have from seeing various posts on the internet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&apos;s a couple posts on social media I made while &lt;s&gt;struggling&lt;/s&gt; building the app.&lt;/p&gt;
&lt;p&gt;&amp;lt;iframe src=&amp;quot;https://iosdev.space/@heyjaywilson/113024316456128907/embed&amp;quot; class=&amp;quot;mastodon-embed&amp;quot; style=&amp;quot;max-width: 100%; border: 0&amp;quot; width=&amp;quot;400&amp;quot; allowfullscreen=&amp;quot;allowfullscreen&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&amp;lt;script src=&amp;quot;https://iosdev.space/embed.js&amp;quot; async=&amp;quot;async&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;blockquote class=&amp;quot;text-post-media&amp;quot; data-text-post-permalink=&amp;quot;https://www.threads.net/@heyjaywilson/post/C_GXSCPxrGG&amp;quot; data-text-post-version=&amp;quot;0&amp;quot; id=&amp;quot;ig-tp-C_GXSCPxrGG&amp;quot; style=&amp;quot; background:#FFF; border-width: 1px; border-style: solid; border-color: #00000026; border-radius: 16px; max-width:540px; margin: 1px; min-width:270px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://www.threads.net/@heyjaywilson/post/C_GXSCPxrGG&amp;quot; style=&amp;quot; background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%; font-family: -apple-system, BlinkMacSystemFont, sans-serif;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; padding: 40px; display: flex; flex-direction: column; align-items: center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot; display:block; height:32px; width:32px; padding-bottom:20px;&amp;quot;&amp;gt; &amp;lt;svg aria-label=&amp;quot;Threads&amp;quot; height=&amp;quot;32px&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 192 192&amp;quot; width=&amp;quot;32px&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&amp;gt; &amp;lt;path d=&amp;quot;M141.537 88.9883C140.71 88.5919 139.87 88.2104 139.019 87.8451C137.537 60.5382 122.616 44.905 97.5619 44.745C97.4484 44.7443 97.3355 44.7443 97.222 44.7443C82.2364 44.7443 69.7731 51.1409 62.102 62.7807L75.881 72.2328C81.6116 63.5383 90.6052 61.6848 97.2286 61.6848C97.3051 61.6848 97.3819 61.6848 97.4576 61.6855C105.707 61.7381 111.932 64.1366 115.961 68.814C118.893 72.2193 120.854 76.925 121.825 82.8638C114.511 81.6207 106.601 81.2385 98.145 81.7233C74.3247 83.0954 59.0111 96.9879 60.0396 116.292C60.5615 126.084 65.4397 134.508 73.775 140.011C80.8224 144.663 89.899 146.938 99.3323 146.423C111.79 145.74 121.563 140.987 128.381 132.296C133.559 125.696 136.834 117.143 138.28 106.366C144.217 109.949 148.617 114.664 151.047 120.332C155.179 129.967 155.42 145.8 142.501 158.708C131.182 170.016 117.576 174.908 97.0135 175.059C74.2042 174.89 56.9538 167.575 45.7381 153.317C35.2355 139.966 29.8077 120.682 29.6052 96C29.8077 71.3178 35.2355 52.0336 45.7381 38.6827C56.9538 24.4249 74.2039 17.11 97.0132 16.9405C119.988 17.1113 137.539 24.4614 149.184 38.788C154.894 45.8136 159.199 54.6488 162.037 64.9503L178.184 60.6422C174.744 47.9622 169.331 37.0357 161.965 27.974C147.036 9.60668 125.202 0.195148 97.0695 0H96.9569C68.8816 0.19447 47.2921 9.6418 32.7883 28.0793C19.8819 44.4864 13.2244 67.3157 13.0007 95.9325L13 96L13.0007 96.0675C13.2244 124.684 19.8819 147.514 32.7883 163.921C47.2921 182.358 68.8816 191.806 96.9569 192H97.0695C122.03 191.827 139.624 185.292 154.118 170.811C173.081 151.866 172.51 128.119 166.26 113.541C161.776 103.087 153.227 94.5962 141.537 88.9883ZM98.4405 129.507C88.0005 130.095 77.1544 125.409 76.6196 115.372C76.2232 107.93 81.9158 99.626 99.0812 98.6368C101.047 98.5234 102.976 98.468 104.871 98.468C111.106 98.468 116.939 99.0737 122.242 100.233C120.264 124.935 108.662 128.946 98.4405 129.507Z&amp;quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #999999; font-weight: 400; padding-bottom: 4px; &amp;quot;&amp;gt; Post by @heyjaywilson&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #000000; font-weight: 600; &amp;quot;&amp;gt; View on Threads&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/blockquote&amp;gt;
&amp;lt;script async src=&amp;quot;https://www.threads.net/embed.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;blockquote class=&amp;quot;text-post-media&amp;quot; data-text-post-permalink=&amp;quot;https://www.threads.net/@heyjaywilson/post/C_BPDOlRzJ1&amp;quot; data-text-post-version=&amp;quot;0&amp;quot; id=&amp;quot;ig-tp-C_BPDOlRzJ1&amp;quot; style=&amp;quot; background:#FFF; border-width: 1px; border-style: solid; border-color: #00000026; border-radius: 16px; max-width:540px; margin: 1px; min-width:270px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://www.threads.net/@heyjaywilson/post/C_BPDOlRzJ1&amp;quot; style=&amp;quot; background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%; font-family: -apple-system, BlinkMacSystemFont, sans-serif;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; padding: 40px; display: flex; flex-direction: column; align-items: center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot; display:block; height:32px; width:32px; padding-bottom:20px;&amp;quot;&amp;gt; &amp;lt;svg aria-label=&amp;quot;Threads&amp;quot; height=&amp;quot;32px&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 192 192&amp;quot; width=&amp;quot;32px&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&amp;gt; &amp;lt;path d=&amp;quot;M141.537 88.9883C140.71 88.5919 139.87 88.2104 139.019 87.8451C137.537 60.5382 122.616 44.905 97.5619 44.745C97.4484 44.7443 97.3355 44.7443 97.222 44.7443C82.2364 44.7443 69.7731 51.1409 62.102 62.7807L75.881 72.2328C81.6116 63.5383 90.6052 61.6848 97.2286 61.6848C97.3051 61.6848 97.3819 61.6848 97.4576 61.6855C105.707 61.7381 111.932 64.1366 115.961 68.814C118.893 72.2193 120.854 76.925 121.825 82.8638C114.511 81.6207 106.601 81.2385 98.145 81.7233C74.3247 83.0954 59.0111 96.9879 60.0396 116.292C60.5615 126.084 65.4397 134.508 73.775 140.011C80.8224 144.663 89.899 146.938 99.3323 146.423C111.79 145.74 121.563 140.987 128.381 132.296C133.559 125.696 136.834 117.143 138.28 106.366C144.217 109.949 148.617 114.664 151.047 120.332C155.179 129.967 155.42 145.8 142.501 158.708C131.182 170.016 117.576 174.908 97.0135 175.059C74.2042 174.89 56.9538 167.575 45.7381 153.317C35.2355 139.966 29.8077 120.682 29.6052 96C29.8077 71.3178 35.2355 52.0336 45.7381 38.6827C56.9538 24.4249 74.2039 17.11 97.0132 16.9405C119.988 17.1113 137.539 24.4614 149.184 38.788C154.894 45.8136 159.199 54.6488 162.037 64.9503L178.184 60.6422C174.744 47.9622 169.331 37.0357 161.965 27.974C147.036 9.60668 125.202 0.195148 97.0695 0H96.9569C68.8816 0.19447 47.2921 9.6418 32.7883 28.0793C19.8819 44.4864 13.2244 67.3157 13.0007 95.9325L13 96L13.0007 96.0675C13.2244 124.684 19.8819 147.514 32.7883 163.921C47.2921 182.358 68.8816 191.806 96.9569 192H97.0695C122.03 191.827 139.624 185.292 154.118 170.811C173.081 151.866 172.51 128.119 166.26 113.541C161.776 103.087 153.227 94.5962 141.537 88.9883ZM98.4405 129.507C88.0005 130.095 77.1544 125.409 76.6196 115.372C76.2232 107.93 81.9158 99.626 99.0812 98.6368C101.047 98.5234 102.976 98.468 104.871 98.468C111.106 98.468 116.939 99.0737 122.242 100.233C120.264 124.935 108.662 128.946 98.4405 129.507Z&amp;quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #999999; font-weight: 400; padding-bottom: 4px; &amp;quot;&amp;gt; Post by @heyjaywilson&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #000000; font-weight: 600; &amp;quot;&amp;gt; View on Threads&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;blockquote class=&amp;quot;text-post-media&amp;quot; data-text-post-permalink=&amp;quot;https://www.threads.net/@heyjaywilson/post/C-sP60wRjiR&amp;quot; data-text-post-version=&amp;quot;0&amp;quot; id=&amp;quot;ig-tp-C-sP60wRjiR&amp;quot; style=&amp;quot; background:#FFF; border-width: 1px; border-style: solid; border-color: #00000026; border-radius: 16px; max-width:540px; margin: 1px; min-width:270px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);&amp;quot;&amp;gt; &amp;lt;a href=&amp;quot;https://www.threads.net/@heyjaywilson/post/C-sP60wRjiR&amp;quot; style=&amp;quot; background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%; font-family: -apple-system, BlinkMacSystemFont, sans-serif;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; &amp;lt;div style=&amp;quot; padding: 40px; display: flex; flex-direction: column; align-items: center;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot; display:block; height:32px; width:32px; padding-bottom:20px;&amp;quot;&amp;gt; &amp;lt;svg aria-label=&amp;quot;Threads&amp;quot; height=&amp;quot;32px&amp;quot; role=&amp;quot;img&amp;quot; viewBox=&amp;quot;0 0 192 192&amp;quot; width=&amp;quot;32px&amp;quot; xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&amp;gt; &amp;lt;path d=&amp;quot;M141.537 88.9883C140.71 88.5919 139.87 88.2104 139.019 87.8451C137.537 60.5382 122.616 44.905 97.5619 44.745C97.4484 44.7443 97.3355 44.7443 97.222 44.7443C82.2364 44.7443 69.7731 51.1409 62.102 62.7807L75.881 72.2328C81.6116 63.5383 90.6052 61.6848 97.2286 61.6848C97.3051 61.6848 97.3819 61.6848 97.4576 61.6855C105.707 61.7381 111.932 64.1366 115.961 68.814C118.893 72.2193 120.854 76.925 121.825 82.8638C114.511 81.6207 106.601 81.2385 98.145 81.7233C74.3247 83.0954 59.0111 96.9879 60.0396 116.292C60.5615 126.084 65.4397 134.508 73.775 140.011C80.8224 144.663 89.899 146.938 99.3323 146.423C111.79 145.74 121.563 140.987 128.381 132.296C133.559 125.696 136.834 117.143 138.28 106.366C144.217 109.949 148.617 114.664 151.047 120.332C155.179 129.967 155.42 145.8 142.501 158.708C131.182 170.016 117.576 174.908 97.0135 175.059C74.2042 174.89 56.9538 167.575 45.7381 153.317C35.2355 139.966 29.8077 120.682 29.6052 96C29.8077 71.3178 35.2355 52.0336 45.7381 38.6827C56.9538 24.4249 74.2039 17.11 97.0132 16.9405C119.988 17.1113 137.539 24.4614 149.184 38.788C154.894 45.8136 159.199 54.6488 162.037 64.9503L178.184 60.6422C174.744 47.9622 169.331 37.0357 161.965 27.974C147.036 9.60668 125.202 0.195148 97.0695 0H96.9569C68.8816 0.19447 47.2921 9.6418 32.7883 28.0793C19.8819 44.4864 13.2244 67.3157 13.0007 95.9325L13 96L13.0007 96.0675C13.2244 124.684 19.8819 147.514 32.7883 163.921C47.2921 182.358 68.8816 191.806 96.9569 192H97.0695C122.03 191.827 139.624 185.292 154.118 170.811C173.081 151.866 172.51 128.119 166.26 113.541C161.776 103.087 153.227 94.5962 141.537 88.9883ZM98.4405 129.507C88.0005 130.095 77.1544 125.409 76.6196 115.372C76.2232 107.93 81.9158 99.626 99.0812 98.6368C101.047 98.5234 102.976 98.468 104.871 98.468C111.106 98.468 116.939 99.0737 122.242 100.233C120.264 124.935 108.662 128.946 98.4405 129.507Z&amp;quot; /&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #999999; font-weight: 400; padding-bottom: 4px; &amp;quot;&amp;gt; Post by @heyjaywilson&amp;lt;/div&amp;gt; &amp;lt;div style=&amp;quot; font-size: 15px; line-height: 21px; color: #000000; font-weight: 600; &amp;quot;&amp;gt; View on Threads&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Use Xcode Build Configuration files to pass values into your app</title><link>https://heyjaywilson.com/blog/2024/08/18-run-different-builds/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/18-run-different-builds/</guid><pubDate>Sun, 18 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Xcode build configuration files, these end in &lt;code&gt;.xcconfig&lt;/code&gt;, is another place to configure Xcode Build settings. The values set in here can be referenced in the project file. This article is going to show you how to set that up by configuring different bundle IDs and app icons. I&apos;ll also show how to access these values in code so that you can use it to define different API endpoints.&lt;/p&gt;
&lt;p&gt;I have a sample project on my &lt;a href=&quot;https://github.com/heyjaywilson/config-file-tutorial&quot;&gt;GitHub&lt;/a&gt; that shows the basics of how to use the config files.&lt;/p&gt;
&lt;h2&gt;What are Xcode Configuration Files&lt;/h2&gt;
&lt;p&gt;These files are text files that can be used to set your configurations (Debug and Release are included in iOS App projects) and allow you to access values based on the configuration selected.&lt;/p&gt;
&lt;p&gt;The file is basically a bunch of keys (variable names) and values that will align to build settings. If you choose a key of a build setting, like &lt;code&gt;PRODUCT_BUNDLE_IDENTIFIER&lt;/code&gt; it will overwrite that value in the Target settings since that value is looking for that build setting.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;!--[!TIP] --&amp;gt;
You can know if a parameter in Build Settings is looking for a key because it&apos;s value will look like this &lt;code&gt;$(SOME_VALUE)&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;How to add a configuration file&lt;/h2&gt;
&lt;p&gt;I do this by right clicking on the folder I want to store these in, choosing &lt;code&gt;New File from Template&lt;/code&gt;, and then choosing from &lt;code&gt;Configuration Settings File&lt;/code&gt;. It&apos;s selected in the screenshot below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./18-images/configuration_settings_template_chooser.png&quot; alt=&quot;Screenshot of template chooser&quot;&gt;&lt;/p&gt;
&lt;p&gt;When you make a new Configuration Settings File, there is a nifty comment so you can easily get more info&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;.xcconfig&lt;/code&gt; file should not have a target. So let&apos;s remove the target membership from the file.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the inspector&lt;/li&gt;
&lt;li&gt;Select the App from the Target Membership section&lt;/li&gt;
&lt;li&gt;Hit delete on your keyboard or tap on the &lt;code&gt;-&lt;/code&gt; button&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Setup the project to look at build files&lt;/h3&gt;
&lt;p&gt;Open the project settings by selecting the top level project name.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./18-images/info-configs.png&quot; alt=&quot;Info configuration options&quot;&gt;&lt;/p&gt;
&lt;p&gt;To assign the build settings file to the configurations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Under the configuration choose the Project name that way it can be passed down to the targets in the project.&lt;/li&gt;
&lt;li&gt;Where it says None, click there and choose the proper file&lt;/li&gt;
&lt;li&gt;Repeat as needed for the remaining configurations&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Using the Config file&lt;/h2&gt;
&lt;h3&gt;Configure the bundle identifier&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier&quot;&gt;bundle identifier&lt;/a&gt; is used to distinguish apps on the system. It must be unique and is usually in a reverse DNS format, example &lt;code&gt;com.heyjaycodes.{App_Name}&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Config file&lt;/h4&gt;
&lt;p&gt;To run a dev, beta, and production version of the app on the same device you must have unique bundle identifiers for each configuration, so in the proper config file, you want to add something like the following&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Developer product identifier
PRODUCT_BUNDLE_IDENTIFIER = com.heyjaycodes.SampleApp.dev
// Beta product identifier
PRODUCT_BUNDLE_IDENTIFIER = com.heyjaycodes.SampleApp.beta
// Release product identifier
PRODUCT_BUNDLE_IDENTIFIER = com.heyjaycodes.SampleApp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let me break down how this works.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PRODUCT_BUNDLE_IDENTIFIER&lt;/code&gt; is the variable that you&apos;ll reference in the code or project file.
&lt;code&gt;com.heyjaycodes.SampleApp.dev&lt;/code&gt; is the value that&apos;s assigned to the variable.&lt;/p&gt;
&lt;p&gt;That&apos;s a lot of repeating so you can also create a xcconfig file that holds common values and reference that in other xcconfig files. I like to call this file &lt;code&gt;Common&lt;/code&gt;. I use it store pre fixes and suffixes.&lt;/p&gt;
&lt;p&gt;If you go this route, you must include it in the file you want to reference it in using `#include file.xcconfig&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// COMMON
PRODUCT_BUNDLE_IDENTIFIER_PREFIX = com.heyjaycodes.SampleApp
////////////////
//
// Developer file
#include &amp;quot;Common.xcconfig&amp;quot;

PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER_PREFIX).dev
////////////////
//
// Beta file
#include &amp;quot;Common.xcconfig&amp;quot;

PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER_PREFIX).beta
////////////////
//
// Release product file
#include &amp;quot;Common.xcconfig&amp;quot;

PRODUCT_BUNDLE_IDENTIFIER = $(PRODUCT_BUNDLE_IDENTIFIER_PREFIX)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configure App Icon&lt;/h3&gt;
&lt;p&gt;To configure different app icons, this takes a bit more work, but on the configuration side, you need to add a key for the app icon string and then set the value in the target&apos;s settings to that key.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// COMMON
APP_ICON_PREFIX = AppIcon
////////////////
//
// Developer file
#include &amp;quot;Common.xcconfig&amp;quot;

APP_ICON = $(APP_ICON_PREFIX)-Dev
////////////////
//
// Beta file
#include &amp;quot;Common.xcconfig&amp;quot;

APP_ICON = $(APP_ICON_PREFIX)-Beta
////////////////
//
// Release product file
#include &amp;quot;Common.xcconfig&amp;quot;

APP_ICON = $(APP_ICON_PREFIX)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value in the configuration values must match what&apos;s in the &lt;code&gt;Assets&lt;/code&gt; file. In this example all of my app icons begin with AppIcon and then there is a suffix.&lt;/p&gt;
&lt;p&gt;Now, go to the Target settings and search for App Icon in the Build Settings. You&apos;ll see a result for &lt;code&gt;Primary App Icon Set Name&lt;/code&gt;. Change that value to &lt;code&gt;$(APP_ICON)&lt;/code&gt; and once you hit Enter, you&apos;ll see that value change to &lt;code&gt;AppIcon-Dev&lt;/code&gt;. If you double click on the value you&apos;ll see that it&apos;s still set to &lt;code&gt;$(APP_ICON)&lt;/code&gt;. Xcode is just passing the value from the configuration file.&lt;/p&gt;
&lt;h2&gt;Accessing values outside the configuration file&lt;/h2&gt;
&lt;p&gt;This file can also be really useful for setting variables that need to be different in the file like different servers and apis based on dev vs prod. There&apos;s one more step besides declaring those values in your file. You must also expose those files through the Info.plist.&lt;/p&gt;
&lt;p&gt;Here&apos;s the value in my XCConfig file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;API_HOST_NAME = sampleappserver.heyjaycodes.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In Info.plist, I need to add a new entry called &lt;code&gt;API_HOST_NAME&lt;/code&gt; and reference the xcconfig file by &lt;code&gt;$(API_HOST_NAME)&lt;/code&gt;. That might make a new Info.plist file, which is fine.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./18-images/info-plist.png&quot; alt=&quot;Info.plist entry&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now in code, you can access that host name by the following Swift code&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;guard let hostName = Bundle.main.object(forInfoDictionaryKey: &amp;quot;API_HOST_NAME&amp;quot;) as? String else {
  print(&amp;quot;🚨 NO HOST NAME SET IN Info.plist&amp;quot;)
  return
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also be a bit fancier and create a helper, but I&apos;m not going to dive into that here. You can see that on &lt;a href=&quot;https://nshipster.com/xcconfig/#accessing-build-settings-from-swift&quot;&gt;NSHipster.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Additional Resources:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nshipster.com/xcconfig/#accessing-build-settings-from-swift&quot;&gt;NSHipster.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://help.apple.com/xcode/mac/11.4/#/dev745c5c974&quot;&gt;Apple documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>How to get the current MKCoordinateRegion from a MapCameraPosition</title><link>https://heyjaywilson.com/blog/2024/08/14-null-region-from-camera/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/14-null-region-from-camera/</guid><pubDate>Thu, 15 Aug 2024 07:49:00 GMT</pubDate><content:encoded>&lt;p&gt;Goal to achieve: Get the &lt;code&gt;MKCoordinateRegion&lt;/code&gt; of the map I&apos;m looking at.&lt;/p&gt;
&lt;p&gt;What I tried and did not work:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;struct MapSearchView: View {
	@State private var position = MapCameraPosition.automatic
	@State private var mapRegion: MKCoordinateRegion = .init()

	var body: some View {
		Map(position: $position)
		.onChange(of: position) {
			print(position.region)
		}
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This would always print &lt;code&gt;nil&lt;/code&gt; even though it&apos;s supposed to be the current region.&lt;/p&gt;
&lt;p&gt;What I ended up getting to work:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;struct MapSearchView: View {
	@State private var position = MapCameraPosition.automatic
	@State private var mapRegion: MKCoordinateRegion = .init()

	var body: some View {
		Map(position: $position)
		.onMapCameraChange { mapCameraUpdateContext in
			mapRegion = mapCameraUpdateContext.region
		}
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I had to use the specific &lt;code&gt;onMapCameraChange&lt;/code&gt; to get the region and then update a state variable. I can then use that however I want.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Why does Xcode need to block me from doing anything while copying shared cache? It takes just enough time that I also get distracted...</title><link>https://heyjaywilson.com/blog/2024/08/14-why-does-xcode-block/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/14-why-does-xcode-block/</guid><pubDate>Thu, 15 Aug 2024 07:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Why does Xcode need to block me from doing anything while copying shared cache? It takes just enough time that I also get distracted...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://share.heyjay.lol/NWGKVHfKPF2u.png&quot; alt=&quot;Screenshot of xcode copying cache symbols&quot;&gt;&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>FindRelief - Project Log 1</title><link>https://heyjaywilson.com/blog/2024/08/13-ship-a-ton/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/08/13-ship-a-ton/</guid><pubDate>Wed, 14 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m starting this log to help hold myself accountable and to build in public. I&apos;m a big proponent of building in public, and I started this project by being quiet about it. The reason for that was cause I needed to see if I could actually do a lot of what I wanted to, and I can so now it&apos;s time to introduce it and start a log.&lt;/p&gt;
&lt;h2&gt;What is FindRelief?&lt;/h2&gt;
&lt;p&gt;It&apos;s a restroom finder that has an emphasis on what type of restrooms are available. Being trans, I need to find restrooms that are safe for me to use and usually that means a family or gendered neutral restroom so I decided to make an app for that. This data will be self reported by users (or just me).&lt;/p&gt;
&lt;h2&gt;What&apos;s the tech stack?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iOS App&lt;/strong&gt;: Written in SwiftUI. When I need local storage, then I&apos;ll probably lean on SwiftData, but I might actually use &lt;a href=&quot;https://github.com/mergesort/Boutique&quot;&gt;Boutique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Map data&lt;/strong&gt; is provided by MapKit since there&apos;s web data available if I decide to expand this app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User authentication&lt;/strong&gt; is handled with &lt;a href=&quot;https://clerk.com/&quot;&gt;Clerk&lt;/a&gt;. I&apos;ve seen this pop up in the web dev world lately and their iOS SDK is in early beta, so I figured why not try it. If it fails, I can pull in another auth platform, but so far it&apos;s been relatively easy to use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt; is a dynamodb table. I&apos;m using a single table design. I wanted something quick and easy. Will see how that goes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server&lt;/strong&gt; is written in Swift using the &lt;a href=&quot;https://github.com/hummingbird-project/hummingbird&quot;&gt;Hummingbird framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&apos;s been done so far?&lt;/h2&gt;
&lt;p&gt;I&apos;m building both parts of the app at the same time, so that areas of the server are built as I&apos;m working on that area in the iOS app.&lt;/p&gt;
&lt;h3&gt;Server side&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Created an access pattern, entity relationship diagrams, and entity charts&lt;/li&gt;
&lt;li&gt;Create a user&lt;/li&gt;
&lt;li&gt;delete a user&lt;/li&gt;
&lt;li&gt;get a specific user&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As I mentioned, Clerk handles user auth, but I need to be able to associate a user in the database with updates and places created, so I wanted my own record of ids, dateCreated, and usernames. I also want to be able to store how many updates a user makes (future thinking here about a user&apos;s reputation on the app), so I needed a place to store that. Here&apos;s the data I think I need about a user so far:&lt;/p&gt;
&lt;p&gt;&amp;lt;pre class=&amp;quot;mermaid&amp;quot;&amp;gt;
erDiagram
User {
string userid
string username
string createdAt
string updatesAt
int numberOfUpdates
}
&amp;lt;/pre&amp;gt;&lt;/p&gt;
&lt;h3&gt;App Side&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Implement account creation&lt;/li&gt;
&lt;li&gt;Implement account deletion (requirement by apple)&lt;/li&gt;
&lt;li&gt;Implement account sign out&lt;/li&gt;
&lt;li&gt;Started searching for places&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./13-images/search-map.png&quot; alt=&quot;Map with annotations&quot;&gt;&lt;/p&gt;
&lt;h2&gt;What&apos;s next?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tapping on a place on the map will bring up details about that locations restroom&lt;/li&gt;
&lt;li&gt;The details for a location will appear in search results&lt;/li&gt;
&lt;li&gt;Store the locations details in DynamoDB&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Been using VSCode for some swift stuff and not having to deal with the package.resolved always changing is 🔥</title><link>https://heyjaywilson.com/blog/2024/07/12-vscode-love/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/07/12-vscode-love/</guid><pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Been using VSCode for some swift stuff and not having to deal with the package.resolved always changing is 🔥&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>How to access custom headers in Hummingbird 2</title><link>https://heyjaywilson.com/blog/2024/07/customheadershummingbird/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/07/customheadershummingbird/</guid><pubDate>Mon, 08 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/hummingbird-project/hummingbird?tab=readme-ov-file&quot;&gt;Hummingbird&lt;/a&gt; is a server framework written in Swift. I&apos;m using it at work and for a few personal projects. It&apos;s small and quick to build, so it checks the boxes for what I&apos;m trying to do.&lt;/p&gt;
&lt;p&gt;The Hummingbird project is quickly moving to v2.0 (as of writing this RC 2 is out 🎉), and that brought a change with accessing custom headers.
In v1 it looked something like &lt;code&gt;request.headers[&amp;quot;custom-header-name&amp;quot;]&lt;/code&gt;. In v2 it now requires a bit more work thanks to the reliance on &lt;a href=&quot;https://github.com/apple/swift-http-types&quot;&gt;&lt;code&gt;Swift-HTTP-Types&lt;/code&gt;&lt;/a&gt;, but ultimately I think it&apos;s a cleaner call site.&lt;/p&gt;
&lt;p&gt;First, you need to extend &lt;code&gt;HTTPField.name&lt;/code&gt; and add the new header name in there.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;// don&apos;t forget to import HTTPTypes
import HTTPTypes

extension HTTPField.Name {
  // if you don&apos;t force unwrap here, you&apos;ll need to account for the optional in the next step
    static let customHeaderName = Self(&amp;quot;custom-header-name&amp;quot;)!
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then you can call it in a very similar way to v1.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;let headerValue = request.headers[.customHeaderName]
&lt;/code&gt;&lt;/pre&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Making call outs in GitHub markdown docs</title><link>https://heyjaywilson.com/blog/2024/05/29-callouts-in-pr/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/05/29-callouts-in-pr/</guid><pubDate>Sat, 25 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I like to decorate my PRs with notes and warnings. &lt;a href=&quot;https://github.blog/changelog/2023-12-14-new-markdown-extension-alerts-provide-distinctive-styling-for-significant-content/&quot;&gt;GitHub&lt;/a&gt; supports this with special styling. I can never remember the markdown syntax for it, so here&apos;s a post.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;&amp;gt; [!NOTE]
&amp;gt; Highlights information that users should take into account, even when skimming.

&amp;gt; [!TIP]
&amp;gt; Optional information to help a user be more successful.

&amp;gt; [!IMPORTANT]
&amp;gt; Crucial information necessary for users to succeed.

&amp;gt; [!WARNING]
&amp;gt; Critical content demanding immediate user attention due to potential risks.

&amp;gt; [!CAUTION]
&amp;gt; Negative potential consequences of an action.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;They render like this&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://share.heyjay.lol/github-example.png&quot; alt=&quot;GitHub example&quot;&gt;&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>How to get count of all Users in DynamoDB using Swift and Soto</title><link>https://heyjaywilson.com/blog/2024/05/18-count-users-soto-swift/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/05/18-count-users-soto-swift/</guid><pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This was made using &lt;a href=&quot;https://github.com/soto-project/soto&quot;&gt;Soto v7.0.0-rc1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Assuming that your Partition Key and Sort Key are named &lt;code&gt;PK&lt;/code&gt; and &lt;code&gt;SK&lt;/code&gt; in your table. Also that your PK for all users are &lt;code&gt;USER#&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;    let input = DynamoDB.QueryInput(
      expressionAttributeNames: [&amp;quot;#p&amp;quot;: &amp;quot;PK&amp;quot;],
      expressionAttributeValues: [&amp;quot;:pk&amp;quot; : .s(&amp;quot;USER#&amp;quot;)],
      keyConditionExpression: &amp;quot;#p = :pk&amp;quot;,
      select: .count,
      tableName: tableName
    )
    let output = try await dynamoDB.query(input)
    nextAvailableID = output.count ?? 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is just a short code snippet so that I can reference it later. Subscribe for more snippets and other thoughts.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Been doing more server side programming and my brain is liking the change and now I want to learn more about the conventions used when designing an API. Any resources I should look at?</title><link>https://heyjaywilson.com/blog/2024/03/20/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/03/20/</guid><pubDate>Wed, 20 Mar 2024 22:37:00 GMT</pubDate><content:encoded>&lt;p&gt;Been doing more server side programming and my brain is liking the change and now I want to learn more about the conventions used when designing an API. Any resources I should look at?&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>coffee_ Rebuild: Writing beans to firebase</title><link>https://heyjaywilson.com/blog/2024/03/08-writing-to-firebase/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/03/08-writing-to-firebase/</guid><pubDate>Fri, 08 Mar 2024 12:30:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=hX05vvUNlLU&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
&lt;p&gt;This was a great stream! Had some people pop in the chat that I haven&apos;t talked to in awhile which was nice. We also had a good discussion around motivation and having a ship it attitude.&lt;/p&gt;
&lt;h2&gt;What happened on stream?&lt;/h2&gt;
&lt;p&gt;A few things happened. The first one was fixing a crash since I was trying to access firebase before it was configured. This was easily mitigated with a wrapper view. Then I worked on writing bean information to the user&apos;s beans collection and started trying to read it into the app.&lt;/p&gt;
&lt;h3&gt;Writing bean information&lt;/h3&gt;
&lt;p&gt;I had an issue with writing bean information to the app. This mainly came from my security rules being wrong. I wasn&apos;t wild carding correctly to only allow the user who&apos;s document it was to access it.&lt;/p&gt;
&lt;p&gt;This was the rule I ended with. It allows for any document inside a user&apos;s collection to only be read or written to if the user is logged in and it is the proper userID.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;     match /users/{userId}/{collection}/{document=**} {
      allow read, update, delete: if request.auth != null &amp;amp;&amp;amp; request.auth.uid == userId;
      allow create: if request.auth != null;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Reading snapshots&lt;/h3&gt;
&lt;p&gt;I started reading snapshot data, but I had to stop my work on that this week due to timing. Also, I was having a hard time converting the document data to a &lt;code&gt;Bean&lt;/code&gt;. Next week that should be resolved.&lt;/p&gt;
&lt;h2&gt;The ship it attitude&lt;/h2&gt;
&lt;p&gt;This conversation was great. &lt;a href=&quot;https://www.twitch.tv/mono_nz&quot;&gt;Mono_NZ&lt;/a&gt; and &lt;a href=&quot;https://mikaelacaron.com&quot;&gt;Mikaela Caron&lt;/a&gt; were talking about just shipping things in the chat which lead to us discussing the &amp;quot;ship it attitude.&amp;quot;&lt;/p&gt;
&lt;p&gt;I describe the &amp;quot;ship it attitude&amp;quot; as a frame of mind to actually complete and publish a project. This also frames how you complete the project and usually requires to pair down the project into it&apos;s bare necessities so that it can be iterated on quickly based on user feedback.&lt;/p&gt;
&lt;p&gt;I personally have a hard time with this attitude because I get really stuck in project structure and a bunch of things that end up not mattering to the user. Having this discussion really helps me put my development method into perspective and how I need/want to adopt more of the ship it attitude and get projects out.&lt;/p&gt;
&lt;p&gt;This rewrite is actually a perfect example of me adjusting to have the &amp;quot;ship it attitude.&amp;quot; I was really thinking about what database to use and opted for firebase for ease of use even though deep down I really wanted to build my own server for the experience. I decided that wasn&apos;t going to be great for the project or cause this to be shipped out in a timely manner and opted for firebase.&lt;/p&gt;
&lt;h2&gt;What&apos;s happening next week?&lt;/h2&gt;
&lt;p&gt;I&apos;m going to figure out how to get the snapshat data into a &lt;code&gt;Bean&lt;/code&gt; structure and get that to be what populates the &lt;code&gt;BeanListView&lt;/code&gt;. If that doesn&apos;t take the whole time, I&apos;ll work on permissions and the public beans collection.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If this project excites you and you&apos;re wanting to help me, the project is &lt;a href=&quot;https://heyjay.url.lol/coffeetrackergh&quot;&gt;open sourced&lt;/a&gt; and there are a couple issues I can use help on. Those are marked as &amp;quot;Help Wanted&amp;quot; in issues.&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Last night, I tried a new drink from a recipe https://thegandmkitchen.com/bourbon-espresso-old-fashioned/ I saw on Tik Tok. It was pretty decent and not hard to make. If you&apos;re a fan of old fashions and espresso might be a good drink to try.</title><link>https://heyjaywilson.com/blog/2024/03/03-old-fashioned-espresso/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/03/03-old-fashioned-espresso/</guid><pubDate>Sun, 03 Mar 2024 10:50:00 GMT</pubDate><content:encoded>&lt;p&gt;Last night, I tried a new drink from a recipe https://thegandmkitchen.com/bourbon-espresso-old-fashioned/ I saw on Tik Tok. It was pretty decent and not hard to make. If you&apos;re a fan of old fashions and espresso might be a good drink to try.&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>coffee_ Rebuild: Integrating Firebase</title><link>https://heyjaywilson.com/blog/2024/03/01-integrating-firebase/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/03/01-integrating-firebase/</guid><pubDate>Fri, 01 Mar 2024 13:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=XNdwWyNjg3I&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
&lt;p&gt;At the beginning of the year, I wanted to rebuild &lt;a href=&quot;https://heyjay.url.lol/coffeetrackergh&quot;&gt;&lt;code&gt;_coffee&lt;/code&gt;&lt;/a&gt; to include a few other features, watch &lt;a href=&quot;https://youtube.com/live/nkVbtRdgF8E?feature=share&quot;&gt;this video&lt;/a&gt; for more context. As part of this rebuild, I wanted to completely rethink how I stored the data and introduce a way for users to create a pool of coffee data. Today, I took a good first step towards that and started working with &lt;a href=&quot;https://firebase.google.com/&quot;&gt;Firebase&lt;/a&gt; and anonymous accounts.&lt;/p&gt;
&lt;h2&gt;Why Firebase?&lt;/h2&gt;
&lt;p&gt;I mentioned this in the video, but the main reason is so that I can just get something done and shipped. Firebase has storage, data management, and user access really easily accessible and I&apos;m familiar with it so I decided that&apos;s the route I want to go.&lt;/p&gt;
&lt;p&gt;It is also really easy to iterate with whether I want to do that locally using emulators or live since I have no users. My plan once I do get users is to have a production version of the firebase console so that I can still play with live data, but that&apos;s a bit further away.&lt;/p&gt;
&lt;p&gt;Another bonus to Firebase is that the cost can somewhat be managed. I&apos;m not sure how I want to monetize &lt;code&gt;coffee_&lt;/code&gt; yet. I don&apos;t really want to introduce subscriptions, so my solution to data management needed to be low cost until I figured that out.&lt;/p&gt;
&lt;h2&gt;What&apos;s the plan for accounts?&lt;/h2&gt;
&lt;p&gt;I did implement &lt;a href=&quot;https://firebase.google.com/docs/auth/ios/anonymous-auth&quot;&gt;anonymous accounts&lt;/a&gt;. It was the quickest way to start getting the user&apos;s data into firebase. I didn&apos;t want to build any UI for accounts yet cause that&apos;s a lot of work, so I went straight to anonymous accounts. My plan is to allow for users to sign in with apple and email at some point.&lt;/p&gt;
&lt;h2&gt;What&apos;s being built next?&lt;/h2&gt;
&lt;p&gt;I stopped working while trying to get bean info to store in &lt;a href=&quot;https://firebase.google.com/docs/firestore&quot;&gt;Firestore&lt;/a&gt;, so I&apos;ll pick up there next week. The plan is to get beans writing to Firestore and get that info to come back into the app via Snapshot listeners.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If this project excites you and you&apos;re wanting to help me, the project is &lt;a href=&quot;https://heyjay.url.lol/coffeetrackergh&quot;&gt;open sourced&lt;/a&gt; and there are a couple issues I can use help on. Those are marked as &amp;quot;Help Wanted&amp;quot; in issues.&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>My astro site publishes to mastodon using a vapor server. My hyperfixation for the last 2 days is a little better now.</title><link>https://heyjaywilson.com/blog/2024/02/28-netlify-to-website/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/02/28-netlify-to-website/</guid><pubDate>Wed, 28 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My astro site publishes to mastodon using a vapor server. My hyperfixation for the last 2 days is a little better now.&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>this is a test post from my server... I&apos;ll do a write up soon...</title><link>https://heyjaywilson.com/blog/2024/02/28-testpost/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/02/28-testpost/</guid><pubDate>Wed, 28 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;this is a test post from my server... I&apos;ll do a write up soon...&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>useful post for setting up a global .gitignore</title><link>https://heyjaywilson.com/blog/2024/02/26-gitignore/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/02/26-gitignore/</guid><pubDate>Mon, 26 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;useful post for setting up a global .gitignore. Pretty straight to the point&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sebastiandedeyne.com/setting-up-a-global-gitignore-file/&quot;&gt;https://sebastiandedeyne.com/setting-up-a-global-gitignore-file/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>How to Catch Specific Error Types in Swift</title><link>https://heyjaywilson.com/blog/2024/02/22-user-friendly-errors/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/02/22-user-friendly-errors/</guid><pubDate>Thu, 22 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I always forget how to do this and luckily &lt;a href=&quot;https://twitter.com/natpanferova&quot;&gt;Natalie Panferova&lt;/a&gt; at &lt;a href=&quot;https://nilcoalescing.com/&quot;&gt;Nilcoalescing&lt;/a&gt; wrote a great &lt;a href=&quot;https://nilcoalescing.com/blog/UserFriendlyDescriptionsAndRecoverySuggestionsForCustomErrorsInSwift/&quot;&gt;article&lt;/a&gt; about how to provide user friendly descriptions and how to catch specific error types.&lt;/p&gt;
&lt;p&gt;I&apos;m mainly writing this so I have access to the part of that article that I forget, which is how to catch a specific error type.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-swift&quot;&gt;do {
    // Some type of work here
} catch let error as ErrorTypeYouWantToCatch {
    // Do something with that error
} catch {
    // Don&apos;t forget to have a catchall incase the
    // error isn&apos;t what you expected
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some benefits to catching error types is to present proper user facing notifications or to make the logger calls more useful to you as the developer.&lt;/p&gt;
&lt;h2&gt;More resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.donnywals.com/designing-apis-with-typed-throws-in-swift/&quot;&gt;Designing API&apos;s with Typed Throws in Swift&lt;/a&gt; by &lt;a href=&quot;https://www.donnywals.com&quot;&gt;Donny Wals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Webmentions support</title><link>https://heyjaywilson.com/blog/2024/02/21-webmention-support/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/02/21-webmention-support/</guid><pubDate>Wed, 21 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Hero image from &lt;a href=&quot;https://unsplash.com/photos/three-crumpled-yellow-papers-on-green-surface-surrounded-by-yellow-lined-papers-V5vqWC9gyEU&quot;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Inspired by a few posts (&lt;a href=&quot;https://sebastiandedeyne.com/adding-webmentions-to-my-blog/&quot;&gt;Sebastian&apos;s&lt;/a&gt; and &lt;a href=&quot;https://mxb.dev/blog/using-webmentions-on-static-sites/&quot;&gt;Max Böck&apos;s&lt;/a&gt;) on the internet, I wanted to add &lt;a href=&quot;&quot;&gt;Webmentions&lt;/a&gt; to this site. I was previously using &lt;a href=&quot;https://github.com/giscus/giscus&quot;&gt;giscus&lt;/a&gt; to power comments, but I really like the idea of comments (and other things) being generated statically and served like the rest of the site. I get to own my spot on the web with this idea and that&apos;s a big deal to me.&lt;/p&gt;
&lt;h2&gt;Services used&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://webmention.io/&quot;&gt;Webmention.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brid.gy/&quot;&gt;Bridgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Webmention.io is written/maintained by &lt;a href=&quot;https://aaronparecki.com/&quot;&gt;Aaron Parecki&lt;/a&gt; and is &lt;a href=&quot;https://github.com/aaronpk/webmention.io&quot;&gt;open sourced&lt;/a&gt;. This is a hosted service that I can use to receive webmentions on my website.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://brid.gy/&quot;&gt;Bridgy&lt;/a&gt;, I&apos;ll get any reposts, likes, and mentions from mastodon that contain a link to my website. Hopefully, something will exist for threads also once that API opens up.&lt;/p&gt;
&lt;p&gt;GitHub Actions runs every so often to poll the webmention.io api and turns any new webmentions into a json file. Then astro does it&apos;s thing and renders it on the right page.&lt;/p&gt;
&lt;h2&gt;The future&lt;/h2&gt;
&lt;p&gt;Somethings I still need to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make a page like &lt;a href=&quot;https://barryfrost.com/2015/01/how-to-comment&quot;&gt;this&lt;/a&gt; explaining how to comment&lt;/li&gt;
&lt;li&gt;Probably some tweaking on styling&lt;/li&gt;
&lt;li&gt;Create a master page where of webmentions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A super long term goal of mine would be create my own webmentions server so that I don&apos;t have to rely on webmention.io and to allow webmentions to be updated closer to real time.&lt;/p&gt;
&lt;p&gt;If you&apos;re curious about the code, feel free to checkout the &lt;a href=&quot;https://github.com/heyjaywilson/heyjaywilsoncom&quot;&gt;github repo&lt;/a&gt;. Don&apos;t judge, but if you find issues or how to improve, then please raise a github issue.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Waiting to start a new project or a task?</title><link>https://heyjaywilson.com/blog/2024/01/16-waiting-to-start/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/01/16-waiting-to-start/</guid><pubDate>Tue, 16 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;Don’t. Just start it now.&lt;/p&gt;
&lt;p&gt;One of the killers of a project is waiting for the perfect time and the longer you wait the harder it might be to start. It’s much easier to continue doing something after you’ve started. Here are 3 ways I like to get started on a project or a task.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;These ideas came from &lt;a href=&quot;https://amzn.to/3vfJF2r&quot;&gt;Feel-good Productivity&lt;/a&gt; by Ali Abdaal&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;1️⃣ Identify the next action item.&lt;/h2&gt;
&lt;p&gt;Starting a new project is a big investment, but I bet the next action isn’t. If your next project is an iOS app and you’re not on your computer, then your next step is to get on your computer.&lt;/p&gt;
&lt;h2&gt;2️⃣ Reduce your friction to starting.&lt;/h2&gt;
&lt;p&gt;If your computer is never close to you then it’s easy to not think about your new app. To reduce the friction of getting your computer to start the project, consider moving your computer with you. A while ago, my only personal computer was a Mac mini, and I realized I wasn’t developing apps as much as I wanted to or work out of the house, so I decided to reduce that friction I needed to get a MacBook instead. Now, I’m able to work whenever and wherever inspiration strikes due to having a laptop. This also allows me to leave the MacBook by the couch so I can easily work on project.&lt;/p&gt;
&lt;h2&gt;3️⃣ Follow the 5 minute rule.&lt;/h2&gt;
&lt;p&gt;Give yourself 5 minutes to work on the new project. Once those 5 minutes are done, then decide if you want to keep going or you want to stop. It is OKAY to stop after 5 minutes. 5 minutes is better than doing nothing.&lt;/p&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>What happened Dec 10th through Dec 17th, 2023</title><link>https://heyjaywilson.com/blog/2024/01/07-week/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/01/07-week/</guid><pubDate>Sun, 07 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;Goals for the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Post on IG every day this week&lt;/li&gt;
&lt;li&gt;✅ Make YouTube video&lt;/li&gt;
&lt;li&gt;✅ Do morning routine every day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Things I did&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create a morning routine&lt;/li&gt;
&lt;li&gt;Start a &lt;a href=&quot;https://geni.us/P1MW&quot;&gt;coding YouTube channel&lt;/a&gt; for my live streams&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dinners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Garlic parmesan chicken pasta&lt;/li&gt;
&lt;li&gt;Tacos&lt;/li&gt;
&lt;li&gt;Left overs&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Reading/Watching&lt;/h2&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/3vfJF2r&quot;&gt;Feel-good Productivity&lt;/a&gt; by Ali Abdaal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bN5195vEuEA&quot;&gt;Why We Create | Cinematic Vlog&lt;/a&gt; by &lt;a href=&quot;https://www.youtube.com/@ArtStew_&quot;&gt;ArtStew&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pick of the week&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://geni.us/wandrd6lsling&quot;&gt;Wandrd 6L Sling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This bag is a sling and built to hold a camera and maybe a lense depending on your camera size. I usually am able to carry an A7IV with a Tamron 28-75mm lens and then another smaller prime lens. It also has a laptop carry option, which is 🔥 and not something I normally see in this size of bag.&lt;/p&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>Hardware I use as an iOS developer in 2024</title><link>https://heyjaywilson.com/blog/2024/01/06-uses/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/01/06-uses/</guid><pubDate>Sat, 06 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;
import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;Here&apos;s everything on my desk that I use as of January 6th 2024.&lt;/p&gt;
&lt;p&gt;&amp;lt;AffiliateDisclaimer /&amp;gt;
&amp;lt;YouTube id={frontmatter.videoID} /&amp;gt;&lt;/p&gt;
&lt;h2&gt;Desk&lt;/h2&gt;
&lt;p&gt;The desk is made of 2 components. The table top is not made anymore but it&apos;s solid wood from IKEA and the legs are from Autonomous&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.autonomous.ai/standing-desks/diy-smart-desk-kit?option16=38&amp;amp;option17=41&quot;&gt;Autonomous smart desk pro frame&lt;/a&gt;. This allows my desk to be a sit stand desk.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Computer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/mBcWAX&quot;&gt;MacBook Pro 14&amp;quot; M1 Max&lt;/a&gt; - I purchased this computer shortly after it came out. It was a big expense, but honestly I don&apos;t see myself upgrading for awhile. The amount of productivity I would receive from the M3 chip doesn&apos;t out weigh the cost.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Monitors&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/2xG8lMp&quot;&gt;LG 34” Ultra wide&lt;/a&gt; - I did win this in a raffle in 2021 or 2020 and haven&apos;t needed to upgrade it&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/9AGPlgP&quot;&gt;LG Dual Up&lt;/a&gt; - This is a new edition and love it. The vertical aspect ratio is great as a secondary or even primary monitor. I used it as a solo monitor for a bit, but now it&apos;s my secondary monitor and I still enjoy it. I can see myself acquiring a second one to replace the 34&amp;quot; ultra wide at some point.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Inputs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Elgato thunderbolt dock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/oRMxMF&quot;&gt;Magic Trackpad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meletrix.com/collections/zoom75-collection&quot;&gt;Zoom 75 keyboard&lt;/a&gt; - This is one of my favorite keyboards. It&apos;s got some good weight and I like the screen on it. I don&apos;t quite know how long it&apos;ll stay on my desk though since I do really like the &lt;a href=&quot;https://keyhive.xyz/shop/lily58&quot;&gt;Lily58 Pro&lt;/a&gt; split keyboard. - &lt;a href=&quot;https://geni.us/FNgMcNS&quot;&gt;Cookies and Cream switches&lt;/a&gt; - &lt;a href=&quot;https://geni.us/vFVWxr7&quot;&gt;Biip MT3 Pro keycaps&lt;/a&gt;
&lt;blockquote&gt;
&lt;p&gt;If you&apos;re just getting started in the mechanical keyboard hobby, then I suggest getting a Keychron Q1 instead.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/N6NMrZ&quot;&gt;Stream Deck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/gtwAd&quot;&gt;Cal Digit Thunderbolt 4 hub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Accessories&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/dU1Eh&quot;&gt;iPad Mini&lt;/a&gt; - My iPad is used as a media consumption device when at work. It&apos;s playing a podcast, music, or a youtube video at most times. It&apos;s also nice for drawing/sketching something out if I need to share it with the team.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/HOZBmv&quot;&gt;Satechi iPad stand&lt;/a&gt; - Any stand will do, but I went with this one cause I saw it in a YouTube video.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/6yQyTr&quot;&gt;Traveler&apos;s notebook&lt;/a&gt; - I use this to time block and prioritize my day&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/3RMN0Ob&quot;&gt;Spigen MagSafe mount&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/0r2ZG&quot;&gt;AirPod Pros with USB C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/ShkXhyG&quot;&gt;BenQ ScreenBar Halo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Audio and Video&lt;/h2&gt;
&lt;p&gt;What&apos;s listed here is not necessary for zoom calls, but it&apos;s what I use for streaming so I also use it on my meetings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/kdoS&quot;&gt;Rode PodMic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/1rvPQ&quot;&gt;Wave XLR audio interface&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/1cS4oG&quot;&gt;Elgato LP mic arm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/vq6tVh&quot;&gt;Sony ZVE-10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/DqQBkV&quot;&gt;Tamron 17-28mm Lens&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>How content creation helped me land my job</title><link>https://heyjaywilson.com/blog/2024/01/01-content-creation/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2024/01/01-content-creation/</guid><pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hero image courtesy of &lt;a href=&quot;https://unsplash.com/photos/man-using-macbook-Lks7vei-eAg&quot;&gt;unsplash.com&lt;/a&gt; by &lt;a href=&quot;https://unsplash.com/@charlesdeluvio&quot;&gt;charlesdeluvio&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=ntMT9Ch4kLk&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
&lt;p&gt;👋 I’m Jay and am an iOS app developer for a start up. Before iOS, I worked as a product support specialist and a software engineer really focused in a no-code tool called Webflow. During my time in those positions, I studied Swift outside of work. While learning Swift and SwiftUI, I live streamed my work and posted updates on my IG.&lt;/p&gt;
&lt;p&gt;Here are the 3 ways content creation helped me land my job&lt;/p&gt;
&lt;p&gt;1️⃣ Forced me to explain what I was doing&lt;/p&gt;
&lt;p&gt;Explaining what I was doing on stream really helped me during the interview process. I was already used to explaining why I chose a certain architecture or even explaining what something was because people would ask in the chat. I felt really comfortable during technical interviews due to the practice I had streaming.&lt;/p&gt;
&lt;p&gt;2️⃣ I learned how to simplify my problems&lt;/p&gt;
&lt;p&gt;Streaming and posting about issues I was having really helped me approach problems from different angles. It also taught me how to refactor my code to be more simple. This helped in technical interviews when the interviewer would change requirements in the middle of the discussion.&lt;/p&gt;
&lt;p&gt;3️⃣ I connected/networked with other iOS developers&lt;/p&gt;
&lt;p&gt;This is probably the biggest reason I have the job. Using social media to connect with other developers is one of the best things about social media. I didn’t have any friends IRL that develop iOS apps, so finding connections to get a job was kinda tough. Luckily as I started putting content out and talking with people in other chats I got to know some people and they sent jobs my way.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>What happened Dec 17th through Dec 24th, 2023</title><link>https://heyjaywilson.com/blog/2023/12/26-week/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/26-week/</guid><pubDate>Tue, 26 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Goals for the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Try using stacked PRs at work for a new feature&lt;/li&gt;
&lt;li&gt;✅ Actually focus and not get distracted by things around the house&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Things I did&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Went to Ballet Austin’s The Nutcracker&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dinners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Garlic feta pasta&lt;/li&gt;
&lt;li&gt;Baked potato&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/airbnb-engineering/unlocking-swiftui-at-airbnb-ea58f50cde49&quot;&gt;Unlocking SwiftUI at Airbnb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substack.com/home/post/p-139863745&quot;&gt;Biggest productivity killers in the engineering industry&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://bitrise.io/blog/post/snapshot-testing-in-ios-testing-the-ui-and-beyond&quot;&gt;Snapshot testing in iOS: testing the UI and beyond - Bitrise&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Concepts/Definitions I looked up&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Snapshot Testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pick of the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A notebook. Something about physically writing down my day makes me want to stick to it better. I’m currently using the &lt;a href=&quot;https://geni.us/6yQyTr&quot;&gt;Traveler’s Company Notebook&lt;/a&gt;. It’s nice but honestly any notebook would work.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>What happened Dec 10th through Dec 17th, 2023</title><link>https://heyjaywilson.com/blog/2023/12/18-week/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/18-week/</guid><pubDate>Mon, 18 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Goals for the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅✅ Post 2 videos on YouTube&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Things I did&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Got home from Seattle&lt;/li&gt;
&lt;li&gt;Updated this website’s styling&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dinners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Feta pasta&lt;/li&gt;
&lt;li&gt;Cauliflower pizza&lt;/li&gt;
&lt;li&gt;Leftovers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://open.substack.com/pub/tidyfirst/p/canon-tdd?r=1toq2n&amp;amp;utm_campaign=post&amp;amp;utm_medium=web&quot;&gt;Canon TDD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.threads.net/@dimillian/post/C01--6xIniF&quot;&gt;Thomas Ricouard (@dimillian) on Threads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.threads.net/@dimillian/post/C04p45-oPIK&quot;&gt;Thomas Ricouard (@dimillian) on Threads&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Concepts/Definitions I looked up&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlock.net/working-with-stacked-branches-in-git-is-easier-with-update-refs/&quot;&gt;Using &lt;code&gt;--use-refs&lt;/code&gt; when rebasing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>Embracing Appreciation: My Theme for the Year</title><link>https://heyjaywilson.com/blog/2023/12/16-year-of-appreciation/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/16-year-of-appreciation/</guid><pubDate>Sat, 16 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;In this video, I reveal my theme for the year and how it will shape my experiences. Join me as I explore the power of appreciation, making lasting memories, and decluttering my life. Discover the joy of slowing down and embracing the good things life has to offer. Don&apos;t miss out on this inspiring journey!&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=r01uJDn3itI&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Reflections on Year 29: A Journey of Growth and Health</title><link>https://heyjaywilson.com/blog/2023/12/14-29/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/14-29/</guid><pubDate>Thu, 14 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;As I approach 30, I wanted to take a moment to reflect on the past year and share some of my experiences and lessons learned. This year has been quite a ride, filled with personal growth, health transformations, and exciting adventures.&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=vUikAC92QoY&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
&lt;h2&gt;Embracing the Year of Health&lt;/h2&gt;
&lt;p&gt;When I kicked off this year, I declared it as my &amp;quot;Year of Health.&amp;quot; I wanted to focus on both my mental and physical well-being. And let me tell you, it has been a game-changer. I prioritized my mental health by seeking therapy and making it a regular part of my self-care routine. The impact it had on my confidence and ability to communicate my needs has been incredible.&lt;/p&gt;
&lt;p&gt;In terms of physical health, I set a goal to close my Apple watch rings every day. While I may have missed one stand hour along the way, I can proudly say that I&apos;ve closed the move and exercise ring EVERY SING DAY. Not only have I shed some weight, but I&apos;ve also gained muscle and improved my overall fitness level. Taking a mindful approach to my eating habits has been key, focusing on nourishing my body with healthier choices.&lt;/p&gt;
&lt;h2&gt;Balancing Priorities and Realigning Goals&lt;/h2&gt;
&lt;p&gt;As I dove deeper into my health journey, I had to make some tough choices and reprioritize certain aspects of my life. Streaming on Twitch, which used to be a regular activity, had to take a backseat. Instead, I focused on nurturing my relationship with my wife and exploring new hobbies. It&apos;s all about finding that balance and understanding that it&apos;s okay to take breaks and adjust our commitments as needed.&lt;/p&gt;
&lt;h2&gt;Navigating the Startup Life&lt;/h2&gt;
&lt;p&gt;Professionally, this year marked my entry into the world of early-stage startups. It has been an eye-opening experience, filled with challenges and growth opportunities. Collaborating with a remote team and figuring out the intricacies of async collaboration has been a learning curve. But the satisfaction of working on meaningful projects and making a positive impact on people&apos;s lives is great.&lt;/p&gt;
&lt;h2&gt;Looking Ahead to Year 30&lt;/h2&gt;
&lt;p&gt;I can&apos;t help but feel a sense of excitement for what Year 30 has in store. I&apos;m grateful for the lessons learned, the personal growth achieved, and the moments of joy experienced along the way. This blog post is just a glimpse into my journey, and I&apos;m eager to see what the future holds.&lt;/p&gt;
&lt;p&gt;Stay tuned for more updates and reflections!&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>What happened Dec 3 through Dec 9, 2023</title><link>https://heyjaywilson.com/blog/2023/12/12-week/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/12-week/</guid><pubDate>Sat, 09 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Goals for the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;✅ Finish backups and imports in &lt;a href=&quot;https://blueprint.heyjaywilson.com/&quot;&gt;Blueprint&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This was a carry over from last week 🎉&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;✅ Write a new feature proposal at work&lt;/li&gt;
&lt;li&gt;✅ Go to Seattle and have fun!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Things I did&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Posted some YouTube Videos
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/qfl4Ux&quot;&gt;Blueprint Dev Vlog?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/stateOfContent2024&quot;&gt;State of my Content?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/2024workbag&quot;&gt;What&apos;s in my 2024 work bag?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Went to Seattle and watched some Hockey&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dinners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Garlic chicken parmesan in the crock pot&lt;/li&gt;
&lt;li&gt;Tacos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.substack.com/pub/gregorojstersek/p/how-to-grow-from-senior-to-a-lead&quot;&gt;How to grow from senior to a lead role&lt;/a&gt; (From substack)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://open.substack.com/pub/tidyfirst/p/tdd-is-kanban-for-code&quot;&gt;TDD is Kanban for Code&lt;/a&gt; (From substack)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Concepts/Definitions I looked up&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stacking.dev/&quot;&gt;Stacked PRs&lt;/a&gt; - this seems really interesting and could be helpful but I&apos;m not too sure how it works on a team&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>What&apos;s in my work bag 2024</title><link>https://heyjaywilson.com/blog/2023/12/07-whats-in-my-bag/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/07-whats-in-my-bag/</guid><pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;
import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;Here&apos;s what I take with me when I work. I try to keep it small and light.&lt;/p&gt;
&lt;p&gt;&amp;lt;AffiliateDisclaimer /&amp;gt;
&amp;lt;YouTube id={frontmatter.videoID} /&amp;gt;&lt;/p&gt;
&lt;p&gt;Here are links to everything mentioned in the video.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The bag: &lt;a href=&quot;https://geni.us/wandrd6lsling&quot;&gt;Wandrd Roam 6L Sling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The laptop: &lt;a href=&quot;https://geni.us/cctplus-m3max&quot;&gt;MacBook Pro 14&amp;quot; M1 Max&lt;/a&gt; (similar spec but it&apos;s the m3 model)&lt;/li&gt;
&lt;li&gt;The camera in the video: &lt;a href=&quot;https://geni.us/cctpocketcam&quot;&gt;Sony RX100 VII&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Accessories:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/0r2ZG&quot;&gt;AirPod Pros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/AWJhN&quot;&gt;Anker battery pack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/K9jpMZx&quot;&gt;Anker USB C braided cable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/6yQyTr&quot;&gt;Travelers Journal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geni.us/8jc9h&quot;&gt;Tide to Go Pen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The choice to not bring any type of plug to recharge is really hard sometimes, but I usually choose not to due to the Anker battery pack and my computer’s battery life holding about 4 hours of charge while running Xcode betas. It has enough punch to recharge my laptop at least once while still having some room to charge my phone if needed.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>State of Content for Jay</title><link>https://heyjaywilson.com/blog/2023/12/06-state-of-content/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/06-state-of-content/</guid><pubDate>Wed, 06 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;I started making content to prove that I know what I&apos;m talking about when it comes to swift and iOS development.Now that I have a couple software engineering jobs under my belt, I feel like my content can be just for fun and as a creative outlet. That&apos;s what I talk about in this video.&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=9C4-p5hjgWk&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Why I&apos;m using Cloudkit: Blueprint Dev Vlog</title><link>https://heyjaywilson.com/blog/2023/12/05-blueprint-devlog/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/05-blueprint-devlog/</guid><pubDate>Tue, 05 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import YouTube from &amp;quot;../../../../components/YouTube.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;Starting my Developer log for &lt;a href=&quot;https://blueprint.heyjaywilson.com&quot;&gt;Blueprint&lt;/a&gt; as a dev vlog on YouTube.&lt;/p&gt;
&lt;p&gt;Here&apos;s the first one 🎉&lt;/p&gt;
&lt;a href=&quot;https://www.youtube.com/watch?v=pM26bEIoRl4&quot;&gt;The video was embedded in the post. You can watch on YouTube.&lt;/a&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>What happened Nov 27 through Dec 2, 2023</title><link>https://heyjaywilson.com/blog/2023/12/02-week/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/12/02-week/</guid><pubDate>Sat, 02 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;Goals for the week&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;❌ Finish backups and imports in &lt;a href=&quot;https://blueprint.heyjaywilson.com/&quot;&gt;Blueprint&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I ended up only doing backups this week, so it&apos;ll carry over to next week&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;✅ Figure out issue with &lt;code&gt;@FetchRequest&lt;/code&gt; and why it’s resetting
&lt;ul&gt;
&lt;li&gt;This was due to an &lt;code&gt;@EnvironmentObject&lt;/code&gt; property changing when it wasn&apos;t even needed in the view&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Things I did&lt;/h2&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🎥 The Ballad of Songbirds and Snakes&lt;/li&gt;
&lt;li&gt;👨‍💻 Implement &amp;lt;a href=&amp;quot;https://dashboard.telemetrydeck.com/registration/organization?referralCode=C3HZBUPWGY9I16YY&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt;TelemetryDeck&amp;lt;/a&amp;gt; for analytics on this site&lt;/li&gt;
&lt;li&gt;🎼 Found out I listened to 19,891 minutes of Taylor Swift this year&lt;/li&gt;
&lt;li&gt;🚶‍♂️ Walked every day for at least 15 minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dinners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.themagicalslowcooker.com/slow-cooker-olive-garden-chicken-pasta/&quot;&gt;Olive Garden Chicken and Pasta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drafthouse.com&quot;&gt;Alamo Drafthouse&lt;/a&gt; mozzarella sticks and popcorn (this was movie night)&lt;/li&gt;
&lt;li&gt;Olive Garden Chicken and Pasta left overs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tastesbetterfromscratch.com/beef-gyros-slow-cooker-instant-pot/&quot;&gt;Gyros&lt;/a&gt; in the slow cooker&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.grimaldispizzeria.com/&quot;&gt;Grimaldi&apos;s&lt;/a&gt; Pizza&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.to/47tqQr1&quot;&gt;The Creative Act: A Way of Being&lt;/a&gt; by Rick Rubin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Concepts/Definitions I looked up&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thoughtco.com/what-is-blogroll-3476580&quot;&gt;Blogroll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.apple.com/videos/play/wwdc2021/10058/&quot;&gt;AsyncSequence&lt;/a&gt;s in Swift&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.apple.com/documentation/observation&quot;&gt;Observation&lt;/a&gt; framework in Swift&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>note</category><author>heyjay@cctplus.dev</author></item><item><title>Default Apps 2023 - Jay Wilson</title><link>https://heyjaywilson.com/blog/2023/11/26-default-apps/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/11/26-default-apps/</guid><pubDate>Sat, 25 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;I saw this from &lt;a href=&quot;https://front-end.social/@chriscoyier/111474487605531383&quot;&gt;Chris Coyer&lt;/a&gt; and took his as a &lt;a href=&quot;https://chriscoyier.net/2023/11/25/default-apps-2023/&quot;&gt;template&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is what I&apos;m using at the point and time of publishing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
&lt;p&gt;📨 Mail Client: Mail.app and Gmail app on iOS and Gmail or &amp;lt;a class=&amp;quot;affiliateLink&amp;quot; href=&amp;quot;https://geni.us/cctfastmail&amp;quot;&amp;gt;Fastmail&amp;lt;/a&amp;gt; web pages on desktop&lt;/p&gt;
&lt;p&gt;📮 Mail Server: &amp;lt;a href=&amp;quot;https://www.google.com/gmail/about/&amp;quot;&amp;gt;Google&amp;lt;/a&amp;gt; and &amp;lt;a class=&amp;quot;affiliateLink&amp;quot; href=&amp;quot;https://geni.us/cctfastmail&amp;quot;&amp;gt;Fastmail&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;📝 Notes: &amp;lt;a href=&amp;quot;https://geni.us/cctnotion&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt;Notion&amp;lt;/a&amp;gt; or Notes.app&lt;/p&gt;
&lt;p&gt;✅ To-Do: Reminders.app&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ℹ️ App_Name.app means it&apos;s an Apple app. IE Reminders.app means it&apos;s the stock iOS Reminders app.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;📷 Photo Shooting: iPhone 15 Pro, &amp;lt;a href=&amp;quot;https://geni.us/AtQQ3r&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt; Sony A7iv&amp;lt;/a&amp;gt;, most recently &amp;lt;a href=&amp;quot;https://geni.us/cctpocketcam&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt;Sony RX100vii&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;🎨 Photo Editing: &lt;a href=&quot;https://lightroom.adobe.com&quot;&gt;Lightroom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📆 Calendar: &lt;a href=&quot;https://calendar.google.com/calendar/&quot;&gt;Google Calendar&lt;/a&gt; or Calendar.app&lt;/p&gt;
&lt;p&gt;📁 Cloud File Storage: &lt;a href=&quot;https://www.icloud.com/iclouddrive&quot;&gt;iCloud Drive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📖 RSS: I need one of these...&lt;/p&gt;
&lt;p&gt;🙍🏻‍♂️ Contacts: Contacts.app&lt;/p&gt;
&lt;p&gt;🌐 Browser: iOS Safari, Desktop: &lt;a href=&quot;https://arc.net&quot;&gt;Arc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;💬 Chat: Messages, &lt;a href=&quot;https://discord.com/company&quot;&gt;Discord&lt;/a&gt;, &lt;a href=&quot;https://slack.com/what-is-slack&quot;&gt;Slack&lt;/a&gt;, Instagram, &lt;a href=&quot;https://matrix.org&quot;&gt;Matrix&lt;/a&gt;/&lt;a href=&quot;https://element.io&quot;&gt;Element&lt;/a&gt; for work&lt;/p&gt;
&lt;p&gt;🔖 Bookmarks: &lt;a href=&quot;https://arc.net&quot;&gt;Arc&lt;/a&gt;, Notes.app, &lt;a href=&quot;https://www.craft.do&quot;&gt;Craft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📑 Read It Later: Notes.app, &lt;a href=&quot;https://www.craft.do&quot;&gt;Craft&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📜 Word Processing: &lt;a href=&quot;https://www.apple.com/pages/&quot;&gt;Pages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📈 Spreadsheets: Google Sheets&lt;/p&gt;
&lt;p&gt;📊 Presentations: Keynote&lt;/p&gt;
&lt;p&gt;🛒 Shopping Lists: Reminders&lt;/p&gt;
&lt;p&gt;🍴 Meal Planning: The wife does this in Google docs&lt;/p&gt;
&lt;p&gt;💰 Budgeting and Personal Finance: &lt;a href=&quot;https://www.ynab.com&quot;&gt;YNAB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📰 News: Apple News&lt;/p&gt;
&lt;p&gt;🎵 Music: Apple Music&lt;/p&gt;
&lt;p&gt;🎤 Podcasts: &lt;a href=&quot;https://overcast.fm&quot;&gt;Overcast&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔐 Password Management: 1Password&lt;/p&gt;
&lt;p&gt;🧑‍💻 Code Editor: Xcode and VS Code&lt;/p&gt;
&lt;p&gt;✈️ VPN: I should also get one of these...&lt;/p&gt;
&lt;p&gt;I’ll add some bonus apps I really like: Raycast (search/utility commands), Dropshare (easily share a link to something that lives in my own storage), tot (easily store text to access later), Shortcuts (automate standup template)&lt;/p&gt;
&lt;p&gt;🔍 In search of: RSS Feed app&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Trouble focusing was solved by purchasing more tech</title><link>https://heyjaywilson.com/blog/2023/08/11-trouble-foucusing-new-tech/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/08/11-trouble-foucusing-new-tech/</guid><pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import AffiliateDisclaimer from &amp;quot;../../../../components/AffiliateDisclaimer.astro&amp;quot;;&lt;/p&gt;
&lt;p&gt;I’ve been having issues getting things done and staying focused. My brain just likes to wander, which isn’t bad but can sometimes interfere with my productivity.&lt;/p&gt;
&lt;p&gt;Some links are affiliate links and I will receive some kind of commission if you purchase the service or product.&lt;/p&gt;
&lt;p&gt;I realized it’s been a bit worse lately and I think I connected the dots down to headphones. My &amp;lt;a href=&amp;quot;https://amzn.to/3qXGPgH&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt;AirPod Max&amp;lt;/a&amp;gt; died a couple months ago and they were what I used to use to signal “focus mode”. I decided it was time to replace the broken headphones with some not broken ones and chose the &amp;lt;a href=&amp;quot;https://amzn.to/3qWZSYw&amp;quot; class=&amp;quot;affiliateLink&amp;quot;&amp;gt;Beats Studio Pro&amp;lt;/a&amp;gt;.&lt;/p&gt;
&lt;p&gt;The price is honestly what sold me. The features are alright and not as solid as the AirPod Max but honestly for the price difference, the beats are great. They are comfy and apply just the right amount of pressure. Also, they are pretty light.&lt;/p&gt;
&lt;p&gt;My focusing has also increased since getting them. A pair of over/on ear headphones is definitely something worth looking into even if you work from home and use speakers.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item><item><title>Why I started creating content</title><link>https://heyjaywilson.com/blog/2023/07/25-why-content/</link><guid isPermaLink="true">https://heyjaywilson.com/blog/2023/07/25-why-content/</guid><pubDate>Tue, 25 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone says to get a job you need to network. But what do you do when you don’t know even how to start finding people who do the thing you want to do? You turn to the internet.&lt;/p&gt;
&lt;p&gt;This is exactly what I did, but not even to find a job. I did it to just be able to talk about what&apos;s possible in iOS development.&lt;/p&gt;
&lt;p&gt;I started Twitch streaming learning the basics. I started writing on medium about what I was learning, which was super basic. I started seeing regulars in my chat. I joined discords, became more active on twitter (RIP) and eventually made this Instagram page and a YouTube channel.&lt;/p&gt;
&lt;p&gt;Eventually these people I were talking with on the internet became friends, and we&apos;ve been able to give opportunities to each other whether it&apos;s freelancing or job opportunities.&lt;/p&gt;
&lt;p&gt;The way I&apos;ve viewed content creation has shifted overtime as I did start looking for jobs as a developer but it all started as trying to connect with others who also like development.&lt;/p&gt;
</content:encoded><category>article</category><author>heyjay@cctplus.dev</author></item></channel></rss>