<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Willy Vaessen</title>
    <description>The latest articles on DEV Community by Willy Vaessen (@willyvaessen).</description>
    <link>https://dev.to/willyvaessen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1134934%2Fb757363f-dae9-4e30-a47b-142692792fba.jpeg</url>
      <title>DEV Community: Willy Vaessen</title>
      <link>https://dev.to/willyvaessen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/willyvaessen"/>
    <language>en</language>
    <item>
      <title>TryHackMe | Cipher's Secret Message | WillyVaessen</title>
      <dc:creator>Willy Vaessen</dc:creator>
      <pubDate>Sun, 06 Jul 2025 11:16:08 +0000</pubDate>
      <link>https://dev.to/willyvaessen/tryhackme-ciphers-secret-message-willyvaessen-2i74</link>
      <guid>https://dev.to/willyvaessen/tryhackme-ciphers-secret-message-willyvaessen-2i74</guid>
      <description>&lt;p&gt;➡️ by &lt;a href="https://willyvaessen.nl" rel="noopener noreferrer"&gt;@willyvaessen&lt;/a&gt; &lt;br&gt;
📅 Written: 6 July 2025&lt;/p&gt;

&lt;p&gt;Platform: &lt;a href="https://tryhackme.com/" rel="noopener noreferrer"&gt;TryHackMe&lt;/a&gt;&lt;br&gt;
Room: &lt;a href="https://tryhackme.com/room/hfb1cipherssecretmessage" rel="noopener noreferrer"&gt;Cipher's Secret Message&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;One of the Ciphers' secret messages was recovered from an old system alongside the encryption algorithm, but we are unable to decode it.&lt;/p&gt;

&lt;p&gt;Order: Can you help void to decode the message?&lt;/p&gt;

&lt;p&gt;Message : &lt;code&gt;a_up4qr_kaiaf0_bujktaz_qm_su4ux_cpbq_ETZ_rhrudm&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Encryption algorithm :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;secret&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FLAG&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plaintext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nf"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isupper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isalpha&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plaintext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;enc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FLAG&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Wrap the decoded message within the flag format &lt;code&gt;THM{}&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Solving the puzzle
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Understanding the encoding.
&lt;/h3&gt;

&lt;p&gt;The code above basically does the following:&lt;/p&gt;

&lt;p&gt;The function takes your original string and iterates over every position in the string.&lt;br&gt;
For every position it checks whether the character is in the alphabet (a-z or A-Z) or not. In case the character is not alphabet (&lt;code&gt;.isalpha() == False&lt;/code&gt;), it gets appended to the new (encoded) string as is, but if it IS in fact alphabetic (&lt;code&gt;.isalpha() == True&lt;/code&gt;) it is shifted based on the index (&lt;code&gt;i&lt;/code&gt;), starting from the &lt;code&gt;base&lt;/code&gt; depending on uppercase or lowercase. The resulting (encoded) string is then returned by the function.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Rewriting the algorithm
&lt;/h3&gt;

&lt;p&gt;To better understand how this algorithm works, I decided to copy the code into PyCharm first and run it with a simple string that I knew: &lt;code&gt;abcde&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The import line can safely be ignored and commented out. Even though there is a package called &lt;code&gt;secret&lt;/code&gt; I noticed that there was no such thing as &lt;code&gt;FLAG&lt;/code&gt; in that package. I declared a variable &lt;code&gt;FLAG = "abcde"&lt;/code&gt; and ran the code. The resulting &lt;code&gt;message.txt&lt;/code&gt; file contains the encoded string &lt;code&gt;acegi&lt;/code&gt; so it quickly became clear to me that the character is shifted by its position in the string.&lt;/p&gt;

&lt;p&gt;Now to unravel the algorithm.&lt;/p&gt;

&lt;p&gt;To better understand what happens behind the scenes, I rewrote the existing &lt;code&gt;enc(plaintext)&lt;/code&gt; function into something more readable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plaintext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  
    &lt;span class="n"&gt;encoded_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;  
    &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;  
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;plaintext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isalpha&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;  
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isupper&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;  
                &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  
                &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
            &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  
            &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;  
        &lt;span class="n"&gt;encoded_string&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;replacement_char&lt;/span&gt;  
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replacement string is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded_string&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;encoded_string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;FLAG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abcde&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; 
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FLAG&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Output: acegi
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Decoding the message
&lt;/h3&gt;

&lt;p&gt;Once I understood what the algorithm did exactly, it became a lot easier to see that the decoding algorithm was a matter of simply inverting one &lt;code&gt;+&lt;/code&gt; into a &lt;code&gt;-&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encoded_text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  
    &lt;span class="n"&gt;decoded_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;  
    &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;  
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;encoded_text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isalpha&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;  
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isupper&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;  
                &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  
                &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
            &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  
            &lt;span class="n"&gt;replacement_char&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;  
        &lt;span class="n"&gt;decoded_string&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;replacement_char&lt;/span&gt;  
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replacement string is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;decoded_string&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;decoded_string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run that with the encoded message provided in the puzzle, wrap the result in the &lt;code&gt;THM{...}&lt;/code&gt; format, and &lt;em&gt;voilà&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;Congratulations on completing Cipher's Secret Message!!! 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To me it really helped understand the code by rewriting it. I've experienced this before in cases where 'Lambda functions' were used. Writing shorter code might be good performance-wise, but it makes understanding the code a lot more difficult, at least in my case.&lt;/li&gt;
&lt;li&gt;Writing a decoding algorithm can be surprisingly easy, once you understand the encoding process.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tryhackme</category>
      <category>writeup</category>
      <category>python</category>
    </item>
    <item>
      <title>🚀 Looking for a new challenge in tech &amp; education</title>
      <dc:creator>Willy Vaessen</dc:creator>
      <pubDate>Mon, 10 Mar 2025 12:23:50 +0000</pubDate>
      <link>https://dev.to/willyvaessen/looking-for-a-new-challenge-in-tech-education-4m34</link>
      <guid>https://dev.to/willyvaessen/looking-for-a-new-challenge-in-tech-education-4m34</guid>
      <description>&lt;p&gt;Hi everyone! 👋&lt;/p&gt;

&lt;p&gt;I’m Willy, a tech enthusiast with a passion for problem-solving, knowledge sharing, and meaningful technology. Over the years, I’ve worked in various roles in software development and IT, but I’ve recently realized that I want to combine my technical expertise with education and knowledge transfer.&lt;/p&gt;

&lt;p&gt;💡 What I’m looking for:&lt;br&gt;
I’m currently exploring new opportunities where I can merge technology, teaching, and real-world problem-solving. Whether it’s in software development, IT education, or technology consulting, I want to contribute in a way that creates impact beyond just writing code.&lt;/p&gt;

&lt;p&gt;🧩 What drives me?&lt;br&gt;
• Problem-solving &amp;amp; innovation – Making systems more efficient and user-friendly.&lt;br&gt;
• Teaching &amp;amp; knowledge sharing – Helping others grow and making complex topics accessible.&lt;br&gt;
• Conscious technology choices – Balancing the power of tech with ethical, long-term thinking.&lt;/p&gt;

&lt;p&gt;🌍 Open to discussions, collaborations, and opportunities!&lt;br&gt;
I’m not just looking for a job—I’m looking for the right fit where I can thrive and help others do the same. If you’re in tech, education, or a mix of both, let’s connect!&lt;/p&gt;

&lt;p&gt;💬 Have a similar story? Let’s exchange ideas!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introducing Myself and My Technical Adventures</title>
      <dc:creator>Willy Vaessen</dc:creator>
      <pubDate>Tue, 07 Jan 2025 07:55:21 +0000</pubDate>
      <link>https://dev.to/willyvaessen/introducing-myself-and-my-technical-adventures-31nd</link>
      <guid>https://dev.to/willyvaessen/introducing-myself-and-my-technical-adventures-31nd</guid>
      <description>&lt;p&gt;Hello everyone! My name is Willy, and I’m a developer (to be) with a passion for exploring new technologies, solving creative challenges, and building projects that bridge the gap between the digital and physical worlds. Although I’ve been coding for some time, this is my first post here, and I’m excited to share my journey and connect with like-minded individuals.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Glimpse into My Projects
&lt;/h2&gt;

&lt;p&gt;I’ve been working on several projects lately, each presenting unique challenges and opportunities for growth. Here are some highlights:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#100DaysofCode: Mysteries of Nyxelar&lt;/strong&gt;&lt;br&gt;
   I’m currently developing a text-based game in C# called ‘Mysteries of Nyxelar.’ This sci-fi detective game combines interactive storytelling with hidden puzzles and clues. The goal is to create an immersive experience that invites players to think creatively and explore both online and offline elements.&lt;/p&gt;

&lt;p&gt;Some technical highlights of this project include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exploring &lt;strong&gt;ASP.NET Core&lt;/strong&gt; for a web-based version of the game.&lt;/li&gt;
&lt;li&gt;Designing hidden clues and Easter eggs within the game’s structure.&lt;/li&gt;
&lt;li&gt;Experimenting with AI-driven dialogues for a character named Xynnelg to make interactions dynamic and engaging.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Server Configuration and Networking&lt;/strong&gt;&lt;br&gt;
   Beyond game development, I’ve been fine-tuning my server environment. Using a Synology NAS and Ubuntu, I’m setting up a secure, headless content server to host game content and other projects. Key steps include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementing secure SSH access.&lt;/li&gt;
&lt;li&gt;Experimenting with &lt;strong&gt;ASP.NET Core&lt;/strong&gt; for headless content delivery.&lt;/li&gt;
&lt;li&gt;Optimizing my home network with Unifi equipment to support seamless operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Factorio Server Setup&lt;/strong&gt;&lt;br&gt;
   In my downtime, I’ve revisited my Factorio server setup. This simple yet reliable machine uses standard drives and is configured to run smoothly, hosting save files and enabling seamless multiplayer sessions. It’s a project that combines fun with technical maintenance, offering both relaxation and a learning experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows Desktop and RAID 10 Configuration&lt;/strong&gt;&lt;br&gt;
   Separately, I’ve reinstalled my Windows desktop and configured a RAID 10 setup for enhanced performance and data reliability. This process involved learning about RAID configurations and overcoming unexpected issues, like blue screens during setup. Ultimately, it was a rewarding experience that deepened my understanding of system optimization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;As 2025 unfolds, I’m eager to dive deeper into these projects and explore new ideas. My goal is to document my progress and share insights on platforms like this one. I hope to inspire others, learn from your experiences, and collaborate on exciting challenges.&lt;/p&gt;

&lt;p&gt;Thank you for taking the time to read my introduction. If any of these projects resonate with you or spark ideas, feel free to reach out! Let’s build something amazing together.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
