<?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[Firmware Bytes]]></title><description><![CDATA[Just someone rediscovering their love of technology.]]></description><link>https://firmwarebytes.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1706919776585/k98HDh3Ks.png</url><title>Firmware Bytes</title><link>https://firmwarebytes.com</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 10:17:09 GMT</lastBuildDate><atom:link href="https://firmwarebytes.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[My Journey to Full-Stack Development: From IT Operations to Software Development]]></title><description><![CDATA[Welcome
Hi everyone! My name is Justin, and I am a software developer living in Australia. For my first weekly post, I want to give you a bit of background on who I am and what my goals are.
Beginnings
I've always had an interest in programming, but ...]]></description><link>https://firmwarebytes.com/my-journey-to-full-stack-development-from-it-operations-to-software-development</link><guid isPermaLink="true">https://firmwarebytes.com/my-journey-to-full-stack-development-from-it-operations-to-software-development</guid><category><![CDATA[education]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Firmware Bytes]]></dc:creator><pubDate>Fri, 12 Jul 2024 04:10:52 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-welcome">Welcome</h2>
<p>Hi everyone! My name is Justin, and I am a software developer living in Australia. For my first weekly post, I want to give you a bit of background on who I am and what my goals are.</p>
<h2 id="heading-beginnings">Beginnings</h2>
<p>I've always had an interest in programming, but as a child, I found it overwhelming. Instead of pushing through, I gave up and tinkered with MS-DOS instead of trying to learn Pascal, C, or C++. My desire to program was set aside, and I focused on learning DOS and Windows thoroughly.</p>
<h2 id="heading-university-days">University Days</h2>
<p>When it came time to choose a major, I was torn between IT and politics. I considered studying IT, but I was unsure about sitting in front of a PC all day. So, I opted for International Relations and History, which I loved. I even considered making it a career, but the life changes it required didn't align with my goals. After a brief stint working for a local bank, I entered the IT field. Despite avoiding it for so long, computing has always been something I’m naturally gifted at.</p>
<h2 id="heading-it-operations">IT Operations</h2>
<p>I once asked my first IT manager, who loved cars, why he didn’t work as a mechanic. He said it would make his hobby feel like work. That’s how I felt about IT operations. It's a thankless job where you mostly hear from people when things are broken. Despite transitioning to server admin, my enjoyment for it didn’t change.</p>
<p>During my time at a company with offices across the country, I was tasked with finding a video conferencing solution on a very small budget. In 2011, the options were limited, so I chose Microsoft Lync. Installing, configuring, and testing it made me realize that adding real value was more rewarding than fixing printers and reacting to problems.</p>
<h2 id="heading-a-more-rewarding-career-for-a-time">A More Rewarding Career... For a Time</h2>
<p>I eventually moved into SharePoint development and application support, working with various business units and adding value. However, it soon became apparent that this role was a dead end. Despite knowing the existing SharePoint deployment needed replacing, the company refused to allocate the necessary funds. After months of frustration, I left, which in hindsight, was a mistake. What followed was a series of positions and two redundancies.</p>
<h2 id="heading-web-design">Web Design</h2>
<p>After the second redundancy, I turned my web design side hustle into my main job. While I don't love it or hate it, it feels superficial. Clients usually want to play it safe, resulting in websites that follow common themes. However, I still enjoy building something from nothing and adding value for my clients.</p>
<h2 id="heading-back-to-software-development">Back to Software Development</h2>
<p>COVID hit my business hard, reducing my income significantly almost overnight. I needed something more secure with a higher ceiling. I decided to return to software development, revisiting the C# and ASP.NET skills I learned earlier in my career. However, I found that ASP.NET had evolved into ASP.NET Core, which felt like learning something completely new. The web had changed a lot between 2012 and 2022.</p>
<p>I bought a book on ASP.NET Core, highlighting how outdated my knowledge was. Even my HTML and CSS skills needed refreshing. While I’m pretty good with HTML, CSS has always been frustrating because I never properly learned it. I am proficient enough to get by, but that's about it.</p>
<h2 id="heading-the-new-journey">The New Journey</h2>
<p>Instead of pushing through with ASP.NET, I'm going back to basics and learning everything from the ground up. My goal is to become a full-stack developer, and for that, C# and ASP.NET alone are not enough. I need to fill the gaps in my knowledge.</p>
<p>I will continue with C# as the foundation but will also focus on JavaScript, a language I have resisted learning for years. JavaScript is crucial as it opens up many possibilities. Once I achieve a reasonable level of competence, I will explore frameworks like React and other relevant technologies.</p>
<p>I'll return to Microsoft technologies with TypeScript before diving fully into what .NET offers. My C# skills will improve, but I will also focus on becoming competent in other areas.</p>
<p>I have a list of books to help on this journey, but I might need more. While I can learn from books and self-teaching, I thrive in structured learning environments, which might lead me back to university.</p>
<h2 id="heading-back-to-university">Back to University?</h2>
<p>There is a two-year Master's degree I could enrol in to enhance my skills and obtain a degree for future employers. However, I'm unsure if the time and money are worth it the opportunity cost.</p>
<p>The benefits include satisfying recruiters and filling gaps in my knowledge, such as data structures, security, and cryptography. While I could learn these independently, I would find it easier in a structured environment. The degree would also serve as valuable proof of my skills.</p>
<p>I'm still deciding what to do. I have a few months to decide, as the next intake for the course is in October.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>That’s a bit about me and my plan. I will write regularly about my journey, challenges, and successes, and I hope you will follow along. Thank you for joining me on this adventure!</p>
]]></content:encoded></item><item><title><![CDATA[The challenge of file access from Docker containers]]></title><description><![CDATA[As someone used to traditional virtual machines, navigating the peculiarities of Linux and Dockers can be a challenge. I am used to being able to copy files between machines, so whenever I want to transfer a file from a Docker container, I often stru...]]></description><link>https://firmwarebytes.com/the-challenge-of-file-access-from-docker-containers</link><guid isPermaLink="true">https://firmwarebytes.com/the-challenge-of-file-access-from-docker-containers</guid><category><![CDATA[WinSCP]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Firmware Bytes]]></dc:creator><pubDate>Sat, 03 Feb 2024 00:48:04 GMT</pubDate><content:encoded><![CDATA[<p>As someone used to traditional virtual machines, navigating the peculiarities of Linux and Dockers can be a challenge. I am used to being able to copy files between machines, so whenever I want to transfer a file from a Docker container, I often struggle to know what to do.</p>
<p>This happened again this week when I wanted to backup my Wiki.js config files. When you run the backup, you nominate a local folder. The challenge is then gaining access to those files. I spent an hour or two trawling Google search results trying to understand how I could access these files, but the results all too often assumed prior knowledge that I simply did not possess.</p>
<p><em>How do you find the right answer when you don't fully understand the question?</em></p>
<p>In the end, I managed to pick up enough pieces of information to come up with a solution that I will now share. This is mainly so I remember myself when I come to do this next time, but I hope that someone else in a similar position will stumble across it and hopefully spare themselves some pain. I am no pro at Docker or Linux having 'grown up' in the Windows world, so if anyone has any tips or suggestions that would make this easier, I am all ears!</p>
<p>What I did was use the <code>docker cp</code> command to copy the files from within the container into a directory I could then access via WinSCP. The base command is as follows.</p>
<pre><code class="lang-bash">docker cp &lt;containerID&gt;:/file/path/within/container/ /host/path/target/
</code></pre>
<p>Getting your container ID is easy if you use Portainer to manage your containers. Open the specific container and the ID is displayed at the top in the 'Container status' box. I assume any Docker management tool will prominently display the ID, but as I have never used anything other than the CLI and Portainer, I cannot say for sure.</p>
<p>If you use the CLI, getting the ID is also pretty easy. Use the below command, replacing <code>containerName</code> with the name of your container.</p>
<pre><code class="lang-bash">docker ps -aqf <span class="hljs-string">"name=&lt;containerName&gt;"</span>
</code></pre>
<p>Now that you have the container ID, you can confirm that the files have been backed up by Wiki.js by going back into the container in Portainer and going into the console. For my install, backups are saved to '.data/backups', so browse into that directory to confirm that the files are present. Run the command <code>pwd</code> to get the full path, which you'll soon need.</p>
<p>You're now ready to copy the files from the Docker container to a location you can easily access. Going back to our base <code>docker cp</code> command, we have the container ID and the path to the files we wish to access. Now use <code>mkdir</code> to create a directory in your home directory to act as a save location. For me, I did <code>cd ~</code> to make sure I was in my home directory and then <code>mkdir wiki.js</code>.</p>
<p>Now it is time to copy. Going back to the base command, input your container ID, Docker container backup save file path, and the location where you wish to copy the files.</p>
<pre><code class="lang-bash">docker cp &lt;containerID&gt;:/wiki/backups/ /home/user/wiki.js/
</code></pre>
<p>Make sure that the file copy worked as expected and then you're ready to use something like WinSCP or rsync to move the files wherever you want.</p>
]]></content:encoded></item></channel></rss>