<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hirozed Blogs]]></title><description><![CDATA[Hirozed Blogs]]></description><link>https://blog.hirozed.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1621643371788/PyfVI8ixe.png</url><title>Hirozed Blogs</title><link>https://blog.hirozed.com</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Apr 2026 07:46:11 GMT</lastBuildDate><atom:link href="https://blog.hirozed.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How I Created a Web Presence as a Web Developer]]></title><description><![CDATA[How I Created a Web Presence as a Web Developer
It was time for a refresh. My current site was several years old. In fact, I lost the Hugo config to be able to add new content. So, with some help from Ashley - a fantastic front-end designer and devel...]]></description><link>https://blog.hirozed.com/how-i-created-a-web-presence-as-a-web-developer</link><guid isPermaLink="true">https://blog.hirozed.com/how-i-created-a-web-presence-as-a-web-developer</guid><category><![CDATA[HTML5]]></category><category><![CDATA[PHP]]></category><category><![CDATA[Laravel]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Mon, 09 Aug 2021 01:01:01 GMT</pubDate><enclosure url="https://assets.hirozed.xyz/blog/webpresence.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="how-i-created-a-web-presence-as-a-web-developer">How I Created a Web Presence as a Web Developer</h1>
<p>It was time for a refresh. My current site was several years old. In fact, I lost the Hugo config to be able to add new content. So, with some help from <a target="_blank" href="https://ashleykolodziej.com">Ashley</a> - a fantastic front-end designer and developer - we created a site that has whimsy and shows who I am and my skills.</p>
<p>Announcing <a target="_blank" href="https://hirozed.com">hirozed.com</a>!</p>
<p>Why hirozed.com?  I’ve been using the hirozed handle for as long as I remember.  “Hiro” originated from Hiro Protagonist, the (ahem) protagonist of <a target="_blank" href="https://en.m.wikipedia.org/wiki/Snow_Crash">Neil Stephenson’s Snow Crash</a>. My memory of Hiro Protagonist was of a genius hacker, who in the metaverse was a sword-wielding protector of the domain.</p>
<p>“Zed” is in honor of Zeddicus Zu'l Zorander, aka “Zedd”, from <a target="_blank" href="https://en.m.wikipedia.org/wiki/The_Sword_of_Truth">Terry Goodkind’s Sword of Truth</a> series. Zedd is a wizard of the first order, and mentor to the main character.</p>
<p>I loved these two books, so when I was thinking of a handle that wasn’t just my first initial/last name, these two characters stood out. They spoke to what I aspired to be in my life.  Maybe not a genius hacker, but quite good in my profession, as well as a mentor to those around me.  I was in my 20’s when I invented my username, but I think I might have gotten close to the spirit of my online handle 20-plus years later.</p>
<p>So, the answer to the above question I posed to myself is: hirozed is me online.</p>
<p>Now, as for what runs the site.  It is a static site, using <a target="_blank" href="https://jigsaw.tighten.co/">Jigsaw</a> as the framework.  Jigsaw uses Laravel’s <a target="_blank" href="https://laravel.com/docs/8.x/blade">blade templating</a>.  Since one of my goals this year is to learn Laravel, it was the perfect fit for my site. <a target="_blank" href="https://github.com">GitHub</a> is where I've decided to store my repos, and <a target="_blank" href="https://netlify.com">Netlify</a> watches for changes to my main branch and rebuilds my site.</p>
<p>I have a bigger ambition than a single page site -- I want to start blogging.  However, all attempts at headless CMSs seemed to complicate what I wanted for a straightforward low-maintenance environment.  Since I was going to publish on both <a target="_blank" href="https://blog.hirozed.com">Hashnode</a> and <a target="_blank" href="https://dev.to/hirozed">Dev.to</a>, I decided to make Hashnode my primary blog site.  They allow for a custom domain (hello <a target="_blank" href="https://blog.hirozed.com">blog.hirozed.com</a>) and I can take the same markdown content and create a post on Dev.to, referencing the original post there.</p>
<p>I decided that I still could use a CMS for maintaining content. Using <a target="_blank" href="https://netlifycms.org">Netlify CMS</a>, I can keep my content on my own repo and will give me a bare-bones environment view a preview of my post. There are several templates using different static site generators.  I chose the Nuxt.js template, which turned out to be easy to configure and stayed out of my way.</p>
<p>What I genuinely enjoy about Netlify CMS is there is a built-in editorial workflow. The workflow will create a branch for a new post and assign it to Draft status.  When a post is ready for a once-over, set the status to "In review".  Finally, when the post is complete, assign it to "Ready" and the CMS will merge the post into the main branch.  During this entire process, a preview of the posts' branch will be available to view and share using Netlify's <a target="_blank" href="https://www.netlify.com/products/deploy-previews/">deploy preview</a> feature.  It will create a staging site for the specific branch.</p>
<p>The final piece of my blogging infrastructure is an NPM utility called <a target="_blank" href="https://www.npmjs.com/package/cross-post-blog">cross-post</a>.  This will take the content from the main blog (in this case, the url for my CMS environment) and post to Hashnode and Dev.to.  This post is my first attempt at this, so I’m crossing fingers.</p>
<p>I’ve also added links to <a target="_blank" href="https://work.hirozed.com">Polywork</a> and <a target="_blank" href="https://read.cv/hirozed">read.cv</a>.  These are two services that show what I’ve done and where I’ve been in different formats.</p>
<p><a target="_blank" href="https://howivscode.com/hirozed">How I VSCode</a> is a service which allows you to share the extensions and themes I use on my editor of choice.  VSCode will be a blog post for a future time, but basically, the large ecosystem and wide adoption are definite benefits.</p>
<p>The widgets at the bottom of the site are based on a library called <a target="_blank" href="https://github.com/anuraghazra/github-readme-stats">GitHub readme stats</a>.  It is a set of scripts hosted on <a target="_blank" href="https://vercel.com">Vercel</a> that generates stats based on your GitHub info. It is meant for custom Readme files that you show on your GitHub page, but it works just as well on my site. The second widget is also from the same repo but pulls the information from <a target="_blank" href="https://wakatime.com">Wakatime</a>. Wakatime silently watches your code editors, in a non-creepy way, and gathers statistics on what language you are working in, how long you have spent on a project, and other metrics. I've been using it for years, and I find it a great metric on what other languages I've interacted with beyond PHP.</p>
<p>The final piece I want to talk about is the hirozed “brand”.  I pestered my sweet, patient partner Ashley to come up with an avatar that I could use.  I have an affinity for red pandas, so I wanted something based off of that.  Once she finally relented, she invented the perfect embodiment of hirozed.  My avatar is that of a nerdy red panda in the shape of a keycap, The banners she created, take that one step further and spell out my online persona also in keycaps.  I now have brand colors, which I have attempted to incorporate wherever I can.  Overall, I now have a sense of identity online.</p>
<p>I hope that my ramblings about my new online center of the web was interesting.  If you have any questions, please let me know and I’ll try to answer as best as I can.</p>
]]></content:encoded></item><item><title><![CDATA[TIL: IntersectionObserver Class in JavaScript]]></title><description><![CDATA[Okay, this was a few days ago, but 🤷🏻‍♂️.
Over the last week, I've been devouring The Complete JavaScript Course as a way to 1. Get over my fear of JavaScript (that's a post for a later time) and 2. Ensure my current carrer as a WordPress developer...]]></description><link>https://blog.hirozed.com/intersectionobserver-javascript</link><guid isPermaLink="true">https://blog.hirozed.com/intersectionobserver-javascript</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[Developer]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Sun, 18 Apr 2021 17:11:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1618765737707/ke-uzuAL3.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Okay, this was a few days ago, but 🤷🏻‍♂️.</p>
<p>Over the last week, I've been devouring <a target="_blank" href="https://www.udemy.com/course/the-complete-javascript-course/">The Complete JavaScript Course</a> as a way to 1. Get over my fear of JavaScript (that's a post for a later time) and 2. Ensure my current carrer as a WordPress developer doesn't stay stuck in the pre-Gutenberg world (that's also another tale for another time).  The course itself was fantastic, and has put me in a better place mentally and emotionally to take on JS/Gutenberg projects.</p>
<p>There was one section that I wanted to write about today.  It's a feature that I’d never heard of before and would solve some past issues I've seen at work regarding components of a websites sliding into view and triggering an action.</p>
<p>It’s the ✨ IntersectionObserver ✨ class.</p>
<p>The JavaScript <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver">IntersectionObserver</a> class (which is part of the <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API">Intersection Observer API</a>) can be used to indicate when a portion of a website scrolls a specified distance down the page or within reach of an element:</p>
<p>From there, you can do wonderful things:</p>
<ul>
<li>Set the navigation bar to stick to the top of the page when scrolling past a certain point.</li>
<li>Lazy load images when or before the come into view.</li>
<li>Ease sections into view on scroll.</li>
</ul>
<p><a href="https://assets.hirozed.xyz/viewport.png"></a><img alt="Screen capture of browser to illustrate the nav reaching a portion of the page." src="https://assets.hirozed.xyz/viewport.png" /></p>
<p>Below is an example of a sticky navigation from the class’s Github repository:</p>
<p><a target="_blank" href="https://github.com/jonasschmedtmann/complete-javascript-course/blob/master/13-Advanced-DOM-Bankist/final/script.js#L137-L156">The Complete JavaScript Course - section 13: Advanced DOM and Events</a> credit <a target="_blank" href="https://codingheroes.io/">Jonas Schmedtmann</a>.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Sticky navigation: Intersection Observer API</span>

<span class="hljs-comment">// Get the first section of content based on the .header class</span>
<span class="hljs-keyword">const</span> header = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'.header'</span>);

<span class="hljs-comment">// Get the height of the navigation bar</span>
<span class="hljs-keyword">const</span> navHeight = nav.getBoundingClientRect().height;

<span class="hljs-comment">// Add or remove the sticky class to the nav bar,</span>
<span class="hljs-comment">// based on the entries retrieved from the IntersectionObserver class.</span>
<span class="hljs-keyword">const</span> stickyNav = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">entries</span>) </span>{
  <span class="hljs-comment">// There is only one header, so we don't need to loop,</span>
  <span class="hljs-comment">// and can deconstruct the array.</span>
  <span class="hljs-keyword">const</span> [entry] = entries;

  <span class="hljs-comment">// This is where the magic happens.</span>
  <span class="hljs-comment">// When the header is past the viewport, add the sticky class.</span>
  <span class="hljs-comment">// Else, when it comes back into view, remove the class.</span>
  <span class="hljs-keyword">if</span> (!entry.isIntersecting) nav.classList.add(<span class="hljs-string">'sticky'</span>);
  <span class="hljs-keyword">else</span> nav.classList.remove(<span class="hljs-string">'sticky'</span>);
};

<span class="hljs-comment">// Calling the IntersectionObserver class.</span>
<span class="hljs-keyword">const</span> headerObserver = <span class="hljs-keyword">new</span> IntersectionObserver(stickyNav, {
  <span class="hljs-attr">root</span>: <span class="hljs-literal">null</span>, <span class="hljs-comment">// Declaring null uses the entire viewport.</span>
  <span class="hljs-attr">threshold</span>: <span class="hljs-number">0</span>, <span class="hljs-comment">//  The percentage of the header to come into view.</span>
  <span class="hljs-attr">rootMargin</span>: <span class="hljs-string">`-<span class="hljs-subst">${navHeight}</span>px`</span>, <span class="hljs-comment">// The offset based on the nav bar's height.</span>
});

<span class="hljs-comment">// Get some popcorn, the fun is about to start.</span>
headerObserver.observe(header);
</code></pre>
<p>I also want to point out <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect"><code>getBoundingClientRect</code></a>. This function provides the size of an element and where it's located in relation to the viewport.  In the example above, Jonas only uses the height value, but you can grab the size and the distance from the viewport as well.</p>
<p>Learning about the Intersection Observer API was an unexpected and exciting piece of the huge amount of information I downloaded into my brain. I can see using the API as a much more reliable method for detecting when sections of the site come into and out of view, and replacing a placeholder with a higher quality image.  Causing text to zoom in when the container div scrolls into view.  The possibilities are endless!</p>
<p>Photo by <a href="https://unsplash.com/@valou_c?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Valou _c</a> on <a href="https://unsplash.com/s/photos/crossroads?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[Growing by Giving Back]]></title><description><![CDATA[This talk is near and dear to my heart.  I've had successes and hardships, but I keep coming back.  Now, as an organizer I hope to keep this rewarding project going for as long as I can.
Synopsis: Nine years ago, I was just starting out as a full-tim...]]></description><link>https://blog.hirozed.com/growing-by-giving-back</link><guid isPermaLink="true">https://blog.hirozed.com/growing-by-giving-back</guid><category><![CDATA[General Advice]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Mon, 24 Sep 2018 23:27:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622335383935/YIIRFI-qL.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This talk is near and dear to my heart.  I've had successes and hardships, but I keep coming back.  Now, as an organizer I hope to keep this rewarding project going for as long as I can.</p>
<p><strong>Synopsis</strong>: Nine years ago, I was just starting out as a full-time developer when I heard about a brand new volunteer opportunity. New England GiveCamp set out to develop websites for charities over the course of one weekend. I volunteered to use my newfound skills to help non-profits, and I haven’t stopped since. In this talk, I’ll discuss the feedback loop of giving back — how volunteering has helped me grow as a developer, which in turn allows me to give even more.</p>
<p><a target="_blank" href="https://slides.hirozed.com/talks/giving/index.html">Slides</a></p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/n_saIjwCIfc"></iframe>

<p>Photo by Erik Mclean from Pexels</p>
]]></content:encoded></item><item><title><![CDATA[Rewrite Rules: What and Why]]></title><description><![CDATA[To kick off the first Boston WP meetup of 2018, I tried to have some fun talking about rewrite rules – which isn’t an overly exciting subject – with trying to see how many “The Princess Bride” references I could make. While I was entertained, I think...]]></description><link>https://blog.hirozed.com/rewrite-rules-what-and-why</link><guid isPermaLink="true">https://blog.hirozed.com/rewrite-rules-what-and-why</guid><category><![CDATA[WordPress]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Tue, 30 Jan 2018 00:25:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622335519728/7CCvTCqxQ.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>To kick off the first Boston WP meetup of 2018, I tried to have some fun talking about rewrite rules – which isn’t an overly exciting subject – with trying to see how many “The Princess Bride” references I could make. While I was entertained, I think I might have lost the audience. A piece of feedback after the talk was it would have been more relatable to hear about why I was talking about rewrites. This is something I will most certainly keep in the back of my mind for the next talk.</p>
<p>I also went way out of my comfort zone and opened the talk with a modified version of the Impressive Clergyman’s “Mawwage” speech. Since this talk wasn’t recorded (thank goodness), I’ll immortalize the poem here:</p>
<pre><code>Wewites. Wewites are what brings us togeva, today.
Wewites those incredible wules
That code <span class="hljs-keyword">within</span> the code
</code></pre><p><strong>Synopsis</strong>: Rewrite rules is a useful feature of WordPress. Without it, there wouldn’t be easy to read urls for websites. In this talk, Jim will show what rewrite rules are, how to configure, and tools to manage and test rules.</p>
<p><a target="_blank" href="https://slides.hirozed.com/talks/rewrite/index.html">Slides</a></p>
<p>Photo by Joshua Miranda from Pexels</p>
]]></content:encoded></item><item><title><![CDATA[It's Never Too Soon to be Fitted for a Tinfoil Hat]]></title><description><![CDATA[For my first WordCamp, I did a WordPress Developer 101 talk on security. It was shorter than I would have liked, and I got a lot of questions after the talk about what I should have covered. There is a lot to cover in regard to security, so I wasn’t ...]]></description><link>https://blog.hirozed.com/its-never-too-soon-to-be-fitted-for-a-tinfoil-hat</link><guid isPermaLink="true">https://blog.hirozed.com/its-never-too-soon-to-be-fitted-for-a-tinfoil-hat</guid><category><![CDATA[WordPress]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Sat, 22 Jul 2017 23:24:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622335686725/G4uImVqu5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For my first WordCamp, I did a WordPress Developer 101 talk on security. It was shorter than I would have liked, and I got a lot of questions after the talk about what I should have covered. There is a lot to cover in regard to security, so I wasn’t surprised to get responses like that. I do hope what I did cover was useful.</p>
<p><strong>Synopsis</strong>: No matter the size of the site, getting hacked is a painful process to deal with. As a developer, it is important to know what you can do to prevent possible attack vectors. In this talk, Jim will show what you can do to harden your code and ensure your project will be secure.</p>
<p><a target="_blank" href="https://slides.hirozed.com/talks/tinfoil/index.html">Slides</a></p>
<p><iframe width="560" height="315" src="https://videopress.com/embed/kjVPsp0d"></iframe></p>


<p>Photo by <a href="https://unsplash.com/@tomradetzki?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Tom Radetzki</a> on <a href="https://unsplash.com/s/photos/tinfoil-hat?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[Displaying Content on Your Terms with WP_Query]]></title><description><![CDATA[I’ve been wanting to do this talk for a while. During my time at STAT, I’ve had to be creative with using WP_Query, so using the code I’ve written for the site were the perfect examples for the talk. I’m still working on getting my “Um” count down an...]]></description><link>https://blog.hirozed.com/displaying-content-on-your-terms-with-wpquery</link><guid isPermaLink="true">https://blog.hirozed.com/displaying-content-on-your-terms-with-wpquery</guid><category><![CDATA[WordPress]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Mon, 22 May 2017 23:22:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622335878214/qDmKj3wfQ.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I’ve been wanting to do this talk for a while. During my time at STAT, I’ve had to be creative with using WP_Query, so using the code I’ve written for the site were the perfect examples for the talk. I’m still working on getting my “Um” count down and other nervous habits, but I’m getting more comfortable speaking in public.</p>
<p><strong>Synopsis</strong>: WP_Query is a crucial piece of WordPress. It pulls content from the database in order to display on the site. Knowing this powerful class allows developers to manipulate content within themes and plugins. But, with great power comes great responsibility. Jim will show how he has used WP_Query within the themes and plugins that drive the STAT website.</p>
<p><a target="_blank" href="https://slides.hirozed.com/talks/wp-query/index.html">Slides</a></p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/S5zE2kGpW8Q"></iframe>

<p>Photo by <a href="https://unsplash.com/@ryoji__iwata?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ryoji Iwata</a> on <a href="https://unsplash.com/s/photos/puzzle?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[Self Hosting Beyond Your WordPress Website]]></title><description><![CDATA[This is my first ever talk. I was extremely nervous, despite discussing a subject I like to talk about. I think the talk was well received, and there were some great questions.
Synopsis: Self hosting WordPress offers more freedom and flexibility than...]]></description><link>https://blog.hirozed.com/self-hosting-beyond-your-wordpress-website</link><guid isPermaLink="true">https://blog.hirozed.com/self-hosting-beyond-your-wordpress-website</guid><category><![CDATA[WordPress]]></category><category><![CDATA[Web Hosting]]></category><dc:creator><![CDATA[Jim Reevior]]></dc:creator><pubDate>Mon, 25 Apr 2016 23:07:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622336011238/hewUSnpB0.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is my first ever talk. I was extremely nervous, despite discussing a subject I like to talk about. I think the talk was well received, and there were some great questions.</p>
<p><strong>Synopsis</strong>: Self hosting WordPress offers more freedom and flexibility than using WordPress.com, but there are still restrictions. With the dropping prices and increasing performance of Virtual Private Servers, self hosting not just your website, but your entire server is quite possible. Jim will talk about why you should consider self hosting from the server level up, how to get started with a VPS, and the basics of configuring and monitoring your own private internet island.</p>
<p><a target="_blank" href="https://slides.hirozed.com/talks/self-hosting-slides.pdf">Slides (PDF)</a> | <a target="_blank" href="https://slides.hirozed.com/talks/self-hosting-resources.pdf">Resources (PDF)</a></p>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/jKUDxkUGQCU"></iframe>

<p>Photo by <a href="https://unsplash.com/@helloimnik?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Hello I'm Nik</a> on <a href="https://unsplash.com/s/photos/raspberry-pi?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item></channel></rss>