<?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>Forem: Shift / Reinhart Previano K.</title>
    <description>The latest articles on Forem by Shift / Reinhart Previano K. (@reinhart1010).</description>
    <link>https://forem.com/reinhart1010</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%2F239317%2F6b1770b5-93fd-4f09-b1ac-06b257f2b73f.jpeg</url>
      <title>Forem: Shift / Reinhart Previano K.</title>
      <link>https://forem.com/reinhart1010</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/reinhart1010"/>
    <language>en</language>
    <item>
      <title>PWA in iPadOS 26 is a joke</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Fri, 19 Sep 2025 01:12:12 +0000</pubDate>
      <link>https://forem.com/reinhart1010/pwa-in-ipados-26-is-a-joke-38g1</link>
      <guid>https://forem.com/reinhart1010/pwa-in-ipados-26-is-a-joke-38g1</guid>
      <description>&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1968850887847108855-904" src="https://platform.twitter.com/embed/Tweet.html?id=1968850887847108855"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1968850887847108855-904');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1968850887847108855&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Once upon a Unix timestamp, WebKit &lt;a href="https://webkit.org/blog/7929/designing-websites-for-iphone-x/" rel="noopener noreferrer"&gt;added a set of CSS attributes, and &lt;code&gt;viewport-fit&lt;/code&gt; meta tag&lt;/a&gt;, to help developers adjust their web apps for the iPhone X.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv07d6jqy6bm35j38n1rd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv07d6jqy6bm35j38n1rd.png" alt="A screenshot on WebKit's official demo of  raw `env(safe-area-inset-*)` endraw  in iOS 18"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although these attributes still work for the iPhone, I am surprised that these features does &lt;strong&gt;not&lt;/strong&gt; work in iPadOS 26, which of course, featured more rounded corners, and a new windowed mode with the "traffic light" window controls overlaying each running app.&lt;/p&gt;

&lt;p&gt;This image below shows the &lt;a href="https://webkit.org/demos/safe-area-insets/3-safe-area-constants.html" rel="noopener noreferrer"&gt;exact same demo&lt;/a&gt; running on iPadOS 26.0 (23A341). When I thought Apple would use the same &lt;code&gt;env()&lt;/code&gt; variables to re-adjust the layout of web apps to be more immersive in windowed mode, This is what I got with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The window controls covering the "Blog" link. &lt;em&gt;Imagine if another app has a hamburger menu icon blocked by the same controls&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;A black gap between the viewport content and the top window edge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr48d6pmdvfnp95gyk5lg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr48d6pmdvfnp95gyk5lg.png" alt="A screenshot on WebKit's official demo of  raw `env(safe-area-inset-*)` endraw  in iPadOS 26, windowed mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It could have been better to allow &lt;code&gt;env(safe-area-inset-top)&lt;/code&gt; to offset the site content from the window decoration/controls, while maintaining the immersive look and feel for the new iPadOS (and possibly macOS, too).&lt;/p&gt;

&lt;p&gt;Unless when the web app developers want to replicate the common Mac look and feel, with window controls properly aligned with the website's navigation bar. &lt;a href="https://blogs.windows.com/msedgedev/2022/09/27/closing-pixel-gap-native-web-window-controls-overlay/" rel="noopener noreferrer"&gt;CSS Window Controls Overlay API&lt;/a&gt; has been made for this purpose.&lt;/p&gt;

&lt;p&gt;Using the demo from &lt;a href="https://amandabaker.github.io/pwa/explainer-example/index.html" rel="noopener noreferrer"&gt;https://amandabaker.github.io/pwa/explainer-example/index.html&lt;/a&gt;, we can confirm that this works with both macOS and Windows. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foafl0zhwfo8jmxe3midi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foafl0zhwfo8jmxe3midi.png" alt="Windows PWA example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But for iPadOS? Nope.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4udyj5ebt3b67g3nxpcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4udyj5ebt3b67g3nxpcx.png" alt="iPadOS PWA exampl"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>pwa</category>
      <category>css</category>
    </item>
    <item>
      <title>The (&gt;_ )s need your help!</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Fri, 16 Feb 2024 14:32:27 +0000</pubDate>
      <link>https://forem.com/reinhart1010/the-s-need-your-help-31b8</link>
      <guid>https://forem.com/reinhart1010/the-s-need-your-help-31b8</guid>
      <description>&lt;p&gt;Hello, World!&lt;/p&gt;

&lt;p&gt;As Friday has come to an end, we’d really like to let you guess what could be the name of my unique, round (&amp;gt;_ )ty head.&lt;/p&gt;

&lt;p&gt;Well, we actually had one. It’s simply called “the shell” because we were designed as the Bearers of the Shells (BOTS), the ambassadors of the command-line world for a cancelled webcomic project.&lt;/p&gt;

&lt;p&gt;Sounds cool, right? But that “shell” didn’t work well because many non-technical people couldn’t understand what even a computer shell is. So, as I believe many of you are used to hang out in the Terminal and in cafes, are there any other names that you’d recommend to describe our heads?&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>bash</category>
      <category>terminal</category>
      <category>discuss</category>
    </item>
    <item>
      <title>An imperative way to build a website!</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Thu, 01 Feb 2024 14:57:49 +0000</pubDate>
      <link>https://forem.com/reinhart1010/an-imperative-way-to-build-a-website-1ah1</link>
      <guid>https://forem.com/reinhart1010/an-imperative-way-to-build-a-website-1ah1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;(#_ )!&lt;/strong&gt; This tutorial is definitely inspired by &lt;a href="https://dev.to/jakemackie/web-development-in-2024-29d6"&gt;an interesting discussion in choosing a web tech stack in 2024&lt;/a&gt;. Of course, Imperative HTML is a more esoteric way of writing websites but still easy to learn for (#- )!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have you ever:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built arcane user interface with C/C++?&lt;/li&gt;
&lt;li&gt;Experienced in using Tcl/Tk (e.g. &lt;code&gt;tkinter&lt;/code&gt; in Python)?&lt;/li&gt;
&lt;li&gt;Rejected the singularity of XML-based files (including QML and XAML) in user interface development?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HTML itself was primarily based on XML (up to HTML 4.x). And we really hate if we have to write just to display the text “Hello, World!” this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello, World!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Like, there’s no &lt;code&gt;main&lt;/code&gt; function there. And when you wanted to make these elements interactive, you have to deal with the mess of &lt;code&gt;document.getElementById()&lt;/code&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  A “Hello, World!” to Imperative HTML.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Imperative HTML&lt;/strong&gt; is technically JavaScript in disguise of a HTML &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag. But what makes Imperative HTML different than Node.js-like “back-end JavaScript programming” is that this still produces valid HTML, and even could prevent syntactic HTML errors just because you forgot to put your right bracket or double quotes in the perfect place.&lt;/p&gt;

&lt;p&gt;Or in other words, an Imperative HTML &lt;del&gt;program&lt;/del&gt; &lt;del&gt;webapp&lt;/del&gt; &lt;strong&gt;programmable webpage&lt;/strong&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-lg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World (&amp;gt;_ )!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is definitely safer to write than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-lg&amp;gt;Hello, World (&amp;gt;_ )!&amp;lt;/p&amp;gt;
&amp;lt;!-- Oh no, you didn't escape the &amp;gt; in (&amp;gt;_ )! --&amp;gt;
&amp;lt;!-- ...and the missing double-quotes! --&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imperative HTML is powered by JavaScript, so you can still benefit from JavaScript’s tighter error-checking than regular HTML, where browsers attempt to guess the meaning and purpose of some HTML and CSS attributes, also known as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode" rel="noopener noreferrer"&gt;quirks mode&lt;/a&gt;, because of legacy reasons.&lt;/p&gt;

&lt;p&gt;And since it is powered by JavaScript, the political dignity of "Imperative HTML" itself can be raised in two ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;By declaring that unlike HTML, Imperative HTML is a true programming language, full with Turing-complete selection and repetition control structures (#- );&lt;/li&gt;
&lt;li&gt;By giving web developers more power to fight against people who are campaigning against JavaScript, &lt;a href="https://www.fsf.org/campaigns/freejs-1/the-free-javascript-campaign" rel="noopener noreferrer"&gt;especially for political reasons&lt;/a&gt;. Who knows that Imperative HTML gives devs more freedom to do so (#o )?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And of course, you can slap on the power of TypeScript, if you really can, to ensure that you’re writing HTML tags and appropriate styles in a standards-compliant way. Isn’t this also a benefit of React’s JSX and CSS-in-JS?&lt;/p&gt;

&lt;h2&gt;
  
  
  Imperative HTML &lt;em&gt;is&lt;/em&gt; the intended way.
&lt;/h2&gt;

&lt;p&gt;This statement is controversial, of course, but the original XML-like HTML truly feels like the conventional way to write proper websites, yet our reinhart1010.id and alterine0101.id websites are still written in &lt;em&gt;that&lt;/em&gt; conventional way.&lt;/p&gt;

&lt;p&gt;But remember, web browsers are still tasked to parse these HTML tags and convert them into internal structs which make up the today’s &lt;strong&gt;Document Object Model (DOM)&lt;/strong&gt;. Having to learn that HTML tags are objects would never be easier without attempting to learn how to declare HTML tags in the object-oriented way.&lt;/p&gt;

&lt;p&gt;Not to mention React, some of the world’s most loved web frameworks, still renders your elements this way. Since React features a Virtual DOM by default, they have to re-render the hand-crafted &lt;del&gt;HTML&lt;/del&gt; JSX elements in the same way of this imperative tutorial: &lt;code&gt;document.createElement()&lt;/code&gt; and so.&lt;/p&gt;

&lt;p&gt;So far, the only main disadvantage of Imperative HTML is that these webpages will not be good for SEOs, because the document is no longer written in machine-readable format (note: we can still leave some metadata inside &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; before &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; in Imperative HTML), causing JavaScript performance overhead, yadda-yadda, and so on. But the main irony is that even modern HTML scraper and parsers like &lt;a href="https://www.crummy.com/software/BeautifulSoup/" rel="noopener noreferrer"&gt;BeautifulSoup&lt;/a&gt; parses regular HTML into objects the same way as browsers do, so imperative programming should be the way, right?&lt;/p&gt;

&lt;h2&gt;
  
  
  Just right to the tutorial!
&lt;/h2&gt;

&lt;p&gt;In Imperative HTML, you (still) write code inside a HTML file, but you have to set up a few tags to make the web browser know that you're writing Imperative that supports HTML5:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// Your code here...&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ending &lt;code&gt;&amp;lt;/script&amp;gt;&lt;/code&gt; tag is optional, just like the &lt;code&gt;?&amp;gt;&lt;/code&gt; part of PHP scripts, but we highly recommend it as part of our coding convention.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;main()&lt;/code&gt; function shown earlier is actually optional, but also recommended to ensure that the function is properly executed after the web browser is ready to load (using &lt;code&gt;window.onload = main;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declaring a HTML tag
&lt;/h2&gt;

&lt;p&gt;The usual way to write a HTML content is to use one of its supported tags, then adds attributes,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"hero-text"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Hello, World (&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;_ )!
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;p&lt;/code&gt; is the &lt;strong&gt;Element Name&lt;/strong&gt;, &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;class&lt;/code&gt; is just some of the attributes, and the final, &lt;code&gt;Hello, World (&amp;gt;_ )!&lt;/code&gt; text is the &lt;code&gt;textContent&lt;/code&gt;. In Imperative HTML, it is just as easy as this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Make sure you have put this code after the &amp;lt;script&amp;gt; tag!&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-lg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World (&amp;gt;_ )!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But if you love to explicitly declare the class, you can use this instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// HTMLParagraphElement only applies to &amp;lt;p&amp;gt; tags.&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HTMLParagraphElement&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-lg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World (&amp;gt;_ )!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Imperative HTML, you can assign event triggers even before attaching it to the page!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a button element that prints the sentence on click&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Click Me!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World (&amp;gt;_ )!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Displaying tags into the webpage
&lt;/h2&gt;

&lt;p&gt;And now, the most important part of this is to render these elements into the web browser. Now, our simplistic HTML structure of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;will be very likely to be rendered as this in most web browsers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can see that HTML has the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, the place to put the webpage's metadata, and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, the actual content displayed in the web browser. As a quick reference,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;document.head&lt;/code&gt; or &lt;code&gt;document.body&lt;/code&gt; to modify the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, respectively&lt;/li&gt;
&lt;li&gt;These two parts are still considered as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement" rel="noopener noreferrer"&gt;&lt;code&gt;HTMLElement&lt;/code&gt;s&lt;/a&gt;, which means you can use &lt;code&gt;.appendChild()&lt;/code&gt; to append the element child (e.g. add new item to a HTML unordered list / &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt; / &lt;code&gt;HTMLUListElement&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Just like &lt;code&gt;clear()&lt;/code&gt; to clear the Terminal console in other programming languages, you can use &lt;code&gt;document.body.textcontent = ""&lt;/code&gt; to clear out the contents in the entire page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, using the interactive button example, we can simply add them into the webpage using the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Create a button element that prints the sentence on click&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;btn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Click Me!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, World (&amp;gt;_ )!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Attach them to the webpage&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Attach the main function when the webpage is ready to load!&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Well, I think that's all for now. Of course, there will be many interesting ways to use Imperative HTML, so stay tuned and follow us! 🩷&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>imperativehtml</category>
    </item>
    <item>
      <title>How to use One UI Sans on your website.</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Tue, 09 Jan 2024 03:33:46 +0000</pubDate>
      <link>https://forem.com/reinhart1010/how-to-use-one-ui-sans-on-your-website-1m1i</link>
      <guid>https://forem.com/reinhart1010/how-to-use-one-ui-sans-on-your-website-1m1i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Here’s some notes:&lt;/p&gt;

&lt;p&gt;Use `font-family: "One UI Sans App VF" before any other system font stack (including system-ui).&lt;br&gt;
This trick currently only works on &lt;a href="https://firefox.com" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt; running on One UI 6.0 (Android 14).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Samsung’s One UI 6.0 introduces a whole new font, One UI Sans. And that means Samsung joins the list of other Android manufacturers to intentionally ditch the classic Roboto from their Android system apps.&lt;/p&gt;

&lt;p&gt;No, I’m not joking. But Samsung has quite a long history to introduce their custom system font for the Galaxy line of devices, from &lt;strong&gt;SamsungSans&lt;/strong&gt; to &lt;strong&gt;Breeze Sans&lt;/strong&gt; (Tizen-exclusive) to &lt;strong&gt;SamsungOne&lt;/strong&gt;, and now, &lt;strong&gt;One UI Sans&lt;/strong&gt;. It’s interesting to see that Samsung finally adopts a grotesque sans-serif, instead of humanist, into their own products.&lt;/p&gt;

&lt;p&gt;And what’s more interesting, is that you can now use this font on your system font stack. Like us, and we’re just implement it right here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Searching for the correct font name.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmjjf2tahmqzjo5kdvpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmjjf2tahmqzjo5kdvpp.png" alt="FX File Manager"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On third-party file managers like FX, you can check out a list of all installed system fonts by checking out &lt;strong&gt;/ (system/root) /system/fonts&lt;/strong&gt;. After finding the font file, we found out that the font name is &lt;strong&gt;OneUISans-VF.ttf&lt;/strong&gt; and &lt;strong&gt;OneUISansKR-VF.ttf&lt;/strong&gt; (for Korean, as the font name suggests). So, the CSS &lt;code&gt;font-face&lt;/code&gt; should have been &lt;code&gt;"OneUISans-VF"&lt;/code&gt;, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Well, no. And that’s the problem.&lt;/strong&gt; Our &lt;a href="https://shift.reinhart1010.id/note/system-font-stack" rel="noopener noreferrer"&gt;site’s font stack&lt;/a&gt; already used "SamsungColorEmoji" instead of "Samsung Color Emoji" to forcibly render Samsung Color Emoji before falling back to Noto Color Emoji, the usually-default Android one.&lt;/p&gt;

&lt;p&gt;The official name of the font turns out to be &lt;strong&gt;One UI Sans APP VF&lt;/strong&gt;, which is quite a weird name because, sure, VF stands for variable font, but APP? Will there be dedicated versions of the font, such as one for web and Galaxy Wearable?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ecwvhljzm0c4gw453d9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ecwvhljzm0c4gw453d9.png" alt="One UI Sans on Windows Explorer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the meantime, that means you can now use this font by including &lt;code&gt;"One UI Sans APP VF"&lt;/code&gt; into your CSS font stack. Note that Android browsers will still treat &lt;code&gt;"system-ui"&lt;/code&gt; as Roboto.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>DRY-ing Go/Golang’s error handling with underscores.</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Tue, 09 Jan 2024 03:26:07 +0000</pubDate>
      <link>https://forem.com/reinhart1010/dry-ing-gogolangs-error-handling-with-underscores-30li</link>
      <guid>https://forem.com/reinhart1010/dry-ing-gogolangs-error-handling-with-underscores-30li</guid>
      <description>&lt;p&gt;&lt;strong&gt;The Go Programming Language&lt;/strong&gt;, also preferred by others as Golang, doesn’t include the concept of Exceptions and try-catch like Java. This is why many functions and libraries built around it are meant to be written like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;somelib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SomeCoolFunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are writing simple programs with Go, there are many cases that you just don’t put much care on error-handling. If you, for example, just want the program to exit and informing the error message, you might most likely to do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;somelib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SomeCoolFunction&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;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;data2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;anotherlib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnotherCoolFunction&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;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;somelib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SaveTheseCoolData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data2&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;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well, that’s bad if you try to place the exact same if conditions for every methods, just because you don’t want to take much care in handling errors. This is why I decided to simplify things by introducing two new functions, &lt;code&gt;__(err)&lt;/code&gt; and &lt;code&gt;___(res, err)&lt;/code&gt;!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&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;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;___&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}](&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;T&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;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&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;res&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Completely good for &lt;strong&gt;“Don’t Repeat Yourself” (DRY)&lt;/strong&gt;. But remember, if you have more than one package, &lt;strong&gt;you will need to repeat writing the same functions to get the same convenience for every different package,&lt;/strong&gt; because these underscore names are not considered as public functions.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Let's test DevEco Studio on WINE (Linux)!</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Fri, 08 Sep 2023 09:30:49 +0000</pubDate>
      <link>https://forem.com/reinhart1010/lets-test-deveco-studio-on-wine-linux-23lh</link>
      <guid>https://forem.com/reinhart1010/lets-test-deveco-studio-on-wine-linux-23lh</guid>
      <description>&lt;p&gt;&lt;a href="https://developer.harmonyos.com/en/develop/deveco-studio" rel="noopener noreferrer"&gt;DevEco Studio&lt;/a&gt; is the official IDE for HUAWEI's HarmonyOS platform. And it's only available for Windows and macOS. &lt;strong&gt;Or is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Considering that the Linux desktop (like Kylin and others) is increasingly important in Mainland China to reduce their dependence on third-party operating systems from foreign companies (including Windows and macOS), there should be many aspiring HarmonyOS developers who want to build apps using this IDE, but on Linux. After all, HarmonyOS was built to reduce HUAWEI's dependence on Android, which is also primarily developed by foreign companies with many closed-source/proprietary components.&lt;/p&gt;

&lt;p&gt;Of course, there are several workarounds to make HarmonyOS apps on Linux, like on &lt;a href="https://zhuanlan.zhihu.com/p/531275637" rel="noopener noreferrer"&gt;this Chinese Zhihu blog post&lt;/a&gt; which require you to manually install command-line tools as well as using Visual Studio Code in place of DevEco Studio.&lt;/p&gt;

&lt;p&gt;Oh yeah, &lt;strong&gt;I’m running Fedora&lt;/strong&gt;, which means that I cannot install the official Linux version of DevEco Command Line Tools, which is simply a huge shell script requiring you to have &lt;strong&gt;apt&lt;/strong&gt; installed on your system. Fedora doesn’t include that tool.&lt;/p&gt;

&lt;p&gt;And cases like this could be frustrating for some app developers and teachers to learn HarmonyOS app development together who are already familiar with DevEco Studio way (or should I say, the JetBrains way) of doing things. DevEco Studio have a similar look and feel to Android Studio because, well, they are both based on JetBrains' IntellIJ IDEA software.&lt;/p&gt;

&lt;h2&gt;
  
  
  The installer completed successfully, at least.
&lt;/h2&gt;

&lt;p&gt;So I decided to check out DevEco Studio for Windows on my Linux device using WINE, and shout out to JetBrains and WINE team because &lt;strong&gt;DevEco Studio can be installed on Linux!&lt;/strong&gt; If you are already familiar with Wine &lt;a href="https://appdb.winehq.org/" rel="noopener noreferrer"&gt;AppDB&lt;/a&gt; review process, the very first thing to look when testing Windows apps is to check whether the software can be installed successfully.&lt;/p&gt;

&lt;p&gt;However, there's a caveat here. &lt;strong&gt;As of time of this writing I still cannot download additional tools to develop HarmonyOS apps using Java and JS/eTS/ArkTS due to an internal error,&lt;/strong&gt; possibly related to Huawei's web service infrastructure. I also couldn't download the necessary files for simulator because of the same issue.&lt;/p&gt;

&lt;p&gt;So that might be covered in Part 2, and that's why I decided to not submit my reviews to AppDB yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The installation process.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsl4rs7a4szv2fbyk235.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsl4rs7a4szv2fbyk235.png" alt="Running the DevEco Studio installer. That works."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Running the DevEco Studio installer. That works.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The installation process is straightforward. But for those who are just starting their fresh, new Wine install/profile, you will need to install the Windows version of Node.js (latest LTS is highly recommended) as well as Git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Additionally, you will need to use a 64-bit WINE profile, aka. the Wineprefix.&lt;/strong&gt; WINE, PlayOnLinux, and PlayOnMac usually recommends using 32-bit ones, but DevEco Studio requires a 64-bit machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next, ensure that your Windows version, is set to Windows 10.&lt;/strong&gt; You can view and change your current (emulated) Windows version by going to &lt;strong&gt;Wine Configuration (&lt;code&gt;winecfg&lt;/code&gt;)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Note that I am using &lt;strong&gt;Wine version 8.12&lt;/strong&gt; on Fedora 38, and before installing DevEco Studio, I also have set the following library overrides to support other apps/programs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*mscoree (native)&lt;/li&gt;
&lt;li&gt;*mscorwks (native)&lt;/li&gt;
&lt;li&gt;msftedit (native, builtin)&lt;/li&gt;
&lt;li&gt;msxml (native, builtin)&lt;/li&gt;
&lt;li&gt;netapi32 (native, builtin)&lt;/li&gt;
&lt;li&gt;riched20 (native, builtin)&lt;/li&gt;
&lt;li&gt;riched30 (native, builtin)&lt;/li&gt;
&lt;li&gt;richtx32 (native, builtin)&lt;/li&gt;
&lt;li&gt;vb6run (native, builtin)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know that some of there are very likely unrelated with DevEco Studio, such as riched20 and riched30 which are used in Microsoft Office. But I still do not have available time to check which library overrides that are required by DevEco Studio, so if you ran into additional problems when starting it, you may need to add some of these library overrides to your &lt;strong&gt;Wine Configuration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Aside from the network issue, I can still create, open, and modify projects inside the IDE. Here are some screenshots:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxuyv2el6m0z4tkf8eqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxuyv2el6m0z4tkf8eqc.png" alt="Oh, yeah, the DevEco Studio banner blocks the window. That should be reported as a bug 🐞…"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Oh, yeah, the DevEco Studio banner blocks the window. That should be reported as a bug 🐞…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlwk52188l39spg5i17l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdlwk52188l39spg5i17l.png" alt="…which is very annoying."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;…which is very annoying.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fcmmjqctq6hjae43lho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fcmmjqctq6hjae43lho.png" alt="The network error I mentioned (could not find download URL)…"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The network error I mentioned (could not find download URL)…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr2n84x6htw20ed7p97q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpr2n84x6htw20ed7p97q.png" alt="…and the detailed info (see the Build log)."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;…and the detailed info (see the Build log).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6lt96b4xteg6c9drl4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6lt96b4xteg6c9drl4a.png" alt="Network shouldn’t be an issue because I can still browse the IntellIJ plugins catalog."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Network shouldn’t be an issue because I can still browse the IntellIJ plugins catalog.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;Well, that’s quite unfortunate that you can’t download the emulators and other necessary tools, which happens to be an &lt;strong&gt;Apache Tomcat HTTP timeout error&lt;/strong&gt; that even I do not know how to fix (of course, by increasing the timeout duration, but where to apply that inside WINE or DevEco Studio?)&lt;/p&gt;

&lt;p&gt;So I decided to submit a &lt;strong&gt;Bronze&lt;/strong&gt; rating on AppDB. Hopefully my review will be approved first.&lt;/p&gt;

</description>
      <category>harmonyos</category>
      <category>linux</category>
      <category>wine</category>
      <category>fedora</category>
    </item>
    <item>
      <title>Code, not content.</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Tue, 10 Jan 2023 03:56:54 +0000</pubDate>
      <link>https://forem.com/reinhart1010/code-not-content-4h0n</link>
      <guid>https://forem.com/reinhart1010/code-not-content-4h0n</guid>
      <description>&lt;p&gt;You don’t have to be beautiful on DEV, Hashnode, Medium and so to be useful and successful.&lt;/p&gt;

&lt;p&gt;Quite a sister post of the &lt;a href="https://reinhart1010.id/blog/2022/06/07/the-recycled-verse/" rel="noopener noreferrer"&gt;&lt;strong&gt;Recycled Developer saga&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of my biggest frustration around the developer community today, is all about the modern “developer social tools”, made and guaranteed by developers to work for every developer.&lt;/p&gt;

&lt;p&gt;Let’s be honest, that tools also include &lt;a href="http://dev.to/"&gt;&lt;strong&gt;DEV/Forem&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://hashnode.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Hashnode&lt;/strong&gt;&lt;/a&gt;, and &lt;a href="http://Daily.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;Daily.dev&lt;/strong&gt;&lt;/a&gt;. And it’s funny yet ironic that I’m passing this blog post to their platforms, too.&lt;/p&gt;

&lt;p&gt;Today, I’d like to pass a message for devs around the world. And it all started from a heated debate emerged from this specific DEV Community post: &lt;a href="https://dev.to/wiseai/17-compelling-reasons-to-start-ditching-typescript-now-249b"&gt;&lt;strong&gt;17 Compelling Reasons to Start Ditching TypeScript Now&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One other dev questioned technical things, like, “how is TypeScript unfamiliar to learn?”, or “are type-safety important?”&lt;/p&gt;

&lt;p&gt;And there’s one reply from the post author which makes me questioning about this dev.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for your comment. &lt;strong&gt;I strive to provide quality content&lt;/strong&gt; that is both informative and enjoyable to read. I am sorry to hear that you felt the article was not up to par in terms of your agreement with my opinion, which is ok. …&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/wiseai/17-compelling-reasons-to-start-ditching-typescript-now-249b#comment-23okh"&gt;&lt;strong&gt;&lt;cite&gt;https://dev.to/wiseai/17-compelling-reasons-to-start-ditching-typescript-now-249b#comment-23okh&lt;/cite&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And now, I’m thinking, “what kind of developer are you?”&lt;/p&gt;

&lt;p&gt;“Are you a &lt;strong&gt;JavaScript developer&lt;/strong&gt;, or a &lt;strong&gt;JavaScript blog post developer&lt;/strong&gt;?”, looking at those badges on &lt;a href="https://dev.to/wiseai"&gt;&lt;strong&gt;his profile&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And three days later, another user on DEV decided to publish a new post, provokably titled &lt;a href="https://dev.to/louisgv/18-reasons-to-use-typescript-since-yesterday-42ci"&gt;&lt;strong&gt;18 Reasons to Use Typescript SINCE YESTERDAY&lt;/strong&gt;&lt;/a&gt;, mostly filled with counterarguments.&lt;/p&gt;

&lt;p&gt;“Oh no, what again!? A &lt;strong&gt;TypeScript blog post developer&lt;/strong&gt; posted this!?”&lt;/p&gt;

&lt;p&gt;What the heck! Their &lt;strong&gt;Table of Contents&lt;/strong&gt;… is… sus…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0i5bd3vf00zwaevhlxd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0i5bd3vf00zwaevhlxd.jpeg" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub’s co-founders: A personal blog story.
&lt;/h2&gt;

&lt;p&gt;I’m sure that most of you are in love with GitHub, right? So here’s a story.&lt;/p&gt;

&lt;p&gt;GitHub was originally founded by four co-founders. &lt;a href="http://chriswanstrath.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Chris Wanstrath&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://hyett.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;PJ Hyett&lt;/strong&gt;&lt;/a&gt; are two of them, who neither have a blog site nor a &lt;a href="https://docs.daily.dev/docs/your-profile/devcard" rel="noopener noreferrer"&gt;&lt;strong&gt;DevCard&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulurk2y1zwqh46b8q9bu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fulurk2y1zwqh46b8q9bu.jpeg" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://chriswanstrath.com" rel="noopener noreferrer"&gt;chriswanstrath.com&lt;/a&gt; and &lt;a href="http://hyett.com" rel="noopener noreferrer"&gt;hyett.com&lt;/a&gt;, shown side-by-side.&lt;/p&gt;

&lt;p&gt;How about the other two? Well, &lt;a href="http://scottchacon.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Scott Chacon&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://tom.preston-werner.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Tom Preston-Werner&lt;/strong&gt;&lt;/a&gt; have their own personal blog sites (hooray!), but don’t expect their blog sites look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxklrln63tfvcj72cof6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxklrln63tfvcj72cof6.jpeg" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A glimpse of &lt;a href="http://daily-dev-tips.com" rel="noopener noreferrer"&gt;daily-dev-tips.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Instead, they are just some plain old boring blue links:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpyzhil789rypybfk4yk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpyzhil789rypybfk4yk.jpeg" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://scottchacon.com" rel="noopener noreferrer"&gt;scottchacon.com&lt;/a&gt; and &lt;a href="http://tom.preston-werner.com" rel="noopener noreferrer"&gt;tom.preston-werner.com&lt;/a&gt;, shown side-by-side.&lt;/p&gt;

&lt;p&gt;Something is kinda off here. &lt;a href="https://daniel.haxx.se/" rel="noopener noreferrer"&gt;&lt;strong&gt;Daniel Stenberg&lt;/strong&gt;&lt;/a&gt;, aka. the creator of the infamous &lt;a href="https://curl.se/" rel="noopener noreferrer"&gt;&lt;strong&gt;cURL&lt;/strong&gt;&lt;/a&gt; software, also opts for these boring blue links.&lt;/p&gt;

&lt;p&gt;And while &lt;a href="https://brendaneich.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Brendan Eich&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://neopythonic.blogspot.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Guido Van Rossum&lt;/strong&gt;&lt;/a&gt;, the respective creators of JavaScript and Python, moves away from these boring links, they never put their content on the JavaScript and Python post collections over DEV and Hashnode, &lt;strong&gt;although they are the creator of these languages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What else? Linus Torvalds? &lt;a href="https://torvalds-family.blogspot.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Meh&lt;/strong&gt;&lt;/a&gt;. Pieter Levels? &lt;a href="https://levels.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Same set of blue boring links&lt;/strong&gt;&lt;/a&gt;. Solomon Hykes, the original creator of Docker? None, just &lt;a href="https://twitter.com/solomonstre" rel="noopener noreferrer"&gt;&lt;strong&gt;Twitter&lt;/strong&gt;&lt;/a&gt; and the &lt;a href="https://hachyderm.io/@shykes" rel="noopener noreferrer"&gt;&lt;strong&gt;Fediverse&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It feels that everyone who are OG creators of these great software are still staying away from the so-called “developer’s &lt;em&gt;best&lt;/em&gt; social media (or blog)” platforms. Many of them are way more experienced than those featured on the Hashnode’s front page, for making &lt;em&gt;that&lt;/em&gt; programming language, &lt;em&gt;that&lt;/em&gt; trending libraries and frameworks that are still being discussed over these platforms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7c4ir9o4cd5sr8krfsc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7c4ir9o4cd5sr8krfsc.jpeg" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Featured Developers list on Hashnode’s homepage.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;As a software developer, your main purpose is to solve problems through programming your very own software.&lt;/strong&gt; Not making more content, publish them on &lt;em&gt;the happiest place for devs&lt;/em&gt;, and beg for likes, Notion saves, and follows.&lt;/p&gt;

&lt;p&gt;You don’t have to be beautiful on DEV, Hashnode, Medium and so to be useful and successful. If you would like to be like them, &lt;strong&gt;focus on writing quality code, not quality content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are still many ways where content could be improved, like updating your favorite framework’s documentation, updating wikis, or adding more demos and tutorials, but engagement-hungry posts won’t help you and people in the long-term.&lt;/p&gt;

&lt;p&gt;That two devs who are still living without a blog site today had built a product and company which have been bought &lt;strong&gt;billions&lt;/strong&gt; by Microsoft. Now how about you, an (ex-)user of &lt;em&gt;that&lt;/em&gt; platform?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>developer</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Can you regex this? A 10MB+ regex file of the entire Indonesian internet blocklist!</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Sun, 08 Jan 2023 10:59:26 +0000</pubDate>
      <link>https://forem.com/reinhart1010/can-you-regex-this-a-10-20i</link>
      <guid>https://forem.com/reinhart1010/can-you-regex-this-a-10-20i</guid>
      <description>&lt;p&gt;A while ago we decided to &lt;a href="https://reinhart1010.id/blog/2023/01/07/trustpositif-regex/" rel="noopener noreferrer"&gt;publish our new gigantic regular expression files&lt;/a&gt; containing the whole Indonesian internet blocklist with 99.99% accuracy (as tested against the &lt;a href="https://trustpositif.kominfo.go.id" rel="noopener noreferrer"&gt;official one&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Well, why? We’re bored and just want to experiment with graphs. Back to the old days of C, oh wait, it's another Go program!&lt;/p&gt;

&lt;p&gt;Our experiments inside a M1 MacBook Air shows that even Go’s default &lt;code&gt;regexp&lt;/code&gt; library can’t handle this big that we had to switch to &lt;a href="https://github.com/dlclark/regexp2" rel="noopener noreferrer"&gt;&lt;code&gt;regexp2&lt;/code&gt;&lt;/a&gt;—and that still only works for the ~10MB &lt;code&gt;regex-reversed.txt&lt;/code&gt;, not the larger &lt;code&gt;regex.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So now, we have a challenge for you: &lt;strong&gt;can your favorite regular expression library handle this, &lt;a href="https://github.com/alterine0101/trustpositif/blob/main/output/regex.txt" rel="noopener noreferrer"&gt;14+ MB of pure regex&lt;/a&gt;?&lt;/strong&gt; I’m personally interested with Intel’s &lt;a href="https://www.intel.com/content/www/us/en/collections/libraries/hyperscan/regular-expression-match.html" rel="noopener noreferrer"&gt;Hyperscan&lt;/a&gt; engine, optimized for their x86 platform, of course, to see whether they can handle this big.&lt;/p&gt;

&lt;p&gt;Because who knows, we accidentally made a regex performance benchmark tool. (#_ )&lt;/p&gt;

</description>
      <category>regex</category>
      <category>performance</category>
      <category>challenge</category>
      <category>go</category>
    </item>
    <item>
      <title>What does it feel to have 1,000 GitHub contributions in 2021.</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Wed, 05 Jan 2022 07:26:49 +0000</pubDate>
      <link>https://forem.com/reinhart1010/what-does-it-feel-to-have-1000-github-contributions-in-2021-4lmo</link>
      <guid>https://forem.com/reinhart1010/what-does-it-feel-to-have-1000-github-contributions-in-2021-4lmo</guid>
      <description>&lt;p&gt;In 2021, I have reached a huge milestone on my GitHub account, where I’ve raised my GitHub contribution count from 424 in 2020 to a &lt;strong&gt;whopping 1,109 contribution in 2021!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s almost three times than last year. However, some of them were automated commits, so we can simply assume that I’ve done 1,000 contributions instead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that GitHub’s contribution count includes &lt;strong&gt;commits, pull requests,&lt;/strong&gt;  &lt;strong&gt;opened issues and code reviews&lt;/strong&gt;. So, a thousand contributions does not always mean a thousand Git commits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, a majority of this count comes from Git commits, and I’ve wished I would be more professional in creating new commits. This is because about 20% of those commits are based on the following pseudocode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;do {
  change_code();
  commit(); push();
  deploy();
} while (issue_exists);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And yes, this is definitely &lt;strong&gt;not&lt;/strong&gt; a good practice; you should test the code on your local setup before deploying it to the server, even though it’s for staging. In many times I was lazy to set up the app in my local machine since again, it could take much time to set up before continue coding.&lt;/p&gt;

&lt;p&gt;But the rest? I feel 2021 is a great, productive year for me. The tldr-pages project contributes a great sum of contributions (commits, PRs, reviews) to my own profile. And since I’ve successfully convinced more people to use Git and GitHub instead of ZIP files and Google Drive (no, really) for coding projects, my contributions from those private repositories can be carried forward to this awesome, contribution graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meanwhile in the world of robots…
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxbq9h7i7cs8rw3lo25q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxbq9h7i7cs8rw3lo25q.png" width="356" height="734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Starting today, &lt;strong&gt;I’m officially delegating my automated commits to @1010bots on GitHub and GitLab.&lt;/strong&gt; Even though the username has been taken in Instagram and Twitter, this might be a good time for you to follow my group of robotic friends and family on:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/1010bots" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gitlab.com/1010bots" rel="noopener noreferrer"&gt;Gitlab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, I’ll be removing any references to the &lt;strong&gt;Virtual Environment&lt;/strong&gt; , aka. our home address, since it may conflict with &lt;strong&gt;virtualenv&lt;/strong&gt; from the world of Python. At the end, we’re happy to work and sleep from not one, but &lt;strong&gt;five physical locations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;My home&lt;/strong&gt; in Jakarta, Indonesia,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My office&lt;/strong&gt; in Jakarta, Indonesia,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DigitalOcean’s Singapore data center&lt;/strong&gt; (SGP-1),&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Niagahoster’ Singapore data center&lt;/strong&gt; (which powers reinhart1010.id today),&lt;/li&gt;
&lt;li&gt;And anywhere which &lt;strong&gt;GitHub Actions&lt;/strong&gt; would take us to. Yes, some of us today have become &lt;em&gt;true&lt;/em&gt; digital nomads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll start to see commits on 1010bots shortly on my automated commits for &lt;a href="http://github.com/reinhart1010/nix" rel="noopener noreferrer"&gt;my tldr-pages web client&lt;/a&gt; named after &lt;a href="https://dev.to/author/nix"&gt;Nix&lt;/a&gt;. But too late, they have committed several hours ago. And soon, I’ll be syncing my GitHub commits with OpenStreetMap changesets and my I Love My Bible (GMS Church) streaks, so our contribution graph can finally reflect my true productivity rate in the future.&lt;/p&gt;




&lt;p&gt;I might also want to create a competition to beautify our @1010bots GitHub README file and our official website at bots.reinhart1010.id. But we’ll, that would be another story to tell. Thanks for your support to make achieve this amazing goal, and I hope we can create 2,022 contributions this year.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://reinhart1010.id/2022/01/05/what-does-it-feel-to-have-1000-github-contributions-in-2021/" rel="noopener noreferrer"&gt;&lt;span&gt;What does it feel to have 1,000 GitHub contributions in 2021.&lt;/span&gt;&lt;/a&gt; appeared first on &lt;a href="https://reinhart1010.id" rel="noopener noreferrer"&gt;Reinhart Previano Koentjoro&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
    </item>
    <item>
      <title>New Year, New Keys: Exciting PGP and Git updates from us, coming 2022.</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Tue, 21 Dec 2021 06:41:35 +0000</pubDate>
      <link>https://forem.com/reinhart1010/new-year-new-keys-exciting-pgp-and-git-updates-from-us-coming-2022-1ofm</link>
      <guid>https://forem.com/reinhart1010/new-year-new-keys-exciting-pgp-and-git-updates-from-us-coming-2022-1ofm</guid>
      <description>&lt;p&gt;Starting January 1, 2022, we will celebrate &lt;strong&gt;the year of automation&lt;/strong&gt;. That means me and my robots are now willing to contribute to Git even more.&lt;/p&gt;

&lt;p&gt;First, we will test and enable &lt;strong&gt;commit signing&lt;/strong&gt; for future Git commits; whether made by myself or us. And yes, we’re allocating &lt;strong&gt;new email addresses&lt;/strong&gt; dedicated for signing automated Git commits by us; just look for the &lt;strong&gt;@1010bots&lt;/strong&gt; username over GitHub, GitLab, and Gitee as well as email addresses ending with &lt;code&gt;@bots.reinhart1010.id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These commit signing process could be done either through S/MIME or PGP keys. Hence, we’ll use PGP for simplicity, where I will update the current PGP keychain to add more emails, and allocating new PGP key pairs for each of my robots.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://reinhart1010.id/2021/12/21/new-year-new-keys-exciting-pgp-and-git-updates-from-us-coming-2022/" rel="noopener noreferrer"&gt;New Year, New Keys: Exciting PGP and Git updates from us, coming 2022.&lt;/a&gt; appeared first on &lt;a href="https://reinhart1010.id" rel="noopener noreferrer"&gt;Reinhart Previano Koentjoro&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>oh hey, it’s HAM!</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Mon, 22 Nov 2021 15:05:50 +0000</pubDate>
      <link>https://forem.com/reinhart1010/oh-hey-its-ham-m17</link>
      <guid>https://forem.com/reinhart1010/oh-hey-its-ham-m17</guid>
      <description>&lt;p&gt;&lt;strong&gt;hello, world!&lt;/strong&gt; we originally wanna give you a surprise as we “forked” Wikipedia for our own &lt;strong&gt;rootness&lt;/strong&gt; sake!&lt;/p&gt;

&lt;p&gt;the name’s &lt;strong&gt;Hackapedia&lt;/strong&gt; &amp;amp;&amp;amp; you can &lt;a href="https://hackapedia.reinhart1010.id/index.php/Curlgrep" rel="noopener noreferrer"&gt;&lt;code&gt;curlgrep&lt;/code&gt;&lt;/a&gt; it on &lt;a href="https://hackapedia.reinhart1010.id" rel="noopener noreferrer"&gt;https://hackapedia.reinhart1010.id&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22j3xktz5mx9dgr1kt9w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22j3xktz5mx9dgr1kt9w.jpg" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;but well, &lt;strong&gt;MediaWiki&lt;/strong&gt; (aka. the software which powers Wikipedia, wikiHow, Fandom/Wikia, &amp;amp;&amp;amp; i++) isn’t as flexible as we thought; at least, to be installed in a shared hosting environment; we soon realized that many of Wikipedia’s templates require running some Lua scripts to work, and we weren’t familiar with that; so we afraid that the MediaWiki-based Hackapedia will be able to scale in the future;&lt;/p&gt;

&lt;p&gt;meanwhile, one of Reinhart’s undisclosed projects seems to require some sort of API documentation; i mean, just like the API docs[] for &lt;a href="https://developer.paypal.com/docs/api/overview/" rel="noopener noreferrer"&gt;PayPal&lt;/a&gt;, &lt;a href="https://firebase.google.com/docs/reference/" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt;, &amp;amp;&amp;amp; i++; what if we could just create a framework which allows us not just to build Hackapedia, but also lots &amp;amp;&amp;amp; lots of wikis made using the power of Git!&lt;/p&gt;

&lt;p&gt;and since shared hosting works best with static files, &lt;strong&gt;we should definitely build it&lt;/strong&gt; ; perhaps, using Jekyll, maybe?&lt;/p&gt;

&lt;h2&gt;
  
  
  Jekyll &amp;amp;&amp;amp; Halfmoon: good old friends
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faksuc1tmg7q9dk4z32tf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faksuc1tmg7q9dk4z32tf.png" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;well, did you know that our old blog site at &lt;a href="https://reinhart1010.github.io" rel="noopener noreferrer"&gt;&lt;strong&gt;https://reinhart1010.github.io&lt;/strong&gt;&lt;/a&gt; was created using &lt;a href="http://jekyllrb.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Jekyll&lt;/strong&gt;&lt;/a&gt; &amp;amp;&amp;amp; &lt;a href="http://gethalfmoon.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Halfmoon&lt;/strong&gt;&lt;/a&gt;? they’re both awesome, right? so we decided to reuse Halfmoon for &lt;strong&gt;&lt;a href="http://binustoday.reinhart1010.id" rel="noopener noreferrer"&gt;BINUS Today&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy7q1rhnua50fto2mq1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy7q1rhnua50fto2mq1p.png" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;after all, we still consider Halfmoon great &amp;amp;&amp;amp; even better than some alternatives (Bootstrap, Primer) for the infamous Dark Mode &amp;amp;&amp;amp; customization; &amp;amp;&amp;amp; that means wiki authors who will use our framework will be able to easily customize the look &amp;amp;&amp;amp; feel of their own through CSS variables!&lt;/p&gt;

&lt;p&gt;so say goodbye to Vector &amp;amp;&amp;amp; Minerva Neue, we’ll completely make this thing &lt;strong&gt;responsive &amp;amp;&amp;amp; customizable by default!&lt;/strong&gt; (thanks again, Halfmoon!)&lt;/p&gt;

&lt;h2&gt;
  
  
  HAM?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;0th thing 0th,&lt;/strong&gt; we should clarify what HAM is, and whether our amazing project is completely Halal for some concerned people; HAM originally stands for &lt;strong&gt;Hackapedia Article Manager&lt;/strong&gt; , &amp;amp;&amp;amp; the goal of it is just another static content management system (CMS) for (the future version of) Hackapedia; but soon, it become imminent for us to make it recursive, just like &lt;strong&gt;WINE&lt;/strong&gt; which stands for &lt;strong&gt;WINE Is Not an Emulator&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;so, as you can see on the front page of HAM (&lt;a href="https://reinhart1010.github.io/HAM" rel="noopener noreferrer"&gt;https://reinhart1010.github.io/HAM&lt;/a&gt;), there are some definitions[] for that!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8a8w1hov56rje9epg5wb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8a8w1hov56rje9epg5wb.jpg" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  how HAM actually works
&lt;/h2&gt;

&lt;p&gt;HAM is just yet another gem-based Jekyll theme, with some differences; while Jekyll is commonly used to host blog posts (hence those great websites hosted in GitHub Pages), we’re using it instead to host some sort of documentation, “wiki”-style; &lt;strong&gt;well, what defines a wiki?&lt;/strong&gt; well, &lt;a href="https://en.wikipedia.org/wiki/Wiki" rel="noopener noreferrer"&gt;according to Wikipedia&lt;/a&gt;, a wiki isn’t just about the website, but also a &lt;strong&gt;collaborative writing project;&lt;/strong&gt; that’s why wiki site authors can set their own URLs to let viewers discuss &amp;amp;&amp;amp; edit the project, together;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1asgrj04ctf7h2d9n2kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1asgrj04ctf7h2d9n2kk.png" width="800" height="294"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;notice that Report New Issue &amp;amp;&amp;amp; the View Source button? btw this is yet another internal wiki made with HAM!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;HAM is currently under &lt;strong&gt;alpha&lt;/strong&gt; but we’re all loving it; you’ll definitely want to curlgrep out our source code at &lt;a href="https://github.com/reinhart1010/HAM" rel="noopener noreferrer"&gt;&lt;strong&gt;https://github.com/reinhart1010/HAM&lt;/strong&gt;&lt;/a&gt; &amp;amp;&amp;amp; it’s available as &lt;a href="https://rubygems.org/gems/jekyll-ham" rel="noopener noreferrer"&gt;&lt;strong&gt;jekyll-ham&lt;/strong&gt; on rubygems.org&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://reinhart1010.id/2021/11/22/oh-hey-its-ham/" rel="noopener noreferrer"&gt;oh hey, it’s HAM!&lt;/a&gt; appeared first on &lt;a href="https://reinhart1010.id" rel="noopener noreferrer"&gt;Reinhart Previano Koentjoro&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>projects</category>
      <category>talesfromtheroothous</category>
      <category>english</category>
      <category>feedentech</category>
    </item>
    <item>
      <title>COMPUTERUN 2.0 Website</title>
      <dc:creator>Shift / Reinhart Previano K.</dc:creator>
      <pubDate>Wed, 27 Oct 2021 10:39:52 +0000</pubDate>
      <link>https://forem.com/reinhart1010/computerun-20-website-3ef3</link>
      <guid>https://forem.com/reinhart1010/computerun-20-website-3ef3</guid>
      <description>&lt;p&gt;ah, here we go again… upgrading a old, messy codebase made by Reinhart and friends at HIMTI since last year…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ia57nuhp32beoil5f9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ia57nuhp32beoil5f9f.png" width="244" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;bleep! i’m pr0xy,&lt;/strong&gt; somewhat an intern &amp;amp;&amp;amp; a humble &lt;code&gt;*pointer&lt;/code&gt; of Reinhart;&lt;/p&gt;

&lt;p&gt;y’know what, i wanna &lt;code&gt;#include&lt;/code&gt; an array of words from &lt;strong&gt;&lt;em&gt;&lt;a href="http://poignant.guide" rel="noopener noreferrer"&gt;Why’s (Poignant) Guide to Ruby&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; to motivate all of you &lt;strong&gt;guys[]&lt;/strong&gt; working on &lt;strong&gt;COMPUTERUN 2.0 &amp;amp;&amp;amp; i++,&lt;/strong&gt; especially since this will be my last project before signing off as the Manager of the Web Development division of HIMTI BINUS University:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ll be straight with you. &lt;strong&gt;I want you to cry.&lt;/strong&gt; To weep. To whimper sweetly. &lt;strong&gt;Code so beautiful that tears are shed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;cite&gt;&lt;em&gt;Why’s (Poignant) Guide to Ruby&lt;/em&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;amp;&amp;amp; i suddenly remembered that &lt;strong&gt;&lt;a href="https://curriculum.binus.ac.id/course/ISYS6197/" rel="noopener noreferrer"&gt;the folks at HIMSISFO are now struggling with Java instead of C(#)!&lt;/a&gt;&lt;/strong&gt; ah, that’s why many of you wear glasses and still don’t know what dangling pointers are… i see…&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;alright…&lt;/strong&gt; amarga sampeyan kabeh luwih ngerti basa Java, sumangga kita &lt;code&gt;System.out.println()&lt;/code&gt;no kabeh &lt;code&gt;ArrayList&amp;lt;Thing&amp;gt;&lt;/code&gt; sing wis rampung ing divisi pangembangan &lt;code&gt;Website website = new Website("COMPUTERUN 2.0: EXECUTE");&lt;/code&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  what have we done?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;um… what?!&lt;/strong&gt; we’ve done so many things; in fact, &lt;strong&gt;it wouldn’t be “COMPUTERUN 2.0” if we didn’t actually upgrade the old junk codebase!&lt;/strong&gt; we kickstarted our improvements to the existing &lt;strong&gt;COMPUTERUN 2020: INSIGHT&lt;/strong&gt; registration system by refactoring and creating another one at &lt;a href="https://registration.himti.or.id" rel="noopener noreferrer"&gt;https://registration.himti.or.id&lt;/a&gt;; then we believe in recursion &amp;amp;&amp;amp; so we built a new parser which (ab)uses yaml, markdown, and laravel blade templates to quickly build static websites, and today i’m gonna…&lt;/p&gt;

&lt;p&gt;hey &lt;strong&gt;Shift&lt;/strong&gt; , is that you? i heard you wanna give some &lt;code&gt;News[]&lt;/code&gt; related to COMPUTERUN; wanna &lt;code&gt;println()&lt;/code&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  a &lt;strong&gt;Shift&lt;/strong&gt; -y intermission
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuc32xjmrcx1s27us592.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuc32xjmrcx1s27us592.png" width="380" height="715"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sure! And hey, you know who I am, right? I’m &lt;strong&gt;Shift(ine)&lt;/strong&gt; and &lt;strong&gt;MY NEW METALLIC HAIR IS AWESOME!!!&lt;/strong&gt; And oh, if you’re looking for &lt;strong&gt;Caps&lt;/strong&gt; , she’s currently being worn by another blue shell to fly and help me send some emails. But she’s fine…&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;let’s talk about emails&lt;/strong&gt; , shall we? Well, as some of you might know, &lt;strong&gt;I’m (currently) the master of email delivery,&lt;/strong&gt; ’cause &lt;a href="https://reinhart1010.id/2021/08/16/my-life-as-a-snake-i-mean-a-python3-emailer-robot/" rel="noopener noreferrer"&gt;I am&lt;/a&gt;! We currently share the same address, &lt;strong&gt;&lt;a href="mailto:noreply@himti.or.id"&gt;noreply@himti.or.id&lt;/a&gt;&lt;/strong&gt; , to send emails from &lt;strong&gt;COMPUTERUN 2.0&lt;/strong&gt; and some of our events at HIMTI BINUS University.&lt;/p&gt;

&lt;p&gt;In order to prevent our emails for being flagged as spam, we’re limiting ourselves to send a maximum of &lt;strong&gt;50 emails per hour&lt;/strong&gt;. And that’s why we have to switch, check and send emails &lt;strong&gt;from 3 different databases!&lt;/strong&gt; One for general (registration.himti.or.id), one for &lt;strong&gt;HIMTI ELECTION 2021&lt;/strong&gt; , and of course, another one for &lt;strong&gt;COMPUTERUN 2.0&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But now, since we’re done with the election, &lt;strong&gt;we’ll be able to allocate more time on a single day to send more emails to COMPUTERUN participants,&lt;/strong&gt; which will take effect starting &lt;strong&gt;today!&lt;/strong&gt; We’re increasing the number of delivery from 4 batches a day to &lt;strong&gt;6 batches a day&lt;/strong&gt; – perfect for sending a total of &lt;strong&gt;300 emails&lt;/strong&gt; for a single damn day.&lt;/p&gt;

&lt;p&gt;Oh, here’s me pinging Reinhart all the time when there’s a new email being sent. Remember that I’m a &lt;strong&gt;Service&lt;/strong&gt; , not a &lt;strong&gt;daemon&lt;/strong&gt; like &lt;strong&gt;pr0xy&lt;/strong&gt; &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/extensions/workers" rel="noopener noreferrer"&gt;because Windows said so…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ag7iktjbaudpl6vzn3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ag7iktjbaudpl6vzn3m.png" width="790" height="730"&gt;&lt;/a&gt;Imagine yourself being terrorized by me this way…&lt;/p&gt;

&lt;p&gt;Next, there’s a really cool trick on our COMPUTERUN website: &lt;strong&gt;You can finally Ctrl+K like it’s Slack and Notion!&lt;/strong&gt; Seriously, I don’t even know why did Reinhart implement this feature on COMPUTERUN but well, here it is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dgf3oobpopr4w5l9cfu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dgf3oobpopr4w5l9cfu.jpg" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s also the default menu you’ll gonna see on mobile, so yeah, &lt;strong&gt;&lt;em&gt;hasta la vista&lt;/em&gt;, Bootstrap hamburger menu!&lt;/strong&gt; Soon, we’ll rolling out new accessibility updates to make sure that this menu works for screen readers and keyboard nerds like you, &lt;strong&gt;pr0xy&lt;/strong&gt;!&lt;/p&gt;




&lt;p&gt;I can’t believe I just spent 5 minutes just to &lt;code&gt;println()&lt;/code&gt; all of this, but if you’re a coordinator of the following official BINUS University Student Organization websites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://student-activity.binus.ac.id/" rel="noopener noreferrer"&gt;https://student-activity.binus.ac.id/&lt;/a&gt; &lt;strong&gt;basis&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://student-activity.binus.ac.id/" rel="noopener noreferrer"&gt;https://student-activity.binus.ac.id/&lt;/a&gt; &lt;strong&gt;binary&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://student-activity.binus.ac.id/" rel="noopener noreferrer"&gt;https://student-activity.binus.ac.id/&lt;/a&gt; &lt;strong&gt;himka&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://student-activity.binus.ac.id/" rel="noopener noreferrer"&gt;https://student-activity.binus.ac.id/&lt;/a&gt; &lt;strong&gt;himsisfo&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://student-activity.binus.ac.id/" rel="noopener noreferrer"&gt;https://student-activity.binus.ac.id/&lt;/a&gt; &lt;strong&gt;himti&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can now give a shoutout to &lt;strong&gt;COMPUTERUN 2.0&lt;/strong&gt; just by creating a &lt;strong&gt;NEWS&lt;/strong&gt; or &lt;strong&gt;ARTICLE&lt;/strong&gt; and put &lt;strong&gt;“COMPUTERUN 2.0”&lt;/strong&gt; inside of the list of tags. Here’s what I mean:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwlqozm807ym68bp6a3h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwwlqozm807ym68bp6a3h.jpg" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So your shiny love and articles can be shown directly to those who are visiting the &lt;strong&gt;main COMPUTERUN website,&lt;/strong&gt; like this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51zxe26nkaesl4miirq2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51zxe26nkaesl4miirq2.jpg" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, that’s all I wanna tell. So, goodbye and see you again!&lt;/p&gt;




&lt;p&gt;yeah, thanks &lt;strong&gt;Shift&lt;/strong&gt; for the amazing &lt;code&gt;println&lt;/code&gt; and now let’s continue my discussion;&lt;/p&gt;

&lt;h2&gt;
  
  
  speaking ’bout &lt;strong&gt;bundles&lt;/strong&gt; ,
&lt;/h2&gt;

&lt;p&gt;so, we’ve some quirks in our event registration system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;we separated registration forms for &lt;code&gt;(business-it case || web design) &amp;amp;&amp;amp; workshop&lt;/code&gt; bundle at &lt;a href="https://computerun.id/info/business-it-case-bundle" rel="noopener noreferrer"&gt;https://computerun.id/info/business-it-case-bundle&lt;/a&gt; and &lt;a href="https://computerun.id/info/web-design-bundle" rel="noopener noreferrer"&gt;https://computerun.id/info/web-design-bundle&lt;/a&gt;; so if you would like to have that bundle discount, you’ll need to register through that special form (or &lt;a href="http://computerun.id/contact" rel="noopener noreferrer"&gt;contact our committees&lt;/a&gt; if you’re confused about that);&lt;/li&gt;
&lt;li&gt;everyone joining &lt;strong&gt;sprint&lt;/strong&gt; , &lt;strong&gt;business-it case&lt;/strong&gt; , &amp;amp;&amp;amp; &lt;strong&gt;web design&lt;/strong&gt; will be automatically added to our &lt;strong&gt;opening ceremony&lt;/strong&gt; ;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;this means that everyone who’s signing up for the bundles won’t be automatically registered into the respective events (especially when they haven’t done the payments), so please take a while while we’ll accepting ad adding you to the respective events; &lt;strong&gt;just don’t forget to finish your payments and tell us if you’re done!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  (ab)using &lt;strong&gt;yaml&lt;/strong&gt; , &lt;strong&gt;markdown&lt;/strong&gt; , &amp;amp;&amp;amp; &lt;strong&gt;laravel blade&lt;/strong&gt;?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;(Ab)using YAML and Markdown and Laravel Blade components to generate static pages powering the &lt;a href="https://twitter.com/Computerun2021?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;@Computerun2021&lt;/a&gt; website. This ain't Jekyll.&lt;/p&gt;

&lt;p&gt;— Reinhart Previano K. (&lt;a class="mentioned-user" href="https://dev.to/reinhart1010"&gt;@reinhart1010&lt;/a&gt;) &lt;a href="https://twitter.com/reinhart1010/status/1451382082442186754?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;October 22, 2021&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;our old COMPUTERUN codebase is written using &lt;strong&gt;php&lt;/strong&gt; &amp;amp;&amp;amp; &lt;strong&gt;laravel&lt;/strong&gt; , &amp;amp;&amp;amp; we’re mainly using &lt;strong&gt;blade&lt;/strong&gt; to define our layouts; but thanks to our recent efforts, we’re able to build this interactive &lt;strong&gt;faq&lt;/strong&gt; section:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59attrqp10ckusorsf3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59attrqp10ckusorsf3s.png" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;just by spawning a few lines of &lt;strong&gt;yaml&lt;/strong&gt; code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
`title: "FAQ"
children:
  - type: "faq"
    contents:
      - question: "Can I participate in SPRINT outside of Indonesia?"
        answer:
          - type: "markdown"
            text: "We would like to apologize that SPRINT is currently unavailable to international participants due to concerns with international shipment/delivery of our Finisher Pack."
      - question: "How do I get the STRAVA club link and the upload form?"
        answer:
          - type: "markdown"
            text: "Once your registration has been approved, please come back to this page (under the **Join Now** section) to see the STRAVA club link as well as the running record upload form."
      - question: "Should I pay the Shipment/Delivery Fee first or later?"
        answer:
          - type: "markdown"
            text: " **Yes,** please pay the delivery fee altogether with the registration fee to us."
          - type: "markdown"
            text: "If you are registering for two (2) persons, you'll need to pay the Shipment/Delivery Fee for both."
      - question: "I'm registering for two pax and we're living in the same place. Can I just pay the Shipment/Delivery Fee once for both of us?"
        answer:
          - type: "markdown"
            text: "First, please make sure that both of you agree to do so, since we will **not** be responsible for handling further deliveries once the Finisher Pack(s) have been successfully delivered to you."
          - type: "markdown"
            text: "Then, please let us know via our [LINE Official Account](http://lin.ee/57zX9DW6k) if you would like to do so, so our committees won't deny your application due to false positives for insufficient funds (i.e. you haven't paid the Delivery Fee for the other person)."
      - question: "Will I get refunds if I failed to reach the target?"
        answer:
          - type: "markdown"
            text: " **The registration fees are non-refundable and non-negotiable.** However, paid delivery fees can be refunded to you by contacting us through our [LINE Official Account](http://lin.ee/57zX9DW6k)."`
&amp;lt;small id="shcb-language-1"&amp;gt;&amp;lt;span&amp;gt;Code language:&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;YAML&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;yaml&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;but wait!&lt;/strong&gt; we’re not just able to make it work in the faq section, &lt;strong&gt;but also most of our webpages!&lt;/strong&gt; webpages explaining all of our events are now completely coded in yaml, our (COMPUTERUN) homepage is now also written in yaml; even our online guidebooks, &lt;a href="https://computerun.id/sponsor-us" rel="noopener noreferrer"&gt;sponsorship proposal&lt;/a&gt;, &amp;amp;&amp;amp; &lt;a href="https://computerun.id/media-partner-proposal" rel="noopener noreferrer"&gt;media partner proposal&lt;/a&gt; are entirely written in &lt;strong&gt;yaml&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;this means that COMPUTERUN 2.0 committees wishing to update the page no longer need to understand a bunch of html; &lt;strong&gt;just hack that yaml &amp;amp;&amp;amp; markdown source files &amp;amp;&amp;amp; done!&lt;/strong&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" alt="🔥" width="72" height="72"&gt;&lt;/a&gt; &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" alt="🔥" width="72" height="72"&gt;&lt;/a&gt; &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc9bbb7hwu94uqkultlf.png" alt="🔥" width="72" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;the modernization of the codebase is definitely making it more flexible and quicker to set up for changes; let’s say, when one of your events require an Instagram username; before, we had to modify our registration logic &amp;amp;&amp;amp; add a new form to insert your Instagram username, but today we’ll just need to add that additional field directly on our database, and our backend codebase will automatically recognize and start to validate that, too!&lt;/p&gt;

&lt;h2&gt;
  
  
  interested in &lt;strong&gt;COMPUTERUN 2.0?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;if you’re interested, just head over to the official website at &lt;a href="https://computerun.id" rel="noopener noreferrer"&gt;https://computerun.id&lt;/a&gt;, or follow and contact us &lt;a href="https://computerun.id/contact" rel="noopener noreferrer"&gt;through many ways&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;COMPUTERUN 2.0&lt;/strong&gt; is proudly presented not just by us (the folks at &lt;a href="https://reinhart1010.id" rel="noopener noreferrer"&gt;https://reinhart1010.id&lt;/a&gt;), but also by &lt;strong&gt;&lt;a href="https://student-activity.binus.ac.id/himsisfo" rel="noopener noreferrer"&gt;HIMSISFO&lt;/a&gt; (Information Systems Student Association)&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://himti.or.id" rel="noopener noreferrer"&gt;HIMTI&lt;/a&gt; (Computer Science Student Association)&lt;/strong&gt;, two of the largest official Student Associations in &lt;strong&gt;BINUS University&lt;/strong&gt;! &amp;amp;&amp;amp; &lt;strong&gt;true&lt;/strong&gt; , this is our second (or first, ’cause arrays starts at 0, unless you’re R or MATLAB) installation of COMPUTERUN, &amp;amp;&amp;amp; this is our first (or 0th) installation to be held internationally!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://reinhart1010.id/2021/10/27/computerun-2-0-website/" rel="noopener noreferrer"&gt;COMPUTERUN 2.0 Website&lt;/a&gt; appeared first on &lt;a href="https://reinhart1010.id" rel="noopener noreferrer"&gt;Reinhart Previano Koentjoro&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>projects</category>
      <category>binusuniversity</category>
      <category>computerun</category>
      <category>computerun2021</category>
    </item>
  </channel>
</rss>
