<?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: Nikhil</title>
    <description>The latest articles on DEV Community by Nikhil (@unsungnovelty).</description>
    <link>https://dev.to/unsungnovelty</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%2F175229%2F54f27cf5-b64c-45e7-8c1c-6543b7273430.png</url>
      <title>DEV Community: Nikhil</title>
      <link>https://dev.to/unsungnovelty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unsungnovelty"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sat, 25 Oct 2025 07:18:23 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/-18ce</link>
      <guid>https://dev.to/unsungnovelty/-18ce</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/unsungnovelty" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F175229%2F54f27cf5-b64c-45e7-8c1c-6543b7273430.png" alt="unsungnovelty"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/unsungnovelty/so-what-is-open-source-software-in-a-source-available-software-world-3cib" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;So what is Open Source Software in a Source Available Software world?&lt;/h2&gt;
      &lt;h3&gt;Nikhil ・ Oct 20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#software&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>software</category>
    </item>
    <item>
      <title>So what is Open Source Software in a Source Available Software world?</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Mon, 20 Oct 2025 12:07:43 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/so-what-is-open-source-software-in-a-source-available-software-world-3cib</link>
      <guid>https://dev.to/unsungnovelty/so-what-is-open-source-software-in-a-source-available-software-world-3cib</guid>
      <description>&lt;p&gt;Open Source Software(OSS) has gone through a lot of battles over the years. The recent two of 'em has been from source available software licenses and Large Language Models (LLMs). Source available predates the LLM/AI trend (in it's current form). And source available software has a renewed interest. So many think Source Available Software (SAS) is the answer. The next step for OSS software. So I thought this is a good time to define what OSS is. This is my gentle attempt to explain the what, why and how of OSS. And why it is still important for us to rally for Open Source Software.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what is Open Source Software?
&lt;/h2&gt;

&lt;p&gt;The whole point of OSS was to provide software with 4 freedoms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To run the program&lt;/li&gt;
&lt;li&gt;To study and change the program in source code form&lt;/li&gt;
&lt;li&gt; To redistribute exact copies&lt;/li&gt;
&lt;li&gt; To distribute modified versions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The idea was to encourage software that can be tinkered. And also be used &lt;em&gt;for any purposes&lt;/em&gt; as long as you comply by the very few restrictions which guarantees the freedom mentioned using &lt;a href="https://opensource.org/licenses" rel="noopener noreferrer"&gt;OSS licenses&lt;/a&gt;. The idea behind Open Source wasn't about capitalism vs socialism. Or big corporations vs the small guy. Or making money vs not making money. It was the rejection of proprietary software. So that the developers and the users irrespective of their size can use and make it into what they want. It was a fair system providing equal grounds for everyone involved. It doesn't always work the way it's supposed to be. But that is another problem. And it won't be solved by creating new problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free as in freedom (Open Source) and free as in beer (Source available)
&lt;/h2&gt;

&lt;p&gt;You might've heard of people explaining open source as free as in freedom and not free as in beer. What this means is the "free" in OSS is supposed to be about the freedom it provides to consumer. That is to learn, use, modify and distribute the software/source &lt;em&gt;for any purpose&lt;/em&gt; (the free as in freedom). And not whether the software is free or not with respect to monetary value (free as in beer). In fact, there is no need for open source to be free from a price POV. The &lt;a href="https://www.gnu.org/philosophy/selling.html" rel="noopener noreferrer"&gt;Free Software Foundation encourages you to make money from OSS&lt;/a&gt;. This is why, back in the day, people used to make copies of Ubuntu CDs and sell it for a price. It was all legal to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Source Available Software?
&lt;/h2&gt;

&lt;p&gt;Source available software means the source of the software is available for you to read. But doesn't provide the freedoms of OSS software. In most cases, the restriction is about forking or redistributing. Essentially, whether it is &lt;a href="https://www.futo.org/open-source-definition/" rel="noopener noreferrer"&gt;FUTO&lt;/a&gt;, &lt;a href="https://herman.bearblog.dev/license/" rel="noopener noreferrer"&gt;Bear Blog&lt;/a&gt;, Terraform or &lt;a href="https://github.com/liquibase/liquibase/issues/7374" rel="noopener noreferrer"&gt;Liquibase&lt;/a&gt;, it's always about control or money.&lt;/p&gt;

&lt;p&gt;One of the most common Source Available Software license is &lt;a href="https://en.wikipedia.org/wiki/Business_Source_License" rel="noopener noreferrer"&gt;Business Source License&lt;/a&gt;. You can read more about the different types of SAS licenses &lt;a href="https://en.wikipedia.org/wiki/Source-available_software" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why don't you like Source Available software?
&lt;/h2&gt;

&lt;p&gt;I don't have a dislike for Source Available Software. I think we all have the freedom to make software in whatever form we would like. Distribute it the way we would like. I mean, it is our software after all. But I do have a problem with Source Available Software folks source washing OSS. Trying to make it look like OSS is taken advantage off and is weak to solve the problems of the present. It shows clear misunderstanding of what OSS is about. The so called perceived weakness is what makes OSS so strong. It is those &lt;em&gt;"weakness"&lt;/em&gt; that has made it flourish.&lt;/p&gt;

&lt;h2&gt;
  
  
  But Big Tech is taking advantage of the small guys!!
&lt;/h2&gt;

&lt;p&gt;NO. It's OSS working as it is supposed to be. This is one of the freedoms that it provides. The right to redistribute and modify. It was not taking advantage. Amazon or other companies are exercising their right to fork and redistribute. What this shows if not anything is misunderstanding of the OSS licenses. Illiteracy of it. Which is a problem we should be solving cos it is hard to understand. Companies and people using OSS have pikachu faces when they suddenly realise others can fork and redistribute the software. If that was a bother, I would tell you that you didn't want OSS in the first place. Or that you were using the wrong OSS license. Or didn't know what you are getting into. Maybe you didn't expect your software grow this big. Be in a spotlight like it eventually did. But the issue is clearly that &lt;em&gt;you changed&lt;/em&gt;. &lt;em&gt;Not OSS&lt;/em&gt;. Also, you can track the code smell of it all back to &lt;em&gt;somebody is making money or have used my OSS in ways I don't approve off&lt;/em&gt;. It was the same thing with Redis, Elastic and recently with Bear blog. And that is the exact reason why OSS came about. Because proprietary softwares under End User License Agreement (EULA) lecture how a program can be used. This was one of the reasons whay OSS was created. Clearly, with SAS, we are coming back full circle.&lt;/p&gt;

&lt;p&gt;Not to mention, it works both ways. You can fork any Amazon's OSS and spin up a SaaS as well. This is literally why &lt;a href="https://cursor.sh/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; exists. Because they forked VS Code to make it their own. And this is where SAS lacks. If VS Code was licensed using source available licenses, Cursor wouldn't have been possible. The software industry in it's current form exists because of OSS. With SAS, it is only about money and control disguised as limiting &lt;em&gt;"OSS can fork or redistribute"&lt;/em&gt; freedom. This means, &lt;a href="https://opentofu.org/" rel="noopener noreferrer"&gt;OpenTofu&lt;/a&gt; wouldn't have happened if Terraform was SAS in the first place. &lt;a href="https://maplibre.org/" rel="noopener noreferrer"&gt;MapLibre&lt;/a&gt; wouldn't have been possible when &lt;a href="https://github.com/mapbox/mapbox-gl-js/blob/main/CHANGELOG.md#200" rel="noopener noreferrer"&gt;Mapbox GL JS became closed source&lt;/a&gt;. This is the future so many of the SAS folks are so excited to bring up on to the OSS communities. Listening to these companies using their money and good marketing campaigns about OSS being weak. It is going to make it harder for the small guys to fight against big techs.&lt;/p&gt;

&lt;p&gt;Then there is the VC companies crying &lt;em&gt;BIG Tech killing us&lt;/em&gt; sob story. Redis and Elastic when they changed to source available licenses had at least a hundred million dollar in funding (This is a humble under cutting. For example, I know it was at least 200M+ in redis's example at the time of license change). So the helpless, weak crippling companies narrative is not true. Both of them has since changed the license back to an Open Source license though. This was the case with HashiCorp as well. But they stuck with &lt;a href="https://en.wikipedia.org/wiki/Business_Source_License" rel="noopener noreferrer"&gt;Business Source License&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is forking and redistributing possible with OSS and why is it important?
&lt;/h2&gt;

&lt;p&gt;The freedoms of OSS which allows you to do the below allows you to fork a software.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To run the program&lt;/li&gt;
&lt;li&gt;To study and change the program in source code form&lt;/li&gt;
&lt;li&gt;To redistribute exact copies, and&lt;/li&gt;
&lt;li&gt;To distribute modified versions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These freedoms are extremely important. Because without these freedoms, there wouldn't have been forks of popular OSS projects when they went against the OSS community or consumers. If you are bothered about people using your software in ways you don't want to, then you didn't want OSS from the start. At least in Herman's case, I understand the difficulty of this. But I also remember us discussing Mapbox forks which used to crop up regularly in Mapbox slack workspace. New websites cropping up with forks of Mapbox OSS libraries with even the same Mapbox website design. And none of them made it you know. Clearly AI is a different problem altogether. As Herman notes in &lt;a href="https://herman.bearblog.dev/license/" rel="noopener noreferrer"&gt;his post about the license change&lt;/a&gt;, free loading is going to increase. But at the same time, that was always possible. And &lt;em&gt;"free loading"&lt;/em&gt; (a.k.a right to redistribute) as he puts it is one of the OSS freedoms. Maybe it wasn't possible in the current LLM speeds. But still, it's not a new issue.&lt;/p&gt;

&lt;p&gt;Not to mention, software is not the only thing in a business. I don't think a fork alone will allow people to create a competing service. Other than that, I would say people are not always looking for just the functions in a software when they are choosing OSS. While I do agree that SAS has a barely slight advantage of the source being available. You have no idea what the project will become tomorrow. And when it changes, you have zero control over it. It's like investing a huge amount of time on a software project and when they shuts you down (&lt;a href="https://x11libre.net/#about" rel="noopener noreferrer"&gt;what's up x.org&lt;/a&gt; ??), you wouldn't be able to do anything. This is why I don't think SAS can have the level of community involvement OSS always will have.&lt;/p&gt;

&lt;h2&gt;
  
  
  But if you want good software, you should pay!
&lt;/h2&gt;

&lt;p&gt;Yes. Pay for OSS services. Donate when possible or contribute in ways possible. Majority of the server software which will make it possible for you to read this post runs of OSS. There are many pieces of OSS project which are community based and are from commercial companies as well. Nobody is saying it should be free. Just don't butcher the OSS movement. And let's keep SAS separate and we are all good. If projects are not ready to provide OSS freedoms, you also cannot piggy back on OSS for good PR.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is your solution?
&lt;/h2&gt;

&lt;p&gt;The solution is to use the right OSS license depending on the project and business you want to do. And not to mention, doing OSS business is hard. There is no denying it. It has been written about a lot of times. &lt;a href="https://joemorrison.substack.com/p/death-of-an-open-source-business-model-62bc227a7e9b" rel="noopener noreferrer"&gt;Death of an Open Source Business Model by Joe Morrison&lt;/a&gt; is a great piece on that subject. And Drew Devault has written about his POV &lt;a href="https://drewdevault.com/2021/03/03/To-make-money-in-FOSS-build-a-business.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Whcih talks about the pain points Herman and others mentioned about OSS. While I personally don't think it is dead as per the former article, I also don't think OSS model will work for all types of businesses. For certain businesses, OSS can be a boon and for others it is impossible to make a business out of it. SAS can provide confidence by making source available to read. The verifiability of it on backend is the first problem. But also, I don't think it makes sense if it comes at the cost of OSS. It is a very very bad move for the software community. If you want to make money and don't want to share code, I personally think making a proprietary software is better. Then contribute back to OSS communities via donation, contributions or by other means. Creating new problems for OSS and butchering OSS is not the way to go about it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python is faster because of Microsoft's recent investment. &lt;/li&gt;
&lt;li&gt;React changed UI library with Facebook money. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linuxfoundation.org/about/members" rel="noopener noreferrer"&gt;Linux Foundation&lt;/a&gt; and &lt;a href="https://rustfoundation.org/members/" rel="noopener noreferrer"&gt;Rust Foundation&lt;/a&gt; are run by companies which a lot of OSS folks dislike.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Money is a problem in OSS. There are different ways to solve this. But to most, they want to ignore it. Which is why we have things like SAS. Be Microsoft for Python. Be Jane Street for OCaml. Or do it the community way like &lt;a href="https://ziglang.org/zsf/" rel="noopener noreferrer"&gt;Zig foundation&lt;/a&gt;, &lt;a href="https://freebsdfoundation.org/donate/" rel="noopener noreferrer"&gt;FreeBSD foundation&lt;/a&gt; or &lt;a href="https://www.openbsdfoundation.org/campaign2025.html" rel="noopener noreferrer"&gt;OpenBSD foundation&lt;/a&gt;. But let's keep OSS the way it is. And the way it always has been.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Wrote something wrong? Happy to listen. Drop an email to unsungnovelty at protonmail dot com.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>software</category>
    </item>
    <item>
      <title>Life of a blog - blogging in 2024 and beyond</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Wed, 30 Oct 2024 03:51:37 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/life-of-a-blog-blogging-in-2024-and-beyond-3031</link>
      <guid>https://dev.to/unsungnovelty/life-of-a-blog-blogging-in-2024-and-beyond-3031</guid>
      <description>&lt;p&gt;I created &lt;a href="https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;my website&lt;/a&gt; and started blogging in 2019. The decision to create a website was inspired by 2 posts - &lt;a href="https://www.jvt.me/posts/2019/07/22/why-website/" rel="noopener noreferrer"&gt;Why I Have a Website and You Should Too by Jamie Tanna&lt;/a&gt; and &lt;a href="http://john.ankarstrom.se/html/" rel="noopener noreferrer"&gt;Writing HTML in HTML by John Ankarström&lt;/a&gt;. While I haven't gotten to writing HTML in HTML as mentioned in John's post, I have been thinking about incorporating the end results in Hugo. This was 5 years ago. So is bloggin dead now?&lt;/p&gt;

&lt;p&gt;People have been predicting it's death for a while now. I came across such an article right after I started this website. As a beginner to blogs and blogging, reading it felt like I missed the train. It was very discouraging for me. But having encountered a few of them over the years, I am less worried about them now. I can say with some certainty say that &lt;strong&gt;blogs and blogging will survive&lt;/strong&gt;. In fact, I feel there has been an increase in blogs thanks to next generation SSG's like Hugo, 11ty and others. Hosting options has never been more accessible thanks to GitLab Pages, GitHub Pages, Netlify and others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Life of a blog
&lt;/h2&gt;

&lt;p&gt;But why are we seeing that blogging is dead posts from time to time? I mean, I don't have a clear cut answer for that. Maybe what blogging &lt;em&gt;is&lt;/em&gt; for them changed? Maybe life, their interests or any unforeseen reasons made them change? It can be anything. But that is life of a blog. They live and die just like humans. Some live for 5 years. Some for 15 and others dies in just months.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardest part of blogging is to keep writing
&lt;/h2&gt;

&lt;p&gt;Maintaining a website and to keep writing is not easy. People who want to host their own website for blogging thinks creating a website is the hardest part. But it is not. Maintaining and to keep writing is the hardest part. Cos when you start a website, you have the beginner's excitement and motivation with you. But for most, you won't have it once you are done with your tech project - the website. So once you are done with your hello world post, it's like a done project for you. When I starting my blog, 70% of among the people I knew and had a website were not updated for at least a year. A lot of them had just a single post. That was the odds I started my website with. So I have kept my website setup simple for maintenance. Not writing or maintaining your website is gonna be your biggest enemy for blogging.&lt;/p&gt;

&lt;p&gt;For example, this is the largest gap I have taken since my first post in 2019 for my website. But that is alright. I don't publish regularly. I publish when I want to and when I feel like. Sometimes that means long breaks. That is the freedom my personal website gives me. But I am also aware that people might think my blog is dead since I didn't write since January of this year.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do I find other personal blogs?
&lt;/h2&gt;

&lt;p&gt;It's tricky cos personal blogs and websites are very decentralised as you can imagine. Blogging and blogosphere has definitely changed as well. Some people have moved their writing to platforms like Medium, Dev.to, Bear Blog or Hashnode. Even I do. I republish (or &lt;a href="https://indieweb.org/POSSE" rel="noopener noreferrer"&gt;POSSE&lt;/a&gt;) the articles in &lt;a href="https://medium.com/@unsungnovelty" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;, &lt;a href="https://unsungnovelty.bearblog.dev/" rel="noopener noreferrer"&gt;Bear Blog&lt;/a&gt;, &lt;a href="https://dev.to/unsungnovelty"&gt;Dev.to&lt;/a&gt; and &lt;a href="https://unsungnovelty.hashnode.dev/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt;. While it is great for reaching more audience, my main interest in republishing articles is to experiment with different audience and the comment section there. It helps you see how different types of people see your articles. And it helps you interact with people directly since my website is static and doesn't have a comment section. &lt;/p&gt;

&lt;p&gt;But if you are looking for self hosted blogs and websites, you can find a good amount of them from the below places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://250kb.club/" rel="noopener noreferrer"&gt;https://250kb.club/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://512kb.club/" rel="noopener noreferrer"&gt;https://512kb.club/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://1mb.club/" rel="noopener noreferrer"&gt;https://1mb.club/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://indieblog.page/" rel="noopener noreferrer"&gt;https://indieblog.page/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.cryptic.io/" rel="noopener noreferrer"&gt;https://news.cryptic.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://search.marginalia.nu/" rel="noopener noreferrer"&gt;https://search.marginalia.nu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://daverupert.com/rss-club/" rel="noopener noreferrer"&gt;https://daverupert.com/rss-club/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have to also say that I have been enjoying &lt;a href="https://search.marginalia.nu/" rel="noopener noreferrer"&gt;Marginalia search&lt;/a&gt;. You can find a lot of new interesting blogs by searching for different topics.&lt;/p&gt;

&lt;p&gt;There are more of them with their takes and inspiring stories in the below hacker news threads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=35164819" rel="noopener noreferrer"&gt;Ask HN: What has your personal website/blog done for you?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=22800136" rel="noopener noreferrer"&gt;Ask HN: What is your blog and why should I read it?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=36575081" rel="noopener noreferrer"&gt;Ask HN: Could you share your personal blog here?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And on top of this, a lot of blogs will have a &lt;a href="https://indieweb.org/blogroll" rel="noopener noreferrer"&gt;blogroll&lt;/a&gt;. Mine is &lt;a href="https://www.unsungnovelty.org/about/#blogroll" rel="noopener noreferrer"&gt;here&lt;/a&gt;. That is an interesting way to find inspirations and interests of blogs you follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  I don't have a blog. How do I start one?
&lt;/h2&gt;

&lt;p&gt;I would also recommend you to start writing somewhere. Bear blog, Medium or dev.to will all give you a good amount of audience. It will help you to see if blogging is indeed something you would like to do. And if you are still here, I would recommend static site generators and hosting it in a custom domain. Just like writing, you can experiment hosting part with Gitlab or Github pages. Then see if it is something you want to invest in or not. Custom domains will give you more control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blogging starter pack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gohugo.io/" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Main reason for choosing Hugo is that it is a single package. Install the package and you don't need any other dependencies for the website itself. Your post can just be HTML &amp;amp; CSS without having to use pip or npm. That is pretty important to me. While I currently use npm for Tailwind CSS, I am in the process of writing a css only version. The ability to do that is important to me. The Go templating language which Hugo uses gives you enough power to do loops and other things as well. Another reason is Hugo has first class support for most managed hosting solutions like Gitlab and Github pages or Netlify. It is pretty straight forward. Their documentation is alright but needs a bit of getting used to. But there are ton of articles all over the internet when you want to setup features. These are good enough reasons for me to use Hugo. But I have heard good things about 11ty, Astro and Pelican.&lt;/p&gt;

&lt;p&gt;I have been using Netlify since I started this blog. They are pretty cool. You can also use Gitlab or Github pages as well. Sourcehut does provide a hosting solution for static sites with the condition that you cannot add &lt;a href="https://srht.site/limitations" rel="noopener noreferrer"&gt;tracking scripts to the website&lt;/a&gt;. I am not sure if this includes analytics. It probably does. I haven't got the time to investigate this which is why I haven't moved to Sourcehut pages. I am a big fan of Sourcehut and Drew and intend to move my code there in the future. But if this is true, that kind of sucks.&lt;/p&gt;

&lt;p&gt;Analytics in itself is not bad. It helps you know where the audience are and understand your writing quality among other things. In fact, I use a client side analytics provider like &lt;a href="https://www.goatcounter.com/" rel="noopener noreferrer"&gt;goat counter&lt;/a&gt; specifically for this. You can just block my analytics script if you care about it. There are no PII collected and the analytics itself are basic. So there is no harm for anyone. But analytics like Google Analytics are bad. Punishing everyone for this seems unfair. Anyways, his house his rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blogs and blogging are not going anywhere
&lt;/h2&gt;

&lt;p&gt;In short, blogs and blogging are not going anywhere. There will be more posts like this which encourages you to start blogging just like posts which declares it's death. I hope the encouraging posts inspire more people to create a blog and to start writing. And I hope that number is higher than the people who didn't start a blog because they kept seeing it's dead.&lt;/p&gt;

&lt;h2&gt;
  
  
  More reading
&lt;/h2&gt;

&lt;p&gt;Cloud cannon has this wonderful series of posts which talks about static site generators and other things before and after Jekyll. I would like to think that SSG's evolution is interlinked with blogging and personal websites in a lot of ways. You will love the series. Check it out.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cloudcannon.com/blog/ssg-history-1-before-jekyll/" rel="noopener noreferrer"&gt;https://cloudcannon.com/blog/ssg-history-1-before-jekyll/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References and links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chrismcleod.dev/blog/blogging-is-where-its-at-again/" rel="noopener noreferrer"&gt;https://chrismcleod.dev/blog/blogging-is-where-its-at-again/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ribbonfarm.com/2024/10/10/ribbonfarm-is-retiring/" rel="noopener noreferrer"&gt;https://www.ribbonfarm.com/2024/10/10/ribbonfarm-is-retiring/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blog</category>
      <category>blogging</category>
      <category>hugo</category>
    </item>
    <item>
      <title>A Linux distro recommendation framework and my picks for 2024</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Mon, 22 Jan 2024 04:35:10 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/a-linux-distro-recommendation-framework-and-my-picks-for-2024-45ob</link>
      <guid>https://dev.to/unsungnovelty/a-linux-distro-recommendation-framework-and-my-picks-for-2024-45ob</guid>
      <description>&lt;p&gt;&lt;em&gt;"Which Linux distro should I use?"&lt;/em&gt; Is a recurring question people ask without an end in sight. I have been hearing this for more than a decade at this point. So I decided to share my framework/checklist for choosing a Linux distro along with my recommendations. This way, even if my recommendation doesn't fit someone's needs, they still can find one that suits them. The below recommendations are for desktop linux and NOT server side. Although some of them below can be used for both. Do keep this in mind. And most importantly, this is based on my experience personally and professionally. This means my recommendations might not make sense for everyone. Which is also why I am not just writing a review of distro but thought process and a framework I have behind it. Use it and ditch my recommendations if it doesn't make sense to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is this for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;People who are doing Desktop computing (not servers)&lt;/li&gt;
&lt;li&gt;If you are the IT guy on work or for your family/friends&lt;/li&gt;
&lt;li&gt;New and Old people alike. Even if you are 60+ years old folks&lt;/li&gt;
&lt;li&gt;Developer or power users&lt;/li&gt;
&lt;li&gt;Users wanting to use Linux for professional use cases&lt;/li&gt;
&lt;li&gt;Users wanting to use Linux for personal use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who is this NOT for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Designers who are stuck with some proprietary tools.&lt;/li&gt;
&lt;li&gt;People who are NOT ready to learn and change&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vocabulary
&lt;/h2&gt;

&lt;p&gt;Terminologies which you want to be aware of.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Distro&lt;/td&gt;
&lt;td&gt;Short for distribution. Linux is just a kernel. In order for it to be a complete Operating system, it needs other interfaces like GUI, bootloader etc. A Linux distro is a full operating system which bundles all the things that is necessary to make it a full operating system. With Linux kernel as it's brain. Eg; Debian, Linux Mint are Linux distros.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community based distro&lt;/td&gt;
&lt;td&gt;By community based, I mean a distro which is led by benevolent dictator for life (BDFL) or a small team. Without being controlled by a corporate. It will be community funded &amp;amp; listens to the community. Linux Mint, Elementary are good examples of this.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Community driven distro&lt;/td&gt;
&lt;td&gt;Projects which are driven and directed by the community where the entire process is community oriented. Arch Linux and Debian are good examples of this. Anyone can jump right into the project and make a contribution. Community driven are the best kind of Linux distros. The experience as a user is wholesome when you need help or when you want to get involved. But most importantly, disruptive changes which go against the community will be less.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux Derivative (Based on Distro)&lt;/td&gt;
&lt;td&gt;Distro's which are based on other Linux distros are based on distros. Ubuntu is based on Debian linux. Linux Mint is mainly based on Ubuntu. This means they could be using packages, tools or other infrastructure. Things which are impossible or extremely hard to replace. Eg; Ubuntu depends on Debian's packages for Ubuntu Linux.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent distro&lt;/td&gt;
&lt;td&gt;Linux distro which do not dependent on other Linux distros can be called independent distros. Arch Linux, Debian, Void Linux and Alpine Linux are examples of this.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upstream provider&lt;/td&gt;
&lt;td&gt;Upstream means the source of a package. Mozilla will be upstream provider of binaries for the Firefox web browser. Which is then packaged and distributed by a particular distribution like Linux Mint or Ubuntu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Downstream provider&lt;/td&gt;
&lt;td&gt;Usually the packager or the Linux distribution which takes the upstream binary provider/source and then  packages them for a particular Linux distro. Eg; Linux Mint uses Firefox binaries to package the Firefox browser for Linux Mint users.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Point release distro&lt;/td&gt;
&lt;td&gt;Point release distributions are Linux operating systems which releases major versions on a particular interval. Like six months or 12 months. This means packages on these distros are thoroughly tested but frozen against a particular version. You will have to wait for certain interval to get updated packages. Only security bugs and important packages gets updates in between when necessary. Point release distros is meant to ensure stability for server side. Debian, Ubuntu, Fedora, Linux Mint, Pop OS! are all examples of point release distribution. Eg; Ubuntu 22.04 is a point release for Ubuntu.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rolling release distro&lt;/td&gt;
&lt;td&gt;Unlike point release distros which releases new major version in a regular interval like 6 months, rolling releases doesn't have a major version release. You install it onces and you will get continous updates for upstream packages and OS. This means latest features, up-to-date development environment if you are a developer. No PPA, sideloading apps from AppImages, binary etc. Arch Linux, PCLinuxOS, OpenSuse Tumbleweed and Void Linux, are examples of this.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repos of a distro (Unstable/Testing/Stable)&lt;/td&gt;
&lt;td&gt;Repos for the packages in a distro means a package is being tested against a particular distro. Usually a distro has unstable, testing and stable repositories. This doesn't mean the package itself is stable or unstable. Meaning, if Firefox v110.0.1 is in unstable repos of a distro, it doesn't mean Firefox is unstable. It just means the distro hasn't tested Firefox v110.0.1 against them to ensure it is working properly.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;First and foremost, use whatever that solves your problem. Any reasons to choose a distro should be on top of this. I have deployed Linux workstations at work, to friends &amp;amp; family. My recommendation is based on my experience and my understanding. We have like 300+ Linux distros. Let's not fight over which one is the best.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;If possible, choose independent distros which doesn't depend on other distros. This helps with long term usability, experience and helps avoid unwanted surprises. For example Debian is an independent distro. While Ubuntu depends on Debian for packages etc. Another example is Linux Mint is based on Ubuntu. But they also have an edition (LMDE) which is based on Debian precisely to answer the question. What if Ubuntu stop existing tomorrow?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;For personal computing, choose rolling release so that you always have &lt;del&gt;bleeding edge&lt;/del&gt; up-to-date &lt;strong&gt;stable&lt;/strong&gt; versions of packages from upstream. It's almost 2024 and we should be using patched up software which are the latest. NOT software which cherry picks patches from latests stable packages to your old buggy software cos you use a point release and the software version is like 1 year old.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Use a community based or community driven distro instead of a corporate backed one for long term usability. Snap enforcement and CentOS being discontinued are some simple examples of why community oriented/driven projects are better. There are more reasons other than just ethos to use a community based/driven distro. If you are looking for desktop computing, a community one will always stand tall. So if you can't one that is community driven, at least use one that is community oriented.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;Distro should have a good and large community. This helps with the long term use cases and fixing things when you are stuck.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Hardware IS IMPORTANT!
&lt;/h2&gt;

&lt;p&gt;Before naming names, we need to talk about Linux &amp;amp; hardware. Linux has a notorious name for being able to work on anything. I say notorious cos people think it is great thing. It is most often NOT. Sure, it works. But not 100%. You will miss something or the other. It will be either WiFi, Bluetooth, audio or something else. And you will be blaming the community, the distro or Linux itself for the sub par experience. And that is not fair. Your windows laptop and macbook &lt;em&gt;JUST WORKS&lt;/em&gt; because of not just the software. But also the hardware, which is supported. Use a supported hardware to use Linux. There are Thinkpads, Dell XPS &amp;amp; System76s in the world right now. Please don't use laptops and hardware from companies like Razer which has bad compatibility with Linux. And please... don't complain that Linux is bad after that.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommendations
&lt;/h2&gt;

&lt;p&gt;I have been using Linux as a primary operating system for the last 14ish years. And since then I have used Ubuntu (Kubuntu, Lubuntu and Xubuntu included), Debian, Linux Mint, Fuduntu(R.I.P), Fedora, Elementary, MX Linux, Manjaro, Kali Linux, ParrotSec, NixOS, Arch Linux and many more. Only few distributions stuck with me for longer periods as a primary operating system. &lt;a href="https://en.wikipedia.org/wiki/Fuduntu" rel="noopener noreferrer"&gt;Fuduntu&lt;/a&gt;, Linux Mint, Fedora, Debian and Arch Linux. Of these, I have only found Fuduntu, Linux Mint and Arch Linux suitable for "I could use this forever" category. But &lt;a href="https://web.archive.org/web/20130518181720/http://www.fuduntu.org/blog/2013/04/28/project-ends/#comment-935" rel="noopener noreferrer"&gt;Fuduntu is dead&lt;/a&gt;. Leaving me with Linux Mint and Arch Linux as my recommendations. These two can fill in for any of your desktop use cases.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distro&lt;/th&gt;
&lt;th&gt;Based On&lt;/th&gt;
&lt;th&gt;Release Model&lt;/th&gt;
&lt;th&gt;Rolling release&lt;/th&gt;
&lt;th&gt;Independent Distro&lt;/th&gt;
&lt;th&gt;Community Based&lt;/th&gt;
&lt;th&gt;Community driven&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arch Linux&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Rolling release&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux Mint&lt;/td&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;Point release&lt;/td&gt;
&lt;td&gt;✗&lt;/td&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;h3&gt;
  
  
  Honorable mentions
&lt;/h3&gt;

&lt;p&gt;These are distros I have heard good things about but have not used enough or have not used enough as my primary driver.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Distro&lt;/th&gt;
&lt;th&gt;Based On&lt;/th&gt;
&lt;th&gt;Release Model&lt;/th&gt;
&lt;th&gt;Rolling release&lt;/th&gt;
&lt;th&gt;Independent infra&lt;/th&gt;
&lt;th&gt;Community Based&lt;/th&gt;
&lt;th&gt;Community driven&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Void Linux&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Rolling release&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alpine Linux&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Point release&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html#_repositories_releases_and_mirrors#edge" rel="noopener noreferrer"&gt;via edge branch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PopOS&lt;/td&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;Point release&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NixOS&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Point release&lt;/td&gt;
&lt;td&gt;via unstable channel&lt;sup&gt;*&lt;/sup&gt;
&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debian&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;td&gt;Point release&lt;/td&gt;
&lt;td&gt;via unstable repo&lt;sup&gt;*&lt;/sup&gt;
&lt;/td&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;&lt;sup&gt;*&lt;/sup&gt; &lt;em&gt;Again, unstable/edge here just means it's not tested against NixOS/Debian or Alpine. Not that the software is unstable. It is the latest stable package from upstream provider/developer. As it was intended by the developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Important Note&lt;/em&gt;&lt;/strong&gt;: &lt;em&gt;A lot distros can be be made into a rolling release by using their unstable/edge repo/branches/channels. They are not always the primary focus of the distro. They exist mainly for development. You don't have tier-1/first class support needed if you are using it for work or serious stuff. Which is why I don't recommend it for daily use. Which is why I recommend traditional rolling releases like Arch Linux.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Linux Mint?
&lt;/h3&gt;

&lt;p&gt;Linux Mint is my pick for a point release. If you are a beginner to Linux or if you are recommending Linux to others, always pick Linux Mint. The distro works out-of-the-box (OOTB) and passes the test of time. Usually for Ubuntu, things work out of the box initially. Then as updates and other things ensue, it starts throwing errors. Linux Mint don't. It always surprises me because Linux Mint is based on ubuntu. But it doesn't have all the problems ubuntu has.&lt;/p&gt;

&lt;p&gt;Linux Mint is IT people's favourite as well. I have installed it for my friends and family. And never have I come across an issue. I installed Linux Mint on my Father's laptop like since Linux Mint 19.x. And I have updated them a ton of times. Nothing ever broke. And have once upgraded from v19-&amp;gt;v20 through CLI. I was blown away with the amazing walkthrough even on CLI. They guide you well. I am going to give GUI a try for 20-&amp;gt;21 upgrade. And also as someone who was forced to use Debian based distro for work, I thought I will choose Ubuntu. Oh boy, was it a mistake! The snap is such a performance hog. And system in general uses more resources. And most importantly, it throws errors from time to time. &lt;/p&gt;

&lt;p&gt;Since I have the freedom, I have switched to Linux Mint for my work computer from ubuntu. And I am really liking it. I see approximate 20% less CPU utilisation and 1-2GB of ram usage reduction since I have moved to Linux Mint from ubuntu. The main reason could be firefox snap. But also, now that canonical is asking for us to pay for security updates in LTS, you really don't know where this will reach. Being a ubuntu compatible distro, Linux Mint has a great advantage in this scenario. The only problem could be that some security policies of organisations might not let you use Linux Mint for work. But if you have the power or freedom, I recommend Linux Mint for the best experience.&lt;/p&gt;

&lt;h4&gt;
  
  
  Nix with Linux Mint
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: Learning curve is high for understanding Nix and nixpkgs. But if you are interested in sticking with it, I have listed resources for you.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can use Nix with Linux Mint if you want latest stable versions (&lt;a href="https://zero-to-nix.com/concepts/channels" rel="noopener noreferrer"&gt;using nixpkgs unstable channel&lt;/a&gt;) but also the reassurance of a stable distro. You get latest stable version of packages and keep the assurance or Linux Mint.&lt;/p&gt;

&lt;p&gt;A good starting point is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://leward.eu/using-nix-on-linux-mint/" rel="noopener noreferrer"&gt;https://leward.eu/using-nix-on-linux-mint/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nixos.org/manual/nixpkgs/stable/#overview-of-nixpkgs" rel="noopener noreferrer"&gt;https://nixos.org/manual/nixpkgs/stable/#overview-of-nixpkgs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zero-to-nix.com/" rel="noopener noreferrer"&gt;https://zero-to-nix.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zero-to-nix.com/concepts/channels" rel="noopener noreferrer"&gt;https://zero-to-nix.com/concepts/channels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Arch Linux?
&lt;/h3&gt;

&lt;p&gt;Arch Linux is my pick if you are a power user or a developer. Or someone who is using Linux in 2024 and beyond. To be honest, if you are coming from point release distros like ubuntu, Fedora or Debian, Arch will take some time to get used to. But it is a skill issue which you can change. Arch Linux is marketed as a DIY distro. So they expect users to take responsibility in setting and maintaining it. Which is not the case with most distros. IMO this is why there is a misunderstanding from users expecting Arch Linux to do things for them which they get in other distros. For example, the stability of the installation solely depends on you. This might sound scary. But after wasting more than almost half a decade of my life under point release distros like Ubuntu &amp;amp; Debian, Arch Linux is a breath of fresh air. It's easier to fix. Rolling release means you always have the latest &lt;em&gt;stable&lt;/em&gt; packages. Arch also has one of the biggest collection of packages/apps. Whatever they don't have in their official repos, they have it in AUR repository. AUR hosts any proprietary packages I might need for work or software development. You can extend it by &lt;a href="https://wiki.archlinux.org/title/Nix" rel="noopener noreferrer"&gt;using Nix with Arch Linux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then there is the Arch Wiki. I have Arch Linux specific documentation for most thing I might want to use: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do I setup nodejs in Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Node.js" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Node.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How do I make Arch Linux more secure? - &lt;a href="https://wiki.archlinux.org/title/Security" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Security&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hmmm what about AWS and Arch? - &lt;a href="https://wiki.archlinux.org/title/Arch_Linux_AMIs_for_Amazon_Web_Services" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Arch_Linux_AMIs_for_Amazon_Web_Services&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;I wonder how I use Zig - &lt;a href="https://wiki.archlinux.org/title/Zig" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Zig&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;System maintainence - &lt;a href="https://wiki.archlinux.org/title/System_maintenance" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/System_maintenance&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;What about all the programming languages packaged for Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Programming_languages" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Programming_languages&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Nix on Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Nix" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Nix&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since it is community driven, Arch is what the community make it out to be. You can be as involved as you want to be. They are the perfect combination of enough flexibility and enough convenience for me. They are a practical bunch with an amazing culture. Easy to get involved and make a difference. Check out &lt;a href="https://whatcanidofor.archlinux.org/" rel="noopener noreferrer"&gt;https://whatcanidofor.archlinux.org/&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Myths about Arch Linux
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;But Arch community is rude&lt;/strong&gt;: Arch Linux is a do-it-yourself distro. They expect you to read stuff. You don't complain that your IKEA furniture is not already assembled, do you? They DO NOT appreciate &lt;a href="https://slash7.com/2006/12/22/vampires/" rel="noopener noreferrer"&gt;help vampires&lt;/a&gt;. Help vampires are people who do NOT put any effort in trying to solve the problem at hand. But expects others to spoon feed it to you. They suck the blood of the community like a vampire. Hence the name. I really wish more communities are as direct as Arch folks. This is an IT guy's dream. Actually, Arch folks have softened in recent years if not anything. I have observed that as long as you try your level best, the community will &lt;em&gt;guide&lt;/em&gt; you. Arch is helpful and tolerant to mistakes. Intolerant to help vampires.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Arch is hard!&lt;/strong&gt; : It is not. As a do-it-yourself distro, it does have walls of text for you to read which can be intimidating. But Arch wiki have intructions clearly explained in step by step manner, about any topic. The only problem is getting used to wall of texts which is not the case for a lot of other distros. But the initial time invested will reap rewards in the longer run. Whatever issue you have, all you have to do is go to &lt;a href="https://wiki.archlinux.org/title/Main_page" rel="noopener noreferrer"&gt;Arch Wiki&lt;/a&gt; and search for it. I have used Ubuntu, Debian, Fedora for years as my primary distro. They give initial jumpstart for a functional distro. But as time goes by, they are often a PITA to maintain. I use Arch as my main distro not to say I use Arch BTW, but because I am extremely lazy. I want to set things up and it should just work. And if it breaks, it should be easy to fix. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not to mention, Arch now have an &lt;a href="https://wiki.archlinux.org/title/Archinstall" rel="noopener noreferrer"&gt;official guided TUI installer&lt;/a&gt; bundled with Arch .ISO image. Terminal based installer which sets up Arch for you by just answering serveral questions. It cannot get easier than that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I won't use Arch since it is not stable:&lt;/strong&gt; My installation is 4-5 years old. Haven't broken anything. Since the distro is DIY, your installation will be unique. This is not the case for most Linux distros which provides a fixed set of images to choose from. That means those distros have specific settings and configurations upon which you make changes. This makes it easier to debug or get help from. But on Arch you set up the packages you want. The components, configurations or settings to use. I setup full disk encryption completely on my own by reading the Arch Wiki. While installing Arch for the first time on Arch while installing it. This means, some of the combinations like how grub or disk encryption and partitions are done might be unique. If you don't remember this, it can be challenging to ask for help from the community. This means the stability of the installation depends on the things you install and how you set it up. While this might sound intimidating, it really is not hard. Just time consuming initially when you do it the first time. &lt;strong&gt;&lt;em&gt;I use Arch not just because I can tinker. But because I am lazy.&lt;/em&gt;&lt;/strong&gt; With Arch, I have become lazy because nothing ever breaks&lt;sup&gt;*&lt;em&gt;&lt;/em&gt;&lt;/sup&gt;. But if it breaks, I have found Arch is easier to fix. If manual intervention needed, Arch News which is on the front page of archlinux.org will have instrutions. Simple instructions &lt;a href="https://archlinux.org/news/switch-to-the-base-devel-meta-package-requires-manual-intervention/" rel="noopener noreferrer"&gt;like this Arch news&lt;/a&gt;. This is where DIY kicks in. I am expected to do this. Arch is not tricking you into something and giving something else. It also has one of the most vanilla Linux experience. They try and ship latest stable versions of packages with least amount of tweaks. While kernel in other Linux distro's are tweaked, Arch Linux has the vanilla kernel shipped it as it is, *as much as possible. Same things goes for the packages. This means, anything you see is how the developer(s) of the software intended it to be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;sup&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/sup&gt;&lt;em&gt;Update:&lt;/em&gt;** &lt;em&gt;As I was finishing up this draft, my Arch linux installation broke for the first time. And the issue was with an update. But it was easy to fix. But there was few hours of down time. Why am I saying this? Because it doesn't break often but it does break. But also, it's not any pretty on point releases. And they are harder to fix from my experience. I still recommend 4-5 years of uptime with minimum maintenance over regular issues in a point release. Not to mention, buggy interface makes me angry. I have been pissed many a times with ubuntu. Not a good way to interact with software or your OS.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Myths from Linux ecosystem
&lt;/h2&gt;

&lt;p&gt;There are some myths I would like to debunk as they are no longer relevant or is a misunderstanding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware doesn't matter for Linux
&lt;/h3&gt;

&lt;p&gt;While this is true for the vast majority, having a well supported hardware makes all the difference. Razer laptops for example are notorious for bad Linux support. So if you are installing Linux on a Razer, you will probably have a sub-par experience. Little things like mousewheel or something won't work. But Thinkpads have an amazing level of support and everything works. Firmware updates and every other feature. It makes all the difference. So if you want a good experience, choose a hardware which has good Linux support.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rolling release distros like Arch Linux are bleeding-edge and unstable
&lt;/h3&gt;

&lt;p&gt;Rolling release means they provide the latest stable versions (and NOT development branches) of a package/software. This means you get the latest &lt;em&gt;stable&lt;/em&gt; version of a software with latest features and the latest available security patches. Rolling release === bleeding edge comes from an era where development was slow and patches took anywhere between 3-12months to land. This meant more testing was needed. Another thing is Linux historically was for servers. Coupled with patchy software at the time, it made sense to use a point release and test them they way it was done. But most of that has changed. We have continuous development cycles. By using a point release distro, you are compromising on features and security. Which is unnecessary. &lt;/p&gt;

&lt;p&gt;In fact, what point-release distros do is backport fixes. This means they cherry pick fixes and tweaks from the latest version of a software (say Firefox v122). Then they apply that fix to an old version (say Firefox v116). This has in the past created security bugs. And this will create more bugs. But with rolling release, all you have to do is update your package. This also means different point-release distros could bring fixes in different way. Duplicating the effort.&lt;/p&gt;

&lt;p&gt;People circumvent all of this by using PPA's or Snap, Flatpaks or AppImage which are all trying to provide what rolling release already provides. They are also doing this with added abstraction and bloat (in the name of marketing BS called sandboxes and security) which effects performance and security. IMO, Snap, Flatpaks and AppImage are the answer to people wanting rolling release inside a point release distro. They also wants the promised stability people usually talk about when it comes to point release distros. Which is all there in rolling release. But rolling release still have a bad rapport.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confusion about Distro's repos (Stable, Testing, Unstable) and upstream package branch (Stable/development or testing)
&lt;/h3&gt;

&lt;p&gt;The new users get confused when they hear software packages are in stable/testing/unstable repo. They are often compared or thought as stable and unstable repos of development vs stable branches of the upstream software. Like branches you see in github or gitlab. But in reality when a package is in a distro's particular repo, for example testing, the package is being tested against the distro to see if it is working as expected. This has nothing to do with stability of the package/software itself. They are making a stable version of a software (say Firefox v122) go through unstable, testing and finally to stable repo of their distribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why not Debian?
&lt;/h3&gt;

&lt;p&gt;They are community driven and independent. Why am I not recommending it? Because I have used Debian for 2 years and its extremely stable but extremely annoying. If you are doing anything more than browsing and spreadsheets, you will definitely need to patch up things with PPA and what not. Your software are at times older than a year. 2-3 generations of GNOME DE major releases behind. You will stick with those annoying bugs you might interact with on a daily basis for months if not years before you get the fix.&lt;/p&gt;

&lt;p&gt;But if you are fascinated by their community and I approach. I recommend you to give it a go. And maybe use nix for latest packages (using unstable nix channel) can solve a lot of the issues?&lt;/p&gt;

&lt;p&gt;You can also make Debian a rolling release by using it's unstable branch. I know people do this but I was told there are some catches. So proceed forward after reading up about this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not Ubuntu?
&lt;/h3&gt;

&lt;p&gt;I started writing this blog on 5th April and on 15th April, my microphone stopped working on my Ubuntu work machine. Was working fine on Arch. I haven't updated anything and it still broke. I am suspecting something Snap since I haven't had time to investigate. Even if it is not, the fact that it breaks like this when Linux Mint and Arch Linux doesn't proves my point. One of the reasons why people use corporate backed Linux distro is reliability. Even that cannot be promised by ubuntu. This is just my latest experience with Ubuntu messing up.&lt;/p&gt;

&lt;p&gt;They are notoriously messed up for a Linux newbie to play with. They are not optimal. They don't always work as expected. Previously, I &lt;em&gt;almost&lt;/em&gt; didn't get my current job because I couldn't get my microphone to work for an interview call. Arch to the rescue again. The fact that this is still happening is messed up. Linux Mint or Arch doesn't have these problems. Since Linux Mint is a Ubuntu derivative but works as expected shows this is a problem with Ubuntu and NOT Linux.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not Fedora?
&lt;/h3&gt;

&lt;p&gt;They are IBM backed test horse for RHEL. I have used Fedora for my personal computer. They are technically good. It is just not my cup of tea for personal computing. The community doesn't have a say in anything and the way things are going, there is nothing stopping from pulling another centos. Or something like Snap by Canonical.  &lt;em&gt;When you are looking for a personal computing distro, you are looking or should be looking for much more than the technical aspect&lt;/em&gt;. Besides, most distros offer the same things. Arch has more packages, more flexibility and a better community aspect. So why should I change?&lt;/p&gt;

&lt;p&gt;Another thing is the reason why Fedora is liked techincally is because they have the latest packages every 6 months. That without the 6 months wait &lt;em&gt;IS Arch Linux&lt;/em&gt; by default. So I am not seeing anything that is a standout feature in it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not OpenSUSE?
&lt;/h3&gt;

&lt;p&gt;OpenSUSE is one beast that I have not used all my life. I have tried installing it back in the day a couple of times. But it never worked for some reason. So I don't think I have any comments to make about them. I have always heard only good things about them. And from what I have heard, openSUSE brilliant. Give it a try. My intention is to share my experience and let you take your own decision.&lt;/p&gt;

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

&lt;p&gt;There you have it! Use Arch or Linux Mint. Mix them up. Recommend these to your friends. It should cover most of the usecases for personal desktop computing. I highly recommend Arch Linux for desktop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux land
&lt;/h3&gt;

&lt;p&gt;On Linux, Personal recommendation is Arch Linux or Linux Mint. But Nix package manager and Nixpkgs is something I am exploring now and is seeing absolutely great experience. I guess you can try Nix with any OS (It's cross platform. Runs on Linux, Mac and FreeBSD(partially)). Instead of using NixOS which can be completely different, you can use Nix the package manager and use Nixpkgs with your linux distro. Its like best of both worlds.&lt;/p&gt;

&lt;h3&gt;
  
  
  BSD
&lt;/h3&gt;

&lt;p&gt;My personal journey is making me lean towards BSD for the future. The immutable distro people keeping talking about? That is BSD by default without any extra layer of bloat. There is a distinction between BSD OS and packages. Unlike Linux which needs different projects developed by different teams in different time frames. A BSD is developed by the same team, together and the vertical integration is just better. On top of it, they have jails for containers and nix is already there on FreeBSD. I am slowing moving away from Linux to BSD one step at a time.&lt;/p&gt;

&lt;p&gt;They are rich in culture and technology. In 2024, one of my goal is to explore BSD's like FreeBSD, OpenBSD, DragonflyBSD and NetBSD more.&lt;/p&gt;

&lt;p&gt;Some reads and sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unixsheikh.com/articles/technical-reasons-to-choose-freebsd-over-linux.html" rel="noopener noreferrer"&gt;https://unixsheikh.com/articles/technical-reasons-to-choose-freebsd-over-linux.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unixsheikh.com/articles/freebsd-is-an-amazing-operating-system.html" rel="noopener noreferrer"&gt;https://unixsheikh.com/articles/freebsd-is-an-amazing-operating-system.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd.html" rel="noopener noreferrer"&gt;https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.unitedbsd.com/" rel="noopener noreferrer"&gt;https://www.unitedbsd.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vermaden.wordpress.com/" rel="noopener noreferrer"&gt;https://vermaden.wordpress.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;As always. If you have any feedback. Reach out to me at &lt;code&gt;unsungnovelty at protonmail dot com&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>archlinux</category>
      <category>productivity</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>OSS projects and Non-profit 501(c)(3) vs Non-profit 501(c)(6)</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sun, 28 May 2023 14:14:17 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/non-profit-501c3-vs-non-profit-501c6-and-oss-projects-2d80</link>
      <guid>https://dev.to/unsungnovelty/non-profit-501c3-vs-non-profit-501c6-and-oss-projects-2d80</guid>
      <description>&lt;p&gt;The operational and legal side of open source software (OSS) projects are always boring to us programmers and end users in general. Which is why there is a lot misunderstanding on the expectations from the non-profit foundations which runs these OSS projects. Just like OSS licenses, the foundations which runs these projects are often misunderstood. Today I will be talking about two of the most common non-profit types which are used in OSS projects. The Non-profit 501(c)(3) and Non-profit 501(c)(6). These are non-profit organisations which are registered in the US. Other countries will probably have an equivalent to these. But we will be focusing on these two. This is because most big OSS projects uses either of these non-profit. We will talk what to expect from the OSS projects run by either of these non-profits for better understanding. This post is meant to get you up to speed with it and not supposed to go deep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should you care?
&lt;/h2&gt;

&lt;p&gt;The reason why you should care is because so far in the technological race, the tech community has always been looking at things only in the eyes of technical merit. The motivation and agenda of a project has always been an after thought. But we are increasingly reaching a point where a technology is becoming irrelevant. Because the OSS projects which is meant to be community oriented and the company / governing body which steers it is behaving like for-profit organisations. Just like open licenses, the governing bodies of an OSS project is unclear to many. So this is a good time to understand the most common two types of non-profit entities used in OSS projects. This helps us set expectations when we invest time and energy to these. This doesn't mean either of them are good or bad. In fact, there can be bad projects in both these types. But there is a reason why either of them is chosen. The type gives you a general idea about the direction a project is targeting for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a non-profit 501(c)(3)?
&lt;/h2&gt;

&lt;p&gt;A non-profit 501(c)(3) is a tax-exempt status for an organisation which are for public charity or for the public good. Their revenue is 100% tax exempt and they are more about the community with respect to OSS projects. The individual community members hold a lot more power or voice on the project. And any individual should be able to get involved in a governing role based on merit irrespective of the financial status.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of non-profit 501(c)(3)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.python.org/psf-landing/" rel="noopener noreferrer"&gt;Python Foundation (PSF)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ziglang.org/zsf/" rel="noopener noreferrer"&gt;Zig Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://freebsdfoundation.org/" rel="noopener noreferrer"&gt;FreeBSD foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://signalfoundation.org/" rel="noopener noreferrer"&gt;Signal foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.eff.org/about" rel="noopener noreferrer"&gt;Electronic Frontier Foundation(EFF)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why should end users prefer non-profit 501(c)(3) projects?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;They are community oriented.&lt;/li&gt;
&lt;li&gt;They are for public interest or public charity.&lt;/li&gt;
&lt;li&gt;They are more likely to listen to the end users.&lt;/li&gt;
&lt;li&gt;Usually end users are more welcome to obtain individual membership and to run for leadership roles.&lt;/li&gt;
&lt;li&gt;Membership to get involved are free or affordable for community individuals depending on the foundation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is a non-profit 501(c)(6)?
&lt;/h2&gt;

&lt;p&gt;A non-profit 501(c)(6) organisation is an organisation which is membership based. Trade organisations or business leagues are the two types of groups which commonly uses them. They work for the common-interests of the members involved. The main difference between a 501(c)(3) and 501(c)(6) is that 501(c)(6) are not for public charity. They work for the common interests of it's members.&lt;/p&gt;

&lt;p&gt;In OSS context, this means that they work for corporate organisations who are members. Some non-profit 501(c)(6) does accept individuals as members. But for most 501(c)(6) non-profits, individual members (if they accept individuals to hold membership at all) hold less power. They are most of the time &lt;em&gt;"decorative"&lt;/em&gt; IMO. This is because when it comes to steering the organisation's direction, individual membership hold little to no power.&lt;/p&gt;

&lt;p&gt;A non-profit 501(c)(6) OSS project is no different than when a company run an OSS project. Like reactjs from facebook. Difference is, instead of a single organisation running the project, there are bunch of member organisations doing the same in a collaborative manner. Usually community is heard when an outrage from the community happens.&lt;/p&gt;

&lt;p&gt;The common issue I have seen is, when end users see &lt;em&gt;non-profit&lt;/em&gt; in the context of OSS projects, they usually think 501(c)(3) and NOT 501(c)(6). This is made worse when non-profit 501(c)(3) foundation websites mention it on the main page more often when compared to 501(c)(6) foundation's page. You really have to dig to multiple pages or go here and there to find a text saying &lt;code&gt;non-profit 501(c)(6)&lt;/code&gt;. I have observed the &lt;code&gt;non-profit 501(c)(6)&lt;/code&gt; text being removed from the main page and put inside some links where it is hard to find. At least that has been my experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of non-profit 501(c)(6)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linuxfoundation.org/" rel="noopener noreferrer"&gt;Linux Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://foundation.rust-lang.org/" rel="noopener noreferrer"&gt;Rust Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://openid.net/foundation/" rel="noopener noreferrer"&gt;OpenID Foundation&lt;/a&gt; (With &lt;a href="https://openid.net/foundation/sponsoring-members/" rel="noopener noreferrer"&gt;members&lt;/a&gt; like google and microsoft. Powers "Trusted publishers" in PyPi which is governed by &lt;a href="https://www.python.org/psf-landing/" rel="noopener noreferrer"&gt;PSF&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What should end users be aware of non-profit 501(c)(6)?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;They work for the common interests of the members.&lt;/li&gt;
&lt;li&gt;501(c)(6) foundation don't always accept membership from individuals. This means an end user might not have a say in anything with regards to the project's major decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see the Rust Foundation doesn't allow membership from individuals yet - &lt;a href="https://foundation.rust-lang.org/info/become-a-member/" rel="noopener noreferrer"&gt;https://foundation.rust-lang.org/info/become-a-member/&lt;/a&gt;. While the linux foundation's individual membership doesn't have any power. They get a lifetime &lt;code&gt;@linux.com&lt;/code&gt; email address and some discounts from the certification courses etc. None of it gives anything to do with the direction of the linux foundation itself. While certain 501(c)(6) accepts individual membership, the roles and powers are over powered by big corporations. Over all, this is because non-profit 501(c)(6) is not designed for community. It is for the likes of business leagues or trade organisations. This just means non-profit 501(c)(6) is working the way it is intended to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Certain observations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why hasn't year of linux desktop happened?
&lt;/h3&gt;

&lt;p&gt;Simply because linux foundation's members don't care. Most of them are providing services for enterprises. There are only very few consumer facing members in it. Check them out yourself - &lt;a href="https://www.linuxfoundation.org/about/members" rel="noopener noreferrer"&gt;https://www.linuxfoundation.org/about/members&lt;/a&gt;. And majority of the GUI or any consumer end related projects are community driven without the support of the linux foundation. But as for FreeBSD, you can see that they have recently been coming out of their shell and focusing a lot on the desktop. The investments directly comes from the foundation. With the limited resources they have, FreeBSD is investing in desktop while not diregarding the server-side. This seems to be a good attempt at trying to balance it out and is motivating to see.&lt;/p&gt;

&lt;p&gt;As for linux, this is probably why &lt;a href="https://www.reddit.com/r/SteamDeck/comments/xkw36b/8_years_ago_linuxs_creator_linus_torvalds_said/" rel="noopener noreferrer"&gt;8 years ago Linus Torvalds mentioned Valve will save linux desktop one day&lt;/a&gt;. Because Valve is one of the few companies which actually have the resources and motivation to improve the end-user side of things. As you can see, Valve is investing heavily to improve the linux gaming ecosystem right now. Proton and &lt;a href="//protondb.com/"&gt;ProtonDB&lt;/a&gt; which makes &lt;a href="https://www.winehq.org/" rel="noopener noreferrer"&gt;Wine&lt;/a&gt; more accessible in Steam / SteamDeck and SteamOS are just some of the examples of it. SteamOS is powered by linux by the way. And this has brought in a huge amount of interest from hardware manufacturers and companies to support linux in their hardware and software/games. linux foundation could've invested in all these long long ago. This is where the difference between Non-profit 501(c)(3) vs Non-profit 501(c)(6) can be seen more vividly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why did rust foundation's trademark policy change happened the way it did?
&lt;/h3&gt;

&lt;p&gt;An explanation could be because rust foundation is a non-profit 501(c)(6). And I mean it in the nicest way possible. The whole messaging sounded like corporate lingo. And OSS users who are not used to it freaked out. I really hope it is a misunderstanding. I hope the rust foundation reverts some of it and listens to the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;The whole point of this post was to give you a glimpse on these two non-profit types. The word &lt;em&gt;"non-profit"&lt;/em&gt; in these two types can be misleading. When I first learned about this difference, it changed the way I see OSS projects. Certain decisions by certain projects made sense or was unsurprising. &lt;a href="https://itsfoss.com/linux-foundation-head-uses-macos/" rel="noopener noreferrer"&gt;Jim Zemlin, the executive director of linux foundation using macos&lt;/a&gt; made sense. This helped me set the expectations from the project(s) accordingly.&lt;/p&gt;

&lt;p&gt;Open Source Software has always been about the community. But it is a brand new world where we have to work with corporate entities now that OSS is global. Setting expectations and understanding how and why things are the way it is, is more important than ever. Hope this post helped learn some of it today.&lt;/p&gt;

&lt;h2&gt;
  
  
  References / Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/501(c)(3)_organization" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/501(c)(3)_organization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/501(c)(6)#501(c)(6)" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/501(c)(6)#501(c)(6)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blogs.gnome.org/jnelson/2014/06/30/the-new-501c3-and-the-future-of-free-software-in-the-united-states/" rel="noopener noreferrer"&gt;https://blogs.gnome.org/jnelson/2014/06/30/the-new-501c3-and-the-future-of-free-software-in-the-united-states/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;As you might have guessed, this is a complex topic. There are more chances for errors and wrong interpretations. If you found anything wrong, kindly drop an mail at &lt;code&gt;unsunsgnovelty at protonmail dot com&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>community</category>
    </item>
    <item>
      <title>initLogs 5: Why write simple code?</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sun, 20 Nov 2022 16:41:29 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/why-write-simple-code-381f</link>
      <guid>https://dev.to/unsungnovelty/why-write-simple-code-381f</guid>
      <description>&lt;p&gt;I recently read a reddit post. I was about someone who's colleague writes complex code over simple code. Unnecessarily I should add. At least as per the post. But that is when it struck me. The reason for writing simple code is the same as it is for simple writing. &lt;/p&gt;

&lt;p&gt;One of the best advices I got about writing was to write simple. You write simple and consumable sentences instead of using fancy words and complex sentences. This helps more readers understand what you are trying to convey. Good writer's work will seem easy to consume. Like &lt;a href="http://paulgraham.com/articles.html" rel="noopener noreferrer"&gt;Paul Graham&lt;/a&gt; who writes about complex topics. Yet looks so simple. It is not simple. But one reason his writing seems easy is because it is simple.&lt;/p&gt;

&lt;p&gt;This is exactly why we should be writing simple code as well. Irrespective of your developer experience. Writing simple code wherever possible helps other people understand it better. Cuts down the debugging time. Writing complex code all the time doesn't make you smart. Just inefficient. Not just for others, but for your future self. When you go back to a simple codebase in future, you would understand it better, debug faster and have less head scratches.&lt;/p&gt;

&lt;p&gt;In short, write simple code wherever possible.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>writing</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Light mode is better for your eyes in most scenarios</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sun, 14 Aug 2022 19:01:00 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/light-mode-is-better-for-your-eyes-in-most-scenarios-4ph5</link>
      <guid>https://dev.to/unsungnovelty/light-mode-is-better-for-your-eyes-in-most-scenarios-4ph5</guid>
      <description>&lt;p&gt;Just like spaces and tabs, we have dark mode vs light mode. Dark mode is definitely the cooler and popular one right now. I don't even remember seeing Spotify out of dark mode now that I think about it. So is dark mode better than light mode?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dark mode is good for your eyes&lt;/li&gt;
&lt;li&gt;Dark mode helps you focus&lt;/li&gt;
&lt;li&gt;Dark mode is good for battery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are some of the promises from dark modes. For &lt;em&gt;me&lt;/em&gt;, in my experience, light modes have been helpful for most use cases. But there definitely are some good scenarios where you might want to switch your app to dark mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Light mode, dark mode, eyes and lighting
&lt;/h2&gt;

&lt;p&gt;Dark mode is told to be easier on the eyes. But that is not entirely true. In fact, reading is harder for me in dark modes. Unless you are in pitch dark scenarios, dark mode is not only hard to read but also bad for your eyes. Light mode helps you read easy.&lt;/p&gt;

&lt;p&gt;With dark modes, I often have glares from the sun or from the light source in the room. This makes it super hard for me to read. It makes me squint. This is immediately fixed when I switch to light mode themes. This is the same case even when I am in a well lit room. In fact, most companies touting dark mode as a clear winner observes that people are using their app in dark mode for &lt;em&gt;longer periods&lt;/em&gt;. I ask myself, is that because people find it hard to read? And hence spending more time in an app than they should be? In your tablet or computer, use an ebook in dark mode and read. Continious reading unlike computer browsing might help you understand this better. Also, dark text on a light background is easier for your eyes to focus on than the other way around.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The researchers put this down to the fact that when we look at a bright background, our pupils constrict and increase acuity while scanning text. When looking at a black background, the opposite effect occurs, and dilated pupils make it harder to focus on the text. Mayr’s research initially proposed that these effects might be reversed for elderly populations, but found this wasn’t the case. However, this might be one of the keys as to why people spend longer on these apps when this mode is enabled – because it reduces legibility and makes reading more effortful.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science" rel="noopener noreferrer"&gt;https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;And any other issue you might have could be due to the blue light emitting from the screens. Not an issue with light modes but rather the screens. You can fix the blue light issue using blue light filter apps. You could also use an eyeglass which has them as well. It really changes the experience for the good. Samsung phones comes with blue light filter. It is called eye comforting shield. On Linux, KDE, GNOME and Pantheon DE of ElementaryOS comes with blue light filter inbuilt. If you are using x.org with other desktop environments or window managers, use &lt;a href="https://en.wikipedia.org/wiki/Redshift_(software)" rel="noopener noreferrer"&gt;Redshift&lt;/a&gt;. On MacOS/iOS, they should be having an inbuilt blue light filter as well.&lt;/p&gt;

&lt;p&gt;There are scenarios where dark modes are better. Like if you are using am AMOLED screen and you use a complete black theme. It really improves your batter life. This is because AMOLED screen pixels are pitch black and they are turned off for black colour there by saving energy. This is why my AMOLED phone uses dark mode. Also, with pitch dark scenarios, just before you go to sleep and you are on your mobile? I found dark mode helpful and easier on the eyes then. Using a light mode which is desinged for night with blue light filters can tackle this to an extent. But even with that, I found dark mode far easier on the eyes than light mode. Why? Probably cos dark mode apparently reduces the emission of blue light compared to the light modes. So in pitch dark scenarios, they might be the way to go. Another good case for dark mode can be people with certain eye conditions. Dark mode &lt;em&gt;might&lt;/em&gt; help you in scenarios like if you are sensitive to light etc. These kind of scenarios are rare, temporary or for shorter periods of time. But dark mode wins here.&lt;/p&gt;

&lt;h2&gt;
  
  
  So light or dark mode?
&lt;/h2&gt;

&lt;p&gt;For majority of the screnarios, light modes should be easier on the eyes. Unless you have certain eye conditions which compels you to use a dark mode. Or for some rare scenarios, your eyes will say thank you for using light modes. Dark mode definitely looks cooler. But if you think functionality &amp;gt; aesthetics, you would use light mode. But this doesn't mean we have to follow only light mode. Since dark mode is common, use it in scenarios where it excels. For the rest, just use light modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;I have been wanting to write about this for a while. But &lt;a href="https://stitcher.io/blog/light-colour-schemes-are-better" rel="noopener noreferrer"&gt;Brent Roose's post&lt;/a&gt; finally made me take the time and write it. Just like him, I recommend trying out the light modes for a week. &lt;em&gt;#one-week-light-theme&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources / links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science" rel="noopener noreferrer"&gt;https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wired.com/story/do-you-need-dark-mode/" rel="noopener noreferrer"&gt;https://www.wired.com/story/do-you-need-dark-mode/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Explaining what a good abstraction layer is with Tailwind CSS</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Fri, 20 May 2022 18:38:43 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/explaining-what-a-good-abstraction-layer-is-with-tailwind-css-1agp</link>
      <guid>https://dev.to/unsungnovelty/explaining-what-a-good-abstraction-layer-is-with-tailwind-css-1agp</guid>
      <description>&lt;p&gt;Abstraction layers are very subjective based on what, when and how you want things. This post is based on my experience with Tailwind CSS 3. It is also about &lt;em&gt;my&lt;/em&gt; what, when and how.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In computing, an abstraction layer or abstraction level is a way of hiding the working details of a subsystem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Abstraction_layer" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Abstraction_layer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Abstraction layers are supposed to be a more accessible version of a subsystem. Frameworks and libraries can be called abstraction layers because it is hiding the way a subsystem works. I like to be careful when it comes to abstraction layers. Abstraction layers that I have a say in choosing that is. A Linux distribution like Ubuntu is an example of an abstraction layer. It makes Linux a complete operating system. It is an abstraction layer for Linux, which is just a kernel. This makes computing convenient, functional and in some cases secure too.&lt;/p&gt;

&lt;p&gt;With web development, I found Tailwind CSS to be a &lt;em&gt;good&lt;/em&gt; abstraction layer. A &lt;em&gt;good&lt;/em&gt; abstraction layer which helps me work with CSS in a better way. This post is about some expectations I have when looking for an abstraction layer. And how Tailwind CSS falls into place when it comes to these expectations. &lt;/p&gt;

&lt;h2&gt;
  
  
  What's so special about Tailwind CSS?
&lt;/h2&gt;

&lt;p&gt;Tailwind CSS is a utility-first CSS framework. This means instead of some CSS classes which are prebuilt components, you are given utility classes. Utility classes are smaller sets of CSS classes which can be used to make components. This gives you more flexibility in designing elements. Utility classes like &lt;code&gt;flex&lt;/code&gt; for &lt;code&gt;display:flex;&lt;/code&gt;, &lt;code&gt;p-2&lt;/code&gt; for &lt;code&gt;padding: 0.5rem;&lt;/code&gt; are just examples of utility classes provided by Tailwind CSS. Tailwind CSS works like a design API with cherry picked utility classes and predefined options. It is also built with &lt;a href="https://tailwindcss.com/docs/configuration" rel="noopener noreferrer"&gt;customisation&lt;/a&gt; in mind providing flexibility. These just some reasons why Tailwind CSS is so special. &lt;/p&gt;

&lt;p&gt;The utility classes can be new to many. I have seen people complaint about Tailwind CSS, but without trying it out. I highly recommend you to feel it out first before judging it from paper. Any cons you may find will be outweighed by pros.&lt;/p&gt;

&lt;h2&gt;
  
  
  The good parts
&lt;/h2&gt;

&lt;p&gt;An abstraction layer won't be able to make everyone happy. There is always a price to pay. Having said that, here are the good parts expected from an abstraction layer. Good parts which are present in Tailwind CSS as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  An abstraction layer should make the subsystem easier to understand
&lt;/h3&gt;

&lt;p&gt;An abstraction layer is suppose to make it easier for us to learn and understand the subsystem. It shouldn't hide or make it difficult for us to understand how the subsystem works.&lt;/p&gt;

&lt;p&gt;With Tailwind CSS, it doesn't just provide you a bunch of utility classes. You still need to know &lt;em&gt;some&lt;/em&gt; CSS. The difference is that you don't need to be a CSS expert. If you know enough CSS and little about flexbox and grid layout, you can take full advantage of Tailwind CSS. Because when you are using Tailwind CSS, you are still thinking in CSS. As you write with Tailwind CSS, you will learn CSS too. And I have been learning and understanding CSS more thanks to Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Making 5 elements get displayed in row on mobile and column on larger screens are easy with Tailwind CSS. All you have to do is write the below with Tailwind CSS utility classes. You don't have to deal with media queries or anything complex which you will have to if you are writing CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- With Tailwind CSS --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"grid grid-flow-row gap-1 p-1 lg:grid-flow-col"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Div element 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Div element 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Div element 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Div element 4&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Div element 5&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fujig2w0ba2e2pnb5thw0.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%2Fujig2w0ba2e2pnb5thw0.png" alt="Example of responsive elements with Tailwind CSS" width="800" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To have a &lt;em&gt;similar&lt;/em&gt; result with CSS, you have to write the below CSS code. Which also needs you to know what media queries are. Tailwind CSS makes it easy to make responsive elements for different breakpoints. You save a lot of time and be more productive instead of having a battle with CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* With CSS */&lt;/span&gt;
&lt;span class="nc"&gt;.divClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-auto-flow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1024px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.divClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="py"&gt;grid-auto-flow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F1x61fvssvieeq00jfrwy.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%2F1x61fvssvieeq00jfrwy.png" alt="Example of responsive elements with CSS" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge transfer after choosing an abstraction layer
&lt;/h3&gt;

&lt;p&gt;Knowledge transfer should be ideal when you are using an abstraction layer. You shouldn't have to relearn everything from the scratch. The more knowledge you can carry forward while using an abstraction layer, the better.&lt;/p&gt;

&lt;p&gt;The utility classes in Tailwind CSS are very similar to CSS properties with small differences. It feels like aliases to CSS properties. And once you get the hang of it, you can guess most of them. You can also reuse the methods and solutions you know about CSS from experience and from places like StackOverflow. As mentioned earlier, with Tailwind CSS you are still thinking in CSS. You just have to reimplement it all with utility classes. This is made easier with &lt;a href="https://tailwindcss.com/docs/editor-setup#intelli-sense-for-vs-code=" rel="noopener noreferrer"&gt;VSCode Tailwind CSS intellisense extension&lt;/a&gt;. And just like the Tailwind CSS website advertises, it actually &lt;em&gt;will&lt;/em&gt; help you build modern websites &lt;em&gt;rapidly&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  An abstraction layer should improve the developer experience
&lt;/h3&gt;

&lt;p&gt;Main reasons we go for an abstraction layer is for convenience, ease or both. So Developer experience (DX) is important. With Tailwind CSS, instead of writing HTML and CSS in different files, you unify that process with utility classes in your HTML. That is just one less file to switch back and forth with. Tailwind CSS also takes care of the browser compatibility issues. And those hair pulling nitty gritty details which makes you hate CSS. This makes you productive, as expected from a good abstraction layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Abstraction layers &amp;amp; performance
&lt;/h3&gt;

&lt;p&gt;Abstraction layers could tank performance. ElectronJS is a good example of this. Typical response to this is that modern hardware can handle it. Or that we can add more memory, storage or processing power. This is not ideal for many reasons. One of them being user experience (UX). I forgot the difference between ElectronJS and native desktop apps. My note application was ElectronJS and I use VSCodium for coding. Then there is Slack, Discord and many more which uses ElectronJS. So when I used &lt;a href="https://lite-xl.com/" rel="noopener noreferrer"&gt;LiteXL text editor&lt;/a&gt;, it just blew my mind away. But it reminded me how apps are supposed to work. Our choice of abstraction layers can make all the difference. And, performance in abstraction layers matter!&lt;/p&gt;

&lt;p&gt;The good thing about CSS is that it has evolved a lot. We can do a lot of things with &lt;em&gt;just&lt;/em&gt; CSS nowadays. Tailwind CSS helps you make the most out of this. Tailwind CSS bundles only CSS that you actually use. This makes the size of your style-sheet smaller. This means you don't have to load unused CSS in your application anymore. &lt;/p&gt;

&lt;p&gt;I was using Bulma CSS for &lt;a href="https://www.unsungnovelty.org" rel="noopener noreferrer"&gt;my website&lt;/a&gt; earlier. My migration to Tailwind CSS reduced my style-sheet lines from 12,726 lines of CSS to 805 lines of CSS.&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%2Fff51jkwrryrplqcru3rl.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%2Fff51jkwrryrplqcru3rl.png" alt="Image of the lines of code for Bulma CSS which was 12,726 lines of CSS. And with Tailwind CSS it actually uses only 805 lines of CSS" width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not just the lines of code. My stylesheet's file size reduced as well. From &lt;code&gt;247.1KB&lt;/code&gt; to &lt;code&gt;13.0KB&lt;/code&gt;. This made my website fast. I like the fact that my website loads the pages faster.&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%2F22fw5o5uo556ew5z3z9b.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%2F22fw5o5uo556ew5z3z9b.png" alt="Image of the file size of the CSS style-sheet. With Bulma CSS it is 247.1KB because of unused CSS. With Tailwind CSS it is just 13KB" width="443" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Designed for more than 80%
&lt;/h3&gt;

&lt;p&gt;An abstraction layer should not only be appealing to the general audience (80%). It should also be designed for the power users and tinkerers (the 20%). A lot of abstraction layers we use falls short for power users and tinkerers. But Tailwind CSS might prove you wrong.&lt;/p&gt;

&lt;p&gt;Tailwind CSS is designed to handle it's limitations and edge cases very well. It already let's you customise the values of the utility classes. But it also has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arbitrary property feature:&lt;/strong&gt; Which helps you use a CSS property which is not yet supported by Tailwind CSS. Just put any CSS property inside a square bracket like &lt;code&gt;[css property to use]&lt;/code&gt; instead of a utility class name and voila! You just used a CSS property inside Tailwind CSS. In the below example, I am using &lt;code&gt;clip-path&lt;/code&gt; CSS property as an arbitrary value.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"[clip-path:circle(50%)]"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://geekculture.co/wp-content/uploads/2019/01/takeru-satoh-ruroni-kenshin.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"An image to try out clip-path feature of CSS"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fo9gn2jrzxtxnx31c2je1.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%2Fo9gn2jrzxtxnx31c2je1.png" alt="Demonstration of arbitrary property feature. The image used is of Rurouni Kenshin character played Takeru Satoh in the movie Rurouni Kenshin" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arbitrary value feature:&lt;/strong&gt; lets you use custom CSS values within the utility classes. You can replace the utility class value with a square bracket like &lt;code&gt;[20rem]&lt;/code&gt;. You are now using an arbitrary value that is not part of the utility classes. You can use any CSS units like rem, em, px, vh, vw or %.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"w-[80%]"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Checking the width!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not only that, you can customise Tailwind CSS extensively. Since it is out of scope for this post, let me redirect you towards Tailwind CSS documentation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs/configuration" rel="noopener noreferrer"&gt;https://tailwindcss.com/docs/configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs/adding-custom-styles" rel="noopener noreferrer"&gt;https://tailwindcss.com/docs/adding-custom-styles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bad parts
&lt;/h2&gt;

&lt;p&gt;Not everything is good at Tailwind CSS. So here is the other side to abstraction layers/Tailwind CSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  There is always a price to pay
&lt;/h3&gt;

&lt;p&gt;I think all abstractions have disadvantage(s). In other words, there is always a price to pay. It is up to us to see if those disadvantages are fine with respect to the goals we have.&lt;/p&gt;

&lt;h4&gt;
  
  
  Other side of utility classes in Tailwind CSS: Readability and maintainability
&lt;/h4&gt;

&lt;p&gt;Utility classes are great. But with utility classes, readability and maintainability takes a hit as you add complexity. Which ends with a long list of utility classes. In the below example, I am customising the HTML tags associated with a markdown file. Customising the &lt;code&gt;prose&lt;/code&gt; class which comes with the &lt;a href="https://tailwindcss.com/docs/typography-plugin" rel="noopener noreferrer"&gt;official typography plugin&lt;/a&gt; of Tailwind CSS. It already provides basic styling for markdown elements like &lt;code&gt;blockquote&lt;/code&gt; and &lt;code&gt;code&lt;/code&gt; tags. But if you want to customise it further, the below happens. These situations are inevitable as you deep dive into Tailwind CSS. Most common complaints I know about Tailwind CSS stems from this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-lg prose-headings:font-semibold py-1
        prose-sm prose-gray prose-a:underline prose-a:decoration-2 hover:prose-a:text-blue-600
        prose-ul:list-disc prose-code:bg-gray-300 prose-code:p-1 prose-code:rounded
        prose-pre:overflow-x-auto prose-pre:text-lg prose-code:prose-pre:bg-[#272822] prose-pre:rounded prose-pre:px-4 prose-pre:py-1
        prose-blockquote:border-l-4 prose-blockquote:italic prose-blockquote:border-gray-600 prose-blockquote:bg-gray-200
        prose-blockquote:px-4 prose-blockquote:py-2  prose-blockquote:rounded prose-img:mx-auto
        prose-hr:p-0 prose-hr:m-0 prose-headings:my-0 prose-headings:py-2
    "&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I split the utility classes into separate lines based on similarities of functionalities/properties as shown in the above example. If the list of utility classes are too long, maybe we should start writing comments just like for code? I don't know. To most people, the utility classes are new. I expect a best practice to emerge sooner or later. If you know one already, do let me know.&lt;/p&gt;

&lt;p&gt;Another solution is to keep your HTML markup clean. You can do this by mapping the utility classes to a CSS class name. And this can be added to Tailwind's components layer by &lt;a href="https://tailwindcss.com/docs/adding-custom-styles#using-css-and-layer=" rel="noopener noreferrer"&gt;adding it like this in your main.css&lt;/a&gt;. You can then call the class name from HTML just like the other utility classes. But you shouldn't go overboard with adding custom css like this. This should be used as a last resort as it is not a recommended method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* main.css */&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@layer&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.styleMarkdown&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;@apply&lt;/span&gt;  &lt;span class="err"&gt;text-lg&lt;/span&gt; &lt;span class="py"&gt;prose-headings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;font-semibold&lt;/span&gt; &lt;span class="n"&gt;py-1&lt;/span&gt;
        &lt;span class="n"&gt;prose-sm&lt;/span&gt; &lt;span class="n"&gt;prose-gray&lt;/span&gt; &lt;span class="n"&gt;prose-a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;underline&lt;/span&gt; &lt;span class="n"&gt;prose-a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;decoration-2&lt;/span&gt; &lt;span class="n"&gt;hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;prose-a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;text-blue-600&lt;/span&gt;
        &lt;span class="n"&gt;prose-ul&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;list-disc&lt;/span&gt; &lt;span class="n"&gt;prose-code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;bg-gray-300&lt;/span&gt; &lt;span class="n"&gt;prose-code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;p-1&lt;/span&gt; &lt;span class="n"&gt;prose-code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;rounded&lt;/span&gt;
        &lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;overflow-x-auto&lt;/span&gt; &lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;text-lg&lt;/span&gt; &lt;span class="n"&gt;prose-code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;bg-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;#277322&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;rounded&lt;/span&gt; &lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;px-4&lt;/span&gt; &lt;span class="n"&gt;prose-pre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;py-1&lt;/span&gt;
        &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;border-l-4&lt;/span&gt; &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;italic&lt;/span&gt; &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;border-gray-600&lt;/span&gt; &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;bg-gray-200&lt;/span&gt;
        &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;px-4&lt;/span&gt; &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;py-2&lt;/span&gt;  &lt;span class="n"&gt;prose-blockquote&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;rounded&lt;/span&gt; &lt;span class="n"&gt;prose-img&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mx-auto&lt;/span&gt;
        &lt;span class="n"&gt;prose-hr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;p-0&lt;/span&gt; &lt;span class="n"&gt;prose-hr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;m-0&lt;/span&gt; &lt;span class="n"&gt;prose-headings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;my-0&lt;/span&gt; &lt;span class="n"&gt;prose-headings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;py-2&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;
  
  
  In conclusion
&lt;/h2&gt;

&lt;p&gt;Anybody who is going to use CSS regularly would appreaciate Tailwind CSS. I still think there is market of component based CSS frameworks. I am a fan of Bulma CSS's aesthetics. I am also sure that there maybe places where Tailwind CSS can improve. This is why I used a &lt;em&gt;"good"&lt;/em&gt; abstraction layer instead of a &lt;em&gt;perfect&lt;/em&gt; abstraction layer. But it is pretty much there. It really have changed how I write CSS and how I &lt;em&gt;learn&lt;/em&gt; CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources / links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What's new in Tailwind CSS v3 from Tailwind Labs - &lt;a href="https://youtu.be/mSC6GwizOag" rel="noopener noreferrer"&gt;https://youtu.be/mSC6GwizOag&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This post was first published at &lt;a href="https://www.unsungnovelty.org" rel="noopener noreferrer"&gt;https://www.unsungnovelty.org&lt;/a&gt; with the title &lt;a href="https://www.unsungnovelty.org/posts/05/2022/explaining-what-a-good-abstraction-layer-is-with-tailwind-css/" rel="noopener noreferrer"&gt;"Explaining what a good abstraction layer is with Tailwind CSS"&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>Is it possible to have Editor's picks in Dev.to?</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Mon, 18 Apr 2022 02:46:10 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/is-it-possible-to-have-editors-picks-in-devto-1mh0</link>
      <guid>https://dev.to/unsungnovelty/is-it-possible-to-have-editors-picks-in-devto-1mh0</guid>
      <description>&lt;p&gt;This will be my first meta question. So I hope I can get some discussion going on.&lt;/p&gt;

&lt;p&gt;So I would consider myself a beginner with respect to programming. I do understand the dynamics of a growing community like Dev.to. Been part of many communities with respect to Linux and OSS communities over the years. So I think I understand it partially at least. But in the last one year I have increased my presence here. So I was wondering if it possible to have editor's picks.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;The quality vs quantity issue keeps coming up in dev.to. As a beginner I hope to reach the levels of experienced devs who write here. So getting familiar with the topics is a good idea for advanced topics. &lt;/li&gt;
&lt;li&gt;Beginners and intermediate programmers could know what the advanced topics are to begin with. Learning the unknown unknowns before known unknowns. Currently I don't know what advanced topics should I focus or keep a tab on for the future. Editor's picks could help.&lt;/li&gt;
&lt;li&gt;To appeal to programmers with experience so that their advanced topics will be heard. I know that courses and materials on advanced topics are hard to find on tech industry in general. This could be a good solution which Dev.to can do.&lt;/li&gt;
&lt;li&gt;As a community grows it is harder to get noticed even when your material is amazing. Posts written by beginners/intermediate/experienced folks could be ignored. Editor's picks could make unique good posts from all levels more visible. So that they are NOT lost in the crowd.&lt;/li&gt;
&lt;li&gt;For posts on quantity vs quality issues, I have seen mods and dev.to folks acknowledging the problem. Partly at least. As per past discussions on similar topics - &lt;a href="https://dev.to/mindplay/its-impossible-to-get-a-voice-in-here-4aop"&gt;Link1&lt;/a&gt;, &lt;a href="https://dev.to/peerreynders/comment/1mb52"&gt;Link2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;No more spam and promo posts could be a good byproduct that can come out of this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  We already have weekly top posts
&lt;/h2&gt;

&lt;p&gt;Top posts are based on &lt;strong&gt;traffic&lt;/strong&gt; for the most part as I know it. Please do correct me if I am wrong. Removing the traffic metric completely is important. As the community grows, the share of beginner programmers (like me) will increase. This means the intermediate/experienced programmers are a minority. Or NOT the majority at least. So traffic kind of end up being irrelevant. Quality &amp;gt; quantity.&lt;/p&gt;

&lt;p&gt;Google play store is a good example of editor's picks. Irrespective of how much algorithm does, I still look at editor's picks and find some gems. Maybe we can replicate it here?&lt;/p&gt;

&lt;h2&gt;
  
  
  Backstage
&lt;/h2&gt;

&lt;p&gt;I do understand this could mean heavy work on the dev.to team. Maybe over a period more intermediate/experienced devs can lend a hand? I am not sure how beginners can help with intermediate/advanced topics. This part is the most unclear part to me.&lt;/p&gt;

&lt;p&gt;I do think this is better than missing good writers and dev.to members to other platforms. I don't know how hard it is. I guess I haven't thanked Dev.to folks until now. So thanks Dev.to team for the cool work and community. And if it not clear yet, this is not an angry post. :)&lt;/p&gt;

</description>
      <category>meta</category>
      <category>devto</category>
    </item>
    <item>
      <title>Do you actually read your bookmarked posts?</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Mon, 11 Apr 2022 03:36:40 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/do-you-actually-read-your-bookmarked-posts-53ad</link>
      <guid>https://dev.to/unsungnovelty/do-you-actually-read-your-bookmarked-posts-53ad</guid>
      <description>&lt;p&gt;So I recently wrote &lt;a href="https://dev.to/unsungnovelty/doing-what-you-can-now-4iel"&gt;Doing what you can NOW&lt;/a&gt; post which is about productivity. And I see people have bookmarked it. This made me think. Do people actually read the posts they have bookmarked? &lt;/p&gt;

&lt;p&gt;Because this is a very common productivity issue where people bookmark and never read. I myself have fought hard to solve this issue for me. I don't bookmark if it is not absolutely necessary anymore. It is like, I agree that this is a brilliant idea. So, I will read this later. And it never happens. &lt;/p&gt;

&lt;p&gt;I always look at my posts being bookmarked as a not good enough writing metric &lt;em&gt;depending on topics&lt;/em&gt;. I understand certain topics are more likely to be bookmarked. And certain combination like a heart/unicorn + bookmark means they have at least skimmed through the article. And I agree that there are valid reasons to bookmark. But I really want to know your thoughts.&lt;/p&gt;

&lt;p&gt;So, Do you &lt;strong&gt;actually read&lt;/strong&gt; your bookmarked posts?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
      <category>writing</category>
    </item>
    <item>
      <title>Doing What You Can NOW</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sat, 09 Apr 2022 03:45:35 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/doing-what-you-can-now-4iel</link>
      <guid>https://dev.to/unsungnovelty/doing-what-you-can-now-4iel</guid>
      <description>&lt;p&gt;I am a productivity enthusiast and a perfectionist. As a developer or not, we all have things we want to do. And we all have flaws or issues which prevents us from achieving them. Mine is - being a perfectionist. My productivity wins used to be cancelled out by me being a perfectionist. It happens still. Not as much as before is all. What helps me is a rule - &lt;em&gt;Doing what you can NOW&lt;/em&gt;. It might sound simple but it isn't in practice. Fixing my perfectionism problem is still an in-progress. But I know I am in the right direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you mean by Doing what you can NOW?
&lt;/h2&gt;

&lt;p&gt;"Doing what you can NOW" means doing whatever you know you CAN finish right NOW. Those tasks we choose to avoid, ignore or procrastinate. A few years ago my then manager told me about bottom-up approach during a regular 1:1. Bottom-up approach is when you do the smallest possible task you can do right NOW. Then incrementally work towards your end goal. From bottom to the top. My "Doing what you can NOW" rule stems from the bottom-up approach.&lt;/p&gt;

&lt;p&gt;It is in our nature to bring obstacles and unnecessary blockers towards a task we badly want to do. But the reality is we always can do &lt;em&gt;something&lt;/em&gt; towards the task we want to do. It might be as small as shopping for dev tools or frameworks. Maybe it is reading up on a new language. Or maybe it is just to create a website for your product or project. Irrespective of how blocked you may be, there is always &lt;em&gt;something&lt;/em&gt; you can do. That &lt;em&gt;something&lt;/em&gt; most often will be something small (especially when you are blocked). A small task which you can build up on. Like the bottom-up approach. &lt;/p&gt;

&lt;p&gt;"Just do it™" could be seen as another version of "Doing what you can NOW". But there is a fundamental context difference between the two. Just do it encourages us to push ahead with whatever we want to do. And hopes it works out in the end. But "Doing what you can NOW" has the context that we know we can do certain things. Right NOW! Things that we can complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing what you can NOW in practice
&lt;/h2&gt;

&lt;p&gt;I wrote my first HTML web page when I was 12 or 13 years old. I was using HTML4. No styling cos I didn't even know that CSS existed back then. But when I wanted to create my own personal website a decade plus later, HTML was completely different. HTML and the whole web development in general had changed completely. I chose to create my website with Hugo static site generator. My personal website (&lt;a href="https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;https://www.unsungnovelty.org/&lt;/a&gt;) went live in 2019. With the aim of being minimal and lightning fast. And so far the website has went through 4 iterations.&lt;/p&gt;

&lt;p&gt;When I first started with Hugo, I didn't know how to create my own theme in Hugo. Nor did I know how to host a website on the internet. So &lt;em&gt;"Doing what you can NOW"&lt;/em&gt; at that time meant using an &lt;a href="https://github.com/mtn/cocoa-eh-hugo-theme" rel="noopener noreferrer"&gt;external Hugo theme&lt;/a&gt;. That and figuring out how to host and keep a website online. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My &lt;a href="https://web.archive.org/web/20200804060843/https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;first iteration&lt;/a&gt; used an external Hugo theme. It helped me not to worry about how my website looked. It gave me the time needed to write and understand blogging in general.&lt;/li&gt;
&lt;li&gt;When I learned enough about Hugo, I created my own theme. The &lt;a href="https://web.archive.org/web/20201129052800/https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;second iteration&lt;/a&gt; was fully text based. It was what I could do at that time. I used Bulma CSS which is what I knew back then. &lt;/li&gt;
&lt;li&gt;Later when my friend started using my theme for his website, I made the &lt;a href="https://web.archive.org/web/20201129052800/https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;3rd iteration&lt;/a&gt;. It was more visually pleasing compared to the second iteration. &lt;/li&gt;
&lt;li&gt;And I have just pushed my &lt;a href="https://www.unsungnovelty.org/" rel="noopener noreferrer"&gt;4th iteration&lt;/a&gt; live. It is a lot more accessible to the broader internet audience. Less nerdy and more appealing compared to my other iterations so far.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing what I can NOW (or then) helped me create my personal website. My initial plan was to learn advanced CSS, JS, HUGO and REACT before creating the website. None of it was necessary for blogging or to creating my website, but those were the obstacles and blockers I had put in place for myself. Creating my own website helped me be confident about creating solutions. This increased my interest in creating projects. And that paved the way to finding places like Dev.to, Hacker New, Sidebar and Indie Hackers.&lt;/p&gt;

&lt;p&gt;An easy way to apply this is rule is to ask yourself - Is this a priority? If the answer is &lt;em&gt;no&lt;/em&gt;, ask yourself again - What else can I do that is more important? My answer most of the time has been a &lt;em&gt;no&lt;/em&gt;. So I end asking the second question. Then starts working on something more important. Otherwise, I know I am on the right track.&lt;/p&gt;

&lt;p&gt;Getting things done in a consistent way is hard. And impossible at times. But we sure can make things better. We can do better than yesterday. "Doing what you can NOW" is just one of those trick we can employ when we feel completely lost or stuck. Hopefully it helps you as well.&lt;/p&gt;

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

&lt;p&gt;I am currently learning a bunch of stuff for my next challenge in life. I would like to finish a couple of projects before getting started with a side project that I have been dying to work on. For the time being, I am learning from places like Dev.to, &lt;a href="https://www.indiehackers.com/unsungNovelty" rel="noopener noreferrer"&gt;Indie Hackers&lt;/a&gt;, and Reddit. Things that I need to do the projects I want to do. In short, I am doing what I can NOW!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post was also published at &lt;a href="https://www.unsungnovelty.org" rel="noopener noreferrer"&gt;https://www.unsungnovelty.org&lt;/a&gt; under the title - "&lt;a href="https://www.unsungnovelty.org/posts/04/2022/doing-what-you-can-now-builders-edition/" rel="noopener noreferrer"&gt;Doing What You Can NOW - Builder's Edition&lt;/a&gt;". What's next section was changed here to improve context.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>writing</category>
    </item>
    <item>
      <title>How to add Tailwind CSS 3 to a Hugo website in 2022?</title>
      <dc:creator>Nikhil</dc:creator>
      <pubDate>Sat, 05 Mar 2022 07:08:37 +0000</pubDate>
      <link>https://dev.to/unsungnovelty/how-to-add-tailwind-css-3-to-a-hugo-website-in-2022-19oa</link>
      <guid>https://dev.to/unsungnovelty/how-to-add-tailwind-css-3-to-a-hugo-website-in-2022-19oa</guid>
      <description>&lt;p&gt;I use Hugo for my personal website - &lt;a href="https://www.unsungnovelty.org" rel="noopener noreferrer"&gt;https://www.unsungnovelty.org&lt;/a&gt;. At present I use &lt;a href="https://bulma.io/" rel="noopener noreferrer"&gt;Bulma CSS&lt;/a&gt; for it. But I am working on a redesign with &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;. During my search, I found articles on how to add Tailwind CSS to Hugo confusing. And at times bloated. So here is an attempt to tell you how to add Tailwind CSS to Hugo in the most minimal way. The goal is a simple and straight forward setup for Tailwind CSS in your Hugo website.&lt;/p&gt;

&lt;p&gt;Also, this blog post is possible thanks to &lt;a href="https://functional.style/hugo/general/tailwind/" rel="noopener noreferrer"&gt;Integrating TailwindCSS with Hugo by oomusou&lt;/a&gt;. It uses prettier and a couple of other things. I have already included that post in the references / link section. But it was the only article I could find on adding Tailwind CSS 3 to Hugo. So thanks &lt;a class="mentioned-user" href="https://dev.to/oomusou"&gt;@oomusou&lt;/a&gt; . My post sticks to being a lil detailed and uses just the tailwindcss package from NPM. If you rather use that article. Please do. :)&lt;/p&gt;

&lt;p&gt;If you already have a Hugo website and just want to add Tailwind CSS to it's theme, jump directly to follow the section &lt;strong&gt;How to add Tailwind CSS to a Hugo theme?&lt;/strong&gt; Else, follow along!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to create a minimal Hugo website &amp;amp; add Tailwind CSS to it's Hugo theme?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install the Hugo package on your operating system. Follow the Install section from &lt;a href="https://gohugo.io/getting-started/installing/" rel="noopener noreferrer"&gt;getting started from gohugo.io&lt;/a&gt;. If you are on Windows, the below commands might not work in full. Use a unix shell like bash to make them work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new Hugo website using the command &lt;code&gt;hugo new site &amp;lt;site name&amp;gt;&lt;/code&gt; in your terminal.  Eg; &lt;code&gt;hugo new site thisSiteIsNew&lt;/code&gt;. This will create a new hugo site with a startup template inside the directory called &lt;code&gt;thisSiteIsNew&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go inside your new site's directory. Eg; &lt;code&gt;cd thisSiteIsNew&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new theme using the &lt;code&gt;hugo new theme &amp;lt;theme name&amp;gt;&lt;/code&gt;. Eg; &lt;code&gt;hugo new theme thisThemeIsNew&lt;/code&gt;. This will create a new directory with the &lt;code&gt;&amp;lt;theme name&amp;gt;&lt;/code&gt; and necessary files needed to get started. In my case, it will be inside &lt;code&gt;thisSiteIsNew/themes/thisThemeIsNew&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Link the Hugo theme to your Hugo website in your config file. Linking this way tells Hugo to look for the so called theme inside &lt;code&gt;/themes/&lt;/code&gt; directory. Website won't show up if you don't link it like this. An example config file will look like the below. This uses &lt;code&gt;.toml&lt;/code&gt; format with the file name being &lt;code&gt;config.toml&lt;/code&gt;. If you want to use &lt;code&gt;.json&lt;/code&gt; or &lt;code&gt;.yaml&lt;/code&gt; for your Hugo config file, you can. Just format it accordingly.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;baseURL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt;
&lt;span class="py"&gt;languageCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'en-us'&lt;/span&gt;
&lt;span class="py"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'thisSiteIsNew'&lt;/span&gt;
&lt;span class="py"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'thisThemeIsNew'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to add Tailwind CSS to a Hugo theme?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go inside the themes directory. It is in &lt;code&gt;hugo-website-directory/themes/theme-name/&lt;/code&gt;. This assumes you have a hugo website with layouts, config file etc setup. Other prerequisites are npm and node installed in your computer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reminder - Link the Hugo theme to your Hugo website in your config file. Linking this way tells Hugo to look for the so called theme inside &lt;code&gt;/themes/&lt;/code&gt; directory. Website won't show up if you don't link it like this. An example config file will look like the below. This uses &lt;code&gt;.toml&lt;/code&gt; format with the file name being &lt;code&gt;config.toml&lt;/code&gt;. If you want to use &lt;code&gt;.json&lt;/code&gt; or &lt;code&gt;.yaml&lt;/code&gt; for your Hugo config file, you can. Just format it accordingly.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;baseURL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt;
&lt;span class="py"&gt;languageCode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'en-us'&lt;/span&gt;
&lt;span class="py"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'thisSiteIsNew'&lt;/span&gt;
&lt;span class="py"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'thisThemeIsNew'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Initialise &lt;code&gt;package.json&lt;/code&gt; using &lt;code&gt;npm init -y&lt;/code&gt;. This will create a &lt;code&gt;package.json&lt;/code&gt; file inside your theme directory.&lt;/li&gt;
&lt;li&gt;Install Tailwind CSS using &lt;code&gt;npm install --save-dev tailwindcss&lt;/code&gt;. This installs Tailwind CSS as a development dependency.&lt;/li&gt;
&lt;li&gt;Initialise &lt;code&gt;tailwind.config.js&lt;/code&gt; by running the command &lt;code&gt;npx tailwindcss init&lt;/code&gt;. This will create a &lt;code&gt;tailwind.config.js&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;tailwind.config.js&lt;/code&gt; file, add the below code:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content/**/*.md&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;layouts/**/*.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create a file called &lt;code&gt;main.css&lt;/code&gt; in &lt;code&gt;/assets&lt;/code&gt; directory. You can use any other name instead of &lt;code&gt;main.css&lt;/code&gt;. Also, If this is a new theme, &lt;code&gt;/assets&lt;/code&gt; directory won't be present and you should create it. &lt;code&gt;mkdir assets&lt;/code&gt; command in Linux will create a new directory from your terminal.&lt;/li&gt;
&lt;li&gt;Add the below code to &lt;code&gt;main.css&lt;/code&gt; file.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;@tailwind&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create a &lt;code&gt;style.css&lt;/code&gt; inside the &lt;code&gt;/assets&lt;/code&gt; folder. We will use the Tailwind CSS CLI to transpile the stuff needed from &lt;code&gt;main.css&lt;/code&gt; to &lt;code&gt;style.css&lt;/code&gt;. &lt;code&gt;style.css&lt;/code&gt; will be our final css file used to style our website.&lt;/li&gt;
&lt;li&gt;Add some Tailwind CSS utilities to your html files. I have the below &lt;code&gt;index.html&lt;/code&gt; which is the home page of a hugo website.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;{{ define "main" }}

    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-3xl text-blue-700 font-bold underline"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;thisSiteIsNew&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-sky-600 text-slate-100"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;The thisSiteIsNew uses a theme called thisThemeIsNew&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Link your &lt;code&gt;style.css&lt;/code&gt; to your website by linking the stylesheet in the &lt;code&gt;/layouts/partials/head.html&lt;/code&gt;. An example &lt;code&gt;head.html&lt;/code&gt; looks like the below:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hello Hugo&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- resources.Get "style.css" will fetch the style.css file. 
    It will not work if you mention the exact location like "./assets/style.css".--&amp;gt;&lt;/span&gt;
    {{ $style := resources.Get "style.css" }}    
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{ $style.Permalink }}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 

&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add the below script/command to &lt;code&gt;package.json&lt;/code&gt; file. This is needed to build the &lt;code&gt;style.css&lt;/code&gt; from your &lt;code&gt;main.css&lt;/code&gt; based on the utility classes you added in the previous step.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scripts&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;build-tw&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;npx tailwindcss -i ./assets/main.css -o ./assets/style.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use any name instead of &lt;code&gt;build-tw&lt;/code&gt; here. I just use &lt;code&gt;build-tw&lt;/code&gt; which easily translates to &lt;em&gt;build tailwind&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everytime you make changes to your styling using tailwind utilities, you can run &lt;code&gt;npm run build-tw&lt;/code&gt;. This will create a new &lt;code&gt;style.css&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now go back to the Hugo site's directory from &lt;code&gt;/themes/thisThemeIsNew&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And from inside &lt;code&gt;/thisSiteIsNew&lt;/code&gt; run &lt;code&gt;hugo server --disableFastRender&lt;/code&gt; in your terminal. It will start a live server in &lt;code&gt;http://localhost:1313/&lt;/code&gt; by default. Otherwise you will have the address in the terminal. That is it. If you have followed all the steps, you should have a Hugo website with the below output. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x39md0wypblrjvv0jk8.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%2F0x39md0wypblrjvv0jk8.png" alt="Final output" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References / links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://functional.style/hugo/general/tailwind/" rel="noopener noreferrer"&gt;https://functional.style/hugo/general/tailwind/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This post was first published at &lt;a href="https://unsungnovelty.org" rel="noopener noreferrer"&gt;https://unsungnovelty.org&lt;/a&gt; with the title - "&lt;a href="https://www.unsungnovelty.org/posts/03/2022/how-to-add-tailwindcss-3-to-a-hugo-website-in-2022/#how-to-add-tailwindcss-to-a-hugo-theme" rel="noopener noreferrer"&gt;How to add TailwindCSS 3 to a Hugo website in 2022?&lt;/a&gt;"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Found an error? Know a better way to do this? Have feedback on my writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty" rel="noopener noreferrer"&gt;@unsungNovelty&lt;/a&gt; or drop a mail to &lt;code&gt;unsungnovelty at protonmail dot com&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hugo</category>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
