<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kaamkiya</title>
    <description>The latest articles on DEV Community by Kaamkiya (@kaamkiya).</description>
    <link>https://dev.to/kaamkiya</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%2F1118984%2F34f295f8-5d41-4f00-8382-eafb9728072f.png</url>
      <title>DEV Community: Kaamkiya</title>
      <link>https://dev.to/kaamkiya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kaamkiya"/>
    <language>en</language>
    <item>
      <title>The tiniest transpiler you'll ever see</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Sun, 15 Dec 2024 21:57:14 +0000</pubDate>
      <link>https://dev.to/kaamkiya/the-tiniest-transpiler-youll-ever-see-jlk</link>
      <guid>https://dev.to/kaamkiya/the-tiniest-transpiler-youll-ever-see-jlk</guid>
      <description>&lt;p&gt;I wrote a brainf**k to C transpiler this morning. It took me a grand total of roughly an hour.&lt;/p&gt;

&lt;p&gt;The entire thing is under 50 lines of C. You can see it &lt;a href="https://codeberg.org/Kaamkiya/bfc/src/branch/main/bfc.c" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is brainf**k?
&lt;/h2&gt;

&lt;p&gt;It's an &lt;a href="https://esolang.org" rel="noopener noreferrer"&gt;esoteric coding language&lt;/a&gt;. Invented by a Swiss student in 1993, it's pretty much the minimum required to be considered Turing complete.&lt;/p&gt;

&lt;p&gt;It's also one of the most famous esolangs in existence.&lt;/p&gt;

&lt;p&gt;The syntax is extremely minimal: it has only 8 characters and the rest are ignored.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight brainfuck"&gt;&lt;code&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+.+++++++..+++.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;span class="nf"&gt;++.------------.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+++++++++&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+.&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;.+++.------.--------.&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;++++&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;++++++++&lt;/span&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nf"&gt;+.&lt;/span&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take a guess what that does. Just guess.&lt;/p&gt;

&lt;p&gt;It's a &lt;code&gt;Hello, World!&lt;/code&gt; program.&lt;/p&gt;

&lt;p&gt;Essentially, in brainf**k, you're given a 30000 byte array and a cursor. You can move the cursor with &lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;&lt;/code&gt;. You can modify the memory with &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt;, which will increment or decrement the value in the cell. You can create loops with &lt;code&gt;[&lt;/code&gt; and &lt;code&gt;]&lt;/code&gt;. Finally, you can a read a single byte as input with &lt;code&gt;,&lt;/code&gt; and print the value of the current cell with &lt;code&gt;.&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight brainfuck"&gt;&lt;code&gt;&lt;span class="nb"&gt;&amp;gt;&lt;/span&gt;&lt;span class="c1"&gt; ; Increments cursor position
&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;&lt;/span&gt;&lt;span class="c1"&gt; ; Decrements cursor position
&lt;/span&gt;&lt;span class="nf"&gt;+&lt;/span&gt;&lt;span class="c1"&gt; ; Increments cell value
&lt;/span&gt;&lt;span class="nf"&gt;-&lt;/span&gt;&lt;span class="c1"&gt; ; Decrements cell value
&lt;/span&gt;&lt;span class="nf"&gt;.&lt;/span&gt;&lt;span class="c1"&gt; ; Prints the current cell value as an ASCII character
&lt;/span&gt;&lt;span class="nf"&gt;,&lt;/span&gt;&lt;span class="c1"&gt; ; Reads a singly byte and stores it in the current cell
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="c1"&gt; ; Opens a loop that continues until the cell value is 0
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="c1"&gt; ; Closes a loop
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's pretty much everything about brainf**k.&lt;br&gt;
I've written more functional programs in &lt;em&gt;Assembly&lt;/em&gt; before.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why? Just why?
&lt;/h2&gt;

&lt;p&gt;I wrote this compiler entirely because I was bored and I've found a ton of interpreters, so I thought the world needed a brainf**k compiler.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Although, admittedly, if you want a really good brainf**k compiler, check out&lt;br&gt;
&lt;a href="https://github.com/Wilfred/bfc" rel="noopener noreferrer"&gt;this one&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Why C?
&lt;/h3&gt;

&lt;p&gt;Many reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I want more practice with it&lt;/li&gt;
&lt;li&gt;It's fast&lt;/li&gt;
&lt;li&gt;It's mostly portable&lt;/li&gt;
&lt;li&gt;It's widespread&lt;/li&gt;
&lt;li&gt;I didn't need much code anyway.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And one final reason: integer overflow. Normally, this is a bad thing that people hate. It's probably the reason unit tests (ugh) were invented. But brainf**k is different. The numbers in the memory tape have an upper limit of &lt;code&gt;255&lt;/code&gt;, and if they pass it, they're expected to reset to &lt;code&gt;0&lt;/code&gt;. Also, if the value goes below &lt;code&gt;0&lt;/code&gt;, it's supposed to reset to &lt;code&gt;255&lt;/code&gt;. C does this on its own; I didn't need to write any code for it.&lt;/p&gt;
&lt;h2&gt;
  
  
  How?
&lt;/h2&gt;

&lt;p&gt;A higher-level overview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read code from a file or from stdin into memory&lt;/li&gt;
&lt;li&gt;Convert each character to C code&lt;/li&gt;
&lt;li&gt;Print the finished C code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It reads brainf**k code from a file into &lt;code&gt;code[]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then, it sets up a basic C program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="kt"&gt;int&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="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may have noticed that it's missing a closing bracket. That's because more code is added to that &lt;code&gt;char[]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In case you're wondering, &lt;code&gt;char t[30000]&lt;/code&gt; is the memory that you're given. I used &lt;code&gt;t&lt;/code&gt; as short form for &lt;code&gt;tape&lt;/code&gt;, but shortened it because these programs aren't meant to be human readable.&lt;/p&gt;

&lt;p&gt;Next, it loops over the &lt;code&gt;code&lt;/code&gt; array, which is an array of single characters. For each character, it converts it to C code:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;character&lt;/th&gt;
&lt;th&gt;becomes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;p++&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;p--&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t[p]--&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t[p]++&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;putchar(t[p])&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;,&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;t[p]=getchar()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;while(t[p] != 0)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;You can see above to understand what these symbols do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These values are added to the program output, which will contain valid C code.&lt;/p&gt;

&lt;p&gt;Finally, this code is added to the final output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the end of the outputted program. The transpiler then prints this code to stdout, for the user to manipulate as they wish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;There are some ideas for improvement I had while writing this article. I don't think there's much I could do to make it faster, but there are things I could do to make it safer and better.&lt;/p&gt;

&lt;p&gt;You can see the final code &lt;a href="https://github.com/Kaamkiya/bfc" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also make any sort of contribution, if you'd like.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>c</category>
      <category>brainfuck</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Play games from your terminal!</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Thu, 07 Nov 2024 02:06:43 +0000</pubDate>
      <link>https://dev.to/kaamkiya/play-games-from-your-terminal-25o</link>
      <guid>https://dev.to/kaamkiya/play-games-from-your-terminal-25o</guid>
      <description>&lt;p&gt;I've started working on a project called &lt;a href="https://github.com/Kaamkiya/gg" rel="noopener noreferrer"&gt;gg&lt;/a&gt; and I would love if you contributed or used it!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;It's a collection of games you can play from the CLI. They aren't overly sophisticated, mostly minimalist games like 2048, hangman, connect 4, and more.&lt;/p&gt;

&lt;p&gt;There are a mix of two player games and single-player games.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use it?
&lt;/h2&gt;

&lt;p&gt;I can really only speak for myself, but there have been a ton of times when I was bored and had nothing to do, but also no access to full-on games like Trackmania.&lt;/p&gt;

&lt;p&gt;So I made this! It's something to do while you're bored, and if you want, you can also gain coding experience by contributing to it, opening bug reports, and more. All contributions are appreciated :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical stuff
&lt;/h2&gt;

&lt;p&gt;I decided to use &lt;a href="https://go.dev" rel="noopener noreferrer"&gt;Go&lt;/a&gt; because I'm familiar with it, it's easy to learn and read, it's popular, and it's &lt;em&gt;fast&lt;/em&gt;. Being a compiled, cross-compatible language doesn't hurt, either.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;If you want to test it right now, you can!&lt;/p&gt;

&lt;p&gt;If you have Go installed, you can run one of these commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go run github.com/Kaamkiya/gg@latest &lt;span class="c"&gt;# To run without installing&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/Kaamkiya/gg@latest &lt;span class="c"&gt;# To install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If not, no worries! Head over to the &lt;a href="https://github.com/Kaamkiya/gg/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt; and pick the one for your platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;If you used &lt;code&gt;go run&lt;/code&gt;, it should start automatically. If not, run the executable you downloaded, or just type &lt;code&gt;gg&lt;/code&gt; if you used &lt;code&gt;go install&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Pick something from the list of options and play! You can even invite a friend to play with you.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;All contributions are welcome, from bug reports to README updates to entirely new games.&lt;/p&gt;

&lt;p&gt;If you'd like, feel free to contribute!&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;p&gt;I don't have a perfectly clear vision of the project's future, but I think I'll keep updating it and adding to it for a very long time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's it from me for now!&lt;/p&gt;

&lt;p&gt;If you've got any questions, comments, or anything else, feel free to comment. I'll reply when I can :)&lt;/p&gt;

&lt;p&gt;Have a good day, folks!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>go</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Devcli - A CLI for Dev.to!</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Fri, 16 Feb 2024 22:40:22 +0000</pubDate>
      <link>https://dev.to/kaamkiya/devcli-a-cli-for-devto-4a85</link>
      <guid>https://dev.to/kaamkiya/devcli-a-cli-for-devto-4a85</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I made a CLI app for Dev.to! I personally really like terminals, so I decided to make a CLI app so that I can read and reply to Dev articles.&lt;/p&gt;

&lt;p&gt;This article was written because of &lt;a href="https://dev.to/michaeltharrington/comment/2d19b"&gt;this comment&lt;/a&gt;. Thanks &lt;a class="mentioned-user" href="https://dev.to/michaeltharrington"&gt;@michaeltharrington&lt;/a&gt;! 😄&lt;/p&gt;

&lt;p&gt;Unfortunately, at the time of this article, the "write an article" feature didn't work, so I had to handwrite this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;So far, you can use devcli (very unoriginal name, I know) to...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read articles (and read the comments, too!)&lt;/li&gt;
&lt;li&gt;view a list of your followers&lt;/li&gt;
&lt;li&gt;view the 30 latest articles&lt;/li&gt;
&lt;li&gt;display information about a user&lt;/li&gt;
&lt;li&gt;see the tags that you follow&lt;/li&gt;
&lt;li&gt;view your &lt;a href="https://dev.to/readinglist"&gt;reading list&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any new feature ideas, you can comment on this article or &lt;a href="https://github.com/Kaamkiya/devcli/issues/new/choose" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; in the &lt;a href="https://github.com/Kaamkiya/devcli" rel="noopener noreferrer"&gt;repo&lt;/a&gt; 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  Using devcli
&lt;/h2&gt;

&lt;p&gt;You can install it by following the instructions for your platform in the &lt;a href="https://codeberg.org/Kaamkiya/devcli" rel="noopener noreferrer"&gt;install guide&lt;/a&gt;, or just type the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/Kaamkiya/devcli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beware that the command above requires &lt;a href="https://go.dev/dl" rel="noopener noreferrer"&gt;Go&lt;/a&gt;. If you only want the binary for your platform, follow the &lt;a href="https://codeberg.org/Kaamkiya/devcli#readme" rel="noopener noreferrer"&gt;instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Make sure the binary is in your &lt;code&gt;$PATH&lt;/code&gt; variable. &lt;/p&gt;

&lt;p&gt;You can add it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;go &lt;span class="nb"&gt;env &lt;/span&gt;GOPATH&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c"&gt;# if you used Go to install&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:/path/to/download"&lt;/span&gt; &lt;span class="c"&gt;# if you installed the platform-specific binary&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, if you really want, you can read this article from the terminal 😄&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;devcli &lt;span class="nb"&gt;read &lt;/span&gt;kaamkiya/devcli-a-cli-for-devto-5gcb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otherwise, keep going!&lt;/p&gt;

&lt;h2&gt;
  
  
  API Keys and user-specific commands
&lt;/h2&gt;

&lt;p&gt;Some commands require an API key. Here's how to get one:&lt;/p&gt;

&lt;p&gt;Go to the &lt;a href="https://dev.to/settings/extensions"&gt;extensions page&lt;/a&gt; of dev.to.&lt;/p&gt;

&lt;p&gt;Scroll until you see this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bjrwqo7ytuvcguw2rjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bjrwqo7ytuvcguw2rjc.png" alt="API Keys" width="735" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It should be somewhere near the bottom.&lt;/p&gt;

&lt;p&gt;Enter a name for your API key. I recommend using &lt;code&gt;devcli auth&lt;/code&gt;, because that way you know what the key is used for.&lt;/p&gt;

&lt;p&gt;Press the big blue "Generate API key" button.&lt;/p&gt;

&lt;p&gt;Scroll all the way back down, and click on the dropdown that says the name of your API key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ik683dosrnecp6ldu7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ik683dosrnecp6ldu7l.png" alt="API key dropdown" width="735" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the key. It will be a long string of random characters.&lt;/p&gt;

&lt;p&gt;Go to your terminal and type the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DEV_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"whatever_you_copy_pasted"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE: Never share your API keys!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now you can run all of the commands. To check if it worked, try &lt;code&gt;devcli readinglist&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If it worked, your reading list has now been printed!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cheat sheet
&lt;/h2&gt;

&lt;p&gt;Here's a quick cheat sheet of the currently available commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;devcli &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;$article_id&lt;/span&gt; &lt;span class="c"&gt;# read an article by ID&lt;/span&gt;
devcli &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;$author&lt;/span&gt;/&lt;span class="nv"&gt;$article_slug&lt;/span&gt; &lt;span class="c"&gt;# read an article by author/slug&lt;/span&gt;

devcli user &lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="c"&gt;# display info about a user&lt;/span&gt;

devcli following-tags &lt;span class="c"&gt;# requires an API key&lt;/span&gt;

devcli followers &lt;span class="c"&gt;# requires an API key&lt;/span&gt;

devcli readinglist &lt;span class="c"&gt;# requires an API key&lt;/span&gt;

devcli latest &lt;span class="c"&gt;# print a list of the 30 most recent articles&lt;/span&gt;

devcli &lt;span class="nb"&gt;help&lt;/span&gt; &lt;span class="c"&gt;# print a help message&lt;/span&gt;

&lt;span class="c"&gt;# examples:&lt;/span&gt;
devcli &lt;span class="nb"&gt;read &lt;/span&gt;1690174
devcli &lt;span class="nb"&gt;read &lt;/span&gt;1690174 &lt;span class="nt"&gt;--show-comments&lt;/span&gt; &lt;span class="c"&gt;# display the top-level comments as well&lt;/span&gt;
devcli user ben &lt;span class="c"&gt;# show stuff about @ben&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to contribute or try it out 😄&lt;/p&gt;

&lt;p&gt;Let me know what you think!&lt;/p&gt;

&lt;p&gt;Any new feature ideas? Feedback? I'd love to see what you think!&lt;/p&gt;

&lt;p&gt;EDIT: Moved to Codeberg.&lt;/p&gt;

</description>
      <category>cli</category>
      <category>devapp</category>
      <category>api</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Learning D in a week - 12in24</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Thu, 15 Feb 2024 01:55:57 +0000</pubDate>
      <link>https://dev.to/kaamkiya/learning-d-in-a-week-12in24-3hg1</link>
      <guid>https://dev.to/kaamkiya/learning-d-in-a-week-12in24-3hg1</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;This is a continuation of the 12in24 challenge, in which I/you/we learn 12 new coding languages (or at least the basics) in one year.&lt;/p&gt;

&lt;p&gt;I spent about a week learning D, and here is some of what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  D
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;You can install &lt;code&gt;dmd&lt;/code&gt; (the D compiler) from the official &lt;a href="https://dlang.org/download.html#dmd" rel="noopener noreferrer"&gt;downloads page&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;DMD stands for &lt;strong&gt;Digital Mars D&lt;/strong&gt;, although I'm not quite sure why. Maybe the creator liked Mars or Mars bars.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting started
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Writing your first D program
&lt;/h4&gt;

&lt;p&gt;We all know what's coming (or maybe not...)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight d"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdio&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// string[] args is optional&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&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;Compile it with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;dmd hello.d
&lt;span class="nv"&gt;$ &lt;/span&gt;./hello
&lt;span class="c"&gt;#=&amp;gt; Hello, World!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now another simple program, FizzBuzz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight d"&gt;&lt;code&gt;&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="n"&gt;fizzbuzz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// declare a module name, used when importing packages (we'll see that soon)&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdio&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writefln&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// import the writeln and writefln functions from std.stdio, but nothing else.&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// one way of doing a for loop&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&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="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"FizzBuzz"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Fizz"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Buzz"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;writefln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%d"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// replaces %d with i&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// this is the more common way to do a for loop:&lt;/span&gt;
    &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// same as above&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;The syntax, you might realize, is extremely similar to that of C. And it is. D is supposed to be another iteration of the C language. &lt;/p&gt;

&lt;p&gt;You can see the stuff I did &lt;a href="https://github.com/Kaamkiya/12in24/tree/main/02-d" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using packages
&lt;/h3&gt;

&lt;p&gt;To create a D project, we use &lt;code&gt;dub&lt;/code&gt;, which is D's package manager. It should have come preinstalled with D.&lt;/p&gt;

&lt;p&gt;To create a project, run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;dub init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill out the prompts, and you have a full-on project!&lt;/p&gt;

&lt;p&gt;Edit &lt;code&gt;source/app.d&lt;/code&gt; to do whatever you want, like print "Blah blah blah" 500 times, or do a guess the number game.&lt;/p&gt;

&lt;p&gt;You can then run your project with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;dub run &lt;span class="c"&gt;# run the project&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;dub build &lt;span class="c"&gt;# build an executable for the project into ./&amp;lt;project_name&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can follow the READMEs in the &lt;a href="https://github.com/Kaamkiya/12in24/tree/main/02-d/hello-dub" rel="noopener noreferrer"&gt;repo&lt;/a&gt; or follow the D documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;D is a &lt;em&gt;very&lt;/em&gt; cool seeming language. It's very feature rich, beginner friendly (no pointers!), and is simple to learn. Some cons might be a (relative to other languages) smallish standard library, and a smaller community.&lt;/p&gt;

&lt;p&gt;Feel free to ask questions :)&lt;/p&gt;

</description>
      <category>d</category>
      <category>dlang</category>
      <category>learning</category>
    </item>
    <item>
      <title>Coding on a Chromebook</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Sun, 11 Feb 2024 03:20:20 +0000</pubDate>
      <link>https://dev.to/kaamkiya/coding-on-a-chromebook-3egj</link>
      <guid>https://dev.to/kaamkiya/coding-on-a-chromebook-3egj</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I actually do code on a Chromebook daily. When I started the time, I didn't know anyone else who coded. That left &lt;em&gt;me&lt;/em&gt; to figure out &lt;em&gt;everything&lt;/em&gt; by myself and learn everything that makes it easy for me to code now. Or at least, easier than trying to learn everything, all at once. &lt;/p&gt;

&lt;p&gt;In this article, I'll show you how to get started with coding on a Chromebook. I'll show you how to install &lt;code&gt;Python3&lt;/code&gt; (Python interpreter), &lt;code&gt;pip&lt;/code&gt; (Python package manager), &lt;code&gt;gcc&lt;/code&gt; (C compiler), &lt;code&gt;g++&lt;/code&gt; (C++ compiler), and some other things.&lt;/p&gt;

&lt;p&gt;(I assume you know how to navigate a Chromebook already.) &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;To get started, you must first enable Linux in Settings.&lt;/p&gt;

&lt;p&gt;Open the Settings app, and scroll down until you see "Advanced". It should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fari62syyykkvli9puzkx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fari62syyykkvli9puzkx.png" alt="What the "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on it.&lt;/p&gt;

&lt;p&gt;Once you've done that, scroll all the way to the bottom. You should now see a section titled "Developers". &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fo01r5knfsyrrcnkhsily.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fo01r5knfsyrrcnkhsily.png" alt="What the developer section looks like"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the arrow. There will be a button to "add the development environment" or something similar to that. &lt;/p&gt;

&lt;p&gt;Follow the prompts and you're good to go!&lt;/p&gt;

&lt;p&gt;Wait for the download to complete and you're good to go!&lt;/p&gt;

&lt;h3&gt;
  
  
  About the terminal that chromeOS uses
&lt;/h3&gt;

&lt;p&gt;The terminal is actually a &lt;a href="https://debian.org" rel="noopener noreferrer"&gt;Debian&lt;/a&gt; terminal. Debian is a version (distribution) of Linux, so if you've used it or Ubuntu before, you'll be very familiar with the commands. &lt;/p&gt;

&lt;h3&gt;
  
  
  File system
&lt;/h3&gt;

&lt;p&gt;For some reason, Chromebooks separate your Linux Files from your normal files. To see this, open the Files app. On the left, in the navigation bar, you should see a section saying "Linux Files". You &lt;em&gt;cannot&lt;/em&gt; access your normal files from Linux, so make sure to always save files you need from your terminal to the correct place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using the CLI
&lt;/h3&gt;

&lt;p&gt;Running your first Bash command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello, World!"&lt;/span&gt;
&lt;span class="c"&gt;#=&amp;gt; Hello, World!&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Bash is what the terminal uses for things like switching directories (or folders), printing text, and so on. You can learn it quickly &lt;a href="https://learnxinyminutes.com/docs/bash" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some other quick and useful commands:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="c"&gt;# shows all files in your current folder&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;auto &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="c"&gt;# shows all files with color, trailing slashes after folder names, and includes hidden files&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;$FILE&lt;/span&gt; &lt;span class="c"&gt;# prints entire contents of $FILE to the output&lt;/span&gt;

&lt;span class="nb"&gt;touch&lt;/span&gt; &lt;span class="nv"&gt;$FILE&lt;/span&gt; &lt;span class="c"&gt;# make a new file called $FILE&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nv"&gt;$FILE&lt;/span&gt; &lt;span class="c"&gt;# delete a file called $FILE&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nv"&gt;$FOLDER&lt;/span&gt; &lt;span class="c"&gt;# make a new folder called $FOLDER&lt;/span&gt;
&lt;span class="nb"&gt;rmdir&lt;/span&gt; &lt;span class="nv"&gt;$FOLDER&lt;/span&gt; &lt;span class="c"&gt;# remove a folder called $FOLDER&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Installing some stuff
&lt;/h2&gt;
&lt;h5&gt;
  
  
  Installing Python
&lt;/h5&gt;

&lt;p&gt;Python tends to come pre-installed on Chromebooks' terminals. See if it's there with this command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

python3 &lt;span class="nt"&gt;--version&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;This &lt;em&gt;should&lt;/em&gt; output the version of Python you have. If not, install it like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3


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

&lt;/div&gt;

&lt;p&gt;When prompted &lt;code&gt;[Y/n]&lt;/code&gt;, type &lt;code&gt;Y&lt;/code&gt; and hit enter.&lt;/p&gt;

&lt;p&gt;Use this to install pip:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3-pip


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

&lt;/div&gt;

&lt;p&gt;Tada!&lt;/p&gt;

&lt;h5&gt;
  
  
  GCC/G++
&lt;/h5&gt;

&lt;p&gt;These do &lt;em&gt;not&lt;/em&gt; come pre installed, so let's download them.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;g++


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

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;g++&lt;/code&gt; lists &lt;code&gt;gcc&lt;/code&gt; as a dependency, so it will be automatically installed with &lt;code&gt;g++&lt;/code&gt;. You don't have to do more than that. If you only want &lt;code&gt;gcc&lt;/code&gt;, then replace the &lt;code&gt;g++&lt;/code&gt; in the command above with &lt;code&gt;gcc&lt;/code&gt;. &lt;/p&gt;

&lt;h5&gt;
  
  
  Vim
&lt;/h5&gt;

&lt;p&gt;Vim should come preinstalled. If not, then&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;vim


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

&lt;/div&gt;

&lt;p&gt;Type &lt;code&gt;vim&lt;/code&gt; to get started.&lt;/p&gt;

&lt;h5&gt;
  
  
  VS Code
&lt;/h5&gt;

&lt;p&gt;You can also download Visual Studio Code. Go to the official downloads page and get the file ending in &lt;code&gt;.deb&lt;/code&gt;. Then open the files app, and double click it. &lt;/p&gt;

&lt;p&gt;Press install, and an icon should appear in your launcher.&lt;/p&gt;

&lt;h5&gt;
  
  
  Go
&lt;/h5&gt;

&lt;p&gt;Open the &lt;a href="https://go.dev/dl" rel="noopener noreferrer"&gt;Go downloads page&lt;/a&gt; in your favorite browser.&lt;/p&gt;

&lt;p&gt;Select the "Linux" option. It should end in &lt;code&gt;.tar.gz&lt;/code&gt;.&lt;br&gt;
Save it to your &lt;strong&gt;Linux files&lt;/strong&gt;. &lt;em&gt;Not&lt;/em&gt; your normal files. &lt;/p&gt;

&lt;p&gt;After that, open your terminal. Find where you downloaded the file to.&lt;/p&gt;

&lt;p&gt;Now type this to unpack it:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /usr/local &lt;span class="nt"&gt;-xzf&lt;/span&gt; ./GO_TARBALL_NAME.tar.gz


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

&lt;/div&gt;

&lt;p&gt;Replace &lt;code&gt;GO_TARBALL_NAME&lt;/code&gt; with whatever you named the file.&lt;/p&gt;

&lt;p&gt;This command unpacks the tarball, and saves Go to &lt;code&gt;/usr/local/go&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  My setup
&lt;/h3&gt;

&lt;p&gt;Here are some of the things I make sure to install:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;li&gt;Python3&lt;/li&gt;
&lt;li&gt;GCC&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Nasm (assembly compiler)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://go.dev" rel="noopener noreferrer"&gt;Go&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Coding on a Chromebook is doable&lt;/li&gt;
&lt;li&gt;It is not terrifying or atrocious.&lt;/li&gt;
&lt;li&gt;Maybe it's a bit slower, but it does the same stuff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's still fun!&lt;/p&gt;

&lt;p&gt;What are your thoughts? Have you used a Chromebook? Do you code in another way?&lt;/p&gt;

</description>
      <category>debian</category>
      <category>coding</category>
      <category>chromeos</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Assembly - The first of 12 languages in 2024!</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Wed, 24 Jan 2024 21:49:29 +0000</pubDate>
      <link>https://dev.to/kaamkiya/assembly-the-first-of-12-languages-in-2024-4m3</link>
      <guid>https://dev.to/kaamkiya/assembly-the-first-of-12-languages-in-2024-4m3</guid>
      <description>&lt;p&gt;The first month of 2024 is nearly over! It went by very quickly. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Kaamkiya/12in24" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This month, I learnt Assembly for the 12in24 challenge. It was much more complex than any other language I have &lt;em&gt;ever&lt;/em&gt; used. &lt;/p&gt;

&lt;p&gt;I have used this once or twice before, but it was still a huge learning experience to use it again. &lt;/p&gt;

&lt;h2&gt;
  
  
  Some basics
&lt;/h2&gt;

&lt;p&gt;First of all, if you're a beginner, learn something easier please. This is extremely complex.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;section .x&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This means we are entering a section of code called &lt;code&gt;x&lt;/code&gt;. The three sections that exist are &lt;code&gt;.data&lt;/code&gt;, &lt;code&gt;.bss&lt;/code&gt;, and &lt;code&gt;.text&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.data&lt;/code&gt; is the section where we declare &lt;strong&gt;and&lt;/strong&gt; initialize variables. &lt;br&gt;
&lt;code&gt;.bss&lt;/code&gt; is used to declare but &lt;strong&gt;not&lt;/strong&gt; initialize variables&lt;br&gt;
&lt;code&gt;.text&lt;/code&gt; is the code section, where we make magic happen.&lt;/p&gt;
&lt;h3&gt;
  
  
  Variables
&lt;/h3&gt;

&lt;p&gt;Variables can be declared in the &lt;code&gt;.data&lt;/code&gt; or &lt;code&gt;.bss&lt;/code&gt; sections, but must be initialized in &lt;code&gt;.data&lt;/code&gt; or &lt;code&gt;.text&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;varName size value

message db "Hello, World!"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Size (bytes)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;db&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;define byte&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dw&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;define word&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And &lt;code&gt;equ&lt;/code&gt; defines constants of any size.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some other keywords
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;in C&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mov&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;set a variable to a value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mov x, y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x = y&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;add a value to a variable&lt;/td&gt;
&lt;td&gt;&lt;code&gt;add x, y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x += y&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sub&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;subtract a value from a variable&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sub x, y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x -= y&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mul&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;multiply a variable by a value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mul x, y&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x *= y&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;

&lt;p&gt;Everything in Assembly is done with moving values into registers. For example, to print, we do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mov rax, 1      ; moved value into register!
mov rdi, 1      ; and again
mov rsi, msg    ; one more time
mov rdx, msglen ; last one
sycall          ; and then we call the kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;RAX&lt;/code&gt; register seems to be kind of like a function name; it stores what you want to do. Then all the other registers are parameters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;This language is probably one of the hardest existing (excluding &lt;a href="https://esolangs.org" rel="noopener noreferrer"&gt;esolangs&lt;/a&gt;). It has absolutely no layers on top, it's literally the lowest a person can get to writing machine code. &lt;/p&gt;

&lt;p&gt;For some reason, I loved it :)&lt;/p&gt;

&lt;p&gt;The things I made with Assembly can be found at the &lt;a href="https://github.com/Kaamkiya/12in24/blob/main/1-asm" rel="noopener noreferrer"&gt;Github repo&lt;/a&gt;.&lt;br&gt;
They are packed with comments, so hopefully it makes at least some sense. &lt;/p&gt;

&lt;p&gt;Feel free to ask questions/give feedback!&lt;/p&gt;

</description>
      <category>assembly</category>
      <category>nasm</category>
      <category>12in24</category>
    </item>
    <item>
      <title>12in24 - One language a month</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Sun, 07 Jan 2024 21:30:48 +0000</pubDate>
      <link>https://dev.to/kaamkiya/12in24-one-language-a-month-105b</link>
      <guid>https://dev.to/kaamkiya/12in24-one-language-a-month-105b</guid>
      <description>&lt;p&gt;Credit to &lt;a class="mentioned-user" href="https://dev.to/amtzespinosa"&gt;@amtzespinosa&lt;/a&gt; for the &lt;a href="https://dev.to/amtzespinosa/12in24-trying-12-languages-during-2024-1c8d"&gt;idea&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;During 2024, I will try out a new programming language monthly, one that I have never used before. I'll record some of what I learn here, and you can find all of the programs I make in the Github &lt;a href="https://github.com/Kaamkiya/12in24" rel="noopener noreferrer"&gt;repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I chose the languages using this Python script:&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="n"&gt;languages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8th&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AWK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COBOL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Common Lisp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Crystal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dart&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Delphi Pascal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Elixir&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Elm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Emacs Lisp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erlang&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;F#&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fortran&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gleam&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Go&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Groovy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;jq&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LFE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lua&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MIPS Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Nim&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Objective-C&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OCaml&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Perl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PHP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PL/SQL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Prolog&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PureScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Racket&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReasonML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Red&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ruby&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rust&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scala&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scheme&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Standard ML&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Swift&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tcl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TypeScript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unison&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;V&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vim script&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Visual Basic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Web Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Wren&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x86-64 Assembly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Zig&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The list of languages contains every language on &lt;a href="https://exercism.org/tracks/" rel="noopener noreferrer"&gt;Exercism&lt;/a&gt;, excluding ones that I've used before, web languages, or ones that I can't download for some reason. &lt;/p&gt;

&lt;p&gt;The output I got was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x86-64 Assembly
D
Perl
Crystal
Elixir
AWK
Wren
OCaml
Nim
Zig
Emacs Lisp
Erlang
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So those are the languages I'm going to play with! Quite a cool selection. I've heard of some of them, but never used most, so it should be fun!&lt;/p&gt;

&lt;p&gt;My goal is to make some simple programs with all of them, and keep working with the ones I like. &lt;/p&gt;

&lt;p&gt;Here's the &lt;a href="https://github.com/Kaamkiya/12in24" rel="noopener noreferrer"&gt;Github repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What are you doing in the new year?&lt;/p&gt;

</description>
      <category>devresolutions2024</category>
      <category>learning</category>
      <category>challenge</category>
      <category>12in24</category>
    </item>
    <item>
      <title>Hello World in Assembly (x86-64)</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Tue, 12 Dec 2023 02:34:43 +0000</pubDate>
      <link>https://dev.to/kaamkiya/hello-world-in-assembly-x86-64-2kb8</link>
      <guid>https://dev.to/kaamkiya/hello-world-in-assembly-x86-64-2kb8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome to Assembly x86_64! If you're here, you probably fall in to one of these categories: being forced to learn this for school/a job, or being genuinely interested in learning this. Or maybe you just stumbled across this and you thought "Why not? It can't be that hard." &lt;/p&gt;

&lt;p&gt;Well, it is that hard. I'll give you the code, and then explain it after. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;section      .data                     ; this is where variables are initialized
    msg      db   "Hello, World!", 0xa ; 0xa is a newline
    msglen   equ  $ - msg

section      .text                     ; this is the code section
    global   _start                    ; declare entry point
_start:                                ; define entry point
    mov rax, 1                         ; sys_write(
    mov rdi, 1                         ;   STDOUT_FILENO,
    mov rsi, msg                       ;   msg,
    mov rdx, msglen                    ;   sizeof(msg)
    syscall                            ; );

    ; exit
    mov rax, 60                        ; exit
    mov rdi, 0                         ;   exit_status
    syscall                            ; );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I'm hoping you're still here. Although probably not 😁. &lt;/p&gt;

&lt;p&gt;Anyway, here's the line-by-line:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This is the section where variables are declared&lt;/li&gt;
&lt;li&gt;Declare the &lt;code&gt;msg&lt;/code&gt; variable to the size &lt;code&gt;data byte&lt;/code&gt;, or 8 bits. &lt;code&gt;;&lt;/code&gt; starts a comment. &lt;/li&gt;
&lt;li&gt;Set the &lt;code&gt;msglen&lt;/code&gt; variable to a &lt;code&gt;sizeof(msg)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;This is the code section.&lt;/li&gt;
&lt;li&gt;This line declares the entry point, called &lt;code&gt;_start&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;This line starts the definition of the &lt;code&gt;_start&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rax&lt;/code&gt; is the system call id. So exit is 60, stdout is 1, 2 is stderr, etc.&lt;/li&gt;
&lt;li&gt;This line sets the file descriptor (fd) to 1, which is stdout.&lt;/li&gt;
&lt;li&gt;"Invoke" the message&lt;/li&gt;
&lt;li&gt;"Invoke the message length&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;syscall&lt;/code&gt; means "execute the stuff that I just made."&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;rax&lt;/code&gt; to 60, which is &lt;code&gt;sys_exit&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;This line is the exit status&lt;/li&gt;
&lt;li&gt;Call the code. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm still learning though, so if I'm wrong, please correct me. &lt;/p&gt;

&lt;p&gt;By the way, it's a fantastic idea to align Assembly code to maintain the nearly non-existent readability. Please also use comments (I didn't because I described it afterword). &lt;/p&gt;

&lt;p&gt;There are plenty of great books and videos on how to learn Assembly. If you still want to learn it, find one! I recommend &lt;a href="https://www.youtube.com/watch?v=BWRR3Hecjao&amp;amp;list=PLetF-YjXm-sCH6FrTz4AQhfH6INDQvQSn&amp;amp;index=1" rel="noopener noreferrer"&gt;this YouTube playlist&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;(Also, if you know how to add syntax highlighting for this code block, please tell me in the comments 🙂)&lt;/p&gt;

</description>
      <category>assembly</category>
      <category>tutorial</category>
      <category>linux</category>
    </item>
    <item>
      <title>Go is awesome!</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Wed, 06 Dec 2023 22:15:01 +0000</pubDate>
      <link>https://dev.to/kaamkiya/go-is-awesome-269e</link>
      <guid>https://dev.to/kaamkiya/go-is-awesome-269e</guid>
      <description>&lt;p&gt;My favorite coding language is Go. Here's why!&lt;/p&gt;

&lt;h2&gt;
  
  
  Statically typed
&lt;/h2&gt;

&lt;p&gt;Go is a statically typed language. This means that once a variable has been declared, its type cannot change. For example, &lt;code&gt;x := 4&lt;/code&gt; means that &lt;code&gt;x&lt;/code&gt; is now &lt;code&gt;4&lt;/code&gt;. If I were to change this to a string, it would fail. &lt;/p&gt;

&lt;h2&gt;
  
  
  Concise
&lt;/h2&gt;

&lt;p&gt;Hello world in Java is extremely complex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloWorld&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Although Python is simpler, Go is still not nearly as verbose as Java:&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;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&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;h2&gt;
  
  
  camelCase
&lt;/h2&gt;

&lt;p&gt;I get that some people prefer snake_case to camelCase, but I like camelCase. And seeing as most of the other languages I use are supposed to use snake_case, it's nice to use camelCase every so often.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easy to learn
&lt;/h2&gt;

&lt;p&gt;Alright, sure, I tried like ten languages before settling on Go, so I did have experience. However, it's still extremely easy to learn. It took me about two days to figure out how to do most things, which was fairly quick, and I loved it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Other
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go is a compiled language, making it extremely rapid. &lt;/li&gt;
&lt;li&gt;It comes with a built-in formatter (&lt;code&gt;go fmt &amp;lt;filename&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;It's new-ish, so the developers learnt from other languages' mistakes&lt;/li&gt;
&lt;li&gt;It has a wide variety of applications, from webdev to CLI apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have you tried Go? Did you like it?&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why I hate JavaScript 🤷</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Sun, 03 Dec 2023 12:38:50 +0000</pubDate>
      <link>https://dev.to/kaamkiya/why-i-hate-javascript-1clc</link>
      <guid>https://dev.to/kaamkiya/why-i-hate-javascript-1clc</guid>
      <description>&lt;p&gt;I understand that a lot of you will disagree with me. This is extremely opinionated, and you don't have to agree. &lt;/p&gt;

&lt;p&gt;JavaScript was made in ten days (originally), but it still shows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reasons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  No strict typing
&lt;/h3&gt;

&lt;p&gt;I do not like the fact that JavaScript has no strict typing. I know that some people like that all of their variables are dynamic, but not me. I also do know about TypeScript, but I think that it is redundant (that is a topic for another article). &lt;/p&gt;

&lt;h3&gt;
  
  
  Only web language
&lt;/h3&gt;

&lt;p&gt;It is, unfortunately, the only web language. So we have to use it &lt;strong&gt;all the time.&lt;/strong&gt; I understand WebAssembly exists, but it is harder than JavaScript, and it must still be called by a JavaScript script.&lt;/p&gt;

&lt;h3&gt;
  
  
  The equality operator (==)
&lt;/h3&gt;

&lt;p&gt;How is &lt;code&gt;NaN&lt;/code&gt; not equal to &lt;code&gt;NaN&lt;/code&gt;? Try running the following JavaScript anywhere:&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;NaN&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This makes sense.&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This is really silly.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will output &lt;code&gt;This is really silly.&lt;/code&gt; Somehow, &lt;code&gt;[] == 0&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;, and &lt;code&gt;NaN == NaN&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;There are so many other things wrong with the equality operator. &lt;/p&gt;

&lt;p&gt;There is a &lt;code&gt;===&lt;/code&gt; operator, which does not try to convert types, but it requires an extra equals. In my opinion, the &lt;code&gt;==&lt;/code&gt; should &lt;em&gt;not&lt;/em&gt; convert types, and we shouldn't even need the &lt;code&gt;===&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Weird behaviour
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; "" - Somehow gives an empty string&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; [object Object] - ok, this makes sense...&lt;/span&gt;
&lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; 0 - why does this not give the same as above?!&lt;/span&gt;
&lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="c1"&gt;// =&amp;gt; NaN - why? They're objects, and it's addition!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Too many frameworks and libraries!
&lt;/h3&gt;

&lt;p&gt;I should &lt;em&gt;not&lt;/em&gt;, when starting a new project, have to choose between frameworks. That is insane. If I am, say, making the frontend for a bank, I should not be asking myself, "Should I use Angular? Or React? Probably React. No, wait, Vite! Or Svelte!" No other language has this problem. &lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;var&lt;/code&gt; keyword
&lt;/h3&gt;

&lt;p&gt;It's highly recommended that you don't use it. So the why does it exist?! All of the ways to declare a variable&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// good&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// good&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// bad&lt;/span&gt;
&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// awful&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why does assignment have so many options when only 2 are good? I do not know, and I hate it. &lt;/p&gt;

&lt;h3&gt;
  
  
  Other stuff
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The this keyword is a nightmare&lt;/li&gt;
&lt;li&gt;NodeJS: taking user input is like rocket science&lt;/li&gt;
&lt;li&gt;NPM is terrible&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;this&lt;/code&gt; keyword is honestly messed up&lt;/li&gt;
&lt;li&gt;And so much more...&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>opinion</category>
    </item>
    <item>
      <title>What is the most fun coding language?</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Mon, 27 Nov 2023 22:25:58 +0000</pubDate>
      <link>https://dev.to/kaamkiya/what-is-the-most-fun-coding-language-2c81</link>
      <guid>https://dev.to/kaamkiya/what-is-the-most-fun-coding-language-2c81</guid>
      <description>&lt;p&gt;What is, in your opinion, the most &lt;strong&gt;fun&lt;/strong&gt; coding language?&lt;br&gt;
What exactly makes it fun?&lt;/p&gt;

&lt;p&gt;(Not including markup languages, i.e. HTML)&lt;/p&gt;

&lt;p&gt;I personally like C++, as it gives me a lot of control over what I want to do. Also it's compiled so...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxwewyxuiy0tnzvt329w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxwewyxuiy0tnzvt329w.jpg" alt="I am speed!" width="613" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear (read) your opinions!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>healthydebate</category>
    </item>
    <item>
      <title>Trends: Loved vs Not-so-loved</title>
      <dc:creator>Kaamkiya</dc:creator>
      <pubDate>Mon, 20 Nov 2023 22:48:03 +0000</pubDate>
      <link>https://dev.to/kaamkiya/trends-loved-vs-not-so-loved-118j</link>
      <guid>https://dev.to/kaamkiya/trends-loved-vs-not-so-loved-118j</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article is about developers' &lt;strong&gt;favorite&lt;/strong&gt; languages versus the most &lt;strong&gt;used&lt;/strong&gt; languages. &lt;/p&gt;

&lt;h2&gt;
  
  
  Languages 💬
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Loved ❤
&lt;/h3&gt;

&lt;p&gt;Apparently, 80% of &lt;a href="https://rust-lang.org/" rel="noopener noreferrer"&gt;Rust&lt;/a&gt; developers want to use it again in the coming year. However, only 12% of developers use it professionally. &lt;/p&gt;

&lt;p&gt;65% of professional developers use JavaScript, and 57% of people who used it last year want to use it again this year. Only 0.33% of developers care to try Raku (formerly Perl 6), but 65% of users want to work with it again. It's also used by only 0.14% of professional developers. &lt;/p&gt;

&lt;h3&gt;
  
  
  Not-so-loved 🫤
&lt;/h3&gt;

&lt;p&gt;Unsurprisingly, very few people want to try COBOL, and only 20% want to work with it again. The least loved language was MATLAB, with only 18% of developers wanting to use it again. &lt;/p&gt;

&lt;h2&gt;
  
  
  Trends 📉
&lt;/h2&gt;

&lt;p&gt;It seems, by looking at the charts, that many more people who use a specific language want to use it again, compared with very low amounts of people wanting to try them. &lt;/p&gt;

&lt;p&gt;For example, 4% of developers would like to try Elixir, but 73% of people who actually use it like it enough to use it again. &lt;/p&gt;

&lt;p&gt;It is a very similar trend with databases. Less than 1% of developers want to try Datonic, but it's the second most loved database (70%), after only PostgreSQL. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What languages and tools do you like and why?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sources: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://survey.stackoverflow.co/2023" rel="noopener noreferrer"&gt;2023 Stack Overflow Developer Survey&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>todayilearned</category>
      <category>discuss</category>
      <category>todayisearched</category>
    </item>
  </channel>
</rss>
