<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" >

<channel><title><![CDATA[injinia - Blog]]></title><link><![CDATA[https://www.injinia.com/blog]]></link><description><![CDATA[Blog]]></description><pubDate>Mon, 30 Mar 2026 22:25:30 -0700</pubDate><generator>Weebly</generator><item><title><![CDATA[Tools I Use: OpenCode + OpenRouter + The "Pulse" of the Internet]]></title><link><![CDATA[https://www.injinia.com/blog/tools-i-use-opencode-openrouter-the-pulse-of-the-internet]]></link><comments><![CDATA[https://www.injinia.com/blog/tools-i-use-opencode-openrouter-the-pulse-of-the-internet#comments]]></comments><pubDate>Mon, 30 Mar 2026 20:09:56 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.injinia.com/blog/tools-i-use-opencode-openrouter-the-pulse-of-the-internet</guid><description><![CDATA[I&rsquo;ve been spending a lot of time in the terminal lately. There is something satisfyingly efficient about staying in one window to get work done, rather than tab-switching until my browser looks like a deck of cards.Recently, I&rsquo;ve moved my primary AI workflow over to OpenCode. &#8203;It&rsquo;s the open-source answer to things like Claude Code or Cursor, but it gives you back the steering wheel. If you like staying nimble, this is a setup worth looking at.  &#8203;The Stack: OpenCode  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph">I&rsquo;ve been spending a lot of time in the terminal lately. There is something satisfyingly efficient about staying in one window to get work done, rather than tab-switching until my browser looks like a deck of cards.<br />Recently, I&rsquo;ve moved my primary AI workflow over to <strong>OpenCode</strong>. <br /><br />&#8203;It&rsquo;s the open-source answer to things like Claude Code or Cursor, but it gives you back the steering wheel. If you like staying nimble, this is a setup worth looking at.</div>  <h2 class="wsite-content-title">&#8203;<span style="font-weight:400">The Stack: OpenCode &amp; OpenRouter</span></h2>  <div class="paragraph"></div>  <div class="paragraph"><span>Most people use these tools with a single API key tied to one company. I prefer&nbsp;</span><strong>OpenRouter</strong><span>.</span><br /><span>Think of it as a universal power adapter. Instead of being locked into one provider, you point OpenCode at OpenRouter, and suddenly you can swap "brains" on the fly. Want the logic of Claude 3.5? The speed of Llama? The cost-effectiveness of DeepSeek? You just toggle a setting.<br />&#8203;</span><br /><span>To get them talking, I just add a couple of lines to my .zshrc (or .bashrc for the Linux purists):</span></div>  <div id="174122157964472270"><div><style type="text/css">	#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--light {  padding: 20px 0px;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--light .header .paragraph {  margin: 0;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--dark {  padding: 20px 0px;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--dark .header .paragraph {  margin: 0;}#element-b925586c-1d9e-4f64-b78f-02ab2807e289 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-b925586c-1d9e-4f64-b78f-02ab2807e289" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph"></div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph"><span>&#8203;Now, when I fire up OpenCode, I&rsquo;m not just talking to one AI; I&rsquo;m talking to the best model for the job at that exact moment.</span></div>  <h2 class="wsite-content-title"><span style="font-weight:400">The Secret Sauce: last30days-skill</span></h2>  <div class="paragraph"><span>The biggest hurdle with AI is the "knowledge cutoff." It knows a lot about 2024, but it&rsquo;s often clueless about what happened on Reddit three hours ago.<br />&#8203;</span><br /><span>I&rsquo;ve started using a specific skill called&nbsp;</span><strong>last30days</strong><span>, originally built by Matt Van Horn. Even though it was designed for Claude, it works perfectly with OpenCode&rsquo;s skill architecture. It gives the AI "eyes" on:</span><ul><li><strong>Reddit &amp; Hacker News</strong>&nbsp;(The "boots on the ground" sentiment)</li><li><strong>X (Twitter)</strong>&nbsp;(The immediate news cycle)</li><li><strong>YouTube</strong>&nbsp;(The deep-dive tutorials)</li><li><strong>Polymarket</strong>&nbsp;(Where people are actually putting their money)</li></ul> <span>How to add it:</span><ol><li>Grab the SKILL.md file from the&nbsp;<a href="https://github.com/mvanhorn/last30days-skill">last30days GitHub</a>.</li><li>Drop it into your OpenCode skills folder (usually ~/.config/opencode/skills/).</li><li>Restart your session.</li></ol></div>  <h2 class="wsite-content-title"><span style="font-weight:400">Why this matters (even if you don't code)</span></h2>  <div class="paragraph"><span>I know, "OpenCode" sounds like it&rsquo;s strictly for developers. But once you give an agent the ability to scan real-time sentiment, it becomes a powerful research assistant for almost any industry.<br /></span><br /><strong>Take a Realtor, for example.<br />&#8203;</strong><span>Say a client is nervous about listing their house because of a headline they saw this morning. Instead of digging through news sites, the Realtor can ask OpenCode:</span><br /><span><em>"Use the /last30days skill to check r/Vancouver and X for any shifts in buyer sentiment this week. Also, check Polymarket for the latest odds on the June interest rate cut."<br /></em></span><br /><span>Within seconds, the AI returns a summary:</span><ul><li><em>&ldquo;Reddit users are reporting increased activity at open houses in North Van over the weekend.&rdquo;</em></li><li><em>&ldquo;Prediction markets have moved from a 20% to a 65% chance of a rate cut.&rdquo;</em></li></ul> <span>That Realtor isn't just reciting a script; they have real-time data to back up their advice.</span></div>  <h2 class="wsite-content-title"><span style="font-weight:400">Final Thoughts</span></h2>  <div class="paragraph"><span>&#8203;We talk a lot about "Agile" and "Efficiency" at Injinia, but usually, that refers to teams and processes. Sometimes, it&rsquo;s just about having the right tool in your belt that cuts out the noise.</span><br /><span>OpenCode paired with OpenRouter gives you the flexibility; the last30days skill gives you the context. If you're tired of AI that feels "stuck in last year," give this a shot.</span><br /><strong>What are you using to stay on top of real-time info? Drop me a note, I&rsquo;d love to hear about it.</strong></div>]]></content:encoded></item><item><title><![CDATA[And now for something completely different...]]></title><link><![CDATA[https://www.injinia.com/blog/and-now-for-something-completely-different]]></link><comments><![CDATA[https://www.injinia.com/blog/and-now-for-something-completely-different#comments]]></comments><pubDate>Tue, 26 Mar 2024 18:09:07 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.injinia.com/blog/and-now-for-something-completely-different</guid><description><![CDATA[DIY Hammock   Starting a new DIY project always piques my interest as a coder - it's like tackling a new programming challenge. My latest endeavor was creating an 11-foot netless gathered-end hammock from scratch, optimizing it with some custom design tweaks. To get a solid foundation, I did a deep dive into over 50 hammock-related patents one afternoon, essentially auditing the codebase of prior art. So many fascinating implementations and experimental features to explore!From there, I immersed [...] ]]></description><content:encoded><![CDATA[<h2 class="wsite-content-title">DIY Hammock</h2>  <span class='imgPusher' style='float:right;height:0px'></span><span style='display: table;width:auto;position:relative;float:right;max-width:100%;;clear:right;margin-top:0px;*margin-top:0px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240308-153649-hdr.jpg?1711580031" style="margin-top: 5px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="text-align:left;display:block;">Starting a new DIY project always piques my interest as a coder - it's like tackling a new programming challenge. My latest endeavor was creating an 11-foot netless gathered-end hammock from scratch, optimizing it with some custom design tweaks. To get a solid foundation, I did a deep dive into over 50 hammock-related patents one afternoon, essentially auditing the codebase of prior art. So many fascinating implementations and experimental features to explore!<br /><br />From there, I immersed myself in the hammockforums.net community, the open-source knowledge-base for this niche. I spent hours trawling through threads, extracting insights from veteran hammockers on best practices, anti-patterns to avoid, and new feature enhancements to consider. Definitely some gems in there amongst the version history!<br />&#8203;<br />With a solid architecture mapped out from my research, I was ready to start prototyping my optimized hammock build. Iterative development and bug testing in the real-world would commence.</div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <h2 class="wsite-content-title"><span style="font-weight:400">Gathering Materials</span></h2>  <span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:212px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240322-120112-hdr.jpg?1711579611" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">For materials, I looked back at what I had used for my previous hammock prototype - the HyperD XL fabric and thread from ripstopbytheroll.com, some miscellaneous cordage from Amazon.ca, and a few components I already had on hand.&nbsp;<span style="color:rgb(41, 38, 27)">Initially, I had planned to source everything directly from Dutchweargear.com for a streamlined supply chain. But after factoring in shipping fees and currency exchange rates, I decided to see if there was a Canadian supplier for the components.<br />&#8203;</span><br />After some research, I discovered a promising Canadian vendor - hofmanoutdoorgearsupply.ca. They stock&nbsp;a wide range of hammock, camping and MYOG (make your own gear) supplies. While they didn't carry the exact HyperD XL fabric, they did offer Hexon W from Dutchwear, which seemed to be an optimized fabric designed specifically for hammocks.<br /></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <h2 class="wsite-content-title"><span style="font-weight:400">My hammock "tech stack"</span></h2>  <div class="paragraph"><ol><li>&#8203;<a href="https://hofmanoutdoorgearsupply.ca/ripstop/208-16oz-hexon-w.html" target="_blank">Hexon W</a>&nbsp;fabric</li><li>Gutterman Mara&nbsp;<a href="https://hofmanoutdoorgearsupply.ca/accessories/34-gutermann-mara-70.html" target="_blank">Thread</a></li><li><a href="https://hofmanoutdoorgearsupply.ca/suspension/140-hammock-suspension-kit.html" target="_blank">Tree Straps &amp; Buckles</a>*</li><li>7/64" Amsteel&nbsp;<a href="https://hofmanoutdoorgearsupply.ca/cordage/59-amsteel-7-64.html" target="_blank">Ridgeline &amp; Suspension</a>*</li><li><a href="https://hofmanoutdoorgearsupply.ca/accessories/84-pack-hook.html" target="_blank">Pack Hooks</a></li><li><a href="https://hofmanoutdoorgearsupply.ca/accessories/78-lineloc-3.html" target="_blank">Line Locks</a></li><li><a href="https://hofmanoutdoorgearsupply.ca/plastic-bits/230-line-lock-hook.html" target="_blank">Line Lock Hooks</a></li><li><a href="https://hofmanoutdoorgearsupply.ca/accessories/212-mini-cord-lock.html" target="_blank">Cord Locks</a></li><li>1/8"&nbsp;<a href="https://hofmanoutdoorgearsupply.ca/cordage/29-1-8-shock-cord-black.html" target="_blank">Shock Cord</a></li><li>HWMPE&nbsp;<a href="https://www.onewindoutdoors.com/products/uhmwpe-tent-guyline" target="_blank">Guy Line</a></li><li>1/2"&nbsp;<a href="https://hofmanoutdoorgearsupply.ca/accessories/33-grosgrain.html" target="_blank">Grosgrain</a></li><li>1"&nbsp;<a href="https://hofmanoutdoorgearsupply.ca/webbing/86-polyester-webbing.html" target="_blank">webbing</a></li></ol><br /><span style="color:rgb(41, 38, 27)">&#8203;With my updated supply chain and tech stack selected, I could proceed to the next phase of building and integration...</span></div>  <h2 class="wsite-content-title"><span style="font-weight:400">Crafting the Hammock Body</span></h2>  <span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:86px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/editor/img-20240322-120100-hdr.jpg?1711579741" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="text-align:left;display:block;">With the fabric acquired, I carefully measured and cut it to 11'5" including seam allowances to achieve the desired 11' finished length. Applying tips that I learned&nbsp;<em>after</em>&nbsp;my last&nbsp;build, I marked fold-to&nbsp;guides along all edges - 1" rolled hems on the ends and 1/2" hems on the sides.<br /><br /><span style="font-weight:bolder"><a href="https://www.youtube.com/watch?v=d0VfSILeRGs" target="_blank">&#8203;Knotty Mod</a> Prep</span><br />At 2' and 4.5' from the foot end on each side, I marked&nbsp;buttonhole reinforcements where the shock cords would anchor for the Knotty Mod, deviating slightly from standard implementations.</div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:77px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240323-143344-hdr.jpg?1711579934" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="text-align:left;display:block;"><span style="font-weight:bolder">Gear Attachment Points</span><br /><span>The centers of each end were marked for larger buttonholes to attach a structural ridgeline internally and grosgrain webbing loops to accommodate gear hooks.</span></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <span class='imgPusher' style='float:right;height:18px'></span><span style='display: table;width:auto;position:relative;float:right;max-width:100%;;clear:right;margin-top:20px;*margin-top:40px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240322-171331-hdr.jpg?1711580004" style="margin-top: 5px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;"><span style="font-weight:bolder">Sewing Process</span><br /><span>Swapping between machine setups, feet, retensioning, and replacing a couple bent needles, we finally mastered the automatic buttonhole feature to install all 6 reinforcements. A team effort with my wife and daughter!&nbsp;</span><em>Note: Make the ridgeline hole 3/4" not 1/4" next time.</em><br /><br /><span>Hemming went smoothly once edges were folded and pinned to ensure everything was aligned and to position the buttonholes correctly. The ends required sewing in the grosgrain loops, using some surplus 3/4" military webbing I had lying around (500' for some reason?),&nbsp;instead of standard 1/2" for added durability. The triple parallel stitching for the end channel was hard to not fully OCD over.&nbsp;While not required for whipped ends, I included a 1" channel to allow experimenting with different suspension systems later on.</span><br /><br /><span>Once it was all hemmed, I began adding the tie out points and a few attachment point loops along the edges using 3" sections of the 1/2" grosgrain. I pulled some 1/8" shock cord through the channel created in each side to form the Knotty Mod. The shock cord was anchored to a grosgrain loop at the foot end, and to a Line Lock sewn into another grosgrain loop near the middle of the hammock. I added one to each side to test out options for different diagonal laying positions.</span></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240323-142631-hdr.jpg?1711580223" alt="Picture" style="width:515;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title">&#8203;<span style="font-weight:400">Ridgeline and Suspension</span></h2>  <span class='imgPusher' style='float:right;height:0px'></span><span style='display: table;width:auto;position:relative;float:right;max-width:100%;;clear:right;margin-top:8px;*margin-top:16px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/editor/img-20240323-153414-hdr.jpg?1711579970" style="margin-top: 5px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;"><strong>Suspension</strong><br />Having tried a number of different suspensions, I've found I like the ones that are simple, fully adjustable, don't take up a lot of room, require as little "hardware" as possible, and are quick to set up and take down. Most suspensions, I've played with, require at least 2 connect/disconnect points on each end, and you wind up with multiple bits that need to be stored or put together each time. For this hammock, I was looking for something as simple as possible. Originally I was going to go with <a href="https://dutchwaregear.com/product/beetle-buckles/" target="_blank">beetle buckles</a> and a <a href="https://dutchwaregear.com/product/sew-on-dutch-clips/" target="_blank">Dutch clip</a> with a tree strap and continuous loop. However, with buying things from Hofman instead of Dutchwear and wanting to keep costs down I went with <a href="https://dutchwaregear.com/product/cinch-buckle/" target="_blank">cinch buckles</a>, <a href="https://www.youtube.com/watch?v=oIJvXvCoxH4" target="_blank">continuous loops</a>, <a href="https://hofmanoutdoorgearsupply.ca/webbing/86-polyester-webbing.html" target="_blank">tree straps</a>, and a <a href="https://www.youtube.com/watch?v=K0eZz36PRYI" target="_blank">soft shackle</a>.<br /><br />Feeding the continuous loop attached to the cinch buckle through the end channel made for a simple connection to the hammock.<br /></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <span class='imgPusher' style='float:left;height:0px'></span><span style='display: table;width:89px;position:relative;float:left;max-width:100%;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240308-153206-hdr.jpg?1711580469" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;"><span>The cinch buckle makes it very easy to adjust the suspension, and is lite and small. To solve for all of the connecting and disconnecting every time, as well as to speed things up I leave the tree strap connected to the cinch buckle all the time. Instead of looping the end of the line through the loop at the other end of the tree strap, I simply use a soft shackle to connect the two. This seems quite simple and fast for me now, and enables a cleaner setup, without straps or hammock ending up on the ground. Great for setting up in places where there is mud, wet sand, thorn bushes, or anything else you don't want to have to deal with cleaning up.</span><br /><br /><strong>Ridgeline</strong><br /><span>I've been using various types of ridgelines for quite a while. Before I knew what they were or why they were, I added one on to my first hammock as it made setup a lot simpler and more consistent. After reading of the different types, pros and cons for each, I tested out a number of styles, and, after much experimentation, found that a fixed structural ridgeline worked best for me.</span><br /><br /><span>I "discovered"&nbsp;</span><a href="https://www.samsonrope.com/utility/amsteel" target="_blank">Amsteel&nbsp;</a><span>rope a while ago, and it is exrtemly useful for lightweight hammock setups. I've made a number of ridgelines with it, so set about making one for the new hammock. I measured the final length of the hammock after gatheirng the ends, and made a ridgeline with&nbsp;</span><a href="https://www.animatedknots.com/brummel-eye-splice-knot-demo" target="_blank">locked brummel loops</a><span>&nbsp;at each end. For my liking and after a few experimental naps in the hammock my ridgeline is 85.8".</span><br /><br /><span>&#8203;To connect the ridgeline to the continuous loop, I used a&nbsp;</span><a href="https://www.thesprucecrafts.com/how-to-tie-larks-head-knot-340197" target="_blank">lark's head</a><span>&nbsp;from the end of the ridgeline, through the buttonhole in the center of the hammock end channel to connect it to the continuous loop. The buttonhole I had sewn was only 1/4", and should have been larger. It was quite a chore getting it connected. For the other end I used a small soft shackle so that I can disconnect to add things like permanent ridgeline organizers or things of that sort.</span></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.injinia.com/uploads/4/1/6/7/4167193/img-20240323-143719-hdr_orig.jpg" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title"><span style="font-weight:400">Fashioning the <a href="https://www.hammockforums.net/forum/showthread.php/27870-What-is-a-quot-bishop-bag-quot" target="_blank">Bishop Bag</a></span></h2>  <div class="paragraph"><span>No hammock is complete without a convenient storage solution, so I whipped up a bishop bag to hold it all together. A bishop bag is perfect for stowing away my hammock and makes it easy to keep everything off the ground and accessible. I made it large enough to store the hammock, suspension, an underquilt and a bugnet. (more on these sometime later).</span></div>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.injinia.com/uploads/4/1/6/7/4167193/img-20240324-223828-hdr_orig.jpg" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title"><span style="font-weight:400">The Final Touches</span></h2>  <span class='imgPusher' style='float:right;height:0px'></span><span style='display: table;width:auto;position:relative;float:right;max-width:100%;;clear:right;margin-top:18px;*margin-top:36px'><a><img src="https://www.injinia.com/uploads/4/1/6/7/4167193/published/img-20240324-224924-hdr.jpg?1711580261" style="margin-top: 5px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; border-width:1px;padding:3px; max-width:100%" alt="Picture" class="galleryImageBorder wsite-image" /></a><span style="display: table-caption; caption-side: bottom; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;" class="wsite-caption"></span></span> <div class="paragraph" style="display:block;">n old all-in-one hammock I have had 4 small pockets, one on each side at each end, about 1' from each end. I found these very useful for keeping things close at hand, without having them wind up in the bottom of the hammock, and without having them hanging on the ridgeline. I had some fabric left over, and some clips intended for tarp tie outs, so I made a couple of pockets. The clips allow for them to be positioned wherever they are needed.&nbsp;<br /><br />With the last bit of fabric I made a simple ridgeline bag as well using the pack clips.</div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div><div class="wsite-image wsite-image-border-none " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.injinia.com/uploads/4/1/6/7/4167193/img-20240324-225017-hdr_orig.jpg" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <h2 class="wsite-content-title"><span style="font-weight:400">Enjoying the results</span></h2>  <div class="paragraph">Since the weather outside is typical Alberta spring (i.e. 10 inches of snow and -14 C) I had to setup a <a href="https://www.hammockforums.net/forum/showthread.php/141977-Tensahedron-Stand?highlight=tensahedron" target="_blank">tensahedron</a> stand made out of old army surplus antenna mast poles in the basement. (I'll post some info about that, as well as some plans for a smaller, packable aluminum one soon!)</div>]]></content:encoded></item><item><title><![CDATA[AI coding resources from Fuller's Library in New Hampshire]]></title><link><![CDATA[https://www.injinia.com/blog/ai-coding-resources-from-fullers-library-in-new-hampshire]]></link><comments><![CDATA[https://www.injinia.com/blog/ai-coding-resources-from-fullers-library-in-new-hampshire#comments]]></comments><pubDate>Thu, 29 Feb 2024 08:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.injinia.com/blog/ai-coding-resources-from-fullers-library-in-new-hampshire</guid><description><![CDATA[Hi there Mrs. Olley and Alisha!Thank you so much for reaching out and providing that wonderful feedback. I really appreciate you taking the time to share those kind words and resources.Mrs. Olley, it's fantastic to hear that the links page was so helpful for you and the students you're tutoring on their coding project! I'm delighted that Alisha and the rest of the group found value in the programming language resources listed there. Please pass along my congratulations to all of them on the impr [...] ]]></description><content:encoded><![CDATA[<div class="paragraph">Hi there Mrs. Olley and Alisha!<br /><br />Thank you so much for reaching out and providing that wonderful feedback. I really appreciate you taking the time to share those kind words and resources.<br /><br />Mrs. Olley, it's fantastic to hear that the links page was so helpful for you and the students you're tutoring on their coding project! I'm delighted that Alisha and the rest of the group found value in the programming language resources listed there. Please pass along my congratulations to all of them on the impressive work they're doing.<br /><br />And a huge thank you to Alisha for surfacing that excellent collection of AI coding and programming tools (<a href="http://www.aiprm.com/education/ai-coding-and-programming-tools/" target="_blank">www.aiprm.com/education/ai-coding-and-programming-tools/</a>)! I'd be more than happy to include that on the links page. What a fantastic resource, especially as artificial intelligence integrates more into classroom curriculums these days. I can definitely see the benefit in students getting some hands-on experience with AI coding assistants.<br /><br />In fact, I think that opens up so many fun possibilities for engaging young minds! A few project ideas that come to mind:<ol style="color:rgb(41, 38, 27)"><li>Use an AI storytelling tool to collaboratively write and illustrate a wacky choose-your-own-adventure story as a class. The AI could help generate imaginative plot lines, characters and images based on the kids' silly prompts!</li><li>Have students train a simple AI image recognition model to identify their favourite toys, pets, foods or objects. They could take turns feeding it examples and watching as the AI slowly learns to distinguish between the different items. It's an engaging way to grasp the concept of machine learning.</li></ol><br />&#8203;The potential is endless when you blend that technical know-how with creativity! I'll be sure to give Alisha a shout-out on the links page for providing such a valuable resource.<br /><br />Wishing Alisha the best of luck with those upcoming report cards. With her clear enthusiasm for learning and exploring new tech, I've no doubt she's going to keep soaring. Please let me know if there's any other way I can be of assistance!<br /><br />If anyone is interested in learning more about the <a href="https://www.fullerslibrary.com/" target="_blank">Fuller's Library</a>, I'm sure they would be happy to show you around as well.</div>]]></content:encoded></item><item><title><![CDATA[Shout out to kids doing homeschooling!]]></title><link><![CDATA[https://www.injinia.com/blog/shout-out-to-kids-doing-homeschooling]]></link><comments><![CDATA[https://www.injinia.com/blog/shout-out-to-kids-doing-homeschooling#comments]]></comments><pubDate>Fri, 15 Dec 2023 08:00:00 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.injinia.com/blog/shout-out-to-kids-doing-homeschooling</guid><description><![CDATA[Hi Elizabeth,Thank you so much for reaching out and for your kind words about the links page. I'm delighted to hear that it has proven to be a valuable resource for you and the homeschooling students you guide on their coding journeys.First off, please pass along my sincere congratulations to Samantha! What an impressive initiative she has shown by discovering that insightful resource on "Introducing Coding to Young Minds" from BestCodingBootcamps. I would be more than happy to include that link [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Hi Elizabeth,<br /><br />Thank you so much for reaching out and for your kind words about the links page. I'm delighted to hear that it has proven to be a valuable resource for you and the homeschooling students you guide on their coding journeys.<br /><br />First off, please pass along my sincere congratulations to Samantha! What an impressive initiative she has shown by discovering that insightful resource on "Introducing Coding to Young Minds" from BestCodingBootcamps. I would be more than happy to include that link to the page. Resources like that are invaluable for nurturing young minds and sparking their interest in coding from an early age.<br /><br />It's incredibly heartening to see students like Samantha taking such an active role in enriching their own educational experience. Her eagerness to share that helpful advice piece demonstrates genuine enthusiasm for the subject matter. Please let her know how much I appreciate her motivation to enhance the learning resources available to her peers!<br /><br />As a homeschooling parent myself, I cannot emphasize enough the importance of fostering computational thinking and programming skills from a young age. It equips students with vital problem-solving abilities that will benefit them immensely, no matter what future path they pursue. Getting an early start can be so empowering and fun!<br /><br />A few thoughts on engaging young coding students:<ul style="color:rgb(41, 38, 27)"><li>Gamify the experience with coding puzzles, activities and visual programming tools</li><li>Encourage them to first simply play around, get curious and creative without boundaries</li><li>Relate coding concepts to video games, apps and tech they already understand and enjoy</li><li>Celebrate their "ah-ha!" moments of clarity, no matter how small</li></ul> <br />&#8203;The collaborative nature of your homeschooling environment sounds like the perfect nurturing space for igniting those coding sparks! I'm excited at the potential for us to keep sharing resources and insights.<br />&#8203;<br />Please give my warmest regards to Samantha and all the students. I look forward to any other suggestions they may have to continue enhancing the links page. Every new addition helps create more opportunities to inspire young innovators!</div>]]></content:encoded></item><item><title><![CDATA[Hooray for Coding Fun! A Big Thank You to Sarah and the Awesome Lyndhurst STEM Club for Girls!]]></title><link><![CDATA[https://www.injinia.com/blog/hooray-for-coding-fun-a-big-thank-you-to-sarah-and-the-awesome-lyndhurst-stem-club-for-girls]]></link><comments><![CDATA[https://www.injinia.com/blog/hooray-for-coding-fun-a-big-thank-you-to-sarah-and-the-awesome-lyndhurst-stem-club-for-girls#comments]]></comments><pubDate>Tue, 20 Jun 2023 02:46:20 GMT</pubDate><category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">https://www.injinia.com/blog/hooray-for-coding-fun-a-big-thank-you-to-sarah-and-the-awesome-lyndhurst-stem-club-for-girls</guid><description><![CDATA[In today's super cool world of technology, coding and programming are like magical powers that can make awesome things happen. Coding is like a wild rollercoaster ride of fun and creativity! It's a superpower that lets you create awesome things using your imagination and technology. You won't believe the amazing feeling when you see your ideas come to life as cool games, websites, or even robots!Let's give a high-five to Sarah from the Lyndhurst STEM Club for Girls! She's a rockstar who sent us  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph">In today's super cool world of technology, coding and programming are like magical powers that can make awesome things happen. Coding is like a wild rollercoaster ride of fun and creativity! It's a superpower that lets you create awesome things using your imagination and technology. You won't believe the amazing feeling when you see your ideas come to life as cool games, websites, or even robots!<br /><br />Let's give a high-five to Sarah from the Lyndhurst STEM Club for Girls! She's a rockstar who sent us a link to a <a href="https://www.qualtrics.com/blog/glossary-of-coding-and-programming-terms/" target="_blank">Glossary of Coding and Programming Terms</a>&mdash;a treasure chest of knowledge just for us coders! This magical glossary will help us understand all those fancy words that programmers use. Thanks a million, Sarah! You've made our coding journey even more awesome, and we're incredibly grateful for your generosity. Now we can all be coding wizards!<br /><br />STEM Clubs are like secret hideouts for young geniuses like you! They're places where we can come together, make friends, and explore the wonders of science, technology, engineering, and mathematics. The Lyndhurst STEM Club for Girls is one of many such clubs inspiring kids&nbsp;and helping us unleash our coding superpowers. Let's give a big cheer for STEM Clubs!<br /><br />Wishing Sarah and the Lyndhurst STEM Club for Girls a Super-Duper Coding Summer!&nbsp;As summer arrives, we hope it brings you endless coding adventures, creativity explosions, and mind-blowing projects. May your summer be filled with excitement and discoveries that make your coding dreams come true. You're all stars in our coding universe, and we can't wait to see the incredible things you'll create!<br />&#8203;<br />Learning to code is like stepping into a world of endless possibilities and unlimited fun.&nbsp;So, let's put on our coding capes, unleash our imaginations, and get ready for an amazing coding adventure this summer and beyond! You're all coding rockstars!</div>]]></content:encoded></item><item><title><![CDATA[AI generated test example: PyAutoGUI]]></title><link><![CDATA[https://www.injinia.com/blog/ai-generated-test-example-pyautogui]]></link><comments><![CDATA[https://www.injinia.com/blog/ai-generated-test-example-pyautogui#comments]]></comments><pubDate>Sat, 03 Jun 2023 07:00:00 GMT</pubDate><category><![CDATA[AI]]></category><category><![CDATA[python]]></category><category><![CDATA[web test automation]]></category><guid isPermaLink="false">https://www.injinia.com/blog/ai-generated-test-example-pyautogui</guid><description><![CDATA[After playing with the code for the last post a bit, a colleague asked how hard it would be to do the same with a random python library. A quick search turned up PyAutoGUI, which seems ok.Popping open the last chat that was used to generate the code for the previous post, and simply asking it to "Ok, now generate a python script to use the gherkin test case. Use the pyautogui library."This generates:&#8203;  	#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--light {  padding: 20px 0px; [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">After playing with the code for the last post a bit, a colleague asked how hard it would be to do the same with a random python library. A quick search turned up PyAutoGUI, which seems ok.<br /><br />Popping open the last chat that was used to generate the code for the previous post, and simply asking it <font color="#2a2a2a">to <em><strong>"Ok, now generate a python script to use the gherkin test case. Use the pyautogui library."<br /><br /></strong></em>This generates:</font>&#8203;<br /></div>  <div id="908117385765926402"><div><style type="text/css">	#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--light {  padding: 20px 0px;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--light .header .paragraph {  margin: 0;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--dark {  padding: 20px 0px;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--dark .header .paragraph {  margin: 0;}#element-20bdbc68-a974-45d3-a053-98f5fb48c987 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-20bdbc68-a974-45d3-a053-98f5fb48c987" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--light">    <div class="header">        <div class="paragraph">test_runner.py</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph">Hmm, now I just need to build a test library that will test AI generated tests.....</div>]]></content:encoded></item><item><title><![CDATA[Enhancing Traditional GUI Testing with AI]]></title><link><![CDATA[https://www.injinia.com/blog/enhancing-traditional-gui-testing-with-ai]]></link><comments><![CDATA[https://www.injinia.com/blog/enhancing-traditional-gui-testing-with-ai#comments]]></comments><pubDate>Thu, 01 Jun 2023 07:00:00 GMT</pubDate><category><![CDATA[AI]]></category><category><![CDATA[ruby]]></category><category><![CDATA[web test automation]]></category><guid isPermaLink="false">https://www.injinia.com/blog/enhancing-traditional-gui-testing-with-ai</guid><description><![CDATA[In the fast-paced world of software development, functional GUI testing plays a critical role in ensuring seamless user experiences. While traditional GUI testing approaches have been effective, the emergence of Artificial Intelligence (AI) has brought a new wave of possibilities to enhance and optimize the testing process. How can AI elevate traditional GUI testing? What are the benefits of utilizing test cases generated by AI. I'll give an example prompt and demonstrate how an AI can generate  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;"><font color="#2a2a2a">In the fast-paced world of software development, functional GUI testing plays a critical role in ensuring seamless user experiences. While traditional GUI testing approaches have been effective, the emergence of Artificial Intelligence (AI) has brought a new wave of possibilities to enhance and optimize the testing process. How can AI elevate traditional GUI testing? What are the benefits of utilizing test cases generated by AI. I'll give an example prompt and demonstrate how an AI can generate test cases to streamline the testing process.</font><br /><br /><strong><font color="#2a2a2a"><font size="3">The Power of AI</font></font></strong><br /><font color="#2a2a2a">Artificial Intelligence introduces a range of advancements that augment traditional GUI testing, enabling more efficient and effective processes. Rather than replacing traditional methods, AI serves as a valuable ally, complementing and enhancing existing practices. AI can leverage Natural Language Processing (NLP) algorithms to generate Gherkin-style test cases, further streamlining the testing process.<br /><br />To demonstrate the power of AI, let's consider an example prompt:</font><br /><em><strong><font color="#2a2a2a">"Write gherkin test cases to validate the login functionality."</font></strong></em><br /><br /><font color="#2a2a2a">The prompt produces structured test cases that describe the login functionality. Here's an example of test cases generated by the AI:</font></div>  <div id="811437769366042258"><div><style type="text/css">	#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--light {  padding: 20px 0px;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--light .header .paragraph {  margin: 0;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--dark {  padding: 20px 0px;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--dark .header .paragraph {  margin: 0;}#element-d9524875-e305-4247-b4db-88e3726aa336 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-d9524875-e305-4247-b4db-88e3726aa336" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">Login test case</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph" style="text-align:left;"><strong><font color="#2a2a2a" size="3">AI-powered Execution and Analysis</font></strong><br /><font color="#2a2a2a">With these test cases in hand, an existing test library like watir can be integrated seamlessly. With a few more prompts like,</font>&nbsp;<em><strong><font color="#2a2a2a">"Now generate the ruby code to run this test using the watir library. Use the page object pattern, and separate the code into the correct files. Use a test_params.yaml file to store the variables like urls, usernames, passwords, etc."</font></strong></em><br /><br /><font color="#2a2a2a">Here is what we get:</font></div>  <div id="358277656179116625"><div><style type="text/css">	#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--light {  padding: 20px 0px;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--light .header .paragraph {  margin: 0;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--dark {  padding: 20px 0px;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--dark .header .paragraph {  margin: 0;}#element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-74c3e28d-d1e9-4bae-9d7a-b8ec32202f16" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">test_parameters.yaml</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div id="935561735680905354"><div><style type="text/css">	#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--light {  padding: 20px 0px;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--light .header .paragraph {  margin: 0;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--dark {  padding: 20px 0px;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--dark .header .paragraph {  margin: 0;}#element-64d55648-61b4-4dbe-8db1-ed33c8410f07 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-64d55648-61b4-4dbe-8db1-ed33c8410f07" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">login_page.rb</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div id="766151701265012113"><div><style type="text/css">	#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--light {  padding: 20px 0px;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--light .header .paragraph {  margin: 0;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--dark {  padding: 20px 0px;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--dark .header .paragraph {  margin: 0;}#element-04a7f798-b1d3-4236-99fb-02c77a126955 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-04a7f798-b1d3-4236-99fb-02c77a126955" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">login_steps.rb</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div id="382961175139769059"><div><style type="text/css">	#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--light {  padding: 20px 0px;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--light .header .paragraph {  margin: 0;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--dark {  padding: 20px 0px;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--dark .header .paragraph {  margin: 0;}#element-22a72c00-b832-4760-9b9a-9c059f49f316 .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-22a72c00-b832-4760-9b9a-9c059f49f316" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">test_runner.rb</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph">It even generated some helpful instructions:</div>  <div id="980074054314286313"><div><style type="text/css">	#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--light {  padding: 20px 0px;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--light .header .paragraph {  margin: 0;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--dark {  padding: 20px 0px;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--dark .header .paragraph {  margin: 0;}#element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-6ccd561e-8d95-4dbc-a34c-d0d3be648f0c" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--dark">    <div class="header">        <div class="paragraph">instructions.txt</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph" style="text-align:left;"><strong><font color="#2a2a2a" size="3">Conclusion</font></strong><br /><font color="#2a2a2a">While<span>&nbsp;there is still some setup&nbsp;</span>and<span>&nbsp;configuration to&nbsp;</span>do<span>, we can see that&nbsp;</span>AI<span>&nbsp;brings a wealth of opportunities to enhance traditional&nbsp;</span>GUI<span>&nbsp;testing practices.&nbsp;</span>By<span>&nbsp;generating some of the basic&nbsp;</span>test<span>&nbsp;cases we can focus effort on doing the non</span>-<span>standard tests, poking around where we know the bugs hide.&nbsp;<br /><br /></span>Integrating<span>&nbsp;</span>AI<span>&nbsp;with existing&nbsp;</span>GUI<span>&nbsp;testing libraries allows&nbsp;</span>for<span>&nbsp;automated uses</span><span>&nbsp;of the generated&nbsp;</span>test<span>&nbsp;cases.&nbsp;<br />&#8203;</span>Embracing<span>&nbsp;</span>AI<span>&nbsp;</span>in<span>&nbsp;</span>GUI<span>&nbsp;testing is a powerful tool&nbsp;</span>in<span>&nbsp;our&nbsp;</span>QA<span>&nbsp;bag of tricks.&nbsp;</span>So<span>, let</span>'s embrace the potential of AI and unlock a new era of GUI testing!</font></div>]]></content:encoded></item><item><title><![CDATA[Tools I use: Mouse without borders]]></title><link><![CDATA[https://www.injinia.com/blog/tools-i-use-mouse-without-borders]]></link><comments><![CDATA[https://www.injinia.com/blog/tools-i-use-mouse-without-borders#comments]]></comments><pubDate>Mon, 01 May 2023 07:00:00 GMT</pubDate><category><![CDATA[mouse without borders]]></category><category><![CDATA[tools]]></category><guid isPermaLink="false">https://www.injinia.com/blog/tools-i-use-mouse-without-borders</guid><description><![CDATA[Hey there, multi-device multitasker! Are you tired of juggling multiple mice and keyboards while working on multiple computers? Well, say hello to Mouse without Borders! In this article, we'll explore how to set up and use Mouse without Borders on Windows to effortlessly control multiple computers. Let's get started!Download and InstallFirst things first, let's grab Mouse without Borders. Visit the official Microsoft Garage website (https://www.microsoft.com/en-us/garage/project-details.aspx?pro [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Hey there, multi-device multitasker! Are you tired of juggling multiple mice and keyboards while working on multiple computers? Well, say hello to Mouse without Borders! In this article, we'll explore how to set up and use Mouse without Borders on Windows to effortlessly control multiple computers. Let's get started!<br /><br /><strong>Download and Install<br /></strong>First things first, let's grab Mouse without Borders. Visit the official Microsoft Garage website (https://www.microsoft.com/en-us/garage/project-details.aspx?project=mouse-without-borders) and download the installer for Windows. Once the download is complete, run the installer and follow the on-screen instructions to install it on each computer you want to connect.<br /><br /><strong>Configuration<br /></strong>After installation, launch Mouse without Borders on each computer. You'll be prompted to choose if the computer is the main (server) or secondary (client) computer. Select the appropriate option for each machine accordingly.<br /><br /><strong>Set Up Security Code<br /></strong>To ensure secure communication between your computers, Mouse without Borders requires a security code. On the main computer, you'll see a security code displayed. Make a note of it. Then, on each secondary computer, enter the security code to establish the connection.<br /><br /><strong>Arrange Computers<br /></strong>Once the connection is established, you can arrange the computers based on their physical placement. Drag and drop the computer icons on the Mouse without Borders main screen to reflect their physical layout.<br /><br /><strong>Control Multiple Computers<br /></strong>Congratulations! You can now control multiple computers using a single mouse and keyboard. Simply move your mouse cursor to the edge of the screen in the direction of the desired computer, and it will seamlessly transition to that machine. You can now use your keyboard and mouse on the selected computer.<br /><br /><strong>Drag and Drop<br /></strong>With Mouse without Borders, you can effortlessly drag and drop files and folders between connected computers. Just drag the file or folder to the edge of the screen, and it will move to the adjacent computer. It's like magic!<br /><br /><strong>Clipboard Sharing<br /></strong>Need to copy and paste text or files between computers? Mouse without Borders has got you covered! Copy the text or file on one computer, move the mouse to the other computer, and paste it there. It's a breeze.<br /><br />That's it! You're now enjoying the convenience of controlling multiple computers using Mouse without Borders. But wait, there's more!<br /><br /><strong>Settings and Preferences<br /></strong>Mouse without Borders offers various settings and preferences to customize your experience. Explore the options to configure features like keyboard shortcuts, mouse behavior, and more.<br /><br /><strong>Troubleshooting</strong><br />If you encounter any issues during the setup or connection process, refer to the Mouse without Borders documentation or support resources for troubleshooting tips and solutions.<br /><br />Now you can bid farewell to the hassle of managing multiple mice and keyboards. Embrace the simplicity and efficiency of Mouse without Borders as you effortlessly navigate between multiple computers with a single mouse and keyboard. Happy multitasking!</div>]]></content:encoded></item><item><title><![CDATA[Tools I use: insomnia]]></title><link><![CDATA[https://www.injinia.com/blog/tools-i-use-insomnia]]></link><comments><![CDATA[https://www.injinia.com/blog/tools-i-use-insomnia#comments]]></comments><pubDate>Sat, 15 Apr 2023 07:00:00 GMT</pubDate><category><![CDATA[API]]></category><category><![CDATA[insomnia]]></category><category><![CDATA[tools]]></category><guid isPermaLink="false">https://www.injinia.com/blog/tools-i-use-insomnia</guid><description><![CDATA[Hey there, tech enthusiast! Are you tired of the hassle that comes with testing APIs? Well, fret no more because Insomnia is here to save the day! In this article, we'll explore how to use Insomnia to simplify your API testing process on Windows. Let's get started!Download and InstallFirst things first, let's grab Insomnia. Head over to the official Insomnia website (https://insomnia.rest/) and download the Windows installer. Once the download is complete, run the installer and follow the on-scr [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Hey there, tech enthusiast! Are you tired of the hassle that comes with testing APIs? Well, fret no more because Insomnia is here to save the day! In this article, we'll explore how to use Insomnia to simplify your API testing process on Windows. Let's get started!<br /><br /><strong>Download and Install<br /></strong>First things first, let's grab Insomnia. Head over to the official Insomnia website (https://insomnia.rest/) and download the Windows installer. Once the download is complete, run the installer and follow the on-screen instructions to install it on your machine. Easy-peasy!<br /><br /><strong>Create a Workspace<br /></strong>After installation, launch Insomnia. You'll be greeted with the option to create a new workspace. Workspaces in Insomnia are like containers for your API testing projects. Create a workspace and give it a meaningful name.<br /><br /><strong>Add Your First Request<br /></strong>Now that you have a workspace, it's time to add your first API request. Click the "+ New Request" button in the top-left corner. A new request tab will appear. Here, you can enter the details of the API you want to test, such as the URL, HTTP method (GET, POST, etc.), headers, and request body.<br /><br /><strong>Organize with Requests and Folders<br /></strong>As your API testing efforts grow, you might want to organize your requests into folders. You can create folders within your workspace to categorize and structure your requests logically. Right-click on the workspace or an existing folder and choose "New Folder" to create one.<br /><br /><strong>Authorization and Environment Variables<br /></strong>Insomnia allows you to handle authorization and environment variables effortlessly. If your API requires authentication, you can specify the authorization type (e.g., Bearer Token, Basic Auth) and provide the necessary credentials. Additionally, you can define environment variables to store values that change across different requests or environments.<br /><br /><strong>Send Requests and View Responses<br /></strong>Now it's time to unleash the power of Insomnia! Click the "Send" button to fire off your API request. Insomnia will show you the response details, including the status code, headers, and response body. You can also save the responses for future reference or share them with your team.<br /><br /><strong>Organize and Export<br /></strong>Insomnia provides handy features to organize and export your API testing efforts. You can create folders, move requests, and even duplicate or delete them as needed. Furthermore, you can export your workspace or individual requests as JSON files to easily share them or back them up.<br /><br />That's it! You're now on your way to becoming an Insomnia pro. But hold on, there's more!<br /><br /><strong>Environment and Team Collaboration<br /></strong>Insomnia allows you to create different environments for various setups (e.g., development, staging, production) and switch between them effortlessly. You can also collaborate with your team by syncing workspaces using services like Insomnia Sync or exporting and importing workspace files.<br /><br /><strong>Extensions and Plugins<br /></strong>Insomnia supports extensions and plugins, which can enhance its functionality even further. Explore the available extensions, such as code generation or automatic documentation, to streamline your API testing workflow.<br /><br />Now that you have a solid understanding of how to use Insomnia, you can test APIs with ease, boost your productivity, and ensure the smooth functioning of your applications. Happy testing, and may your APIs always return 200 OK!</div>]]></content:encoded></item><item><title><![CDATA[Tools I use: Espanso]]></title><link><![CDATA[https://www.injinia.com/blog/tools-i-use-espanso]]></link><comments><![CDATA[https://www.injinia.com/blog/tools-i-use-espanso#comments]]></comments><pubDate>Sat, 01 Apr 2023 07:00:00 GMT</pubDate><category><![CDATA[espanso]]></category><guid isPermaLink="false">https://www.injinia.com/blog/tools-i-use-espanso</guid><description><![CDATA[&#8203;Hey there! Are you tired of typing the same long phrases over and over again? Well, have no fear because espanso is here! Here is a quick into on how to set up and use espanso on Windows, so you can save time and effort with your typing. Let's dive in!What is espanso, you ask? It's an open-source text expander that allows you to create abbreviations for frequently used phrases or snippets of text. When you type an abbreviation, espanso automatically expands it into the full text, saving y [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">&#8203;Hey there! Are you tired of typing the same long phrases over and over again? Well, have no fear because espanso is here! Here is a quick into on how to set up and use espanso on Windows, so you can save time and effort with your typing. Let's dive in!<br /><br />What is espanso, you ask? It's an open-source text expander that allows you to create abbreviations for frequently used phrases or snippets of text. When you type an abbreviation, espanso automatically expands it into the full text, saving you from repetitive typing.<br /><br /><strong>Download and Install</strong><br />Head over to the official espanso website (https://espanso.org/) and grab the Windows installer. Run the installer and follow the on-screen instructions to complete the installation. Easy peasy!<br /><br /><strong>Configuration</strong><br />Once you've installed espanso, it's time to configure it to your liking. Don't worry; it's a breeze! Open a command prompt or PowerShell window and type `<strong><font color="#3f3f3f">espanso edit</font></strong>`. This will open the configuration file in your default text editor.<br /><br /><strong>Create your first expansion</strong><br />In the configuration file, you'll see a section called `matches`. This is where you define your abbreviations and the corresponding expansions. For example, if you often type "omw" and want it to expand into "On my way!", simply add the following lines:</div>  <div id="762055822101527142"><div><style type="text/css">	#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--light {  padding: 20px 0px;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--light .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #C9CDCF;  border-right: 1px solid #C9CDCF;  border-top: 1px solid #C9CDCF;  background-color: #F8F8F8;  color: #363B3E;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--light .header .paragraph {  margin: 0;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--light .body-code {  margin: 0;  border: 1px solid #C9CDCF;  background-color: #FFFFFF;  color: #666C70;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--dark {  padding: 20px 0px;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--dark .ace-tomorrow-night-eighties {  background-color: #363B3E;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--dark .header {  padding: 10px 20px;  font-weight: bold;  border-left: 1px solid #E0E1E2;  border-right: 1px solid #E0E1E2;  border-top: 1px solid #E0E1E2;  background-color: #666C70;  color: #FFFFFF;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--dark .header .paragraph {  margin: 0;}#element-64642afa-fc04-4e6e-b823-594fb8b3008a .code-editor--dark .body-code {  margin: 0;  border: 1px solid #E0E1E2;  background-color: #363B3E;  color: #F8F8F8;}</style><div id="element-64642afa-fc04-4e6e-b823-594fb8b3008a" data-platform-element-id="270170748587580171-1.3.3" class="platform-element-contents">	<div class="code-editor--light">    <div class="header">        <div class="paragraph">base.yml</div>    </div>    <div class="body-code">        <pre class="editor"></pre>    </div></div></div><div style="clear:both;"></div></div></div>  <div class="paragraph"><span>Feel free to add as many expansions as you like. Just make sure to follow the format and indentation. Don't forget to save the file once you're done.</span><br /><br /><strong>Start espanso</strong><br /><span>Return to the command prompt or PowerShell window and type `</span><strong><font color="#3f3f3f">espanso start</font></strong><span>` to launch espanso. You'll see a small icon in your system tray indicating that espanso is running.</span><br /><br /><strong>Test it out</strong><br /><span>Now comes the fun part! Open any text editor, word processor, or even a browser. Type your abbreviation, such as "omw," and marvel as it instantly expands into "On my way!" Voila! You just saved yourself some precious keystrokes.</span><br /><br /><span>That's all there is to it! You're now a master of espanso on Windows. But wait, there's more!</span><br /><br /><strong>Advanced configuration</strong><br /><span>If you want to take things to the next level, espanso offers advanced features like conditional expansions, dynamic variables, and even regular expressions. Check out the espanso documentation (https://espanso.org/docs/) for more information on these exciting options.</span><br /><br /><strong>Sync your configurations</strong><br /><span>Want to use espanso on multiple devices? No problem! You can synchronize your espanso configurations across devices using cloud storage services like Dropbox or Google Drive. Just make sure to point espanso to the synchronized configuration file.</span><br /><br /><span>So, there you have it! With espanso on your side, you can save time, avoid typos, and become a typing wizard. Enjoy the benefits of this fantastic text expander and let it do the heavy lifting for you. Happy typing!</span></div>]]></content:encoded></item></channel></rss>