<?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: Divine Attah-Ohiemi</title>
    <description>The latest articles on DEV Community by Divine Attah-Ohiemi (@0xfaker).</description>
    <link>https://dev.to/0xfaker</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%2F2485656%2Feef6fdff-62a3-460d-ab89-38aff717a8ba.png</url>
      <title>DEV Community: Divine Attah-Ohiemi</title>
      <link>https://dev.to/0xfaker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/0xfaker"/>
    <language>en</language>
    <item>
      <title>Re-styling Debian's Download Page</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Tue, 25 Feb 2025 21:54:09 +0000</pubDate>
      <link>https://dev.to/0xfaker/re-styling-debians-download-page-3lmm</link>
      <guid>https://dev.to/0xfaker/re-styling-debians-download-page-3lmm</guid>
      <description>&lt;p&gt;main points from this blog post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;demo: &lt;a href="http://outreachy.debian.net/download" rel="noopener noreferrer"&gt;&lt;code&gt;http://outreachy.debian.net/download&lt;/code&gt;&lt;/a&gt;, &lt;a href="http://outreachy.debian.net/download/alt" rel="noopener noreferrer"&gt;&lt;code&gt;http://outreachy.debian.net/download/alt&lt;/code&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;improving download page design and content&lt;/li&gt;
&lt;li&gt;building a second &lt;em&gt;"advanced"&lt;/em&gt; download page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am tasked with contributing to the debianhugo project which aim is to re-design the old debian pages and make the content better accessible. We've since reached a significant milestone and migrated multiple pages including the start, intro, news and now the download page.&lt;/p&gt;

&lt;h2&gt;
  
  
  creating "simple" and "advanced" download pages
&lt;/h2&gt;

&lt;p&gt;At first we made the "simple" download page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;target audience; less experienced users&lt;/li&gt;
&lt;li&gt;only added more common download arhitectures/options i.e amd64-64 bit pc and arm64&lt;/li&gt;
&lt;li&gt;descriptive content for easy user experience; listing positives and negatives of each option, adding download sizes&lt;/li&gt;
&lt;li&gt;interactive download cards with iso, torrent and &lt;code&gt;debian-cd&lt;/code&gt; mirror selections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"advanced" download page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more download architectures and options including testing release streams&lt;/li&gt;
&lt;li&gt;straight to point content&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  challenges/issues while developing
&lt;/h2&gt;

&lt;p&gt;The mirror selection option while it might help with faster downloads depending on the region is still somewhat a manual proccess on the user end and could come with various complications like the chosen &lt;code&gt;debian-cd&lt;/code&gt; mirror not having the latest version of debian.&lt;/p&gt;

&lt;p&gt;We're looking into testing if the delivery of the images/ISOs is also possible to be done through the Fastly CDN, this would prevent us to provide manual mirror selection.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Seeking Opportunities: Building a Career in Software Engineering and Beyond</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Fri, 31 Jan 2025 02:35:59 +0000</pubDate>
      <link>https://dev.to/0xfaker/seeking-opportunities-building-a-career-in-software-engineering-and-beyond-41k7</link>
      <guid>https://dev.to/0xfaker/seeking-opportunities-building-a-career-in-software-engineering-and-beyond-41k7</guid>
      <description>&lt;p&gt;My journey in CS has always been driven by curiosity, determination, and a deep love for understanding software solutions at its tiniest, most complex levels.&lt;/p&gt;

&lt;p&gt;Taking &lt;a href="https://www.alxafrica.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;ALX Africa&lt;/strong&gt;&lt;/a&gt; Software Engineer track after High school was where it all started for me. During the 1-year intensive bootcamp, I delved into the intricacies of Linux programming and low-level programming with C, which solidified my foundational knowledge. This experience not only enhanced my technical skills but also taught me the importance of adaptability and self-directed learning. I discovered how to approach challenges with curiosity, igniting a passion for exploring software solutions in their most intricate forms. Each module pushed me to think critically and creatively, transforming my understanding of technology and its capabilities.&lt;/p&gt;

&lt;p&gt;Let’s just say that I have always been drawn to asking, “&lt;em&gt;How does this happen?&lt;/em&gt;" And I just go on and on until I find an answer eventually and sometimes I don’t but that’s okay. That curiosity, combined with a deep commitment to learning, has guided my journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debian Webmaster
&lt;/h2&gt;

&lt;p&gt;My drive has led me to get involved in open-source contributions, where I can put my knowledge to the test while helping my community. Engaging with real-world experts and learning from my mistakes has been invaluable. One of the highlights of this journey was joining the Debian Webmasters team as an intern through &lt;a href="https://outreachy.org" rel="noopener noreferrer"&gt;&lt;strong&gt;Outreachy&lt;/strong&gt;&lt;/a&gt;. Here, I have the honor of working on redesigning and migrating the old Debian webpages to make them more user-friendly. This experience not only allows me to apply my skills in a practical setting but also deepens my understanding of collaborative software development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building My Skills: The Foundation of My Experience
&lt;/h2&gt;

&lt;p&gt;Throughout my academic and professional journey, I have taken on many roles that have shaped my skills and prepared me for what’s ahead I believe. I am definitely not a &lt;em&gt;one-trick pony&lt;/em&gt;, and maybe not completely a &lt;em&gt;jack of all trade&lt;/em&gt; either but I am a bit diverse I’d like to think.&lt;/p&gt;

&lt;p&gt;Here are the key roles that have defined my journey so far:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Volunteer Developer at&lt;/strong&gt; &lt;a href="https://www.linkedin.com/company/yoris-africa/" rel="noopener noreferrer"&gt;&lt;strong&gt;Yoris Africa&lt;/strong&gt;&lt;/a&gt; (&lt;em&gt;June 2022 - August 2023&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;I began my career by volunteering at Yoris, where I collaborated with a talented team to design and build the frontend for a mobile app. My contributions extended beyond just the frontend; I also worked on backend solutions and microservices, gaining hands-on experience in full-stack development. This role was instrumental in shaping my understanding of software architecture, allowing me to contribute meaningfully to projects while learning from experienced developers in a dynamic environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freelance Academics Software Developer&lt;/strong&gt; (&lt;em&gt;September 2023 - October 2024&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;I freelanced as an academic software developer, where I pitched and developed software solutions for universities in my community. One of my most notable projects was creating a Computer-Based Testing (CBT) software for a medical school, which featured a unique questionnaire and scoring system tailored to their specific needs. This experience not only allowed me to apply my technical skills in a real-world setting but also deepened my understanding of educational software requirements and user experience, ultimately enhancing the learning process for students.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source Intern at&lt;/strong&gt; &lt;a href="https://salsa.debian.org/webmaster-team" rel="noopener noreferrer"&gt;&lt;strong&gt;Debian Webmaster Team&lt;/strong&gt;&lt;/a&gt; (&lt;em&gt;November 2024 -&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;Perhaps the most transformative experience has been my role as an intern at Debian Webmasters. This opportunity allowed me to delve into the fascinating world of open source. As an intern, I have the chance to work on a project where we are redesigning and migrating the Debian webpages to utilize a new and faster technology: Go templates with Hugo.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For a detailed look at the work and progress I made during my internship, as well as information on this project and how to get involved, you can check out the &lt;a href="https://salsa.debian.org/Deaththekidd/debianhugo/-/wikis/home" rel="noopener noreferrer"&gt;wiki&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;My ultimate goal with this role is to build a vibrant community for Debian in Africa and, if given the chance, to host a &lt;code&gt;debian-cd&lt;/code&gt; mirror for faster installations in my region.&lt;/p&gt;

&lt;p&gt;You can connect with me through &lt;a href="https://www.linkedin.com/in/death-thekidd/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, or &lt;a href="https://x.com/@0xFaker_" rel="noopener noreferrer"&gt;X&lt;/a&gt; (formerly Twitter), or reach out via &lt;a href="//mailto:ohiemidivine7@gmail.com"&gt;email&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Progress Report: First Half of My Outreachy Internship</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Mon, 20 Jan 2025 20:00:08 +0000</pubDate>
      <link>https://dev.to/0xfaker/progress-report-first-half-of-my-outreachy-internship-3n8n</link>
      <guid>https://dev.to/0xfaker/progress-report-first-half-of-my-outreachy-internship-3n8n</guid>
      <description>&lt;p&gt;Hello everyone!, I’m excited to share a progress report on my Outreachy internship with the Debian community. As I reach the halfway point of this journey, I want to reflect on what I’ve accomplished so far and outline my modified goals for the second half of the internship.&lt;/p&gt;

&lt;p&gt;In truth, there wasn’t a strict timeline for my project—migrating Debian webpage content to Hugo—because the original repository contained thousands of pages. The initial goal was to develop a proof of concept for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A backward compatible deployment setup&lt;/li&gt;
&lt;li&gt;Migration of static text content pages&lt;/li&gt;
&lt;li&gt;Migration of dynamic pages (Incorporating existing perl scripts)&lt;/li&gt;
&lt;li&gt;Redirection for contents moved permanently (301)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to our daily standups, where we brainstorm and revise contributions, we’ve made significant progress. The wiki documentation discussing the technical decisions taken to meet these goals is currently in progress &lt;a href="https://salsa.debian.org/Deaththekidd/debianhugo/-/wikis/home" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;During the first half of my internship, I have improved and refined my skills in several areas. I learned new Markdown syntaxes, studied and utilized &lt;strong&gt;Apache's mod_rewrite&lt;/strong&gt;, and halfway studied &lt;strong&gt;GNU Make&lt;/strong&gt; to use Perl scripts for processing data for dynamic content. I recommend &lt;em&gt;Managing Projects with GNU Make&lt;/em&gt; by Robert Mecklenburg—it's a great book for beginners!&lt;/p&gt;

&lt;p&gt;While I didn’t get stuck on any particular goal, the most challenging aspect was adding Hugo aliases to help with Apache's multilingual content negotiation. The way the &lt;strong&gt;webwml&lt;/strong&gt; repository generates multilingual content differs from &lt;strong&gt;debianhugo&lt;/strong&gt;. For instance, in &lt;strong&gt;webwml&lt;/strong&gt;, the structure looks like this: &lt;code&gt;english/index.wml -&amp;gt; /index.en.html (with a symlink from index.html to index.en.html)&lt;/code&gt; and &lt;code&gt;french/index.wml -&amp;gt; /index.fr.html&lt;/code&gt;. In contrast, &lt;strong&gt;debianhugo&lt;/strong&gt; uses &lt;code&gt;en/_index.md -&amp;gt; /index.html&lt;/code&gt; and &lt;code&gt;fr/_index.md -&amp;gt; /fr/index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Apache's multilingual content negotiation checks for &lt;code&gt;index.&amp;lt;user preferred lang code&amp;gt;.html&lt;/code&gt; in the current directory, which works well with &lt;strong&gt;webwml&lt;/strong&gt; since all related translations are generated in the same directory. However, with &lt;strong&gt;debianhugo&lt;/strong&gt; using subdirectories for languages other than English, we had to set up aliases for every other language page to be generated in the frontmatter. For example, in &lt;code&gt;fr/_index.md&lt;/code&gt;, we added this to the front matter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
aliases:
  - /index.fr.html
...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup allows Hugo to generate multilingual HTML files in the initial home directory solely for the purpose of setting up a 301 redirect to the same page in the language subdirectory. However, if the client sets their preferred language to English, Apache content negotiation tries to find &lt;code&gt;/index.en.html&lt;/code&gt;. If it doesn’t find it, it defaults to any other language-suffixed file, which can lead to unexpected behavior. For example, if English is set as the preferred language, accessing the site may serve &lt;code&gt;/index.fr.html&lt;/code&gt;, which then redirects to &lt;code&gt;/fr/index.html&lt;/code&gt;. This was a significant challenge, and you can see a demo of this hosted &lt;a href="http://outreachy.debian.net" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If I were to start the project over, I would document every decision as I make them in the wiki, no matter how rough the documentation turns out. Waiting until the midpoint of the project to document was not a good idea.&lt;/p&gt;

&lt;p&gt;As I move into the second half of my internship, the goals we’ve set include improving our project wiki documentation and continuing the migration process while enhancing the user experience of complicated sections. I’m looking forward to making even more progress and sharing my journey with you all. Happy coding! 🌟&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My 30-Day Outreachy Experience with the Debian Community</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Sun, 12 Jan 2025 23:51:18 +0000</pubDate>
      <link>https://dev.to/0xfaker/my-30-day-outreachy-experience-with-the-debian-community-fi2</link>
      <guid>https://dev.to/0xfaker/my-30-day-outreachy-experience-with-the-debian-community-fi2</guid>
      <description>&lt;p&gt;Hey everyone! It’s Divine Attah-Ohiemi here, and I’m excited to share what I’ve been up to in my internship with the Debian community. It’s been a month since I began this journey, and if you’re thinking about applying for Outreachy, let me give you a glimpse into my project and the amazing people I get to work with.&lt;/p&gt;

&lt;p&gt;So, what’s it like in the Debian community? It’s a fantastic mix of folks from all walks of life—seasoned developers, curious newbies, and everyone in between. What really stands out is how welcoming everyone is. I’m especially thankful to my mentors, Thomas Lange, Carsten Schoenert, and Subin Siby, for their guidance and for always clocking in whenever I have questions. It feels like a big family where you can share your ideas and learn from each other. The commitment to diversity and merit is palpable, making it a great place for anyone eager to jump in and contribute.&lt;/p&gt;

&lt;p&gt;Now, onto the project! We’re working on improving the Debian website by switching from WML (Web Meta Language) to Hugo, a modern static site generator. This change doesn’t just make the site faster; it significantly reduces the time it takes to build compared to WML. Plus, it makes it way easier for non-developers to contribute and add pages since the content is built from Markdown files. It’s all about enhancing the experience for both new and existing users.&lt;/p&gt;

&lt;p&gt;My role involves developing a proof of concept for this transition. I’m migrating existing pages while ensuring that old links still work, so users won’t run into dead ends. It’s a bit of a juggling act, but knowing that my work is helping to make Debian more accessible is incredibly rewarding.&lt;/p&gt;

&lt;p&gt;What gets me most excited is the chance to contribute to a project that’s been around for over 20 years! It’s an honor to be part of something so significant and to help shape its future. How cool is it to know that what I’m doing will impact users around the globe?&lt;/p&gt;

&lt;p&gt;In the past month, I’ve learned a bunch of new things. For instance, I’ve been diving into &lt;strong&gt;Apache's mod_rewrite&lt;/strong&gt; to automatically map old multilingual URLs to new ones. This is important since Hugo handles localization differently than WML. I’ve also been figuring out how to set up 301 redirects to prevent dead links, which is crucial for a smooth user experience.&lt;/p&gt;

&lt;p&gt;One of the more confusing parts has been using &lt;strong&gt;GNU Make&lt;/strong&gt; to manage Perl scripts for dynamic pages. It’s a bit of a learning curve, but I’m tackling it head-on. Each challenge is a chance to grow, and I’m here for it!&lt;/p&gt;

&lt;p&gt;If you’re considering applying to the Debian community through Outreachy, I say go for it! There’s so much to learn and experience, and you’ll be welcomed with open arms. Happy coding, everyone! 🌟&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Seamless Transitions: Mastering Apache Redirects for a Smooth Hugo Migration</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Tue, 24 Dec 2024 15:54:43 +0000</pubDate>
      <link>https://dev.to/0xfaker/seamless-transitions-mastering-apache-redirects-for-a-smooth-hugo-migration-3m1a</link>
      <guid>https://dev.to/0xfaker/seamless-transitions-mastering-apache-redirects-for-a-smooth-hugo-migration-3m1a</guid>
      <description>&lt;p&gt;This week, I dove into setting up redirects with Apache to make the transition to Hugo's multilingual system smoother. The challenge? Ensuring that all those old links still worked while I migrated to the new URL format.&lt;/p&gt;

&lt;p&gt;For instance, I needed to redirect:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/es/distrib to /distrib/index.es.html&lt;br&gt;
/es/social_contract to /social_contract.es.html&lt;br&gt;
/es/intro/about to /intro/about.es.html&lt;br&gt;
/da to /index.da.html&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
To tackle this, I turned to Apache's mod_rewrite. Here’s the magic I came up with in my .htaccess file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RewriteCond %{REQUEST_URI} ^/([a-z]{2}(?:-[a-z]{2})?)/(.*)$&lt;br&gt;
RewriteCond %{DOCUMENT_ROOT}/$2/index.%1.html -f&lt;br&gt;
RewriteCond %{DOCUMENT_ROOT}/$1/$2 !-d&lt;br&gt;
RewriteRule ^/([a-z]{2}(?:-[a-z]{2})?)/(.*)$ /$2/index.%1.html [last,redirect]&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;code&gt;RewriteCond %{REQUEST_URI} ^/([a-z]{2}(?:-[a-z]{2})?)/(.*)$&lt;br&gt;
RewriteCond %{DOCUMENT_ROOT}/$2.%1.html -f&lt;br&gt;
RewriteCond %{DOCUMENT_ROOT}/$1/$2 !-d&lt;br&gt;
RewriteRule ^/([a-z]{2}(?:-[a-z]{2})?)/(.*)$ /$2.%1.html [last,redirect]&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
What’s happening here? The rules check if the URL starts with a language code (like /es or /da). Then, they verify whether the corresponding HTML file exists. If it does, and the path isn’t a directory, voilà! The user gets redirected to the new format.&lt;/p&gt;

&lt;p&gt;It’s a bit of a dance with conditions and rules, but it’s satisfying to see everything working seamlessly. Now, as I continue migrating content, users clicking on old links won’t end up in a digital dead end. It’s all about keeping the flow smooth and maintaining that user experience.&lt;/p&gt;

&lt;p&gt;So, if you’re also juggling multilingual pages and thinking about making the switch to Hugo, don’t underestimate the power of mod_rewrite. It’s your best friend in the world of redirects! Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>From Sisterly Wisdom to Debian Dreams: My Outreachy Journey</title>
      <dc:creator>Divine Attah-Ohiemi</dc:creator>
      <pubDate>Wed, 11 Dec 2024 14:25:08 +0000</pubDate>
      <link>https://dev.to/0xfaker/from-sisterly-wisdom-to-debian-dreams-my-outreachy-journey-3e74</link>
      <guid>https://dev.to/0xfaker/from-sisterly-wisdom-to-debian-dreams-my-outreachy-journey-3e74</guid>
      <description>&lt;p&gt;&lt;strong&gt;Discovering Open Source: How I Got Introduced&lt;/strong&gt;&lt;br&gt;
Hey there! I’m Divine Attah-Ohiemi, a sophomore studying Computer Science. My journey into the world of open source was anything but grand. It all started with a simple question to my sister: “How do people get jobs without experience?” Her answer? Open source! I dove into this vibrant community, and it felt like discovering a hidden treasure chest filled with knowledge and opportunities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing Debian: Why This Community?&lt;/strong&gt;&lt;br&gt;
Why Debian, you ask? Well, I applied to Outreachy twice, and both times, I chose Debian. It’s not just my first operating system; it feels like home. The Debian community is incredibly welcoming, like a big family gathering where everyone supports each other. Whether I was updating my distro or poring over documentation, the care and consideration in this community were palpable. It reminded me of the warmth of homeschooling with relatives. Plus, knowing that Debian's name comes from its creator Ian and his wife Debra adds a personal touch that makes me feel even more honored to contribute to making the website better!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Applied to Outreachy: What Inspired Me&lt;/strong&gt;&lt;br&gt;
Outreachy is my golden ticket to the open source world! As a 19-year-old, I see this internship as a unique opportunity to gain invaluable experience while contributing to something meaningful. It’s the perfect platform for me to learn, grow, and connect with like-minded individuals who share my passion for technology and community.&lt;/p&gt;

&lt;p&gt;I’m excited for this journey and can’t wait to see where it takes me! 🌟&lt;/p&gt;

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