<?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: Masashi </title>
    <description>The latest articles on DEV Community by Masashi  (@__masashi__).</description>
    <link>https://dev.to/__masashi__</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%2F771851%2F8f044ade-f4b0-4b62-88a1-c0cf90f6cb03.jpeg</url>
      <title>DEV Community: Masashi </title>
      <link>https://dev.to/__masashi__</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/__masashi__"/>
    <language>en</language>
    <item>
      <title>Langjam Gamejam</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Sat, 20 Dec 2025 13:56:20 +0000</pubDate>
      <link>https://dev.to/__masashi__/langjam-gamejam-489d</link>
      <guid>https://dev.to/__masashi__/langjam-gamejam-489d</guid>
      <description>&lt;h2&gt;
  
  
  Day 1
&lt;/h2&gt;

&lt;p&gt;There's only 6 days left. I had a ton of things to look after for the past few days so I completely missed the date.Infact, I started working on a fresh compiler for my language &lt;del&gt;graveyard&lt;/del&gt; garden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suicmez, the Language
&lt;/h2&gt;

&lt;p&gt;Suicmez underwent PDD (panic driven development). In the past month, I've done two speedruns of implementing languages from scratch. Both of them were in Rust, so naturally, I decided to use it for this thing as well. All that practice came in handy as I slapped together a lexer and a parser in about two hours.&lt;/p&gt;

&lt;p&gt;However, I realised that things were way more challenging than I assumed them to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;For &lt;em&gt;ANY&lt;/em&gt; game (apart from tic-tac-toe or "guess the number"), I couldn't just have a bloated DSL that hogs 2GB of RAM and gives you 2FPS on flappy bird. The past two speedruns were treewalked (though one of the languages got a JIT &lt;br&gt;
after the speedrun was over).&lt;/p&gt;

&lt;p&gt;Suicmez had a few options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bytecode VM&lt;/li&gt;
&lt;li&gt;JIT using Cranelift&lt;/li&gt;
&lt;li&gt;Compiling to C&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But that wasn't all.&lt;br&gt;
I needed a typechecker. A robust one.&lt;br&gt;
One without good enough inference would mean I'd have to spend time worrying about type annotations where I shouldn't have to. An overly complex one would mean that I'd finish the typechecker by next Christmas.&lt;/p&gt;

&lt;p&gt;Then there was the runtime, the builtins, FFI support, etc.&lt;br&gt;
And THEN ONLY, could I start working on a game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hopium
&lt;/h2&gt;

&lt;p&gt;All of this was nearly impossible to do alone. So I set out on a search for a nice teammate.&lt;br&gt;
Luckily, Nishi decided to join. I was overjoyed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Did
&lt;/h2&gt;

&lt;p&gt;We discussed the plans for the game and specifically, the compiler, and how it interacts with stuff. Nishi originally thought of using &lt;a href="https://milsko.nishi.boats" rel="noopener noreferrer"&gt;Milsko, his graphics library&lt;/a&gt;, but we'd have to do a ton of math stuff on our own if we wanted to use it for a game.&lt;br&gt;
So we settled on Raylib.&lt;/p&gt;

&lt;p&gt;Nishi primarily divided the work (for the game) into three sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rendering&lt;/li&gt;
&lt;li&gt;Collisions&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then, he started working on a networking library for the game, libfishsoup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 2
&lt;/h2&gt;

&lt;h2&gt;
  
  
  The Best Team Ever
&lt;/h2&gt;

&lt;p&gt;Shortly after, Wildered and El1i0r joined. &lt;/p&gt;

&lt;p&gt;El1i0r was probably the most fluent in PLTDI theory stuff. So he helped us with some language design choices and helped me correct some of the sucky decisions I had made.&lt;/p&gt;

&lt;p&gt;Wildered created a generational (pun intended) GC specifically for our use case. He also worked on the codegen part.&lt;/p&gt;

&lt;p&gt;Now, we had set goals for the lang and the game.&lt;/p&gt;

&lt;p&gt;The reason we chose not to use a bytecode VM was: performance. &lt;br&gt;
The reason we chose not to use a JIT VM was: too complex.&lt;/p&gt;

&lt;p&gt;A C backend was the Goldilocks solution to our problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Days 3-4-5
&lt;/h2&gt;

&lt;p&gt;We decided to make a multiplayer FPS game. A 3D one. Last one standing wins.&lt;/p&gt;

&lt;p&gt;These days went by in a haste, Wildered's GC was working perfectly. I started working on Suicmez's standard library. &lt;br&gt;
We were utilizing ODE and Raylib. At some point, we did regret not choosing an engine but, we were already too deep in the rabbit hole.&lt;/p&gt;

&lt;p&gt;Near day 5, I realized how big of a mistake we had made. Suicmez was way too abstract and high level to have nice C interop so me and Wildered spent a night adding low level features.&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%2Fqhhph84585bm3oax73q2.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%2Fqhhph84585bm3oax73q2.png" alt="Here's how our language looks" width="772" height="296"&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%2F9rxpeyvuialr8q0i1jpk.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%2F9rxpeyvuialr8q0i1jpk.png" alt="Bitwise ops" width="800" height="393"&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%2Fqtixczahloeyul7mekzi.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%2Fqtixczahloeyul7mekzi.png" alt="Fixed arrays" width="548" height="192"&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%2Fl42ntqljmj87izctx11r.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%2Fl42ntqljmj87izctx11r.png" alt="Enums" width="765" height="610"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Days 6 and 7
&lt;/h2&gt;

&lt;p&gt;Our target was to get things done by Day 6, but because of shader errors. Things rolled on to Day 7.&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%2Fp37voyytw9mvzjywspmb.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%2Fp37voyytw9mvzjywspmb.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The terrain was just a green blob. &lt;br&gt;
Luckily, we managed to fix it and, things went well.&lt;/p&gt;

&lt;p&gt;So in the last 15 or so hours, we deployed the game on Nishi's VPS.&lt;/p&gt;

&lt;p&gt;And with that, our work, was done. All that was left was to submit it.&lt;br&gt;
We had a lot of fun throughout this game jam and ended it with a playtesting session (We all suck at the game).&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>c</category>
      <category>programming</category>
    </item>
    <item>
      <title>My NeoVim Experience: Productivity vs Curiosity</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Fri, 24 Jan 2025 19:00:10 +0000</pubDate>
      <link>https://dev.to/__masashi__/my-experience-with-neovim-3b5a</link>
      <guid>https://dev.to/__masashi__/my-experience-with-neovim-3b5a</guid>
      <description>&lt;p&gt;I've used a ton of IDEs and text editors to. Tried and tested everything to find which one can use best to optimize my workflow and write absolutely garbage code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before NeoVim
&lt;/h2&gt;

&lt;p&gt;At first, I started with &lt;a href="https://www.jetbrains.com/pycharm/" rel="noopener noreferrer"&gt;PyCharm&lt;/a&gt; by JetBrains. Pretty awesome IDE. A solid 9/10. However, it was too heavy for my liking. I was constrained by the specs of my device since I started out with a pretty weak laptop.&lt;/p&gt;

&lt;p&gt;I had to switch.&lt;br&gt;
I moved to VSCode. Loved the huge variety of extensions but yet again... too slow. Then I tried &lt;a href="https://atom.io/" rel="noopener noreferrer"&gt;Atom&lt;/a&gt; (RIP Atom). Not sure why I gave up on it, but I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Savior
&lt;/h2&gt;

&lt;p&gt;After all this, I found the one that suits my needs the best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://sublimetext.com" rel="noopener noreferrer"&gt;Sublime Text&lt;/a&gt;.&lt;/strong&gt;&lt;br&gt;
(Did you think I'd say NeoVim? not yet.)&lt;br&gt;
Light. Fast. Customizable. Too good!&lt;br&gt;
I spent almost two years on Sublime Text.&lt;br&gt;
I loved it. However, FOMO caught up to me. Moreover, I considered the "it makes you faster, more productive, etc" arguments and gave it a try.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://neovim.io" rel="noopener noreferrer"&gt;NeoVim&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I tried NeoVim with LunarVim. It was a really smooth experience for me. However, I wanted to customize it to my wants. I decided to give it a try by building a NeoVim config from scratch. I used Lazy for plugin management, Mason for LSPs, LuaLine and the Catppuccin theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Experience
&lt;/h2&gt;

&lt;p&gt;It's going well so far. However, the initial "learning curve" (me getting habituated) was costing me my productive. So, I decided to quit it and go back to Sublime Text for now. I'll return soon. &lt;br&gt;
I loved setting NeoVim up and how fast NeoVim was. Using only the keyboard was fun but productivity comes first. I'll try NeoVim again and see how it goes! &lt;/p&gt;

&lt;p&gt;Feel free to suggest me something, or uhhh, to just say something about it. Cheers!&lt;/p&gt;

</description>
      <category>vim</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Do We Need a New Framework?</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Wed, 29 Nov 2023 18:07:22 +0000</pubDate>
      <link>https://dev.to/__masashi__/do-we-need-a-new-framework-ll2</link>
      <guid>https://dev.to/__masashi__/do-we-need-a-new-framework-ll2</guid>
      <description>&lt;p&gt;In the past few years, the frontend world has seen a surge in various frontend frameworks, all offering new solutions. However, do we really know what the problem in hand is? 🤔&lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  Background and History 🤓
&lt;/h2&gt;

&lt;p&gt;Frontend frameworks have been on the rise recently. Developers wanted more responsive applications; hence, the comfortable &lt;a href="https://en.m.wikipedia.org/wiki/Single-page_application" rel="noopener noreferrer"&gt;✨&lt;strong&gt;SPA&lt;/strong&gt;s✨&lt;/a&gt; (pun intended).&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  SPAs (Single Page Applications)
&lt;/h3&gt;

&lt;p&gt;This style was popularized by frameworks such as &lt;a href="https://reactjs.com" rel="noopener noreferrer"&gt;React&lt;/a&gt;, &lt;a href="https://vuejs.org" rel="noopener noreferrer"&gt;Vue&lt;/a&gt; and &lt;a href="https://angular.io" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;.&lt;br&gt;
These made UI development faster and were more modular than VanillaJS. Truly a revolution 🗣️.&lt;br&gt;
 &lt;br&gt;
 &lt;/p&gt;

&lt;h4&gt;
  
  
  What's wrong with SPAs?
&lt;/h4&gt;

&lt;p&gt;Nothing. &lt;br&gt;
Spas help you relax. Oh, my bad. I needed to talk about SPAs. You can still use SPAs; they are well supported. However, they do have demerits. After all, every coin needs to have two sides.&lt;br&gt;
 &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bundle Size&lt;/strong&gt;: The applications have a lot of things bundled together. This makes the initial page load rather time consuming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not as Performant as Vanilla&lt;/strong&gt;: As a general rule of thumb, smaller is faster.
React, Vue, etc. use a &lt;a href="https://en.m.wikipedia.org/wiki/Virtual_DOM" rel="noopener noreferrer"&gt;Virtual DOM&lt;/a&gt;. This makes any UI change costly in terms of computation. :( (&lt;em&gt;&lt;a href="https://en.m.wikipedia.org/wiki/Svelte" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt; does not have a VDOM&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not SEO friendly&lt;/strong&gt;: &lt;a href="https://en.m.wikipedia.org/wiki/Search_engine_optimization" rel="noopener noreferrer"&gt;SEO&lt;/a&gt; stands for &lt;strong&gt;S&lt;/strong&gt;earch &lt;strong&gt;E&lt;/strong&gt;ngine &lt;strong&gt;O&lt;/strong&gt;ptimization. All search engines, such as &lt;a href="https://google.com" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, &lt;a href="https://duckduckgo.com" rel="noopener noreferrer"&gt;DuckDuckGo&lt;/a&gt; or &lt;a href="https://bing.com" rel="noopener noreferrer"&gt;Bing&lt;/a&gt; use crawlers. &lt;a href="https://en.m.wikipedia.org/wiki/Web_crawler" rel="noopener noreferrer"&gt;Crawlers&lt;/a&gt; "crawl" through the internet (the "web") and find the best pages to show in results. They DO NOT index JavaScript in the results. Only HTML. Pure, H-T-M-L.
SPAs rely heavily on JS, and in fact, the initial loaded page hardly had any information in HTML. This makes them less SEO-friendly. (&lt;a href="https://nextjs.org" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt;, &lt;a href="https://nuxtjs.org" rel="noopener noreferrer"&gt;NuxtJS&lt;/a&gt; and others of their kind let people use their favorite frontend framework such as React or Vue and render the content on the server. This is called &lt;a href="https://en.m.wikipedia.org/wiki/Server-side_scripting" rel="noopener noreferrer"&gt;SSR&lt;/a&gt;(&lt;strong&gt;S&lt;/strong&gt;erver &lt;strong&gt;S&lt;/strong&gt;ide &lt;strong&gt;R&lt;/strong&gt;endering)).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"There is no sadder sight than a pessimist." ~Mark Twain&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Positive Side
&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%2F4ma4zmcl71bzpdr2c7vm.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%2F4ma4zmcl71bzpdr2c7vm.jpg" alt="The bright side ❤️" width="612" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VanillaJS seems to be difficult to maintain. These frameworks with a VirtualDOM are not performant enough.&lt;br&gt;
What can be done now?&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  Well....
&lt;/h3&gt;

&lt;p&gt;We do have NextJS and other SSR options to improve the condition we are in right now, but it too has its downsides.&lt;br&gt;
Moreover, it's limited to JavaScript. All data fetching and other things need to be DONE-IN-JS. This is not ideal for a full-stack situation (IMO).&lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  Tying Existing Pieces Together
&lt;/h2&gt;

&lt;p&gt;We know that SSR is better for SEO. SPAs are better for interactivity but are not performant enough.&lt;/p&gt;

&lt;p&gt;Let's create... ✨ A new framework ✨.&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  "Seriously 😒"
&lt;/h3&gt;

&lt;p&gt;Yes, I just grumbled about how there are too many frameworks out there.&lt;br&gt;
HEAR ME OUT, PLEASE!&lt;br&gt;
We will not implement "Yet Another React/Vue/Svelte." Our framework is new in terms of architecture and principles.&lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;If you made it this far, kudos. Take a cookie 🍪 &amp;lt;3.&lt;br&gt;
 &lt;br&gt;
&lt;strong&gt;TL;DR:&lt;/strong&gt; Async page loads to make the app feel faster (say, &lt;a href="https://turbo.hotwire.dev/" rel="noopener noreferrer"&gt;Hotwire Turbo&lt;/a&gt;). Websockets for changing DOM contents (say &lt;a href="https://github.com/phoenixframework/phoenix_live_view" rel="noopener noreferrer"&gt;LiveView&lt;/a&gt;) and interactivity.&lt;br&gt;
 &lt;br&gt;
Async page loads will make the user experience better.&lt;br&gt;
For the DOM part, using Vanilla JS is not so maintainable (as aforementioned). Using the popular frameworks makes the page heavier. We seek a median. More maintainable than JS and lighter than Svelte. Much lighter than React, Angular, etc.&lt;br&gt;
 &lt;/p&gt;

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

&lt;p&gt; &lt;br&gt;
In the upcoming posts, we will create our very own JS framework. Yup!&lt;br&gt;
For now, kindly drink some water and take some rest. Thanks a ton for reading through the article. The upcoming parts of this series will be worth it🔥.&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  Adios
&lt;/h3&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%2F742nrqzbfd9n1frsrbid.gif" 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%2F742nrqzbfd9n1frsrbid.gif" alt="Cute kitten waving to say bye" width="498" height="412"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/remasashi" rel="noopener noreferrer"&gt;Will you buy me a coffee? &amp;gt;_&amp;lt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>frontend</category>
    </item>
    <item>
      <title>What Is Python Like?</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Mon, 06 Mar 2023 15:41:43 +0000</pubDate>
      <link>https://dev.to/__masashi__/what-is-python-like-3f6h</link>
      <guid>https://dev.to/__masashi__/what-is-python-like-3f6h</guid>
      <description>&lt;p&gt;Hello there people! Hope y'all can relate to this and more importantly, hope y'all enjoy!&lt;/p&gt;

&lt;h4&gt;
  
  
  When a new Python developer sees code with semicolons run flawlessly:
&lt;/h4&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%2F5nuvvfisalpsanvyctso.gif" 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%2F5nuvvfisalpsanvyctso.gif" alt="Shocked cat gif" width="200" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  When you get a huge task, but you can just import it:
&lt;/h4&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%2Fvnr0izxk72smwr4dr9vo.gif" 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%2Fvnr0izxk72smwr4dr9vo.gif" alt="Girl chilling" width="400" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  When you accidentally mix tabs and spaces:
&lt;/h4&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%2Fujoctep3radq27pvl70h.gif" 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%2Fujoctep3radq27pvl70h.gif" alt="Saitama watching destruction" width="400" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  When your 3AM session gives you bugs.
&lt;/h4&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%2Fs2h5fep1b16ennswonee.gif" 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%2Fs2h5fep1b16ennswonee.gif" alt="Head banging" width="540" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Waiting for PyCharm to start:
&lt;/h4&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%2F9dk3r9d0brjtvvjl4aml.gif" 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%2F9dk3r9d0brjtvvjl4aml.gif" alt="Kid waiting" width="300" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Python developers when they code in C:
&lt;/h4&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%2F49vxg8t26ss10khr78nw.gif" 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%2F49vxg8t26ss10khr78nw.gif" alt="Excited dancing" width="250" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Someone after creating first Django project:
&lt;/h4&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%2Fixgehwn3uqha412bejx9.gif" 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%2Fixgehwn3uqha412bejx9.gif" alt="Pablo feeling proud" width="153" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Removing the max recursion limits in Python:
&lt;/h4&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%2Fn1vsziuvgkxp8d08y21m.gif" 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%2Fn1vsziuvgkxp8d08y21m.gif" alt="Fire" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  When you realise that Python is older than Java
&lt;/h4&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%2Fe58mfespkbmml3o763vv.gif" 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%2Fe58mfespkbmml3o763vv.gif" alt="Trippy loop" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  When someone says you cannot run arbitrary pseudo code, but you use Python:
&lt;/h4&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%2F5vza0wu46uznr11zvdkd.gif" 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%2F5vza0wu46uznr11zvdkd.gif" alt="Wrong" width="125" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  PyPy is written in Python:
&lt;/h4&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%2Fioytepbt39y52pv2lzrv.gif" 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%2Fioytepbt39y52pv2lzrv.gif" alt="Loop" width="346" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Asking old projects to migrate to Python 3:
&lt;/h4&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%2Fd8nu807bvgpayamacff3.gif" 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%2Fd8nu807bvgpayamacff3.gif" alt="Decline. Cat nodding violently" width="169" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  I wrote this code:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="n"&gt;false&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;false&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="s"&gt;Need a break?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My friends' reaction:&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%2Fbkzrq986x52j05ba6oty.gif" 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%2Fbkzrq986x52j05ba6oty.gif" alt="Wierd stare with sheer disgust" width="292" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Python programmers fighting the Rust compiler:
&lt;/h4&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%2Fvppwb62l1ppxkktijb8s.gif" 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%2Fvppwb62l1ppxkktijb8s.gif" alt="Throws monitor away in frustration" width="291" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was my collection of memes. I think that you found it funny. Feel free to share your favourite memes in the comments. If it seems like something doesn't make sense, maybe I can explain in the comments.&lt;/p&gt;

&lt;p&gt;Oh, and enjoy your life. Hope y'all stay well.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>jokes</category>
      <category>python</category>
    </item>
    <item>
      <title>Suggestions to Revive an Old Device</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Sun, 19 Feb 2023 08:50:44 +0000</pubDate>
      <link>https://dev.to/__masashi__/suggestions-to-revive-an-old-device-2c7d</link>
      <guid>https://dev.to/__masashi__/suggestions-to-revive-an-old-device-2c7d</guid>
      <description>&lt;p&gt;Hello people. Lately, I remembered one of my proudest deeds. Somehow, that 'deed' gave me more pleasure than when I got a scholarship or when I ranked in the international top 10 in an Olympiad. You can call me wierd, but that delightful job was: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Installing Arch Linux on a practically unusable, old laptop.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  I use Arch btw
&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%2Fb9x4wt3c0d39dgmdqpvy.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%2Fb9x4wt3c0d39dgmdqpvy.png" alt="Arch Linux logo" width="390" height="129"&gt;&lt;/a&gt;&lt;br&gt;
You might have heard of this '&lt;a href="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR4e9rzmIzVu3RqRYOS9Y26LqpY5JD6xejjz_fWlEZAHBQFzuwzVejFYdG3&amp;amp;s=10" rel="noopener noreferrer"&gt;punchline&lt;/a&gt;'. This 'punchline' can actually get your face punched if you use it a lot(some people have a strong dislike apparently, and I would really like to know why), but I use it anyways. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Arch?
&lt;/h2&gt;

&lt;p&gt;Well, &lt;a href="https://archlinux.org" rel="noopener noreferrer"&gt;Arch&lt;/a&gt; (apart from giving you a sense of immense satisfaction) gives you the liberty to choose from a plethora of choices about anything in your desktop. &lt;br&gt;
It is basically like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your computer. Your design. Your choices.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(&lt;em&gt;I made that thing.&lt;/em&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Enough of Arch specific stuff.&lt;br&gt;
Let's see the specific details of how to make our computer light.&lt;/p&gt;

&lt;p&gt;The main factor in lightness is mostly the desktop environment (DE) . Keep a heavy DE and see your computer slow down or keep a light window manager(WM, it is not even a DE fully) and see yourself get frustrated despite having a fast computer. So basically, I will recommend you to choose something in between and &lt;a href="https://www.xfce.org/" rel="noopener noreferrer"&gt;XFCE&lt;/a&gt; seems to be the Goldilocks solution.&lt;/p&gt;

&lt;p&gt;If someone says, 'what about &lt;a href="https://en.wikipedia.org/wiki/Systemd" rel="noopener noreferrer"&gt;systemd&lt;/a&gt;' or 'remove XYZ for PQR' or 'use a lightweight distro(&lt;a href="https://bodhilinux.com" rel="noopener noreferrer"&gt;Bodhi&lt;/a&gt;, &lt;a href="https://puppylinux.com" rel="noopener noreferrer"&gt;Puppy&lt;/a&gt;, etc)' or something else; sure, it might be a good solution but Arch will give you a proper computer, not with some tradeoffs (except the installation).&lt;/p&gt;

&lt;p&gt;Also, we should try to minimise background tasks (daemons) that run continuously. &lt;/p&gt;

&lt;p&gt;RAM is the main factor in using old devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  I Don't Want Arch
&lt;/h2&gt;

&lt;p&gt;Well, if you have some personal grudge or mistrust against Arch, then you can consider some other options. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://manjaro.org" rel="noopener noreferrer"&gt;Manjaro&lt;/a&gt; ❌:
&lt;/h3&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%2Fzwq0dehhkonetwqtq8yh.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%2Fzwq0dehhkonetwqtq8yh.png" alt="Manjaro logo" width="467" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manjaro might be well loved by the community and have lightweight variants(XFCE or the Manjaro Architect), but I don't recommend it. Manjaro has made a few huge blunders in the past such as forgetting to renew their SSL certificates numerous times.&lt;br&gt;
Manjaro also had some. Also Manjaro claims to be stable by delaying the Arch packages by a week (which seems really idiotic to me). Moreover, Manjaro even caused a Denial-of-Service attack on the &lt;a href="https://aur.archlinux.org/" rel="noopener noreferrer"&gt;AUR&lt;/a&gt;(Arch User Repository) due to a broken version of &lt;a href="https://wiki.manjaro.org/index.php/Pamac" rel="noopener noreferrer"&gt;pamac&lt;/a&gt; 😂(&lt;a href="https://github.com/arindas/manjarno" rel="noopener noreferrer"&gt;source&lt;/a&gt;). Overall, I had a pretty bad experience with Manjaro in the past and I would recommend everyone to stay away from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://linuxmint.com" rel="noopener noreferrer"&gt;Linux Mint&lt;/a&gt; ✅
&lt;/h3&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%2Fh5ozzvwmqmaz3atvso85.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%2Fh5ozzvwmqmaz3atvso85.jpeg" alt="Linux Mint desktop image" width="284" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Linux Mint is renowned to be 'lightweight' yet feature-rich. &lt;br&gt;
It comes in three editions, namely Cinnamon, XFCE and MATE.&lt;br&gt;
You can choose the XFCE(or maybe MATE or Cinnamon) edition to install on your device. However, you must remember that it has Ubuntu at it's core and it has both it's pros and cons, but overall, happy journey if you use it(I have no personal experience regarding Mint).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://endeavouros.com" rel="noopener noreferrer"&gt;EndeavourOS&lt;/a&gt; ✅
&lt;/h3&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%2Fx2p2pkrtj650lvbyrnir.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%2Fx2p2pkrtj650lvbyrnir.png" alt="Endeavour OS logo" width="216" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Almost Arch without the hassle of installation. EndeavourOS tries to be an Arch based distro as close to Arch as possible. You can go for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation of Arch
&lt;/h2&gt;

&lt;p&gt;I will be providing a very easy to follow guide for the Arch installation in the next post. Till then, you can make some 'design choices' (Network manager, Bluetooth manager, etc) from the Arch wiki. &lt;/p&gt;

&lt;h2&gt;
  
  
  Happy revival folks!
&lt;/h2&gt;

&lt;p&gt;Oh, and please let me know why people don't like 'I use Arch, btw' because I use Arch, btw.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>career</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Hobbyists, Do Not Quit</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Mon, 23 Jan 2023 17:42:30 +0000</pubDate>
      <link>https://dev.to/__masashi__/hobbyists-do-not-quit-10hc</link>
      <guid>https://dev.to/__masashi__/hobbyists-do-not-quit-10hc</guid>
      <description>&lt;h2&gt;
  
  
  Programming as a Hobby
&lt;/h2&gt;

&lt;p&gt;So, here is my story. I was a kid who was busy with boring and usual everyday things. This was until I found out about this whole new world. It was really motivating since I could see what I created (what I made was not usable enough in the beginning, but later I improved). During the COVID pandemic, programming was everything to me. I learnt and made a lot of things during that period.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;I am a school student and thus, have to give enough time to my studies. Now I also have other things which were not present during the pandemic.  &lt;/p&gt;

&lt;p&gt;This is where the problem is. Time is limited. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&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%2Fi0hiifge97osviivx8ua.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%2Fi0hiifge97osviivx8ua.jpeg" alt="The Solution" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don't have time, you make time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This quote is the key to time management. &lt;/p&gt;

&lt;p&gt;You might not get 'long coding hours' of about 2 to 3 hours, but you can always keep 30 minutes of your valuable time aside everyday for your beloved hobby (that is in my case, yours may vary). You can make very minute progress everyday, but remember that you will eventually have a finished project that will make you realise that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It was all worth it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Happy coding to everyone, especially the hobbyists like me who take their hobby seriously. If you are going through tough times, just remember that things will get better and that a hobby can bring unfathomable levels of joy. Also, kindly let me know about your experience of first programming and how you started.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Part-0 The Plan</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Sat, 14 Jan 2023 10:40:10 +0000</pubDate>
      <link>https://dev.to/__masashi__/part-0-the-plan-2daj</link>
      <guid>https://dev.to/__masashi__/part-0-the-plan-2daj</guid>
      <description>&lt;p&gt;In this series, we are going to build a compiler. I assume that you have limited knowledge of working of compilers. It is a nice exercise, and is cool as well. So, you have come to the right place if you wanted to make a programming language or just make another compiler for some other language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First step, define your language if you want to create a new one(if you are implementing an existing language, say another &lt;a href="https://en.wikipedia.org/wiki/C_(programming_language)" rel="noopener noreferrer"&gt;C&lt;/a&gt; compiler like GCC, you may skip it). &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Second step, choose the language in which you will create a new language. Choose a language you are somewhat comfortable with. However, it is very helpful if your language of choice has pattern matching.  &lt;strong&gt;[My choice: &lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;]&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Third step, start with the implementation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How does a compiler work?
&lt;/h2&gt;

&lt;p&gt;First a compiler will read your file, then it will convert the code you have written into tokens. A token is the tiniest component of any program. It can be a comma, semicolon, an identifier like "my_variable" or some keyword like "if" or some operator like "+". This part is called &lt;a href="https://en.wikipedia.org/wiki/Lexical_analysis" rel="noopener noreferrer"&gt;lexing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then, it will create a data structure called the &lt;a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree" rel="noopener noreferrer"&gt;AST(Abstract Syntax Tree)&lt;/a&gt; from the tokens, representing your program logic. This process is called &lt;a href="https://en.wikipedia.org/wiki/Parsing" rel="noopener noreferrer"&gt;parsing&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;After parsing, some compilers check for unused variables, unreachable code or some other bugs such as referencing an undeclared function or variable and so on (This is called &lt;a href="https://en.wikipedia.org/wiki/Static_program_analysis" rel="noopener noreferrer"&gt;static analysis&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After the AST is created, we will convert each node of the tree(AST) into some meaningful code that will be executable. In jargon, we transverse the AST to translate it into some low level code. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is 'low level code'?
&lt;/h2&gt;

&lt;p&gt;Many of you might have used Java or Python. The compiler (they have both a compiler and an interpreter, but I will get into it later), will translate the code you typed into a stream of tokens and then into an AST and finally, into a bytecode. This bytecode is then executed by a 'virtual machine'. The VM(Virtual Machine) is basically a program that understands the bytecode (returned after the AST is translated)and runs according to that bytecode. To make it clearer, I'll show an example. Say someone wrote a program.&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="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="s"&gt;hello world&lt;/span&gt;&lt;span class="sh"&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 Python compiler will see this and turn it into an AST which will be run by the python interpreter. The interpreter will see the bytecode and say 'Okay, I have to print something on the screen, let me do it.'&lt;/p&gt;

&lt;p&gt;This mechanism makes the code platform independent because the programmer will (usually)not have to worry if her/his code is going to run on Windows or Ubuntu/Fedora/Arch or Mac or some other operating system (I use Arch btw). &lt;/p&gt;

&lt;p&gt;However, the AST can also be translated into machine code or assembly as done by C or C++ or Rust compilers.&lt;/p&gt;

&lt;p&gt;Now that you know how the code is translated into executable, you should also know that this process of translating of AST into bytecode or machine code is called code generation or 'codegen'.&lt;/p&gt;

&lt;p&gt;Any suggestions are welcome. I will be implementing the compiler in the upcoming posts. &lt;/p&gt;

</description>
      <category>rust</category>
      <category>compiler</category>
    </item>
    <item>
      <title>ASGI: A brief overview</title>
      <dc:creator>Masashi </dc:creator>
      <pubDate>Fri, 10 Dec 2021 07:33:12 +0000</pubDate>
      <link>https://dev.to/__masashi__/asgi-a-brief-overview-hp3</link>
      <guid>https://dev.to/__masashi__/asgi-a-brief-overview-hp3</guid>
      <description>&lt;p&gt;&lt;a href="//github.com/encode/starlette"&gt;Starlette&lt;/a&gt;, &lt;a href="//github.com/tiangolo/fastapi"&gt;FastAPI&lt;/a&gt;, &lt;a href="//gitlab.com/pgjonees/quart"&gt;Quart&lt;/a&gt;, all are web-frameworks, (backend), but, they all have one more thing in common. They are based on ASGI.&lt;/p&gt;

&lt;p&gt;In &lt;a href="//python.org/dev/peps/0333"&gt;PEP-333&lt;/a&gt;, WGSI was introduced, long ago, why? To facilitate the use of any web server with any WSGI-based framework. As a result, we have Flask, Django, Pyramid and other frameworks, and WSGI servers like Gunicorn.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ASGI?
&lt;/h2&gt;

&lt;p&gt;ASGI stands for Asynchronous Server Gateway Interface and it lets us use any ASGI web server with any ASGI-based framework.&lt;/p&gt;

&lt;p&gt;Pretty much the same right? But, WSGI was sync and ASGI is async (obviously).&lt;/p&gt;

&lt;h2&gt;
  
  
  What should I do with this info?
&lt;/h2&gt;

&lt;p&gt;ASGI makes it much easier to make a web framework (though you don't have to) and it works on three components. &lt;code&gt;scope&lt;/code&gt;, &lt;code&gt;send&lt;/code&gt; and &lt;code&gt;recieve&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;The scope is a python-dictionary object that contains information about the connection. Such as, is it http or https or ws(websocket) or wss(ws secured) or something else.&lt;/p&gt;

&lt;p&gt;Eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ 
  "type" : "http",
  "method" : "GET",
  "path" : "/api",
  "query_string" : "userid=999",
  "headers" : [
      b"accept-encoding": b"gzip, deflate, br",
      b"connection": b"keep-alive",
      b"cookie": b"a=b",
    ],
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No text parsing, just use it. Pretty simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Send
&lt;/h2&gt;

&lt;p&gt;Sends a Python-dictionary object containing your response.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await send({
   'type': 'http.response.start',
   'status': 200,
   'headers': [
      b"content-type": b"text/html",
      b"date" : b"Fri, 10 Dec 2021 06:16:51 GMT",
      b"cache-control" : b"none",
      b"set-cookie": b"a=b"
    ]
})


await send({
    'type': 'http.response.body',
    'body': b"Hello user",
})

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Recieve
&lt;/h2&gt;

&lt;p&gt;It is used get more info from the user after connection is established. Eg: HTTP body.&lt;/p&gt;

&lt;h2&gt;
  
  
  But still, where do I use these?
&lt;/h2&gt;

&lt;p&gt;It all is there in an ASGI callable as arguments.&lt;/p&gt;

&lt;p&gt;It may be a function or a class.&lt;/p&gt;

&lt;p&gt;Eg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async def app(scope, recieve, send):
# Some logic here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class App:
# other things
  async def __call__(self, scope, recieve, send):
   #Some logic here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;ASGI is used to make frameworks, but knowing it is needed for working with Starlette, and maybe other frameworks as  well. It can be used for making middlewares of other frameworks as well. It can be used for other protocols. There is a variety of things to build by following this specification. This was just a brief overview. Read the full specification at &lt;a href="//asgi.readthedocs.org/"&gt;asgi.readthedocs.org&lt;/a&gt;. If you want to see an example of application of ASGI, look at an &lt;a href="//github.com/Nafi-Amaan-Hossain/willpyre"&gt;HTTP framework named willpyre&lt;/a&gt; that I made, or check some well known framework like Starlette, or Sanic.&lt;br&gt;
Also, check some ASGI servers like &lt;a href="//github.com/encode/uvicorn"&gt;Uvicorn&lt;/a&gt;, &lt;a href="//github.com/pgjones/hypercorn"&gt;Hypercorn&lt;/a&gt; or &lt;a href="//github.com/django/daphne"&gt;Daphne&lt;/a&gt; if you want to see how the specification is for the servers.&lt;/p&gt;

&lt;p&gt;That was all. Hope you all stay well.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>asgi</category>
    </item>
  </channel>
</rss>
