<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>unsungNovelty</title><link>https://www.unsungnovelty.org/</link><description>Recent content on unsungNovelty</description><generator>Hugo</generator><language>en-uk</language><lastBuildDate>Sun, 19 Jul 2026 11:00:00 +0530</lastBuildDate><atom:link href="https://www.unsungnovelty.org/index.xml" rel="self" type="application/rss+xml"/><item><title>There are no fire alarms when it comes to privacy</title><link>https://www.unsungnovelty.org/posts/07/2026/fire-alarms-privacy/</link><pubDate>Sun, 19 Jul 2026 11:00:00 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/07/2026/fire-alarms-privacy/</guid><description>&lt;p>Contrary to the belief of people, a fire alarm&amp;rsquo;s purpose is not just to let you know that there is fire. But also to let you know that it is safe to react or panic about the fire. Bystander effect experiment by Latane and Darley in 1968 states that you are more likely to be inactive or not help when you are in a group of people than when you&amp;rsquo;re alone. This also means you are more likely to help or react when you are lonely than in a group. So as to avoid embarassment or to be percieved as panicky.&lt;/p>
&lt;p>In one of their experiments, Latane and Darley placed students in a room either alone or with 2 or 3 strangers to fill a questionaire while they waited for the experimenter to return. While they were filling out the questionaire, smoke was released to the room. When students were working alone, they immediately recognised the smoke. Within 5 seconds. While it took upto 20 seconds for the students in a group to recognise the smoke. And even though students in groups recognised the smoke has become really thick and have started to obscure their vision or made them cough, they still didn&amp;rsquo;t report the fire. Only one participant in the group condition reported the smoke within the first four minutes, and by the end of the experiment, &lt;em>no-one from five out of eight groups had reported the smoke at all&lt;/em>.&lt;/p>
&lt;p>And when it comes to privacy, the same is applicable. There is always an adjustment and acceptance from the consumers or the general public every time there is an intrusion of privacy in our lives. It&amp;rsquo;s either from governments or from corporates. The reason is always children&amp;rsquo;s safety, national security or to understand and provide better services to the end-users. And yet, we the people never get to see the promised land. It always ends ups benefitting people who makes these calls.&lt;/p>
&lt;p>A couple of weeks ago whatsapp came with their hammer and finally enforced their &lt;a href="https://techcrunch.com/2021/01/15/whatsapp-delays-new-data-sharing-policy-enforcement-to-may-15/">new privacy policy&lt;/a> with no option to reject. New is an exaggeration maybe. AFAIK, this privacy policy update was initially introduced in 2016. This was to send data to facebook and finally start their surveillance for ads. Anybody who joined whatsapp after 2016 is already using the app with this privacy policy. The new update was for us mortals who joined before 2016 and hasn&amp;rsquo;t accepted it. They initally delayed it by 3 months. Then indefinitely. But I knew they are going to come back once the uproar against it has subsided. And they did.&lt;/p>
&lt;p>What was the end result? Now everytime I do any purchase, I get whatsapp message from their business accounts. Without my consent. Making facebook know about most of my purchases. Which was the whole reason why I deleted my facebook and instagram account around a decade ago. To not let them track me.&lt;/p>
&lt;p>But Nikhil, why not just delete it? Network effects. There are presonal and professional reasons to use it. And in India, whatsapp is unavoidable. Now I see ads, get surveillance done on me and lose privacy on my purchases and actions. With me having zero control.&lt;/p>
&lt;h2 id="the-creepy-guy">The creepy guy&lt;/h2>
&lt;p>Imagine a guy is behind your loved ones. Your closest ones. Your mother, father, wife, brother or maybe your daughter or son. Going behind them and watching every move they are making. Stalking them wherever they go. Watching and recording what they are doing. &lt;a href="https://peabee.substack.com/p/everyone-knows-what-apps-you-use">Looking into their phone and checking their phones to see what apps they have installed&lt;/a>. Going through their contacts and copying all their contacts. Listening to what they talk. Always recording where they are at any given point. And even access your camera to see your faces. And then, imagine that this creepy guy shared this all with 100&amp;rsquo;s of people who are doing all of these like him. And they share the same to another 100 of them. And them to more and then so on and so forth. Will you be OK with this person? Or are you gonna call the police?&lt;/p>
&lt;p>If anyone do any of these in real person, they&amp;rsquo;ll be in jail. And yet, we let all the apps do these to us. Everyday - 24/7. Just because one thing happen in person where you see a lot of it. While the other happens away from your eyes. Out of our purview.&lt;/p>
&lt;p>Digital privacy is a tricky topic to begin with. Because people have varied knowledge about the topic. And they specifically have varied expectations and definitions on &lt;em>what privacy is&lt;/em> and what it means for them. This makes it extremely tricky to talk about. Some are not fine with any kind privacy intrusions. They go hardcore. Others? They want privacy but not at the cost of convenience. Then there are people who are fine with some amount of intrusions when it is for &amp;ldquo;protecting&amp;rdquo; children or national security. And then there are people who don&amp;rsquo;t care for it. And when you add the many many ways the world do surveillance or track us digitally, it makes it impossible create an audience to attract and make awareness. I mean for gods sake, people couldn&amp;rsquo;t even do three basic things - wash hands, 6ft apart and wear mask to keep themselves ALIVE during Covid! Now imagine this privacy situation where there are many many varied permutations and combinations.&lt;/p>
&lt;p>And this is what happnes when you do talk to general public about this, the response you get is disbelief, getting ridiculed or telling you that you are over reacting or that you are becoming a tin foil hat. And if you didn&amp;rsquo;t know what tin foil hat is already, read the &lt;a href="https://en.wikipedia.org/wiki/Tin_foil_hat">Tin foil hat wikipedia page&lt;/a>. The bystander effect is really strong on this one. It gets people to say nothing harmful is happening &lt;a href="https://www.vice.com/en/article/us-military-location-data-xmode-locate-x/">even when they are&lt;/a>. The toxic positivity on the subject makes people normalise the intrusions further and further. And the result is us inching towards a surveillance &lt;del>state&lt;/del> globe.&lt;/p>
&lt;p>The embarassment of being ridiculed is real though. Privacy enthusiasts are lonely creatures most of the time in their local environment (read this in David Attenborough&amp;rsquo;s voice!). Their friends and family most of the time ignore or ridicule them cos they don&amp;rsquo;t see enough or dig deeper about it. When the initial frenzy was unwinding about the &lt;a href="https://techcrunch.com/2021/01/15/whatsapp-delays-new-data-sharing-policy-enforcement-to-may-15/">privacy policy change in whatsapp&lt;/a>, my 2 friends out of which one of whom is a Google fanboy, for the first time started talking about privacy seriously. This was a revelation for me. This all started to change when they ended up talking with other people who don&amp;rsquo;t care for privacy. I saw one being worried about being embarrassed for being a tinfoil hat. And the other, letting all of it go the moment one of my other friend confronted him. This encourages the tech surveillance to intrude in our lives just like the smoke that was released to the room during the experiment.&lt;/p>
&lt;h2 id="so-who-is-this-privacy-for">So who is this privacy for?&lt;/h2>
&lt;p>Everyone. This doesn&amp;rsquo;t mean free pass for unfiltered levels of toxicity. Cos that&amp;rsquo;s the reason why we have laws. To make sure people cannot do whatever they want (kill, hurt etc). But we as people have the right to privacy. If doing certain things is unlawful or illegal in person, there is no reason why we should be treating it any different when it&amp;rsquo;s done digitally. Especially when it is being done 100 times fold (or maybe 1000 times).&lt;/p>
&lt;p>Privacy is about being able to do things in the future and not just the present. And privacy doesn&amp;rsquo;t have to be about the majority. Because most of people really don&amp;rsquo;t care. That is the reality. And this is not about whether privacy is a bigger problem &lt;em>to you or not&lt;/em>. But about the necessity of the people who would like to exercise their right to privacy. Because they can make our life more private. For the rest of us who don&amp;rsquo;t care. Irrespective of whether you think it is a serious problem or not, there is no denying:&lt;/p>
&lt;ul>
&lt;li>Many apps listen to our phone&amp;rsquo;s microphone.&lt;/li>
&lt;li>Tracking software like Microsoft clarity records screen sessions while you visit websites and apps in it&amp;rsquo;s entirety. And this can be viewed as a video from Microsoft clarity dashboard. And there are so many alternatives to this as well.&lt;/li>
&lt;li>They sell your data unlimited times eventually ending up with scammers or other data scavangers.&lt;/li>
&lt;li>Websites shows different price for goods based on the data they have on you.
&lt;ul>
&lt;li>&lt;a href="https://fortune.com/2026/04/21/jetblue-airline-price-fares-cookie-cache-surveillance-pricing/">https://fortune.com/2026/04/21/jetblue-airline-price-fares-cookie-cache-surveillance-pricing/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The recent &lt;a href="https://en.wikipedia.org/wiki/Age_verification">age verification for apps and OS&amp;rsquo;s&lt;/a> are all examples of water boiling further and further for us frogs. It&amp;rsquo;s either national security or children&amp;rsquo;s online safety always. But in reality, they just want to make these things mainstream so that they don&amp;rsquo;t have to go to court for each and every single instances. Avoid due process which makes them accountable before the judiciary (assuming you are living in a democracy that is).&lt;/p>
&lt;p>I still remember, me and my roommate intentionally talking about burgers with his facebook open and soon enough it showed McDonald&amp;rsquo;s ad. And this was back in 2016/17 time period. It effects you directly or indirectly even though you don&amp;rsquo;t know it yet. Not to mention, if you don&amp;rsquo;t care about it, it really don&amp;rsquo;t make sense when you have a strong opinion on the subject against it. You having a strong opinion doesn&amp;rsquo;t change &lt;em>your&lt;/em> world. But it changes things for people who do want it. Privacy is about having the possibility of having another Snowden or Julian Assange. It is about the freedom for you in the future. Having a surveillance state makes it impossible for that to happen. The fear to talk it out makes it an invisible blocker even before you can think about it.&lt;/p>
&lt;blockquote>
&lt;p>In another recent incident that gave me chilling insight into the power of government surveillance, I met with a sensitive and well-placed source through an intermediary. After the meeting, which occurred a few years ago in Europe, I began to do research on the source. About an hour later, I got a call from the intermediary, who said, “Stop Googling his name.”&lt;/p>
&lt;ul>
&lt;li>&lt;em>From &lt;a href="https://theintercept.com/2018/01/03/my-life-as-a-new-york-times-reporter-in-the-shadow-of-the-war-on-terror/">The biggest secret: My Life as a New York Times Reporter in the Shadow of the War on Terror&lt;/a>&lt;/em>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;h2 id="my-team-is-divided">My team is divided&lt;/h2>
&lt;p>Even the privacy enthusiasts are divided on how to solve the privacy issue. And also about the definition of privacy. A lot of people like to use an unpopular piece of software like Signal for their communication. But the moment it became remotely mainstream post Whatsapp&amp;rsquo;s privacy policy change, they didn&amp;rsquo;t want to use it anymore. Same way people argue about what the solution should be as well. In my opinion it is very simple. If it&amp;rsquo;s illegal/unlawful to do in person, it should be the same digitally. If it&amp;rsquo;s OK for 1000&amp;rsquo;s of companies to stalk people online, why is it any different when it&amp;rsquo;s done offline? Both eventually leads to harm. But in varied different ways and scale.&lt;/p>
&lt;h2 id="so-what-can-we-do">So what can we do?&lt;/h2>
&lt;p>I think first and foremost, what we can do is make awareness about privacy. Then, acknowledgement that this is a problem and not something we should be tolerating. So that these ridiculisation and toxic positivity nature againts surveillance can be stopped. Then there is the fact about how to take actions. We can start with reducing the sharing of data whereever possible. It is a reality by now that achieving 100% privacy is impossible. But what we can do is reduce the sharing of data. Or creation of data for these surveillance corporations. The data economy sustains itself with the continous stream of data. We can cut the flow. While there are personal identifying information (PII) like address, phone or email which cannot be changed, there are things that are in our control.&lt;/p>
&lt;p>Start with basics:&lt;/p>
&lt;ul>
&lt;li>Disallow location permission for all unnecessary apps.&lt;/li>
&lt;li>Disallow microphone access for all unnecessary apps.&lt;/li>
&lt;li>You bank app doesn&amp;rsquo;t need contacts permission. Neither does your food delivering app (Why do you need it Zomato?).&lt;/li>
&lt;li>Stop sharing phone numbers with shops and other places. This is a common practice in India.
&lt;ul>
&lt;li>It is neither mandatory nor necessary. This is the main way by which your data is shared by local data brokers who sell it endlessly eventually ending up in data breaches or in the hands of threat actions. This is even more worse than big corporations who at least in some cases have to go through compliances and data protection laws/policies.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>And we can start from the above and work our way through depending on our comfort levels. Not everyone needs to do things like Edward Snowden or Julian Assange.&lt;/p>
&lt;h2 id="how-can-we-protect-our-digital-life">How can we protect our digital life?&lt;/h2>
&lt;p>By using an adblocker would be an obvious good start in your browser. Then there is using privacy friendly software like Firefox browser instead of chrome. Just switching on enhanced tracking protection alone will save a lot of issues. And using better search engines like &lt;a href="https://duckduckgo.com/">DuckDuckGo&lt;/a> or &lt;a href="https://kagi.com/">Kagi&lt;/a>. And if you want VPN&amp;rsquo;s, use &lt;a href="https://mullvad.net/en">Mullvad&lt;/a> or Proton VPN. &lt;a href="https://www.privacyguides.org/">Privacy Guides&lt;/a> is also a great resource to get started with. There are software recommendations and guides for learning and getting better at privacy. And move your email from gmail would be another. Why move from gmail? Cos they read all your emails. This means your bank accounts and transactions as well among other things. These are basic steps that you can take for starters. And do let me know if there is an interest from any single person about taking it to the next level. I can write about them as well.&lt;/p>
&lt;h2 id="credits">Credits&lt;/h2>
&lt;p>Super thankful to &lt;a href="https://en.wikipedia.org/wiki/Eliezer_Yudkowsky">Eliezer Yudkowsky&lt;/a> for allowing me to use the fire alarm example and headline from his article &lt;a href="https://intelligence.org/2017/10/13/fire-alarm/">There’s No Fire Alarm for Artificial General Intelligence&lt;/a>. This article has been the north star for me since before ChatGPT got released and has been after it.&lt;/p>
&lt;h2 id="references-and-links">References and links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Bystander_effect">https://en.wikipedia.org/wiki/Bystander_effect&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Tin_foil_hat">https://en.wikipedia.org/wiki/Tin_foil_hat&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://intelligence.org/2017/10/13/fire-alarm/">https://intelligence.org/2017/10/13/fire-alarm/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.privacyguides.org/">https://www.privacyguides.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://newatlas.com/computers/smartphone-listening-conversations-ads-facebook/">https://newatlas.com/computers/smartphone-listening-conversations-ads-facebook/&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Computers and upgrades</title><link>https://www.unsungnovelty.org/posts/05/2026/computers-and-upgrades/</link><pubDate>Sun, 03 May 2026 23:36:15 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2026/computers-and-upgrades/</guid><description>&lt;p>My first computer was a Desktop with AMD Sempron processor which used to run at 1.6GHz. It was blazing fast! (Atleast until my neighbour got a better one.). It came with Windows XP and 512GB HDD. I learned all my computer black magic with it. I got my first Ubuntu CD mailed to me (from London!) when I had this computer. It came installed with GTA2. I played GTA3, Vice City, Thing 2, Age of Empire, Crazy Taxi, Claw 2 among other games. Everything until Prince of Persia Two Thrones worked on it. I still remember changing some random file and it&amp;rsquo;s settings which made the game run fast on my limited hardware. It is the first computer which I opened up as well. Installed SMPS when my old one gave way. That was the only desktop I&amp;rsquo;ve had. The rest are all laptops. My first laptop still works as well. I run latest Arch in it despite it being 15+ years old. Despite it being toothless (lost a couple of keyboard keys, lost the speaker and finally have a line through the display since recently). As you might have observed, I am very attached to my computers. I use them for a long time.&lt;/p>
&lt;p>Recently, I wanted to try out coding with a limited hardware. Hoping it would lead to better code. For this reason, I migrated from my 2018 Thinkpad X Carbon to my first laptop. It was rather successful I should say. But as soon as I started daily driving it, it started heating up too much and I was afraid it was going to break. So I have officially tagged him retired. I have him for my small small experiments. Trying out FreeBSD, OpenBSD or NetBSD in it in one partition and doing light computing with it with the other. Like writing for this website.&lt;/p>
&lt;p>Since my first desktop back home hasn&amp;rsquo;t been switched on for almost a decade, I wanted to see if I can resurrect it again. Something that is ~20ish years old. This happened last year in 2025 by the way. I bought a new DDR2 (?) RAM from Amazon and tried making it boot. I found that motherboard had become rusty with pins and other components having visible rust. But not until I had to open it up after what happened when I tried switching it on. But I was hopeful (for god knows what reason!). Cos I remember replacing the SMPS within the last decade and assumed all could be well with new RAM and relatively new SMPS. The fact that the cabinet&amp;rsquo;s light came up gave me unrealistic confidence that I am about to see my old Windows XP installation with KMPPD-MBHKT-8MKRK-RKCP6&amp;hellip;. Hmmm! I have finally forgotten my old Windows XP licence key. I have reinstalled that OS countless time. Sometimes multiple times a day. Anyways, it just threw a lot of sparks due to rust and made a loud pfff sound. Sadly it didn&amp;rsquo;t wake up from that sleep. The key part here is that it &lt;em>tried&lt;/em> to switch on. Despite being not touched for so long.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/computers/rusty-optimus-prime.gif"
 alt="The rusty optimus prime tries to go fight and falls down with electric sparks from inside of the body in front of cade yeanger"/>
&lt;/figure>

&lt;p class="text-center italic">My 20 year old desktop after being switched on after a decade&lt;/p>&lt;/p>
&lt;h2 id="laptops-vs-desktops">Laptops vs Desktops!&lt;/h2>
&lt;p>Forward to now, I am in the market for a new computer. Obviously, laptops right? But why not a desktop? No no. Not a fancy custom PC which will run 40B parameter local LLM. But an upgrade for my laptop hardware that I have. Apart from work computer, I don&amp;rsquo;t move around much with my laptop. I put it in my backack. And when I want it, I open it and put it on top of the same table I use it everyday on. Always plugged on. So a desktop which is an upgrade from 7th gen Core i7 U prrocessor might not be bad idea. Maybe to a 14th gen desktop Core i3. Or maybe a 9000 series Ryzen 5 desktop processor.&lt;/p>
&lt;p>Comparison which surprises no one:
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/computers/intel7thgen-vs-14thgen-compare.png"
 alt="Comparing Intel Core i7 7th generation 7600U laptop processor with 14th Generation Core i3 14100F desktop computer"/>
&lt;/figure>

&lt;p class="text-center italic">Comparing Intel Core i7 7th generation 7600U laptop processor with 14th Generation Core i3 14100F desktop computer&lt;/p>&lt;/p>
&lt;p>And I can get this setup for &amp;lt;₹50,000 (Approx. $527) excluding monitor and peripherals cos I have them. This means I can get 2 of them setup for ₹1,00,000 (~$1000). One for my native place and another one for my Bengaluru home. This is obvious right? I mean, we all know that desktop processors are more powerful than laptop processors. Especially 7 generation differences! Now you might be thinking about portability. Yes. But to me, who has a laptop already, that&amp;rsquo;s a small issue. And I can probably get a Macbook Neo or Air later to solve this as I move most of my computing towards desktop again. Desktop has this permanence to it. And desktop will always run for longer periods with less problems. And any problems can be replaced or be upgraded easily as well. Not to mention, this ₹50,000 is for lil more relaxed and comfy setup. I can cut some cost here and there to make it ₹40,000. Especially since I can always upgrade my parts whenever I want.&lt;/p>
&lt;p>I started thinking about this because my dad got a new laptop an year ago. Asus Vivobook which costs around ~₹85,000 (~$900). It stopped working recently and it&amp;rsquo;s motherboard had to be replaced. And it already has charging issues. Within one year. I can&amp;rsquo;t assume this coming up for a desktop. At least not as often as laptops having issues. Not to mention that my dad just wants to run spreadsheets and a browser for his work. He doesn&amp;rsquo;t take it anywhere and essentially uses it like a desktop. He could&amp;rsquo;ve setup a good enough desktop for half the price and better performance. But apparently laptops are the norm and we go get a new one without thinking while making unnecessary hardware/quality/reliability sacrifices. I don&amp;rsquo;t think this is a rare instance. I know a lot of people who uses laptops as desktop like this. Including me. Maybe a desktop and a laptop should be good enough for portability and hardcore work for a developer or a tech worker. And for the rest, it might not be a bad idea to go back to desktops instead of half baked products which has heating issues, battery issues and what not. So why not move the majority of our computing back to desktop instead of a inferior laptop which could cost 2x desktops? Let&amp;rsquo;s go back to 2010s where most had a desktop and only people who had the need had a laptop. I know not everyone can move away from laptops. For example students. And moving away from laptop is not the ask here as well. It is just to get something according to your needs and not default to laptop just because laptops are the norm now. I definitely think there is a crowd for which desktops are a better choice instead of laptops.&lt;/p></description></item><item><title>Engineering</title><link>https://www.unsungnovelty.org/gallery/engineering/</link><pubDate>Sat, 29 Nov 2025 19:52:23 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/engineering/</guid><description/></item><item><title>Underdog</title><link>https://www.unsungnovelty.org/gallery/underdog/</link><pubDate>Sat, 29 Nov 2025 19:44:03 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/underdog/</guid><description/></item><item><title>Layers</title><link>https://www.unsungnovelty.org/gallery/layers/</link><pubDate>Sat, 29 Nov 2025 19:43:57 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/layers/</guid><description/></item><item><title>Old School</title><link>https://www.unsungnovelty.org/gallery/old-school/</link><pubDate>Sat, 29 Nov 2025 19:30:15 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/old-school/</guid><description/></item><item><title>Warmth</title><link>https://www.unsungnovelty.org/gallery/ray-of-light/</link><pubDate>Sat, 29 Nov 2025 19:07:53 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/ray-of-light/</guid><description/></item><item><title>Everything the light touches</title><link>https://www.unsungnovelty.org/gallery/light-touches/</link><pubDate>Sat, 29 Nov 2025 13:57:17 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/light-touches/</guid><description/></item><item><title>So what is Open Source Software in a Source Available Software world?</title><link>https://www.unsungnovelty.org/posts/10/2025/oss-and-sas/</link><pubDate>Sat, 18 Oct 2025 14:27:49 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/10/2025/oss-and-sas/</guid><description>&lt;p>Open Source Software(OSS) has gone through a lot of battles over the years. The recent two of &amp;rsquo;em has been from source available software licenses and Large Language Models (LLMs). Source available predates the LLM/AI trend (in it&amp;rsquo;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>
&lt;h2 id="so-what-is-open-source-software">So, what is Open Source Software?&lt;/h2>
&lt;p>The whole point of OSS was to provide software with 4 freedoms:&lt;/p>
&lt;ol>
&lt;li>To run the program&lt;/li>
&lt;li>To study and change the program in source code form&lt;/li>
&lt;li>To redistribute exact copies&lt;/li>
&lt;li>To distribute modified versions.&lt;/li>
&lt;/ol>
&lt;p>The idea was to encourage software that can be tinkered. And also be used &lt;em>for any purposes&lt;/em> as long as you comply by the very few restrictions which guarantees the freedom mentioned using &lt;a href="https://opensource.org/licenses">OSS licenses&lt;/a>. The idea behind Open Source wasn&amp;rsquo;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&amp;rsquo;t always work the way it&amp;rsquo;s supposed to be. But that is another problem. And it won&amp;rsquo;t be solved by creating new problems.&lt;/p>
&lt;h2 id="free-as-in-freedom-open-source-and-free-as-in-beer-source-available">Free as in freedom (Open Source) and free as in beer (Source available)&lt;/h2>
&lt;p>You might&amp;rsquo;ve heard of people explaining open source as free as in freedom and not free as in beer. What this means is the &amp;ldquo;free&amp;rdquo; 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>for any purpose&lt;/em> (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">Free Software Foundation encourages you to make money from OSS&lt;/a>. 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>
&lt;h2 id="what-is-source-available-software">What is Source Available Software?&lt;/h2>
&lt;p>Source available software means the source of the software is available for you to read. But doesn&amp;rsquo;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/">FUTO&lt;/a>, &lt;a href="https://herman.bearblog.dev/license/">Bear Blog&lt;/a>, Terraform or &lt;a href="https://github.com/liquibase/liquibase/issues/7374">Liquibase&lt;/a>, it&amp;rsquo;s always about control or money.&lt;/p>
&lt;p>One of the most common Source Available Software license is &lt;a href="https://en.wikipedia.org/wiki/Business_Source_License">Business Source License&lt;/a>. You can read more about the different types of SAS licenses &lt;a href="https://en.wikipedia.org/wiki/Source-available_software">here&lt;/a>.&lt;/p>
&lt;h2 id="why-dont-you-like-source-available-software">Why don&amp;rsquo;t you like Source Available software?&lt;/h2>
&lt;p>I don&amp;rsquo;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>&amp;ldquo;weakness&amp;rdquo;&lt;/em> that has made it flourish.&lt;/p>
&lt;h2 id="but-big-tech-is-taking-advantage-of-the-small-guys">But Big Tech is taking advantage of the small guys!!&lt;/h2>
&lt;p>NO. It&amp;rsquo;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&amp;rsquo;t want OSS in the first place. Or that you were using the wrong OSS license. Or didn&amp;rsquo;t know what you are getting into. Maybe you didn&amp;rsquo;t expect your software grow this big. Be in a spotlight like it eventually did. But the issue is clearly that &lt;em>you changed&lt;/em>. &lt;em>Not OSS&lt;/em>. Also, you can track the code smell of it all back to &lt;em>somebody is making money or have used my OSS in ways I don&amp;rsquo;t approve off&lt;/em>. 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>
&lt;p>Not to mention, it works both ways. You can fork any Amazon&amp;rsquo;s OSS and spin up a SaaS as well. This is literally why &lt;a href="https://cursor.sh/">Cursor&lt;/a> 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&amp;rsquo;t have been possible. The software industry in it&amp;rsquo;s current form exists because of OSS. With SAS, it is only about money and control disguised as limiting &lt;em>&amp;ldquo;OSS can fork or redistribute&amp;rdquo;&lt;/em> freedom. This means, &lt;a href="https://opentofu.org/">OpenTofu&lt;/a> wouldn&amp;rsquo;t have happened if Terraform was SAS in the first place. &lt;a href="https://maplibre.org/">MapLibre&lt;/a> wouldn&amp;rsquo;t have been possible when &lt;a href="https://github.com/mapbox/mapbox-gl-js/blob/main/CHANGELOG.md#200">Mapbox GL JS became closed source&lt;/a>. 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>
&lt;p>Then there is the VC companies crying &lt;em>BIG Tech killing us&lt;/em> 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&amp;rsquo;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">Business Source License&lt;/a>.&lt;/p>
&lt;h2 id="why-is-forking-and-redistributing-possible-with-oss-and-why-is-it-important">Why is forking and redistributing possible with OSS and why is it important?&lt;/h2>
&lt;p>The freedoms of OSS which allows you to do the below allows you to fork a software.&lt;/p>
&lt;ol>
&lt;li>To run the program&lt;/li>
&lt;li>To study and change the program in source code form&lt;/li>
&lt;li>To redistribute exact copies, and&lt;/li>
&lt;li>To distribute modified versions.&lt;/li>
&lt;/ol>
&lt;p>These freedoms are extremely important. Because without these freedoms, there wouldn&amp;rsquo;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&amp;rsquo;t want to, then you didn&amp;rsquo;t want OSS from the start. At least in Herman&amp;rsquo;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/">his post about the license change&lt;/a>, free loading is going to increase. But at the same time, that was always possible. And &lt;em>&amp;ldquo;free loading&amp;rdquo;&lt;/em> (a.k.a right to redistribute) as he puts it is one of the OSS freedoms. Maybe it wasn&amp;rsquo;t possible in the current LLM speeds. But still, it&amp;rsquo;s not a new issue.&lt;/p>
&lt;p>Not to mention, software is not the only thing in a business. I don&amp;rsquo;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&amp;rsquo;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">what&amp;rsquo;s up x.org&lt;/a> ??), you wouldn&amp;rsquo;t be able to do anything. This is why I don&amp;rsquo;t think SAS can have the level of community involvement OSS always will have.&lt;/p>
&lt;h2 id="but-if-you-want-good-software-you-should-pay">But if you want good software, you should pay!&lt;/h2>
&lt;p>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&amp;rsquo;t butcher the OSS movement. And let&amp;rsquo;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>
&lt;h2 id="so-what-is-your-solution">So what is your solution?&lt;/h2>
&lt;p>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">Death of an Open Source Business Model by Joe Morrison&lt;/a> 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">here&lt;/a>. Whcih talks about the pain points Herman and others mentioned about OSS. While I personally don&amp;rsquo;t think it is dead as per the former article, I also don&amp;rsquo;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&amp;rsquo;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&amp;rsquo;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>
&lt;ul>
&lt;li>Python is faster because of Microsoft&amp;rsquo;s recent investment.&lt;/li>
&lt;li>React changed UI library with Facebook money.&lt;/li>
&lt;li>&lt;a href="https://www.linuxfoundation.org/about/members">Linux Foundation&lt;/a> and &lt;a href="https://rustfoundation.org/members/">Rust Foundation&lt;/a> are run by companies which a lot of OSS folks dislike.&lt;/li>
&lt;/ul>
&lt;p>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/">Zig foundation&lt;/a>, &lt;a href="https://freebsdfoundation.org/donate/">FreeBSD foundation&lt;/a> or &lt;a href="https://www.openbsdfoundation.org/campaign2025.html">OpenBSD foundation&lt;/a>. But let&amp;rsquo;s keep OSS the way it is. And the way it always has been.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Wrote something wrong? Happy to listen. Drop an email to &lt;code>nikhil at unsungnovelty dot org&lt;/code>.&lt;/em>&lt;/p></description></item><item><title>Apps disappearing from my android phone</title><link>https://www.unsungnovelty.org/posts/10/2025/apps-disappearing-from-my-android-phone/</link><pubDate>Fri, 17 Oct 2025 23:34:13 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/10/2025/apps-disappearing-from-my-android-phone/</guid><description>&lt;p>&lt;a href="https://dallasmakerspace.org/2016/07/project-spotlight-ike-todo-list/">Ike Pro&lt;/a> was the first app that I bought with my own money from android play store. It was a to-do list app which introduced me to &lt;a href="https://en.wikipedia.org/wiki/Time_management#Eisenhower_method">Eisenhower Matrix&lt;/a>. This has been my favourite way to prioritise tasks ever since. Coming from a Linux / OSS environment (and being naive and young), paying for an app was way too new to me. But the price was justified and the quality of the app was good.&lt;/p>
&lt;p>I used it for a long time. And after a while, even though I wasn&amp;rsquo;t using it a lot anymore, I still used to come back to it. And after a long gap, I decided to start using the app regularly again. I knew I have it installed on my phone. So, I searched for it only to find that it&amp;rsquo;s not on my phone anymore. The last time I used it was on my 3rd phone since I bought the app. Searching on the play store made me realise that it wasn&amp;rsquo;t listed anymore. Given that I knew it wasn&amp;rsquo;t updated in a long time, I thought OK, maybe I uninstalled it. Cos I regularly cleanup my phone&amp;rsquo;s files and apps. But I didn&amp;rsquo;t find any app good enough like Ike. Not even now, when Eisenhower matrix based apps are finally picking up steam.&lt;/p>
&lt;p>The same thing happened again today morning. But this time, it was &lt;a href="https://www.privacyguides.org/en/multi-factor-authentication/#aegis-authenticator-android">Aegis&lt;/a> - the TOTP authenticator. A far more serious issue. The app was v2.x which cannot be upgraded to v3.x because of some compatibility issue. While I had migrated most of my 2FA codes to another app, I didn&amp;rsquo;t do the same for some rarely used app logins. I don&amp;rsquo;t remember why. While it is true that it was my mistake to not update the app for so long, I can&amp;rsquo;t stress enough that the app was working perfetcly fine. It was an offline only app. For now, I can search my phone and it opens my &lt;em>app info page&lt;/em> for Aegis. From here, I can open the app. But I don&amp;rsquo;t know how long that will work. And I am not sure if google will delete it like they did for Ike. Or did they? I really don&amp;rsquo;t know. But I will keep a close eye this time.&lt;/p>
&lt;h2 id="androids-google-problem">android&amp;rsquo;s google problem&lt;/h2>
&lt;p>The never ending cycle of developers having to update the app for googles api changes have killed solo devs like Ike. Only apps left are the big tech, VC funded or scammy spywares. Excuse is always security. But the fact that we cannot keep enough backward compatibility anymore saddens me. Or the fact that we are unable to make reliable app which doesn&amp;rsquo;t need to be updated regularly. Especially the offline-only apps which can eventually be considered finished. Not to mention the random policies that can make a perfectly fine app disappear from your phone.&lt;/p>
&lt;p>If Jenny Spurlock and Long Ma, the creators of Ike to-do are reading this - thank you! I bought the app in 2016. And I still remember it after almost a decade.&lt;/p></description></item><item><title>Urban Beauty</title><link>https://www.unsungnovelty.org/gallery/urban-beauty/</link><pubDate>Wed, 28 May 2025 09:12:31 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/urban-beauty/</guid><description/></item><item><title>You don't need AI summaries, tldr or to be on top of things</title><link>https://www.unsungnovelty.org/posts/04/2025/you-dont-need-ai-summaries-tldr-or-to-be-on-top-of-things/</link><pubDate>Sun, 20 Apr 2025 18:16:05 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/04/2025/you-dont-need-ai-summaries-tldr-or-to-be-on-top-of-things/</guid><description>&lt;p>At Mapbox, we used to have catchups with other colleagues. Just check with them and see if they are free. If yes, drop an invite and they will come out of their busy schedule and spend some time with you. Some of them was monthly. Some happened every once in a while. But it was one of the best thing I got out of that place. Getting to know a lot of cool people. So during such a catchup, I walked with my developer colleague (I was not yet a developer then). We talked about office, work and technology. I asked her if she had heard about this new tech thing and she said NO. I thought to myself, how could she not know? She is a developer and this is really in her domain. But she was also one of the smartest ones in the office. So I was very confused. She could be much more than what she was then by being on top of things. Or so I felt. I was a wannabe developer and I was always trying to be on top of things. So I didn&amp;rsquo;t realise why this was a stupid thought then.&lt;/p>
&lt;p>Podcasts, Hacker News, Tech blogs, Youtube channels, you name it and I was consuming it. Consuming with targets in mind. 2 episodes of podcasts everyday. 20 pages of that book. But as life got busy, this became harder. So I tried to do what everyone else did. TLDRs;, summaries, increase the play speed to 1.75x for podcasts etc. The focus was always on quantity and not quality. I remember, there was even a trend and an cry for tldr; on blog posts. This was essentially handwritten AI summaries before LLMs. It would always make me uncomfortable. If you didn&amp;rsquo;t think it was worth your time to consume it properly, why bother consuming it at all? Even during conversations people wanted TLDR;. Why do you need a TLDR; ? I mean why are you in the conversation then? You don&amp;rsquo;t need to be if you are not taking value out of this conversation. Things have become worse now. You have AI to do summaries for you. And my thoughts on AI summaries are the same as TLDR;. Sure, there is always gonna be some odd things for which it&amp;rsquo;s perfect. But if your default consumption mode for things like blog posts, audio messages, podcasts, books and even conversations are gonna be summaries, you are consuming mediocre stuff. Just a washed off outline of something that resembles what you wanted to consume. I mean, book summaries blew my mind. If you think you can extract 100% of the books with a 5-15mins summary, you don&amp;rsquo;t understand reading at all. It&amp;rsquo;s a very bad way to reduce your attention span even further than it already is. All of these ai summary services convince you that you need to be on top of things. Consume it all. With a focus on quantity. And that is not good for you. Your focus should be on the quality of the consumption.&lt;/p>
&lt;h2 id="quality-less-consumption-re-consumption-mind-wandering-and-focus">Quality, less consumption, re-consumption, mind wandering and focus&lt;/h2>
&lt;p>Have you ever wondered why shower thougths are called SHOWER thoughts? Because you are letting your brain wander only during showers these days. You are on your phone when you wake up. Then work. Comes back and then watch movies during dinner (or podcasts cos it&amp;rsquo;s &lt;em>&amp;ldquo;productive&amp;rdquo;&lt;/em>). Your brain has zero time to process the things you consume. Consuming things all the time. So when you are in shower, your brain finally gets some free time to process the information you have on your mind right now. Then it sparks something else that is interesting. Something you had on your mind today morning. This is also why after going for a walk you get the solution for the things you were stuck with. Or when you go to sleep, Boom! Suddenly out of nowhere you have the solution you were looking for. Letting your mind wander helps with quality of data extraction from the things you are consuming.&lt;/p>
&lt;p>Let your brain process the things you consumes. Don&amp;rsquo;t go on reading another book immediately after finishing one. Or another podcast episode for that matter. Think about what you have consumed. Try to write things down once you have finished consumption. Reduce the noise. When was the last time you had your lunch and you were not listening to a podcast or watching a movie etc without consuming things? If you are &lt;em>thinking&lt;/em>, you need to change that habit. I am pretty sure the non-stop cosumption effects memory in a bad way. Probably why we don&amp;rsquo;t remember things very well these days even in our 30s. Makes logical sense. You are not focused on what you are doing with non-stop consumption and no time to process it. How do we remember things that the brain hasn&amp;rsquo;t processed? Are we at least sleeping properly to process it during night? How much of it is slipping away through the cracks?&lt;/p>
&lt;p>Same way, re-consumption is very important as well. Rememeber that TV series or movie that you are watching for the 100th time? Yet, you learned something new from it still. A new angle, understood that joke you didn&amp;rsquo;t before or that reference. That&amp;rsquo;s cos you are not the same person who saw it last time. You grew up. You learned things. Your experince and wisdom has improved. This is exactly what happens when you re-read a book or re-listen to that interesting podcast. You discover so many new things. Looks at things from so many different angles. Understand things with a deeper understanding. Re-consumption is extracting maximum from the the things you consume. You will understand it if you had limited things growing up. The few books and movies I had growing up in my home? I have seen it so many times that I knew it inside out. We don&amp;rsquo;t reconsume things like that anymore. Because we have so many new things to consume. This is bad cos we are not consuming it fully. More over, it again comes back to the quantity vs quality part.&lt;/p>
&lt;p>All in all, we don&amp;rsquo;t need to be on top of things. We need to focus on the quality of the consumption. Not quantity. This means, less consumption of things. Things that you actually need. Re-consuming it, be processed by our brain through mind wandering. Leading to better consumption and sparkling ideas. And no. You don&amp;rsquo;t need a TLDR;. You don&amp;rsquo;t need an AI summary service. And if you are looking for a summary, maybe you don&amp;rsquo;t need to consume that. Extract maximum information from your consumption. Just consume better.&lt;/p></description></item><item><title>Sunset Orange</title><link>https://www.unsungnovelty.org/gallery/sunset-orange/</link><pubDate>Sun, 29 Dec 2024 06:12:40 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/sunset-orange/</guid><description/></item><item><title>Life of a blog - blogging in 2024 and beyond</title><link>https://www.unsungnovelty.org/posts/10/2024/life-of-a-blog-blogging-in-2024-and-beyond/</link><pubDate>Mon, 28 Oct 2024 10:14:38 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/10/2024/life-of-a-blog-blogging-in-2024-and-beyond/</guid><description>&lt;p>I created &lt;a href="https://www.unsungnovelty.org/">my website&lt;/a> 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/">Why I Have a Website and You Should Too by Jamie Tanna&lt;/a> and &lt;a href="http://john.ankarstrom.se/html/">Writing HTML in HTML by John Ankarström&lt;/a>. While I haven&amp;rsquo;t gotten to writing HTML in HTML as mentioned in John&amp;rsquo;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>
&lt;p>People have been predicting it&amp;rsquo;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>blogs and blogging will survive&lt;/strong>. In fact, I feel there has been an increase in blogs thanks to next generation SSG&amp;rsquo;s like Hugo, 11ty and others. Hosting options has never been more accessible thanks to GitLab Pages, GitHub Pages, Netlify and others.&lt;/p>
&lt;h2 id="life-of-a-blog">Life of a blog&lt;/h2>
&lt;p>But why are we seeing that blogging is dead posts from time to time? I mean, I don&amp;rsquo;t have a clear cut answer for that. Maybe what blogging &lt;em>is&lt;/em> 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>
&lt;h2 id="the-hardest-part-of-blogging-is-to-keep-writing">The hardest part of blogging is to keep writing&lt;/h2>
&lt;p>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&amp;rsquo;s excitement and motivation with you. But for most, you won&amp;rsquo;t have it once you are done with your tech project - the website. So once you are done with your hello world post, it&amp;rsquo;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>
&lt;p>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&amp;rsquo;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&amp;rsquo;t write since January of this year.&lt;/p>
&lt;h2 id="where-do-i-find-other-personal-blogs">Where do I find other personal blogs?&lt;/h2>
&lt;p>It&amp;rsquo;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">POSSE&lt;/a>) the articles in &lt;a href="https://medium.com/@unsungnovelty">Medium&lt;/a>, &lt;a href="https://unsungnovelty.bearblog.dev/">Bear Blog&lt;/a>, &lt;a href="https://dev.to/unsungnovelty">Dev.to&lt;/a> and &lt;a href="https://unsungnovelty.hashnode.dev/">Hashnode&lt;/a>. 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&amp;rsquo;t have a comment section.&lt;/p>
&lt;p>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>
&lt;ul>
&lt;li>&lt;a href="https://250kb.club/">https://250kb.club/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://512kb.club/">https://512kb.club/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://1mb.club/">https://1mb.club/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://indieblog.page/">https://indieblog.page/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://news.cryptic.io/">https://news.cryptic.io/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://search.marginalia.nu/">https://search.marginalia.nu/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://daverupert.com/rss-club/">https://daverupert.com/rss-club/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>I have to also say that I have been enjoying &lt;a href="https://search.marginalia.nu/">Marginalia search&lt;/a>. You can find a lot of new interesting blogs by searching for different topics.&lt;/p>
&lt;p>There are more of them with their takes and inspiring stories in the below hacker news threads:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://news.ycombinator.com/item?id=35164819">Ask HN: What has your personal website/blog done for you?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://news.ycombinator.com/item?id=22800136">Ask HN: What is your blog and why should I read it?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://news.ycombinator.com/item?id=36575081">Ask HN: Could you share your personal blog here?&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>And on top of this, a lot of blogs will have a &lt;a href="https://indieweb.org/blogroll">blogroll&lt;/a>. Mine is &lt;a href="https://www.unsungnovelty.org/about/#blogroll">here&lt;/a>. That is an interesting way to find inspirations and interests of blogs you follow.&lt;/p>
&lt;h2 id="i-dont-have-a-blog-how-do-i-start-one">I don&amp;rsquo;t have a blog. How do I start one?&lt;/h2>
&lt;p>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>
&lt;h2 id="blogging-starter-pack">Blogging starter pack&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://gohugo.io/">Hugo&lt;/a>&lt;/li>
&lt;li>Netlify&lt;/li>
&lt;/ul>
&lt;p>Main reason for choosing Hugo is that it is a single package. Install the package and you don&amp;rsquo;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>
&lt;p>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">tracking scripts to the website&lt;/a>. I am not sure if this includes analytics. It probably does. I haven&amp;rsquo;t got the time to investigate this which is why I haven&amp;rsquo;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>
&lt;p>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/">goat counter&lt;/a> 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>
&lt;h2 id="blogs-and-blogging-are-not-going-anywhere">Blogs and blogging are not going anywhere&lt;/h2>
&lt;p>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&amp;rsquo;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&amp;rsquo;t start a blog because they kept seeing it&amp;rsquo;s dead.&lt;/p>
&lt;h2 id="more-reading">More reading&lt;/h2>
&lt;p>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&amp;rsquo;s evolution is interlinked with blogging and personal websites in a lot of ways. You will love the series. Check it out.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://cloudcannon.com/blog/ssg-history-1-before-jekyll/">https://cloudcannon.com/blog/ssg-history-1-before-jekyll/&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="references-and-links">References and links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://chrismcleod.dev/blog/blogging-is-where-its-at-again/">https://chrismcleod.dev/blog/blogging-is-where-its-at-again/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.ribbonfarm.com/2024/10/10/ribbonfarm-is-retiring/">https://www.ribbonfarm.com/2024/10/10/ribbonfarm-is-retiring/&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>A Linux distro recommendation framework and my picks</title><link>https://www.unsungnovelty.org/posts/01/2024/a-linux-distro-recommendation-framework-and-my-picks-for-2024/</link><pubDate>Mon, 22 Jan 2024 09:32:28 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/01/2024/a-linux-distro-recommendation-framework-and-my-picks-for-2024/</guid><description>&lt;p>&lt;em>&amp;ldquo;Which Linux distro should I use?&amp;rdquo;&lt;/em> 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&amp;rsquo;t fit someone&amp;rsquo;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&amp;rsquo;t make sense to you.&lt;/p>
&lt;h2 id="who-is-this-for">Who is this for?&lt;/h2>
&lt;ul>
&lt;li>People who are doing Desktop computing (not servers)&lt;/li>
&lt;li>If you are the IT guy on work or for your family/friends&lt;/li>
&lt;li>New and Old people alike. Even if you are 60+ years old folks&lt;/li>
&lt;li>Developer or power users&lt;/li>
&lt;li>Users wanting to use Linux for professional use cases&lt;/li>
&lt;li>Users wanting to use Linux for personal use cases&lt;/li>
&lt;/ul>
&lt;h2 id="who-is-this-not-for">Who is this NOT for?&lt;/h2>
&lt;ul>
&lt;li>Designers who are stuck with some proprietary tools.&lt;/li>
&lt;li>People who are NOT ready to learn and change&lt;/li>
&lt;/ul>
&lt;h2 id="vocabulary">Vocabulary&lt;/h2>
&lt;p>Terminologies which you want to be aware of.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Term&lt;/th>
&lt;th>Meaning&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Distro&lt;/td>
&lt;td>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&amp;rsquo;s brain. Eg; Debian, Linux Mint are Linux distros.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Community based distro&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Community driven distro&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Linux Derivative (Based on Distro)&lt;/td>
&lt;td>Distro&amp;rsquo;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&amp;rsquo;s packages for Ubuntu Linux.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Independent distro&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Upstream provider&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Downstream provider&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Point release distro&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;tr>
&lt;td>Rolling release distro&lt;/td>
&lt;td>Unlike point release distros which releases new major version in a regular interval like 6 months, rolling releases doesn&amp;rsquo;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>
&lt;/tr>
&lt;tr>
&lt;td>Repos of a distro (Unstable/Testing/Stable)&lt;/td>
&lt;td>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&amp;rsquo;t mean the package itself is stable or unstable. Meaning, if Firefox v110.0.1 is in unstable repos of a distro, it doesn&amp;rsquo;t mean Firefox is unstable. It just means the distro hasn&amp;rsquo;t tested Firefox v110.0.1 against them to ensure it is working properly.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="checklist">Checklist&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Check&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>✓&lt;/td>
&lt;td>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&amp;rsquo;s not fight over which one is the best.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>✓&lt;/td>
&lt;td>If possible, choose independent distros which doesn&amp;rsquo;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>
&lt;/tr>
&lt;tr>
&lt;td>✓&lt;/td>
&lt;td>For personal computing, choose rolling release so that you always have &lt;del>bleeding edge&lt;/del> up-to-date &lt;strong>stable&lt;/strong> versions of packages from upstream. It&amp;rsquo;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>
&lt;/tr>
&lt;tr>
&lt;td>✓&lt;/td>
&lt;td>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&amp;rsquo;t one that is community driven, at least use one that is community oriented.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>✓&lt;/td>
&lt;td>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>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="hardware-is-important">Hardware IS IMPORTANT!&lt;/h2>
&lt;p>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>JUST WORKS&lt;/em> 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&amp;rsquo;t use laptops and hardware from companies like Razer which has bad compatibility with Linux. And please&amp;hellip; don&amp;rsquo;t complain that Linux is bad after that.&lt;/p>
&lt;h3 id="defining-what-supported-hardware-is">Defining what supported hardware is&lt;/h3>
&lt;p>A device is not Linux supported because it boots up your Linux distro. Or when you have all the basic functionality of the device you need works. A supported devices means you get the support equivalent to your Windows or Macbook counterparts. This means, firmware updates, backlight or anyother device specific features like RGB lights or keyboard backlighting. Everything should work. 100%. Not 60% or 80% or 90%.&lt;/p>
&lt;h3 id="where-can-you-get-supported-hardware">Where can you get supported hardware?&lt;/h3>
&lt;p>Linux Vendor Firmware Service (LVFS) website which is responsible for firmware updates for Linux supported device has a list. &lt;a href="https://fwupd.org/lvfs/devices/">https://fwupd.org/lvfs/devices/&lt;/a> shows all the devices which are supported fully. This means, ideally they should get firmware updates and all your features like keyboard backlighting and things like the fingerprint scanner should work. Do read about the device your are gonna get. Because just like mobile devices, entry-level, mid-range and higher-end devices all have different timeframes of support.&lt;/p>
&lt;p>&lt;em>Update: As of 26th Jan 2026, the linux supported list which used to be shown directly has been removed by LVFS project. And it&amp;rsquo;s very confusing. They used to show supported devices/models like laptops and motherboards directly before. I currently don&amp;rsquo;t have a replacement for this. But I will update here once I do.&lt;/em>&lt;/p>
&lt;h2 id="my-recommendations">My recommendations&lt;/h2>
&lt;p>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, &lt;a href="https://en.wikipedia.org/wiki/Fuduntu">Fuduntu&lt;/a>, 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. Fuduntu, Linux Mint, Fedora, Debian and Arch Linux. Of these, I have only found Fuduntu, Linux Mint and Arch Linux suitable for &amp;ldquo;I could use this forever&amp;rdquo; category. But &lt;a href="https://web.archive.org/web/20130421164848/http://www.fuduntu.org/blog/2013/04/15/fuduntu-team-meeting-held-on-april-14-2013/">Fuduntu is dead&lt;/a>. 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>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Distro&lt;/th>
&lt;th>Based On&lt;/th>
&lt;th>Release Model&lt;/th>
&lt;th>Rolling release&lt;/th>
&lt;th>Independent Distro&lt;/th>
&lt;th>Community Based&lt;/th>
&lt;th>Community driven&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Arch Linux&lt;/td>
&lt;td>Independent&lt;/td>
&lt;td>Rolling release&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Linux Mint&lt;/td>
&lt;td>Ubuntu&lt;/td>
&lt;td>Point release&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="honorable-mentions">Honorable mentions&lt;/h3>
&lt;p>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>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Distro&lt;/th>
&lt;th>Based On&lt;/th>
&lt;th>Release Model&lt;/th>
&lt;th>Rolling release&lt;/th>
&lt;th>Independent infra&lt;/th>
&lt;th>Community Based&lt;/th>
&lt;th>Community driven&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Void Linux&lt;/td>
&lt;td>Independent&lt;/td>
&lt;td>Rolling release&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Alpine Linux&lt;/td>
&lt;td>Independent&lt;/td>
&lt;td>Point release&lt;/td>
&lt;td>&lt;a href="https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html#_repositories_releases_and_mirrors#edge">via edge branch&lt;/a>&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PopOS&lt;/td>
&lt;td>Ubuntu&lt;/td>
&lt;td>Point release&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>NixOS&lt;/td>
&lt;td>Independent&lt;/td>
&lt;td>Point release&lt;/td>
&lt;td>via unstable channel&lt;!-- raw HTML omitted -->*&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>✗&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Debian&lt;/td>
&lt;td>Independent&lt;/td>
&lt;td>Point release&lt;/td>
&lt;td>via unstable repo&lt;!-- raw HTML omitted -->*&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;td>✓&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;!-- raw HTML omitted -->*&lt;!-- raw HTML omitted --> &lt;em>Again, unstable/edge here just means it&amp;rsquo;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>&lt;/p>
&lt;p>&lt;em>&lt;strong>Important Note&lt;/strong>&lt;/em>: &lt;em>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&amp;rsquo;t have tier-1/first class support needed if you are using it for work or serious stuff. Which is why I don&amp;rsquo;t recommend it for daily use. Which is why I recommend traditional rolling releases like Arch Linux.&lt;/em>&lt;/p>
&lt;h3 id="why-linux-mint">Why Linux Mint?&lt;/h3>
&lt;p>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&amp;rsquo;t. It always surprises me because Linux Mint is based on ubuntu. But it doesn&amp;rsquo;t have all the problems ubuntu has.&lt;/p>
&lt;p>Linux Mint is IT people&amp;rsquo;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&amp;rsquo;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>
&lt;p>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&amp;rsquo;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>
&lt;h4 id="nix-with-linux-mint">Nix with Linux Mint&lt;/h4>
&lt;p>&lt;em>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>&lt;/p>
&lt;p>You can use Nix with Linux Mint if you want latest stable versions (&lt;a href="https://zero-to-nix.com/concepts/channels">using nixpkgs unstable channel&lt;/a>) but also the reassurance of a stable distro. You get latest stable version of packages and keep the assurance or Linux Mint.&lt;/p>
&lt;p>A good starting point is:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://leward.eu/using-nix-on-linux-mint/">https://leward.eu/using-nix-on-linux-mint/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://nixos.org/manual/nixpkgs/stable/#overview-of-nixpkgs">https://nixos.org/manual/nixpkgs/stable/#overview-of-nixpkgs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://zero-to-nix.com/">https://zero-to-nix.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://zero-to-nix.com/concepts/channels">https://zero-to-nix.com/concepts/channels&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="why-arch-linux">Why Arch Linux?&lt;/h3>
&lt;p>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. And it can get a lil hard as it is intimidating at first. But it is a skill issue which you can fix. 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&amp;rsquo;s easier to fix. Rolling release means you always have the latest &lt;em>stable&lt;/em> packages. Arch also has one of the biggest collection of packages/apps. Whatever they don&amp;rsquo;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">using Nix with Arch Linux&lt;/a>.&lt;/p>
&lt;p>Then there is the Arch Wiki. I have Arch Linux specific documentation for most thing I might want to use:&lt;/p>
&lt;ul>
&lt;li>How do I setup nodejs in Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Node.js">https://wiki.archlinux.org/title/Node.js&lt;/a>&lt;/li>
&lt;li>How do I make Arch Linux more secure? - &lt;a href="https://wiki.archlinux.org/title/Security">https://wiki.archlinux.org/title/Security&lt;/a>&lt;/li>
&lt;li>Hmmm what about AWS and Arch? - &lt;a href="https://wiki.archlinux.org/title/Arch_Linux_AMIs_for_Amazon_Web_Services">https://wiki.archlinux.org/title/Arch_Linux_AMIs_for_Amazon_Web_Services&lt;/a>&lt;/li>
&lt;li>I wonder how I use Zig - &lt;a href="https://wiki.archlinux.org/title/Zig">https://wiki.archlinux.org/title/Zig&lt;/a>&lt;/li>
&lt;li>System maintainence - &lt;a href="https://wiki.archlinux.org/title/System_maintenance">https://wiki.archlinux.org/title/System_maintenance&lt;/a>&lt;/li>
&lt;li>What about all the programming languages packaged for Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Programming_languages">https://wiki.archlinux.org/title/Programming_languages&lt;/a>&lt;/li>
&lt;li>Nix on Arch Linux? - &lt;a href="https://wiki.archlinux.org/title/Nix">https://wiki.archlinux.org/title/Nix&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>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/">https://whatcanidofor.archlinux.org/&lt;/a>.&lt;/p>
&lt;h4 id="packages">Packages&lt;/h4>
&lt;p>Another reason why I recommend Arch Linux is it&amp;rsquo;s packages. Arch provides one of the largest set of packages among Linux distros. Anything that is not available on their official repositories will be available in their Arch User Repository(AUR). AUR holds packages made by users. It will have most proprietary or other packages that are not available on official repositories. Arch is also a primary target for developers. Most of the new software you come across will be already available in the official or AUR.&lt;/p>
&lt;h5 id="what-about-flatpak-snaps--appimages">What about Flatpak, Snaps &amp;amp; appimages?&lt;/h5>
&lt;p>In my opinion, they are all packaging format which tries to unify the packaging process. Or trying to provide rolling release level of updates in a point-release distro. All of them comes with a huge amount of bloat while the container and security marketing thing has been challenged many. The most sensible of them among the three (imo) is appimages. I usually use them only when it is absolutely necessary. Especially since you can install a nix package with less bloat.&lt;/p>
&lt;h4 id="myths-about-arch-linux">Myths about Arch Linux&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>But Arch community is rude&lt;/strong>: Arch Linux is a do-it-yourself distro. They expect you to read stuff. You don&amp;rsquo;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/">help vampires&lt;/a>. 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&amp;rsquo;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>guide&lt;/em> you. Arch is helpful and tolerant to mistakes. Intolerant to help vampires.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Arch is hard!&lt;/strong> : 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">Arch Wiki&lt;/a> 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>
&lt;/li>
&lt;/ul>
&lt;p>Not to mention, Arch now have an &lt;a href="https://wiki.archlinux.org/title/Archinstall">official guided TUI installer&lt;/a> 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>
&lt;ul>
&lt;li>&lt;strong>I won&amp;rsquo;t use Arch since it is not stable:&lt;/strong> My installation is 4-5 years old. Haven&amp;rsquo;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&amp;rsquo;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;em>&lt;strong>I use Arch not just because I can tinker. But because I am lazy.&lt;/strong>&lt;/em> With Arch, I have become lazy because nothing ever breaks&lt;!-- raw HTML omitted -->**&lt;!-- raw HTML omitted -->. 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/">like this Arch news&lt;/a>. 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&amp;rsquo;s are tweaked, Arch Linux has the vanilla kernel shipped it as it is, &lt;em>as much as possible&lt;/em>. 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>
&lt;/ul>
&lt;p>&lt;!-- raw HTML omitted -->**&lt;!-- raw HTML omitted -->&lt;em>&lt;strong>Update:&lt;/strong>&lt;/em> &lt;em>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&amp;rsquo;t break often but it does break. But also, it&amp;rsquo;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>&lt;/p>
&lt;h2 id="myths-from-linux-ecosystem">Myths from Linux ecosystem&lt;/h2>
&lt;p>There are some myths I would like to debunk as they are no longer relevant or is a misunderstanding.&lt;/p>
&lt;h3 id="hardware-doesnt-matter-for-linux">Hardware doesn&amp;rsquo;t matter for Linux&lt;/h3>
&lt;p>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&amp;rsquo;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>
&lt;h3 id="rolling-release-distros-like-arch-linux-are-bleeding-edge-and-unstable">Rolling release distros like Arch Linux are bleeding-edge and unstable&lt;/h3>
&lt;p>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>stable&lt;/em> 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>
&lt;p>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>
&lt;p>People circumvent all of this by using PPA&amp;rsquo;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>
&lt;h3 id="confusion-about-distros-repos-stable-testing-unstable-and-upstream-package-branch-stabledevelopment-or-testing">Confusion about Distro&amp;rsquo;s repos (Stable, Testing, Unstable) and upstream package branch (Stable/development or testing)&lt;/h3>
&lt;p>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&amp;rsquo;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>
&lt;h2 id="faq">FAQ&lt;/h2>
&lt;h3 id="why-not-debian">Why not Debian?&lt;/h3>
&lt;p>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>
&lt;p>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>
&lt;p>You can also make Debian a rolling release by using it&amp;rsquo;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>
&lt;h3 id="why-not-ubuntu">Why not Ubuntu?&lt;/h3>
&lt;p>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&amp;rsquo;t updated anything and it still broke. I am suspecting something Snap since I haven&amp;rsquo;t had time to investigate. Even if it is not, the fact that it breaks like this when Linux Mint and Arch Linux doesn&amp;rsquo;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>
&lt;p>They are notoriously messed up for a Linux newbie to play with. They are not optimal. They don&amp;rsquo;t always work as expected. Previously, I &lt;em>almost&lt;/em> didn&amp;rsquo;t get my current job because I couldn&amp;rsquo;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&amp;rsquo;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>
&lt;h3 id="why-not-fedora">Why not Fedora?&lt;/h3>
&lt;p>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&amp;rsquo;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>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>. 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>
&lt;p>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>IS Arch Linux&lt;/em> by default. So I am not seeing anything that is a standout feature in it.&lt;/p>
&lt;h3 id="why-not-opensuse">Why not OpenSUSE?&lt;/h3>
&lt;p>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&amp;rsquo;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>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>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>
&lt;h2 id="future">Future?&lt;/h2>
&lt;h3 id="linux-land">Linux land&lt;/h3>
&lt;p>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&amp;rsquo;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>
&lt;h3 id="bsd">BSD&lt;/h3>
&lt;p>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>
&lt;p>They are rich in culture and technology. In 2024, one of my goal is to explore BSD&amp;rsquo;s like FreeBSD, OpenBSD, DragonflyBSD and NetBSD more.&lt;/p>
&lt;p>Some reads and sources:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://unixsheikh.com/articles/technical-reasons-to-choose-freebsd-over-linux.html">https://unixsheikh.com/articles/technical-reasons-to-choose-freebsd-over-linux.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://unixsheikh.com/articles/freebsd-is-an-amazing-operating-system.html">https://unixsheikh.com/articles/freebsd-is-an-amazing-operating-system.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd.html">https://unixsheikh.com/articles/why-you-should-migrate-everything-from-linux-to-bsd.html&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.unitedbsd.com/">https://www.unitedbsd.com/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://vermaden.wordpress.com/">https://vermaden.wordpress.com/&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>As always. If you have any feedback. Reach out to me at &lt;code>nikhil at unsungnovelty dot org&lt;/code>.&lt;/em>&lt;/p></description></item><item><title>My memorable OpenStreetMap edits</title><link>https://www.unsungnovelty.org/posts/11/2023/my-memorable-openstreetmap-edits/</link><pubDate>Tue, 14 Nov 2023 15:21:49 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/11/2023/my-memorable-openstreetmap-edits/</guid><description>&lt;p>OpenStreetMap (OSM) is fun and fantastic for so many reasons. One being able to roam around the world from the comfort of your chair. I started &lt;a href="https://www.openstreetmap.org/user/unsungNovelty">mapping on OpenStreetMap&lt;/a> in 2015 by coincidence through a friend. And OSM later became part of my work at Mapbox. Where I went through out the world as an armchair mapper. I used to maintain a list of interesting places as I encountered them. Then map it later when I am free. Here are my 3 memorable OpenStreetMap edits.&lt;/p>
&lt;h2 id="valparai-tamil-nadu-india">Valparai, Tamil Nadu, India&lt;/h2>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/Tea_Plantations_in_Valparai,_Tamil_Nadu.jpg"
 alt="Beautiful image of tea plantations in Valparai sprinkled by big trees in between the tea plants"/>
&lt;/figure>

&lt;p class="text-center italic">Tea plantations in Valparai by Thangaraj Kumaravel&lt;/p>
Image license: &lt;a href="https://creativecommons.org/licenses/by/2.0/deed.en">CC BY 2.0 Deed&lt;/a>&lt;/p>
&lt;p>I have been to Valparai several times as a kid during summer vacations. It&amp;rsquo;s surreal and beautiful. My uncle&amp;rsquo;s place there used to be at the top of the hill, above the clouds itself. You won&amp;rsquo;t be able to see the road when it is cloudy. We used to play hide and seek in these gigantic guava trees. Or maybe they felt gigantic as I was a kid then. Trees were our targets because leopards were regular visitors and we were not &lt;em>&amp;ldquo;technically&amp;rdquo;&lt;/em> allowed to go out of house plot.&lt;/p>
&lt;p>Valparai hence was one of the places I always wanted to map due to cherished memories. Which is what I did. I have put in hours here to map detailed map features. Rekindling the memories while doing so were worth the time I have put into adding data here.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/valparai-osm.png"
 alt="Screenshot of Valparai in openstreetmap.org"/>
&lt;/figure>

&lt;p class="text-center italic">Screenshot of Valparai in openstreetmap.org&lt;/p>&lt;/p>
&lt;h3 id="my-edit">My edit&lt;/h3>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/valparai-osm-my-edits.png"
 alt="Screenshot of my edits on Valparai in openstreetmap.org"/>
&lt;/figure>

&lt;p class="text-center italic">Screenshot of my edits on Valparai in openstreetmap.org&lt;/p>&lt;/p>
&lt;h2 id="pettineo-sicilia-italy">Pettineo, Sicilia, Italy&lt;/h2>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/pettineo-wiki-image.png"
 alt="Image of pettineo in Wikipedia"/>
&lt;/figure>

&lt;p class="text-center italic">Image of pettineo in Wikipedia&lt;/p>
Image details: © &lt;a href="https://commons.wikimedia.org/wiki/User:LigaDue">LigaDue&lt;/a> | License: &lt;a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0 Deed&lt;/a>&lt;/p>
&lt;p>I came across Pettineo, Sicilia thanks to end user feedback from Mapbox maps. Amazing place. At least from the satellite imagery, it was. To my surprise, it was not mapped at all when I looked at it in JOSM. The edit I did here was far far more grander than Valparai. Or that&amp;rsquo;s how I remember it. What I didn&amp;rsquo;t know was that JOSM somehow hadn&amp;rsquo;t loaded the data of the place. Almost 4ish hours or so of my time resulting in duplicated data as I realised I have mapped over the original data. My edit was extremely detailed over the original data as I recall it. But it did not connected to any data that was already present. Merging felt far more complex and I had to revert my edit.&lt;/p>
&lt;p>After the initial panic and changeset revert, I did edit Pettineo again, it was not as large as my first edit since I didn&amp;rsquo;t have to map half of it. I was just relieved that I was able to fix it as soon as I messed up.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/pettineo-osm.png"
 alt="Screenshot of pettineo in openstreetmap.org"/>
&lt;/figure>

&lt;p class="text-center italic">Screenshot of Pettineo in openstreetmap.org&lt;/p>&lt;/p>
&lt;h3 id="my-edit-1">My edit&lt;/h3>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/pettineo-osm-my-edits.png"
 alt="Screenshot of my edits on Pettineo in openstreetmap.org"/>
&lt;/figure>

&lt;p class="text-center italic">Screenshot of my edits on Pettineo in openstreetmap.org&lt;/p>&lt;/p>
&lt;h2 id="dierks-lake-arkansas">Dierks Lake, Arkansas&lt;/h2>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/dierks-lake-recreationgov.png"/>
&lt;/figure>

&lt;p class="text-center italic">Dierks Lake, Arkansas, USA&lt;/p> Image details: © &lt;a href="recreation.gov/camping/campgrounds/10050271">Recreation.gov&lt;/a>&lt;/p>
&lt;p>Over the years, I have created a huge interest in natural features. Especially water bodies. It started with one of my first few edits where I added some of the swimming pools in Delhi which hosted most of the foreign embassies in India.&lt;/p>
&lt;p>Dierks Lake, Arkansas came through work as well. It had only extremely bare geometry. Which I hate in a waterbody. Or anything natural. Whether it is a waterbody or a tree, they have distinct shape and geometry which should be celebrated. Editing the entire lake was around ~2ish hours of work IIRC. Dierks Lake&amp;rsquo;s mapping was the reason I became a fan of waterbody mapping. And hence has a sweet spot in my heart.&lt;/p>
&lt;h3 id="my-edithttpswwwopenstreetmaporgchangeset43332882map13341767-940974">&lt;a href="https://www.openstreetmap.org/changeset/43332882#map=13/34.1767/-94.0974">My edit&lt;/a>&lt;/h3>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/memorable-osm-edits/dierks-lake-osm-my-edit.png"/>
&lt;/figure>

&lt;p class="text-center italic">My edit on Dierks Lake, Arkansas, USA&lt;/p>&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next?&lt;/h2>
&lt;p>Once you have maps in your life, you will see it everywhere. Apart from some of the map related projects I have been working on, I wanna restart mapping in OSM. Especially natural features like forests, water bodies etc. Here is to creating more map memories.&lt;/p></description></item><item><title>Kulam</title><link>https://www.unsungnovelty.org/gallery/kulam/</link><pubDate>Sun, 15 Oct 2023 06:00:15 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/kulam/</guid><description/></item><item><title>Writing, pouring my heart out and AI articles</title><link>https://www.unsungnovelty.org/posts/06/2023/writing-pouring-my-heart-out-and-ai-articles/</link><pubDate>Tue, 27 Jun 2023 09:02:33 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/06/2023/writing-pouring-my-heart-out-and-ai-articles/</guid><description>&lt;p>Among the things AI has become capable of, is writing well, detailed articles. Articles which can be written in different styles for different moods. As long as you prompt it appropriately. Under an year, you will start seeing visibly high output of articles which are published this way. There will be a high output of marketing and sales articles. Not to mention fake news and propaganda. It will make it harder for readers to differentiate between what is the truth and what is not. There will be people who use it to correct their grammar and typos. Then there will be people who are genuinely trying to make their writing unique with the help of the LLMs/AIs. The reason why I say this is, not all of them will be ill intended on the AI assisted writing spree.&lt;/p>
&lt;p>As someone who writes blog posts on free time, I am not sure how to feel about it. This definitely adds accessibility to people who are not good at writing. It is also very helpful for when someone starts to write. Especially if they intent to write in English and it is not their mother tongue. Obviously we all know that using it when necessary is not bad and is in fact a good idea. But technology is often used in ways it is not intended to be used. So I am just intrigued about writing and AI&amp;rsquo;s.&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>I was reminded of what is perhaps the fundamental rule of technological progress: &amp;ldquo;if something can be done, it probably will be done, and possibly already has been&amp;rdquo;.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Edward Snowden, Permanent Record&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>Maybe, gone will be the days where you will have spelling mistakes and other typos. LLM&amp;rsquo;s will take care of that. Maybe we will be able to recognise human generated text the same way as we recognise spam now? Like the obvious spelling and grammar mistakes they had, AI generated articles might have something off about them. Now, state actors won&amp;rsquo;t be trying to put in the effort to care about any of these. It will be like grammarly on steroids. But it is also going to make it harder for us to differentiate AI generated articles and it&amp;rsquo;s agenda. The propaganda machines and corporate marketing team will have immense resource on persuading people around with very little resources. This means they could scale the operation to a whole new level. Focusing on minute areas which are ignored right now.&lt;/p>
&lt;p>But from a reader&amp;rsquo;s perspective, the changes are little. But maybe more serious. It&amp;rsquo;s not just that we will be coming across many more AI articles than before. But we will also have to focus more on fact checking more than ever before. Something that we have been learning for a while now. So the end user&amp;rsquo;s responsibility of fact checking has been expanded from non-reputable sources to even reputed sources as well now. This is considering the rumours of companies and news media outlets laying off staffs and using AI to write articles. How do you know whether New York Times is using AI or not for their articles? I am not saying NYT only publishes correct things, but they are still reputable compared to many. I mean, how will you know if it is purely written by LLM&amp;rsquo;s or it is just LLM assisted?&lt;/p>
&lt;p>So am just waiting to see how it would turn out in the end. When people doesn&amp;rsquo;t just use it when necessary but also by default and always. The effect it will have on the personality of a blog post. The emotions it&amp;rsquo;s supposed to share or convey. Especially if people using substack, medium and similar platforms starts using it. They are not your ordinary indie web folks who are maintaining their own personal website. This is more of a wonderment than a complain really. Will it make most of the writings similar? Or will using different LLM&amp;rsquo;s result in different styles? What would be left at the end?&lt;/p>
&lt;p>By the time I finished the first draft for this article, Paul Graham actually tweeted about this with his prediction on the topic:
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/pouring-heart-out-and-ai-articles/paul-graham-ai-writing.png"
 alt="Paul Graham&amp;#39;s tweet on AI assisted writing"/>
&lt;/figure>

&lt;p class="text-center italic">Paul Graham&amp;#39;s tweet on AI assisted writing&lt;/p>&lt;/p>
&lt;p>But during a Telegram discussion on the same topic, someone made an interesting point on AI/LLM usage effects while writing:&lt;/p>
&lt;blockquote>
&lt;ol>
&lt;li>For people who know how to write and how to think - yes, if they stop writing, they stop thinking&lt;/li>
&lt;li>For people who do not know how to write, but do know how to think - they have to write prompts and that&amp;rsquo;s where they exercise their thinking, while AI helps them to write&lt;/li>
&lt;li>For people who know how to write and not how to think - well, they will just use AI and get things done faster&lt;/li>
&lt;li>For people who do not know how to write and do not know how to think - then prompting does no harm to their thinking.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>&lt;em>Credits - &lt;a href="https://asd.learnlearn.in/about/">Akshay&lt;/a>&lt;/em>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>This is a very interesting set of points. This puts a lot of context unlike the mostly black and white opinions I have seen on the topic. But depending on the topic expertise, wouldn&amp;rsquo;t we be exercising all these kinds in different scenarios? I have often observed that the things that I already know is forgotten in a different/scenario topic. Information which I can re-use from programming for instance. As a programmer, I know that a big task can be fix more easily by making it into smaller tasks. But when an social/physical often presents itself where this can be easily utilised, I often forget this. Making me re-learn all over again. Only to realise that I have done it later while thinking through the scenario. We are often in self imposed containers when it comes to learning these things. We don&amp;rsquo;t often efficiently carry forward the learnings that &lt;em>we can&lt;/em> in a different setting. We re-learn them.&lt;/p>
&lt;p>As for my writing, I usually come back to most of my published blog posts. Make some edits and improvements. While not all, a lot of my posts are updated from time to time. The process helps me update the article regularly based on my evolving perspectives. Some of the parts of my website are intentionally manual. I enjoy the entire process of writing and publishing. This is because I do this whenever I feel like it. Keeping the novelty of it all in check.&lt;/p>
&lt;p>Then there is reading blog posts as well. The consumption part. It always is inspiring to see other people&amp;rsquo;s writing. The way they write. The thread of an article and how they structure it. These will eventually result in memorable reads. Here are a couple of very different posts that made a huge impression on me:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@webwright/today-is-my-wifes-first-birthday-since-she-died-7369944c43ec">https://medium.com/@webwright/today-is-my-wifes-first-birthday-since-she-died-7369944c43ec&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://intelligence.org/2017/10/13/fire-alarm/">https://intelligence.org/2017/10/13/fire-alarm/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>I come back to them. The emotions speaks for itself in these articles. I wonder how the emotions will evolve with AI articles. Emotions probably would be patterns which the model might figure out without even knowing? But even if it provides the best output, aren&amp;rsquo;t the writer missing out on the whole process of writing? The joy/peace involved in it? Soon a whole new generation will be growing up which didn&amp;rsquo;t know another time where LLM&amp;rsquo;s and their assistance didn&amp;rsquo;t exist. Just like people don&amp;rsquo;t know an era without broadband, an era without dial-up internet and an era without internet at all. There will be a generation who know only LLM/AI assisted writing and life. Will we be eventually outsourcing our writing to machines? Just like how we stopped cursive handwriting? When I write in cursive, people say it is amazing. That my friend is because you haven&amp;rsquo;t seen proper cursive handwriting. Mine is not that great. On the other hand, my dad has one of the best and fluent cursive handwriting. Him on a bad day is mine on a good day.&lt;/p>
&lt;p>I suppose, just like the re-emergence of fountain pens and it&amp;rsquo;s enthusiasts, there will be a portion of people on the internet who will still be writing on their own. We already have a indie web community who are trying to preserve the internet before it went commercial. Again, would that be great? Bad? I don&amp;rsquo;t know. But I started writing because I have something to share. I mean, we always will have something to share. But the clarity I get during the process of writing things makes all the difference. Not to mention, I ended up loving the entire process which all started because I had something to share - the publishing part. Maybe that is because I fall under 1st kind of people from the above list using this tech? In anyways, pouring my heart out and figuring it out has been humbling in a way. Let&amp;rsquo;s hope me pouring my heart out is enough going forward as well.&lt;/p></description></item><item><title>Open Source projects and Non-profit 501(c)(3) vs Non-profit 501(c)(6)</title><link>https://www.unsungnovelty.org/posts/05/2023/open-source-projects-and-non-profit-501c3-vs-non-profit-501c6/</link><pubDate>Sun, 28 May 2023 19:33:51 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2023/open-source-projects-and-non-profit-501c3-vs-non-profit-501c6/</guid><description>&lt;p>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 most common non-profit types used to run 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. The idea is to help communities set better expectations so that they are not surprised by the decisions of these non-profit organisations.&lt;/p>
&lt;h2 id="why-should-you-care">Why should you care?&lt;/h2>
&lt;p>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 the agenda and motivation of a project have possible long term harmful effects while technology is technically sound. Where the governing body that steers these project is behaving against the interests of the community. Just like open licenses, the governing body 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&amp;rsquo;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. This post as I&amp;rsquo;ve mentioned is to help set your expectations accordingly.&lt;/p>
&lt;h2 id="what-is-a-non-profit-501c3">What is a non-profit 501(c)(3)?&lt;/h2>
&lt;p>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>
&lt;h3 id="examples-of-non-profit-501c3">Examples of non-profit 501(c)(3)&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://www.python.org/psf-landing/">Python Foundation (PSF)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://ziglang.org/zsf/">Zig Foundation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://freebsdfoundation.org/">FreeBSD foundation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://signalfoundation.org/">Signal foundation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.eff.org/about">Electronic Frontier Foundation(EFF)&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="why-should-end-users-prefer-non-profit-501c3-projects">Why should end users prefer non-profit 501(c)(3) projects?&lt;/h3>
&lt;ul>
&lt;li>They are community oriented.&lt;/li>
&lt;li>They are for public interest or public charity.&lt;/li>
&lt;li>They are &lt;em>more likely&lt;/em> to listen to the end users.&lt;/li>
&lt;li>Usually end users are more welcome to obtain individual membership and to run for leadership roles.&lt;/li>
&lt;li>Membership to get involved are free or affordable for community individuals most of the times.&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-a-non-profit-501c6">What is a non-profit 501(c)(6)?&lt;/h2>
&lt;p>A non-profit 501(c)(6) is a tax-exempt status for an organisation which is membership based. It is designed for the use cases of trade organisations or business leagues. 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&amp;rsquo;s members. Whatever it may be.&lt;/p>
&lt;p>In OSS context, this means that they work for corporate organisations who are members. Only a very few non-profit 501(c)(6) accept individuals as members. And 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>&amp;ldquo;decorative&amp;rdquo;&lt;/em>. This is because when it comes to steering the organisation&amp;rsquo;s direction, individual membership hold little to no power.&lt;/p>
&lt;p>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 only when there is an outrage from the community. A case in point is rust foundation&amp;rsquo;s decisions which has been controversial for the community.&lt;/p>
&lt;p>The common issue I have seen is, when end users see &lt;em>non-profit&lt;/em> 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&amp;rsquo;s page. You really have to dig to multiple pages or go here and there to find a text saying &lt;code>non-profit 501(c)(6)&lt;/code>. I have observed the &lt;code>non-profit 501(c)(6)&lt;/code> 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>
&lt;h3 id="examples-of-non-profit-501c6">Examples of non-profit 501(c)(6)&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://www.linuxfoundation.org/">Linux Foundation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://foundation.rust-lang.org/">Rust Foundation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://openid.net/foundation/">OpenID Foundation&lt;/a> (With &lt;a href="https://openid.net/foundation/sponsoring-members/">members&lt;/a> like google and microsoft. Powers &amp;ldquo;Trusted publishers&amp;rdquo; in PyPi which is governed by &lt;a href="https://www.python.org/psf-landing/">PSF&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h3 id="what-should-end-users-be-aware-of-non-profit-501c6">What should end users be aware of non-profit 501(c)(6)?&lt;/h3>
&lt;ul>
&lt;li>They work for the common interests of the members. This is not bad at all. But the distinction should be made that this is not &lt;em>for&lt;/em> the community. It is for their members irrespective of what marketing says.&lt;/li>
&lt;li>501(c)(6) foundation don&amp;rsquo;t always accept membership from individuals. This means an end user might not have a say in anything with regards to the project&amp;rsquo;s major decisions.&lt;/li>
&lt;/ul>
&lt;p>As you can see the Rust Foundation doesn&amp;rsquo;t allow membership from individuals yet - &lt;a href="https://foundation.rust-lang.org/info/become-a-member/">https://foundation.rust-lang.org/info/become-a-member/&lt;/a>. While the linux foundation&amp;rsquo;s individual membership doesn&amp;rsquo;t have any power. They get a lifetime &lt;code>@linux.com&lt;/code> email address and some discounts from the certification courses etc. None of it have 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>
&lt;h2 id="certain-observations">Certain observations&lt;/h2>
&lt;h3 id="why-hasnt-year-of-linux-desktop-happened">Why hasn&amp;rsquo;t year of linux desktop happened?&lt;/h3>
&lt;p>Simply because linux foundation&amp;rsquo;s members don&amp;rsquo;t care. Most of them are providing services for enterprises. There are only very few consumer facing members interested in linux desktop. Check them out yourself - &lt;a href="https://www.linuxfoundation.org/about/members">https://www.linuxfoundation.org/about/members&lt;/a>. 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>
&lt;p>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/">8 years ago Linus Torvalds mentioned Valve will save linux desktop one day&lt;/a>. 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/">ProtonDB&lt;/a> which makes &lt;a href="https://www.winehq.org/">Wine&lt;/a> 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&amp;rsquo;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>
&lt;h3 id="why-did-rust-foundations-trademark-policy-change-happened-the-way-it-did">Why did rust foundation&amp;rsquo;s trademark policy change happened the way it did?&lt;/h3>
&lt;p>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>
&lt;h2 id="closing-thoughts">Closing thoughts&lt;/h2>
&lt;p>The whole point of this post was to give you a glimpse of what these non-profit types are. The word &lt;em>&amp;ldquo;non-profit&amp;rdquo;&lt;/em> 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/">Jim Zemlin, the executive director of linux foundation using macos&lt;/a> made sense. Linux Foundation&amp;rsquo;s website being just a place for corporate marketing and product pitches made sense. This helped me set expectations from these project(s) accordingly.&lt;/p>
&lt;p>In the past, 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>
&lt;h2 id="references--links">References / Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/501(c)(3)_organization">https://en.wikipedia.org/wiki/501(c)(3)_organization&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/501(c)(6)#501(c)(6)">https://en.wikipedia.org/wiki/501(c)(6)#501(c)(6)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blogs.gnome.org/jnelson/2014/06/30/the-new-501c3-and-the-future-of-free-software-in-the-united-states/">https://blogs.gnome.org/jnelson/2014/06/30/the-new-501c3-and-the-future-of-free-software-in-the-united-states/&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>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>nikhil at unsungnovelty dot org&lt;/code>.&lt;/p></description></item><item><title>Ignorance CAN be a bliss at times</title><link>https://www.unsungnovelty.org/posts/04/2023/ignorance-can-be-a-bliss-at-times/</link><pubDate>Fri, 28 Apr 2023 09:37:38 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/04/2023/ignorance-can-be-a-bliss-at-times/</guid><description>&lt;p>If you are one of those people who are extremely stressed with the current state of things, hopefully this post can help you a bit.&lt;/p>
&lt;p>Politics, war, tech industries, LLM&amp;rsquo;s, covid and climate change are topics that are everywhere. These things makes us feel like we are screwed. Just know that the news makes money on negative interactions. Just know that whatever happens to climate change and economy, we are all in this together. If you are worried about AI and LLM&amp;rsquo;s taking your job, look around. I can&amp;rsquo;t pin point a single thing that is working as it should. You have problems to solve. Solve them and you will be fine. Latest technologies amplifies the amount of things that we can do. But doesn&amp;rsquo;t mean we won&amp;rsquo;t have things to do. You will be fine. As long as you upskill, YOU WILL BE FINE! Things won&amp;rsquo;t be straight forward or easy. So talk to people. Anyone. Make a call. Be around people. Interactions can change everything. And just ignore the rest. Focus on yourself. Just ignore everything else. Ignorance IS bliss!&lt;/p>
&lt;p>I have successfully stopped doom-scrolling social networking sites a few years ago to cut down the unnecessary noise. Recently I have also cut down on twitter and hacker news to cut the noise further. Not because I am oblivious to what&amp;rsquo;s happening around the world and the tech industry. But because after understanding the state of things knowing where I am right now, there is literally no point in consuming news/stories that are similar. Irrespective of whether it is slightly positive or entirely negative. Cutting down noise and disruptions are key. Cos otherwise this messes up you day-to-day progress and growth. So ignore. We have this fantastic superpower called the &lt;em>ability to forget&lt;/em>. Use it. Ignoring is fine in this case. Take a deep breath and ignore. Enjoy the bliss. Focus and double down on yourself. Did I say ignorance is bliss?&lt;/p>
&lt;hr>
&lt;p>Feel free to reach out in case you want somebody to discuss things. While I prefer email (nikhil at unsungnovelty dot org), I can come to twitter dm&amp;rsquo;s &lt;a href="https://twitter.com/unsungNovelty">@unsungnovelty&lt;/a>. I will keep an eye on dm&amp;rsquo;s and emails. Replies will be only delayed until our first interaction due to my workload.&lt;/p></description></item><item><title>3 underrated productivity tips which doesn't need any app</title><link>https://www.unsungnovelty.org/posts/04/2023/3-underrated-productivity-tips-which-doesnt-need-any-app/</link><pubDate>Sat, 01 Apr 2023 21:22:55 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/04/2023/3-underrated-productivity-tips-which-doesnt-need-any-app/</guid><description>&lt;p>Last couple of years saw a huge rise in productivity apps and people talking about it. If the marketing is to be believed, it feels like we always need an app for productivity. Which is why you usually see people talk about productivity by using a fancy new app. But here are my 3 picks for producitity that you can try out NOW without the need for any apps. I consider these as the foundations of my productivity journey.&lt;/p>
&lt;h2 id="writing-notes-physically">Writing notes physically&lt;/h2>
&lt;p>Writing notes helps you remember things better. It is a drawing board for your thoughts. And has been discussed in length and there are many studies discussing the same. But note taking apps have been extremely helpful, convenient and freaking awesome these days. So why should I use physical notes?&lt;/p>
&lt;p>The problem is when you try to go all in on physical notes. Or digital notes for that matter. Personally my experience has been that a hybrid method is what works better. Long term notes are digital and thinking through or the task at hand are written physically. This means you end up with journal kind of which you can go through. The end result is unnecessary details about the task can stay in your note while the learning points and important points end up in your digital notes safely stored for long term consumption.&lt;/p>
&lt;h2 id="keyboard-shortcuts">Keyboard shortcuts&lt;/h2>
&lt;p>This is extremely underrated. Keyboard shortcuts are what terminal/command line apps are to GUI apps. The workflow with mouse being GUI. You can do things faster and better. Workflow based on mouse is eventually a fast track to RSI. Irrespective of whether it is NOW or later. This is where keyboard shortcuts come in. It makes you use a software fast and efficiently. Learning to use Vim is a good exercise for people since many applications support Vim key-bindings. If you are not a developer, just use keyboard shortcuts and read up on vim key-bindings. The idea of vim key-bindings is to reduce the travel between keys and doing things faster. &lt;a href="https://changelog.com/podcast/450">Why we love VIM episode of Changelog podcast&lt;/a> is a good example discussing this and more about Vim.&lt;/p>
&lt;p>Keyboard shortcuts are everywhere. Use them in your browser. Move your tab back and forth, switch between your tabs, go to current and previous app. Open up a tab or a window etc. Or use them in your operating system. Switch between your workspace. Setup up keyboard shortcut and open an application on demand without having to click-click-click-click. All you have to do is search &lt;code>keyboard shortcuts for &amp;lt;your software&amp;gt;&lt;/code>. This will change your life.&lt;/p>
&lt;h2 id="fullscreen-modes">Fullscreen modes&lt;/h2>
&lt;p>This is the most underrated productivity tip. Fullscreen mode is like disabling notifications for your mobile applications. You will not believe how great it is until you try it out. It just frees up so much real-estate in your screen and brain. Everytime I switch to fullscreen mode in my browser, I get this beautiful sensation in my head. It is like something is getting freed up in my head. It helps you focus and is such a boost. Most apps have a fullscreen mode. For the ones that doesn&amp;rsquo;t, they still have a minimal version which kills most noise in screensize. The browsers support it with F11 key.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/3-productivity-tips-without-apps/with-fullscreen.png"
 alt="Image of Firefox on fullscreen"/>
&lt;/figure>

&lt;p class="text-center italic">Firefox on fullscreen&lt;/p>&lt;/p>
&lt;hr>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/3-productivity-tips-without-apps/without-fullscreen.png"
 alt="Image of Firefox without fullscreen"/>
&lt;/figure>

&lt;p class="text-center italic">Firefox without fullscreen&lt;/p>&lt;/p>
&lt;!-- raw HTML omitted -->
&lt;p>This is on top of my setup being a Tiling window manager one. As you can see from the above screenshot, my window&amp;rsquo;s title bar is almost non-existent and menu bar is already minimal. And still, this makes a huge difference. Now imagine what it will do to your setup if you are using macos, windows or other desktop environments with a big title bar and menu bar. They already cover a huge chunk of real-estate. It should make more difference.&lt;/p>
&lt;hr>
&lt;p>The above productivity tips are so obvious that people who knows don&amp;rsquo;t even talk about it. This means, newbies to productivity might not take it as seriously as they should. Hopefully this will help you understand the significance.&lt;/p></description></item><item><title>initLogs5: Why write simple code?</title><link>https://www.unsungnovelty.org/posts/11/2022/initlogs5-why-write-simple-code/</link><pubDate>Wed, 16 Nov 2022 23:46:03 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/11/2022/initlogs5-why-write-simple-code/</guid><description>&lt;p>I just read a reddit post. It was about someone&amp;rsquo;s colleague who 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>
&lt;p>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&amp;rsquo;s work will seem easy to consume. Like &lt;a href="http://paulgraham.com/articles.html">Paul Graham&lt;/a> who writes about complex topics. Yet looks so simple. It is not simple. But one reason is his simple writing.&lt;/p>
&lt;p>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 and is easier to maintain.&lt;/p>
&lt;p>Writing complex code all the time doesn&amp;rsquo;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. Completely a different story if are doing &amp;ldquo;magic&amp;rdquo; in your code.&lt;/p>
&lt;p>In short, write simple code wherever possible.&lt;/p></description></item><item><title>Light mode is better for your eyes in most scenarios</title><link>https://www.unsungnovelty.org/posts/08/2022/light-mode-is-better-for-your-eyes-in-most-scenarios/</link><pubDate>Sun, 14 Aug 2022 23:45:51 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/08/2022/light-mode-is-better-for-your-eyes-in-most-scenarios/</guid><description>&lt;p>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&amp;rsquo;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>
&lt;ul>
&lt;li>Dark mode is good for your eyes&lt;/li>
&lt;li>Dark mode helps you focus&lt;/li>
&lt;li>Dark mode is good for battery&lt;/li>
&lt;/ul>
&lt;p>These are some of the promises from dark modes. For &lt;em>me&lt;/em>, 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>
&lt;h2 id="light-mode-dark-mode-eyes-and-lighting">Light mode, dark mode, eyes and lighting&lt;/h2>
&lt;p>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>
&lt;p>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>longer periods&lt;/em>. 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>
&lt;blockquote>
&lt;p>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;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science">https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science&lt;/a>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>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)">Redshift&lt;/a>. On MacOS/iOS, they should be having an inbuilt blue light filter as well.&lt;/p>
&lt;p>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>might&lt;/em> 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>
&lt;h2 id="so-light-or-dark-mode">So light or dark mode?&lt;/h2>
&lt;p>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&amp;rsquo;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>
&lt;h2 id="motivation">Motivation&lt;/h2>
&lt;p>I have been wanting to write about this for a while. But &lt;a href="https://stitcher.io/blog/light-colour-schemes-are-better">Brent Roose&amp;rsquo;s post&lt;/a> finally made me take the time and write it. Just like him, I recommend trying out the light modes for a week. &lt;em>#one-week-light-theme&lt;/em>&lt;/p>
&lt;h2 id="resources--links">Resources / links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science">https://www.wired.co.uk/article/dark-mode-chrome-android-ios-science&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.wired.com/story/do-you-need-dark-mode/">https://www.wired.com/story/do-you-need-dark-mode/&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Explaining what a good abstraction layer is with Tailwind CSS</title><link>https://www.unsungnovelty.org/posts/05/2022/explaining-what-a-good-abstraction-layer-is-with-tailwind-css/</link><pubDate>Fri, 20 May 2022 11:52:52 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2022/explaining-what-a-good-abstraction-layer-is-with-tailwind-css/</guid><description>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/abstraction-tailwindcss.webp"
 alt="An image depicting Tailwind CSS logo used as an abstraction layer"/>
&lt;/figure>

&lt;p>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>my&lt;/em> what, when and how.&lt;/p>
&lt;blockquote>
&lt;p>In computing, an abstraction layer or abstraction level is a way of hiding the working details of a subsystem.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Abstraction_layer">https://en.wikipedia.org/wiki/Abstraction_layer&lt;/a>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>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>
&lt;p>With web development, I found Tailwind CSS to be a &lt;em>good&lt;/em> abstraction layer. A &lt;em>good&lt;/em> 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>
&lt;h2 id="whats-so-special-about-tailwind-css">What&amp;rsquo;s so special about Tailwind CSS?&lt;/h2>
&lt;p>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>flex&lt;/code> for &lt;code>display:flex;&lt;/code>, &lt;code>p-2&lt;/code> for &lt;code>padding: 0.5rem;&lt;/code> 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">customisation&lt;/a> in mind providing flexibility. These just some reasons why Tailwind CSS is so special.&lt;/p>
&lt;p>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>
&lt;h2 id="the-good-parts">The good parts&lt;/h2>
&lt;p>An abstraction layer won&amp;rsquo;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>
&lt;h3 id="an-abstraction-layer-should-make-the-subsystem-easier-to-understand">An abstraction layer should make the subsystem easier to understand&lt;/h3>
&lt;p>An abstraction layer is suppose to make it easier for us to learn and understand the subsystem. It shouldn&amp;rsquo;t hide or make it difficult for us to understand how the subsystem works.&lt;/p>
&lt;p>With Tailwind CSS, it doesn&amp;rsquo;t just provide you a bunch of utility classes. You still need to know &lt;em>some&lt;/em> CSS. The difference is that you don&amp;rsquo;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>
&lt;p>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&amp;rsquo;t have to deal with media queries or anything complex which you will have to if you are writing CSS.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&amp;lt;!-- With Tailwind CSS --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;grid grid-flow-row gap-1 p-1 lg:grid-flow-col&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&amp;lt;&lt;span style="color:#f92672">div&lt;/span>&amp;gt;Div element 1&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&amp;lt;&lt;span style="color:#f92672">div&lt;/span>&amp;gt;Div element 2&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&amp;lt;&lt;span style="color:#f92672">div&lt;/span>&amp;gt;Div element 3&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&amp;lt;&lt;span style="color:#f92672">div&lt;/span>&amp;gt;Div element 4&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&amp;lt;&lt;span style="color:#f92672">div&lt;/span>&amp;gt;Div element 5&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/tailwind-css-responsive.webp"
 alt="Example of responsive elements with Tailwind CSS"/>
&lt;/figure>

&lt;p class="text-center italic">Responsive elements with Tailwind CSS&lt;/p>&lt;/p>
&lt;p>To have a &lt;em>similar&lt;/em> result with CSS, you have to write the below CSS code. This is excluding the HTML code by the way. It 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;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-css" data-lang="css">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">/* With CSS */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.&lt;span style="color:#a6e22e">divClass&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">display&lt;/span>: &lt;span style="color:#66d9ef">grid&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">grid-auto-flow&lt;/span>: &lt;span style="color:#66d9ef">column&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">gap&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#66d9ef">rem&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">padding&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#66d9ef">rem&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">media&lt;/span> &lt;span style="color:#f92672">(&lt;/span>&lt;span style="color:#f92672">max-width&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#f92672">1024px&lt;/span>&lt;span style="color:#f92672">)&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">divClass&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">display&lt;/span>: &lt;span style="color:#66d9ef">grid&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">grid-auto-flow&lt;/span>: &lt;span style="color:#66d9ef">row&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">padding&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#66d9ef">rem&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">gap&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#66d9ef">rem&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/media-query-css.webp"
 alt="Example of responsive elements with CSS"/>
&lt;/figure>

&lt;p class="text-center italic">Responsive elements with CSS&lt;/p>&lt;/p>
&lt;h3 id="knowledge-transfer-after-choosing-an-abstraction-layer">Knowledge transfer after choosing an abstraction layer&lt;/h3>
&lt;p>Knowledge transfer should be ideal when you are using an abstraction layer. You shouldn&amp;rsquo;t have to relearn everything from the scratch. The more knowledge you can carry forward while using an abstraction layer, the better.&lt;/p>
&lt;p>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=">VSCode Tailwind CSS intellisense extension&lt;/a>. And just like the Tailwind CSS website advertises, it actually &lt;em>will&lt;/em> help you build modern websites &lt;em>rapidly&lt;/em>.&lt;/p>
&lt;h3 id="an-abstraction-layer-should-improve-the-developer-experience">An abstraction layer should improve the developer experience&lt;/h3>
&lt;p>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>
&lt;h3 id="abstraction-layers--performance">Abstraction layers &amp;amp; performance&lt;/h3>
&lt;p>Abstraction layers could tank performance. ElectronJS is a good example of this. Typical response to this is that modern hardwares 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/">LiteXL text editor&lt;/a>, 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>
&lt;p>The good thing about CSS is that it has evolved a lot. We can do a lot of things with &lt;em>just&lt;/em> 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 stylesheet smaller. This means you don&amp;rsquo;t have to load unused CSS in your application anymore.&lt;/p>
&lt;p>I was using Bulma CSS for &lt;a href="https://www.unsungnovelty.org/">my website&lt;/a> earlier. My migration to Tailwind CSS reduced my stylesheet lines from 12,726 lines of CSS to 805 lines of CSS.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/tailwindvsbulma-lines-of-code.png"
 alt="Image of the lines of code for Bulma CSS which was 12,726 lines of CSS. And with Tailwind CSS bundling it actually uses only 805 lines of CSS"/>
&lt;/figure>

&lt;p class="text-center italic">Lines of CSS for my website with Bulma CSS &amp;amp; Tailwind CSS&lt;/p>&lt;/p>
&lt;p>Not just the lines of code. My stylesheet&amp;rsquo;s file size reduced as well. From &lt;code>247.1KB&lt;/code> to &lt;code>13.0KB&lt;/code>. This made my website fast. I like the fact that my website loads the pages faster.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/tailwindvsbulma-file-size.webp"
 alt="Image of the file size of the CSS stylesheet. With Bulma CSS it is 247.1KB because of unused CSS. With Tailwind CSS it is just 13KB"/>
&lt;/figure>

&lt;p class="text-center italic">File size comparison for my website with Bulma CSS &amp;amp; Tailwind CSS&lt;/p>&lt;/p>
&lt;h3 id="designed-for-more-than-80">Designed for more than 80%&lt;/h3>
&lt;p>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>
&lt;p>Tailwind CSS is designed to handle it&amp;rsquo;s limitations and edge cases very well. It already let&amp;rsquo;s you customise the values of the utility classes. But it also has:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Arbitrary property feature:&lt;/strong> 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>[css property to use]&lt;/code> 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>clip-path&lt;/code> CSS property as an arbitrary value.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#f92672">img&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;[clip-path:circle(50%)]&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">src&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;https://geekculture.co/wp-content/uploads/2019/01/takeru-satoh-ruroni-kenshin.jpg&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">alt&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;An image to try out clip-path feature of CSS&amp;#34;&lt;/span>/&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/abstraction-tailwindcss/clippath-example.webp"
 alt="Demonstration of arbitrary property feature. The image used is of Rurouni Kenshin character played Takeru Satoh in the movie Rurouni Kenshin"/>
&lt;/figure>

&lt;p class="text-center italic">Demonstration of arbitrary property feature of Tailwind CSS. This feature helps you use any CSS property even if they are not supported by Tailwind CSS.&lt;/p>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Arbitrary value feature:&lt;/strong> lets you use custom CSS values within the utility classes. You can replace the utility class value with a square bracket like &lt;code>[20rem]&lt;/code>. You are now using an arbitary value that is not part of the utility classes. You can use any CSS units like rem, em, px, vh, vw or %.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;w-[80%]&amp;#34;&lt;/span>&amp;gt;Checking the width!&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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>
&lt;ul>
&lt;li>&lt;a href="https://tailwindcss.com/docs/configuration">https://tailwindcss.com/docs/configuration&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://tailwindcss.com/docs/adding-custom-styles">https://tailwindcss.com/docs/adding-custom-styles&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="the-bad-parts">The bad parts&lt;/h2>
&lt;p>Not everything is good at Tailwind CSS. So here is the other side to abstraction layers/Tailwind CSS.&lt;/p>
&lt;h3 id="there-is-always-a-price-to-pay">There is always a price to pay&lt;/h3>
&lt;p>I think all abstractions have disadvantage(s). In other words, there is always a price to pay. It is upto us to see if those disadvantages are fine with respect to the goals we have.&lt;/p>
&lt;h4 id="other-side-of-utility-classes-in-tailwind-css-readability-and-maintainability">Other side of utility classes in Tailwind CSS: Readability and maintainability&lt;/h4>
&lt;p>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>prose&lt;/code> class which comes with the &lt;a href="https://tailwindcss.com/docs/typography-plugin">official typography plugin&lt;/a> of Tailwind CSS. It already provides basic styling for markdown elements like &lt;code>blockquote&lt;/code> and &lt;code>code&lt;/code> 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;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">article&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;text-lg prose-headings:font-semibold py-1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> prose-sm prose-gray prose-a:underline prose-a:decoration-2 hover:prose-a:text-blue-600
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> prose-ul:list-disc prose-code:bg-gray-300 prose-code:p-1 prose-code:rounded
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> 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
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> prose-blockquote:border-l-4 prose-blockquote:italic prose-blockquote:border-gray-600 prose-blockquote:bg-gray-200
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> prose-blockquote:px-4 prose-blockquote:py-2 prose-blockquote:rounded prose-img:mx-auto
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> prose-hr:p-0 prose-hr:m-0 prose-headings:my-0 prose-headings:py-2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>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&amp;rsquo;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>
&lt;p>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&amp;rsquo;s components layer by &lt;a href="https://tailwindcss.com/docs/adding-custom-styles#using-css-and-layer=%60">adding it like this in your main.css&lt;/a>. You can then call the class name from HTML just like the other utility classes. But you shouldn&amp;rsquo;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;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-css" data-lang="css">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">/* main.css */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">base&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">components&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">utilities&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">layer&lt;/span> &lt;span style="color:#f92672">components&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">styleMarkdown&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#960050;background-color:#1e0010">@apply&lt;/span> 	&lt;span style="color:#960050;background-color:#1e0010">text-lg&lt;/span> prose-headings:&lt;span style="color:#66d9ef">font&lt;/span>&lt;span style="color:#f92672">-&lt;/span>semibold py-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		prose-sm prose-gray prose-a&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">underline&lt;/span> prose-a&lt;span style="color:#f92672">:&lt;/span>decoration-2 hover&lt;span style="color:#f92672">:&lt;/span>prose-a&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">text&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#66d9ef">blue&lt;/span>&lt;span style="color:#ae81ff">-600&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		prose-ul&lt;span style="color:#f92672">:&lt;/span>list-disc prose-code&lt;span style="color:#f92672">:&lt;/span>bg-gray-300 prose-code&lt;span style="color:#f92672">:&lt;/span>p-1 prose-code&lt;span style="color:#f92672">:&lt;/span>rounded
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> prose-pre&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">overflow-x&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#66d9ef">auto&lt;/span> prose-pre&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">text&lt;/span>&lt;span style="color:#f92672">-&lt;/span>lg prose-code&lt;span style="color:#f92672">:&lt;/span>prose-pre&lt;span style="color:#f92672">:&lt;/span>bg-[&lt;span style="color:#ae81ff">#277322&lt;/span>] prose-pre&lt;span style="color:#f92672">:&lt;/span>rounded prose-pre&lt;span style="color:#f92672">:&lt;/span>px-4 prose-pre&lt;span style="color:#f92672">:&lt;/span>py-1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> prose-blockquote&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">border&lt;/span>&lt;span style="color:#f92672">-&lt;/span>l-4 prose-blockquote&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">italic&lt;/span> prose-blockquote&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#66d9ef">border&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#66d9ef">gray&lt;/span>&lt;span style="color:#ae81ff">-600&lt;/span> prose-blockquote&lt;span style="color:#f92672">:&lt;/span>bg-gray-200
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> prose-blockquote&lt;span style="color:#f92672">:&lt;/span>px-4 prose-blockquote&lt;span style="color:#f92672">:&lt;/span>py-2 prose-blockquote&lt;span style="color:#f92672">:&lt;/span>rounded prose-img&lt;span style="color:#f92672">:&lt;/span>mx-auto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> prose-hr&lt;span style="color:#f92672">:&lt;/span>p-0 prose-hr&lt;span style="color:#f92672">:&lt;/span>m-0 prose-headings&lt;span style="color:#f92672">:&lt;/span>my-0 prose-headings&lt;span style="color:#f92672">:&lt;/span>py-2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="in-conclusion">In conclusion&lt;/h2>
&lt;p>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&amp;rsquo;s aesthetics. I am also sure that there maybe places where Tailwind CSS can improve. This is why I used a &lt;em>&amp;ldquo;good&amp;rdquo;&lt;/em> abstraction layer instead of a &lt;em>perfect&lt;/em> abstraction layer. But it is pretty much there. It really have changed how I write CSS and how I &lt;em>learn&lt;/em> CSS.&lt;/p>
&lt;h2 id="resources--links">Resources / links&lt;/h2>
&lt;ul>
&lt;li>What&amp;rsquo;s new in Tailwind CSS v3 from Tailwind Labs - &lt;a href="https://youtu.be/mSC6GwizOag">https://youtu.be/mSC6GwizOag&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Tic Tac Toe</title><link>https://www.unsungnovelty.org/projects/tic-tac-toe/</link><pubDate>Thu, 28 Apr 2022 19:02:55 +0530</pubDate><guid>https://www.unsungnovelty.org/projects/tic-tac-toe/</guid><description>&lt;p>The tic tac toe game developed in plain javascript. It was particularly tricky for me to implement the validation of immediately displaying whether a player won the game or not. At the time I thought this was the most good looking project I have built yet. It was minimal and clean looking with a good UX This was created as a part of &lt;a href="https://www.theodinproject.com/">The Odin Project&lt;/a> curriculum.&lt;/p>
&lt;h2 id="tech-used">Tech used&lt;/h2>
&lt;ul>
&lt;li>HTML5&lt;/li>
&lt;li>CSS&lt;/li>
&lt;li>Plain JavaScript&lt;/li>
&lt;/ul>
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;p>&lt;img src="https://user-images.githubusercontent.com/11845908/165776828-c28e66ef-b4c5-4577-bd5f-9671965d8ae7.png" alt="image">&lt;/p>
&lt;hr>
&lt;p>&lt;img src="https://user-images.githubusercontent.com/11845908/165776899-41700bd0-2b28-4bd8-a5b8-27dccd37a8b8.png" alt="image">&lt;/p>
&lt;hr>
&lt;p>&lt;img src="https://user-images.githubusercontent.com/11845908/165824957-3a207687-a0d0-4350-8a5e-1fa01a33fbdb.png" alt="image">&lt;/p>
&lt;hr>
&lt;p>&lt;img src="https://user-images.githubusercontent.com/11845908/165825034-49ef1325-b428-46fb-b205-ccaee5e0700e.png" alt="image">&lt;/p></description></item><item><title>Rock Paper Scissors</title><link>https://www.unsungnovelty.org/projects/rock-paper-scissors/</link><pubDate>Thu, 28 Apr 2022 18:50:20 +0530</pubDate><guid>https://www.unsungnovelty.org/projects/rock-paper-scissors/</guid><description>&lt;p>A simple rock paper scissors game developed in plain javascript. This was my first project. It taught me about DOM manipulation and other basic web development skills. This was created as a part of &lt;a href="https://www.theodinproject.com/">The Odin Project&lt;/a> curriculum.&lt;/p>
&lt;h2 id="tech-used">Tech used&lt;/h2>
&lt;ul>
&lt;li>HTML5&lt;/li>
&lt;li>CSS&lt;/li>
&lt;li>Plain JavaScript&lt;/li>
&lt;/ul></description></item><item><title>Etch a Sketch</title><link>https://www.unsungnovelty.org/projects/etch-a-sketch/</link><pubDate>Thu, 28 Apr 2022 18:45:46 +0530</pubDate><guid>https://www.unsungnovelty.org/projects/etch-a-sketch/</guid><description>&lt;p>A browser version of something between a sketchpad and an Etch-A-Sketch. Did this project to sharpen DOM manipulation skills as a part of &lt;a href="https://www.theodinproject.com/">The Odin Project&lt;/a> curriculum. The grid creation felt like the hardest part when I did this project. Very basic with an eraser in it but nothing else.&lt;/p>
&lt;h2 id="goal">Goal&lt;/h2>
&lt;ul>
&lt;li>Improve DOM manipulation skills&lt;/li>
&lt;/ul>
&lt;h2 id="tech-used">Tech used&lt;/h2>
&lt;ul>
&lt;li>HTML5&lt;/li>
&lt;li>CSS&lt;/li>
&lt;li>JavaScript&lt;/li>
&lt;/ul>
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/etch-a-sketch/etch-a-sketch-1.png"
 alt="Screenshot of etch a sketch which sets the thickness of the brush"/>
&lt;/figure>

&lt;p class="text-center italic">Screenshot of etch a sketch which sets the thickness of the brush at the beginning&lt;/p>&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/etch-a-sketch/etch-a-sketch-2.png"
 alt="Drawing with a rounded square brush of size 12"/>
&lt;/figure>

&lt;p class="text-center italic">Drawing with a rounded square brush of size 12&lt;/p>&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/etch-a-sketch/etch-a-sketch-3.png"
 alt="Drawing with a rounded square brush of size 56"/>
&lt;/figure>

&lt;p class="text-center italic">Drawing with a rounded square brush of size 56&lt;/p>&lt;/p></description></item><item><title>Brahma</title><link>https://www.unsungnovelty.org/projects/brahma/</link><pubDate>Sat, 23 Apr 2022 21:14:19 +0530</pubDate><guid>https://www.unsungnovelty.org/projects/brahma/</guid><description>&lt;p>Brahma is a Hugo static site generator theme. The goal of the theme is to accomodate my blogging needs and to provide a platform to share my work and thoughts. It is build to be fast, simple and accessible.&lt;/p>
&lt;h2 id="technologies-used">Technologies used&lt;/h2>
&lt;ul>
&lt;li>HTML5&lt;/li>
&lt;li>Tailwind CSS&lt;/li>
&lt;li>Hugo&lt;/li>
&lt;/ul>
&lt;h2 id="design-decisions">Design decisions&lt;/h2>
&lt;ul>
&lt;li>Build for the long term.&lt;/li>
&lt;li>Aesthetics over over-engineering.&lt;/li>
&lt;li>Functionality over aesthetics&lt;/li>
&lt;li>Avoid unnecessary dependencies.&lt;/li>
&lt;li>Lighthouse scores are just the start.&lt;/li>
&lt;li>Maximum performance without compromising on funcionality and aesthetics.&lt;/li>
&lt;li>Least amount of JavaScript necessary.&lt;/li>
&lt;/ul>
&lt;h2 id="history">History&lt;/h2>
&lt;p>&lt;a href="https://www.unsungnovelty.org">https://www.unsungnovelty.org&lt;/a> at the beginning used &lt;a href="https://github.com/mtn/cocoa-eh-hugo-theme">Cocoah-Enhanced&lt;/a> as it&amp;rsquo;s theme. Brahma was born out of necessity to accomodate my needs for performance, functionalities and de-googling.&lt;/p>
&lt;p>Below are the first 3 iterations of the Brahma theme. The initial idea was to be ruthelessly nerdy and minimal. These days the goal is to provide a sensible and simple UI and UX without sacrificing on aesthetics.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://web.archive.org/web/20200804060843/https://www.unsungnovelty.org/">1st iteration in wayback machine&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20201129052800/https://www.unsungnovelty.org/">2nd iteration in wayback machine&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20201129052800/https://www.unsungnovelty.org/">3rd iteration in wayback machine&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://www.unsungnovelty.org/">Current iteration&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/brahma/un-4-iterations.webp"
 alt="Images of each of the Brahma iterations so far."/>
&lt;/figure>

&lt;p class="text-center italic">Evolution of Brahma until v0.6.x series&lt;/p>&lt;/p>
&lt;h2 id="changelogs">Changelogs&lt;/h2>
&lt;h3 id="v140">v1.4.0&lt;/h3>
&lt;ul>
&lt;li>Add Mini posts section for short posts emulating social media posts&lt;/li>
&lt;li>Add better navbar for mobile using details tags to save screen real estate&lt;/li>
&lt;li>Fix styling inconsistencies in project and index page&lt;/li>
&lt;li>Move files and misc cleanup in code to make the setup more easy to maintain&lt;/li>
&lt;/ul>
&lt;h3 id="v133">v1.3.3&lt;/h3>
&lt;ul>
&lt;li>Fix the horizontal image viewing issue in gallery section.&lt;/li>
&lt;li>Rescale and resize the images of gallery thumbnails for faster page loads.&lt;/li>
&lt;li>Fix RSS feeds to show the full text of the page and not just a summary.&lt;/li>
&lt;/ul>
&lt;h3 id="v10x">v1.0.x&lt;/h3>
&lt;p>As far as Brahma as an api is concerned (as per &lt;a href="https://semver.org/">semver&lt;/a>), Brahma should be considered stable. In the last ~4ish years, Brahma has served ~13k visitors atleast. There is more to come. But polishing is given more priority with respect to the code I have to write. And the focus now is to write more.&lt;/p>
&lt;h3 id="v09x">v0.9.x&lt;/h3>
&lt;p>v0.9.x was created with v1.0 as an end goal in mind. I have implemented series taxonomy and list pages for both series and tags. This was a long time request from &lt;a href="https://arkives.in/">ArkArjun&lt;/a>. A lot of code cleanup was done with respect to logic and general syntax/indentation improvements etc.&lt;/p>
&lt;h3 id="v08x">v0.8.x&lt;/h3>
&lt;p>While v0.6.x series was a rewrite of Brahma with Tailwind CSS and v0.7.x an improvement on top of it, the v0.8.x series comes with an intention of improving UI and UX which is the direction I started with v0.7.x series. The v0.8.x series introduces a new portfolio template for home page. This means Brahma have 2 home pages including the polished text only home page which is used on &lt;a href="https://arkives.in/">https://arkives.in/&lt;/a>. The portfolio home page is in it&amp;rsquo;s infancy and incomplete. The end goal is to split the home page into components which can be configured by the website owner with just the configuration file and replicate the same with other sections.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/brahma/brahma-v08-series.png"
 alt="New portfolio home page for Brahma in v0.8.x series"/>
&lt;/figure>

&lt;p class="text-center italic">Portfolio home page for Brahma v0.8.x&lt;/p>&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/brahma/brahma-text-08-series.png"
 alt="Improved text only home page in Brahma v0.8.x series"/>
&lt;/figure>

&lt;p class="text-center italic">Polished and improved text only home page in Brahma v0.8.x series as seen in https://arkives.in/&lt;/p>&lt;/p>
&lt;h3 id="v07x-series">v0.7.x series&lt;/h3>
&lt;p>With v0.6.x, Brahma have complete feature parity with the Bulma CSS implementation of the theme. v0.7.x series tries to improve on it. I started my blog with the radical idea of making my website minimal and nerdy by design. But with v0.7.x, I hope to improve UI/UX with an intention of keeping it simple as well instead of just being minimal. This include better space utilisation with pinned posts and latest post aligned column-wise. And many more improvements on the blog post template among other changes.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/projects-images/brahma/brahma-v07.png"
 alt="New portfolio home page for Brahma in v0.8.x series"/>
&lt;/figure>

&lt;p class="text-center italic">Home page for Brahma v0.7.x&lt;/p>&lt;/p>
&lt;h2 id="is-brahma-open-source">Is Brahma open source?&lt;/h2>
&lt;p>No. Not yet.&lt;/p></description></item><item><title>Doing What You Can NOW - Builder's Edition</title><link>https://www.unsungnovelty.org/posts/04/2022/doing-what-you-can-now-builders-edition/</link><pubDate>Fri, 08 Apr 2022 17:16:50 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/04/2022/doing-what-you-can-now-builders-edition/</guid><description>&lt;p>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. What helps me is a rule - &lt;em>Doing what you can NOW&lt;/em>. It might sound simple but it isn&amp;rsquo;t in practice. Fixing my perfectionism problem is still an in-progress. But I know I am in the right direction.&lt;/p>
&lt;p>&amp;ldquo;Doing what you can NOW&amp;rdquo; 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 &amp;ldquo;Doing what you can NOW&amp;rdquo; rule stems from the bottom-up approach.&lt;/p>
&lt;p>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>something&lt;/em> 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 marketing. 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>something&lt;/em> you can do. That &lt;em>something&lt;/em> 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>
&lt;p>&amp;ldquo;Just do it™&amp;rdquo; could be seen as another version of &amp;ldquo;Doing what you can NOW&amp;rdquo;. 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 &amp;ldquo;Doing what you can NOW&amp;rdquo; has the context that we know we can do certain things. Right NOW! Things that we can complete.&lt;/p>
&lt;h2 id="doing-what-you-can-now-in-practice">Doing what you can NOW in practice&lt;/h2>
&lt;p>I wrote my first HTML web page when I was 12 or 13 years old. I was using HTML4. No styling cos I didn&amp;rsquo;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/">https://www.unsungnovelty.org/&lt;/a>) 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>
&lt;p>When I first started with Hugo, I didn&amp;rsquo;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>&amp;ldquo;Doing what you can NOW&amp;rdquo;&lt;/em> at that time meant using an &lt;a href="https://github.com/mtn/cocoa-eh-hugo-theme">external Hugo theme&lt;/a>. That and figuring out how to host and keep a website online.&lt;/p>
&lt;ul>
&lt;li>My &lt;a href="https://web.archive.org/web/20200804060843/https://www.unsungnovelty.org/">first iteration&lt;/a> 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>
&lt;li>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/">second iteration&lt;/a> 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>
&lt;li>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/">3rd iteration&lt;/a>. It was more visually pleasing compared to the second iteration.&lt;/li>
&lt;li>And I have just pushed my &lt;a href="https://www.unsungnovelty.org/">4th iteration&lt;/a> 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>
&lt;/ul>
&lt;p>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 Indie Hackers and the indie hacking scene.&lt;/p>
&lt;p>An easy way to apply this is rule is to ask yourself - Is this a priority? If the answer is &lt;em>no&lt;/em>, ask yourself again - What else can I do that is more important? My answer most of the time has been a &lt;em>no&lt;/em>. 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>
&lt;p>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. &amp;ldquo;Doing what you can NOW&amp;rdquo; is just one of those trick we can employ when we feel completely lost or stuck. Hopefully it helps you as well.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next?&lt;/h2>
&lt;p>I am currently learning a bunch of stuff for my next challenge in life. I would like to finish a bunch of products 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 &lt;a href="https://www.indiehackers.com/unsungNovelty">Indie Hackers&lt;/a>, Dev.to and Reddit. Things that I need to do the projects I love. In short, I am doing what I can NOW!&lt;/p>
&lt;p>&lt;em>This post was first published at &lt;a href="https://indiehackers.com">https://indiehackers.com&lt;/a> with the title - &amp;ldquo;&lt;a href="https://www.indiehackers.com/post/doing-what-you-can-now-4ef56f106e">Doing what you can NOW&lt;/a>&amp;rdquo;. What&amp;rsquo;s next section was changed here to improve context.&lt;/em>&lt;/p></description></item><item><title>How to add Tailwind CSS 3 to a Hugo website in 2022?</title><link>https://www.unsungnovelty.org/posts/03/2022/how-to-add-tailwind-css-3-to-a-hugo-website-in-2022/</link><pubDate>Fri, 04 Mar 2022 22:58:49 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/03/2022/how-to-add-tailwind-css-3-to-a-hugo-website-in-2022/</guid><description>&lt;p>I use Hugo for my personal website - &lt;a href="https://www.unsungnovelty.org">https://www.unsungnovelty.org&lt;/a>. At present I use &lt;a href="https://bulma.io/">Bulma CSS&lt;/a> for it. But I am working on a redesign with &lt;a href="https://tailwindcss.com/">Tailwind CSS&lt;/a>. 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>
&lt;p>Also, this blog post is possible thanks to &lt;a href="https://functional.style/hugo/general/tailwind/">Integrating TailwindCSS with Hugo by oomusou&lt;/a>. 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 href="mailto:oomusou@gmail.com">oomusou&lt;/a>. 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>
&lt;p>If you already have a Hugo website and just want to add Tailwind CSS to it&amp;rsquo;s theme, jump directly to follow &lt;a href="https://www.unsungnovelty.org/posts/03/2022/how-to-add-tailwind-css-3-to-a-hugo-website-in-2022/#how-to-add-tailwind-css-to-a-hugo-theme">How to add Tailwind CSS to a Hugo theme?&lt;/a> Else, follow along!&lt;/p>
&lt;h2 id="how-to-create-a-minimal-hugo-website--add-tailwind-css-to-its-hugo-theme">How to create a minimal Hugo website &amp;amp; add Tailwind CSS to it&amp;rsquo;s Hugo theme?&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Install the Hugo package on your operating system. Follow the Install section from &lt;a href="https://gohugo.io/getting-started/installing/">getting started from gohugo.io&lt;/a>. 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>
&lt;/li>
&lt;li>
&lt;p>Create a new Hugo website using the command &lt;code>hugo new site &amp;lt;site name&amp;gt;&lt;/code> in your terminal. Eg; &lt;code>hugo new site thisSiteIsNew&lt;/code>. This will create a new hugo site with a startup template inside the directory called &lt;code>thisSiteIsNew&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Go inside your new site&amp;rsquo;s directory. Eg; &lt;code>cd thisSiteIsNew&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Create a new theme using the &lt;code>hugo new theme &amp;lt;theme name&amp;gt;&lt;/code>. Eg; &lt;code>hugo new theme thisThemeIsNew&lt;/code>. This will create a new directory with the &lt;code>&amp;lt;theme name&amp;gt;&lt;/code> and necessary files needed to get started. In my case, it will be inside &lt;code>thisSiteIsNew/themes/thisThemeIsNew&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>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>/themes/&lt;/code> directory. Website won&amp;rsquo;t show up if you don&amp;rsquo;t link it like this. An example config file will look like the below. This uses &lt;code>.toml&lt;/code> format with the file name being &lt;code>config.toml&lt;/code>. If you want to use &lt;code>.json&lt;/code> or &lt;code>.yaml&lt;/code> for your Hugo config file, you can. Just format it accordingly.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-toml" data-lang="toml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">baseURL&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">languageCode&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;en-us&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;thisSiteIsNew&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">theme&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;thisThemeIsNew&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="how-to-add-tailwind-css-to-a-hugo-theme">How to add Tailwind CSS to a Hugo theme?&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Go inside the themes directory. It is in &lt;code>hugo-website-directory/themes/theme-name/&lt;/code>. 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>
&lt;/li>
&lt;li>
&lt;p>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>/themes/&lt;/code> directory. Website won&amp;rsquo;t show up if you don&amp;rsquo;t link it like this. An example config file will look like the below. This uses &lt;code>.toml&lt;/code> format with the file name being &lt;code>config.toml&lt;/code>. If you want to use &lt;code>.json&lt;/code> or &lt;code>.yaml&lt;/code> for your Hugo config file, you can. Just format it accordingly.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-toml" data-lang="toml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">baseURL&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">languageCode&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;en-us&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">title&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;thisSiteIsNew&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">theme&lt;/span> = &lt;span style="color:#e6db74">&amp;#39;thisThemeIsNew&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Initialise &lt;code>package.json&lt;/code> using &lt;code>npm init -y&lt;/code>. This will create a &lt;code>package.json&lt;/code> file inside your theme directory.&lt;/li>
&lt;li>Install Tailwind CSS using &lt;code>npm install --save-dev tailwindcss&lt;/code>. This installs Tailwind CSS as a development dependency.&lt;/li>
&lt;li>Initialise &lt;code>tailwind.config.js&lt;/code> by running the command &lt;code>npx tailwindcss init&lt;/code>. This will create a &lt;code>tailwind.config.js&lt;/code> file.&lt;/li>
&lt;li>Inside &lt;code>tailwind.config.js&lt;/code> file, add the below code:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">module&lt;/span>.&lt;span style="color:#a6e22e">exports&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">content&lt;/span>&lt;span style="color:#f92672">:&lt;/span> [&lt;span style="color:#e6db74">&amp;#34;content/**/*.md&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;layouts/**/*.html&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">theme&lt;/span>&lt;span style="color:#f92672">:&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">extend&lt;/span>&lt;span style="color:#f92672">:&lt;/span> {},
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">plugins&lt;/span>&lt;span style="color:#f92672">:&lt;/span> [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>};
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Create a file called &lt;code>main.css&lt;/code> in &lt;code>/assets&lt;/code> directory. You can use any other name instead of &lt;code>main.css&lt;/code>. Also, If this is a new theme, &lt;code>/assets&lt;/code> directory won&amp;rsquo;t be present and you should create it. &lt;code>mkdir assets&lt;/code> command in Linux will create a new directory from your terminal.&lt;/li>
&lt;li>Add the below code to &lt;code>main.css&lt;/code> file.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-css" data-lang="css">&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">base&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">components&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>@&lt;span style="color:#66d9ef">tailwind&lt;/span> &lt;span style="color:#f92672">utilities&lt;/span>;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Create a &lt;code>style.css&lt;/code> inside the &lt;code>/assets&lt;/code> folder. We will use the Tailwind CSS CLI to transpile the stuff needed from &lt;code>main.css&lt;/code> to &lt;code>style.css&lt;/code>. &lt;code>style.css&lt;/code> will be our final css file used to style our website.&lt;/li>
&lt;li>Add some Tailwind CSS utilities to your html files. I have the below &lt;code>index.html&lt;/code> which is the home page of a hugo website.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>{{ define &amp;#34;main&amp;#34; }}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">h1&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;text-3xl text-blue-700 font-bold underline&amp;#34;&lt;/span>&amp;gt;thisSiteIsNew&amp;lt;/&lt;span style="color:#f92672">h1&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">p&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;bg-sky-600 text-slate-100&amp;#34;&lt;/span>&amp;gt;The thisSiteIsNew uses a theme called thisThemeIsNew&amp;lt;/&lt;span style="color:#f92672">p&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>{{ end }}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Link your &lt;code>style.css&lt;/code> to your website by linking the stylesheet in the &lt;code>/layouts/partials/head.html&lt;/code>. An example &lt;code>head.html&lt;/code> looks like the below:&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#f92672">head&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">meta&lt;/span> &lt;span style="color:#a6e22e">charset&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;UTF-8&amp;#34;&lt;/span> /&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">meta&lt;/span> &lt;span style="color:#a6e22e">name&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;viewport&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">content&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span> /&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">title&lt;/span>&amp;gt;Hello Hugo&amp;lt;/&lt;span style="color:#f92672">title&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">&amp;lt;!-- resources.Get &amp;#34;style.css&amp;#34; will fetch the style.css file. 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"> It will not work if you mention the exact location like &amp;#34;./assets/style.css&amp;#34;.--&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {{ $style := resources.Get &amp;#34;style.css&amp;#34; }} 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">link&lt;/span> &lt;span style="color:#a6e22e">rel&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;stylesheet&amp;#34;&lt;/span> &lt;span style="color:#a6e22e">href&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;{{ $style.Permalink }}&amp;#34;&lt;/span>&amp;gt; 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/&lt;span style="color:#f92672">head&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>Add the below script/command to &lt;code>package.json&lt;/code> file. This is needed to build the &lt;code>style.css&lt;/code> from your &lt;code>main.css&lt;/code> based on the utility classes you added in the previous step.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;#34;scripts&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;build-tw&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#34;npx tailwindcss -i ./assets/main.css -o ./assets/style.css&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;watch-tw&amp;#34;&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#34;npx tailwindcss -i ./assets/main.css -o ./assets/style.css -w --minify&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>},
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can use any name instead of &lt;code>build-tw&lt;/code> and &lt;code>watch-tw&lt;/code> here. I just use &lt;code>build-tw&lt;/code> and &lt;code>watch-tw&lt;/code> because it easily translates to &lt;em>build tailwind&lt;/em> or &lt;em>watch tailwind&lt;/em>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Everytime you make changes to your styling using tailwind utilities, you can run &lt;code>npm run build-tw&lt;/code>. This will create a new &lt;code>style.css&lt;/code> file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Or instead of &lt;code>npm run build-tw&lt;/code>, you can use &lt;code>npm run watch-tw&lt;/code> which is hot reloads any changes and builds CSS. Very useful when you are making constant changes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Now go back to the Hugo site&amp;rsquo;s directory from &lt;code>/themes/thisThemeIsNew&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>And from inside &lt;code>/thisSiteIsNew&lt;/code> run &lt;code>hugo server --disableFastRender&lt;/code> in your terminal. It will start a live server in &lt;code>http://localhost:1313/&lt;/code> 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>
&lt;/li>
&lt;/ul>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/add-tailwind-to-hugo/final-output.png"
 alt="A webpage with the heading thisSiteIsNew and a paragraph which says The thisSiteIsNew uses a theme called thisThemeIsNew"/>
&lt;/figure>

&lt;p class="text-center italic">Final output if you have followed the article step by step.&lt;/p>&lt;/p>
&lt;h2 id="references--links">References / links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://functional.style/hugo/general/tailwind/">https://functional.style/hugo/general/tailwind/&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>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">@unsungNovelty&lt;/a> or drop a mail to &lt;code>nikhil at unsungnovelty dot org&lt;/code>.&lt;/em>&lt;/p></description></item><item><title>Takeaways from 2021</title><link>https://www.unsungnovelty.org/posts/02/2022/takeaways-from-2021/</link><pubDate>Mon, 21 Feb 2022 23:38:30 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/02/2022/takeaways-from-2021/</guid><description>&lt;p>I have done a similar post in 2019 called &lt;a href="https://www.unsungnovelty.org/posts/02/2020/takeaways-from-2019/">9 Productivity &amp;amp; personal growth rules made from my 2019&lt;/a>. I couldn&amp;rsquo;t do one in 2020 because of covid. So here it is.&lt;/p>
&lt;p>I am productivity nerd. What that means is I am &lt;em>trying&lt;/em> to do things in a better way than yesterday. The word &lt;em>&amp;ldquo;trying&amp;rdquo;&lt;/em> is important. Because you won&amp;rsquo;t always be productive as much as you want to be. But you still try to be productive. On my productivity journey, I have learned more about myself. My limitations and my weaknesses. Productivity is a constant push towards perfection. So here are 6 things I learned from my 2021 in the hope that it will benefit you.&lt;/p>
&lt;h2 id="maximum-utilisation-equals-maximum-productivity">Maximum utilisation equals maximum productivity&lt;/h2>
&lt;p>If you are into productivity, you might have switched from productivity apps like your note apps or text editors. Switching regularly severely effects your productivity. There are some popular examples which shows how important maximum utilisation is:&lt;/p>
&lt;ul>
&lt;li>Expertising in a particular thing is better than being the jack of all trades.&lt;/li>
&lt;li>It is already known that working on the programming language you know is better for productivity than trying a new something you are not sure.&lt;/li>
&lt;/ul>
&lt;p>Similarly, choose the best possible thing you can NOW. Then try to stick with it as much as possible. Changing your text editor or note application regularly will have adverse effects on your productivity. Maximum utilisation of your the application, tool, language should be an automatic rule before switching to something else.&lt;/p>
&lt;p>And for whatever reason you have to change, don&amp;rsquo;t do it one go. Do it step by step. This will help you from the pain of migrating everything to the new flashing tool only to realise it is not good enough. Then you will have to migrate back to the tool that you were using before. Which takes a lot of time, again! By doing it step by step, it will help you to do the migration gracefully. This way it won&amp;rsquo;t effect your productivity much.&lt;/p>
&lt;p>I cleaned up my old emails which spanned across multiple email accounts over a period of 3 months. It had 10k+ emails. It was a thorough clean up to do multiple things. This way it never disrupted my productivity much.&lt;/p>
&lt;h2 id="consume-less">Consume less&lt;/h2>
&lt;p>This is something that I talked about in &lt;a href="https://www.unsungnovelty.org/posts/02/2020/takeaways-from-2019/">my 2019 post&lt;/a> as well. We live in a connected world. There are so many advantages to it. But the other side is noise and negativity. We need to actively clean up and tailor our online experiences so that we can avoid the noise and negativity. I clean up my Twitter and other online accounts to make sure I consume the least possible things. These apps are designed to take advantage of our weaknesses. So it is important to navigate through it properly.&lt;/p>
&lt;p>We also consume a lot more than necessary because FOMO (fear of missing out). But most of the time YAGNI (you ain&amp;rsquo;t gonna need it). So consume less.&lt;/p>
&lt;h2 id="focus-is-everything">Focus is everything&lt;/h2>
&lt;p>Focus is everything. Make sure you focus on the task at hand instead of wandering off. Make sure you are prioritising properly. Answer the question - &lt;em>Is there any other task I can do instead of this one?&lt;/em>&lt;/p>
&lt;p>If the answer is yes, then switch to that task immediately.&lt;/p>
&lt;h2 id="goals-should-be-in-your-point-of-view">Goals should be in your point of view&lt;/h2>
&lt;p>Your goals irrespective of whether it is short term or long term goals should be in your point of view. You should see them regularly. If it is your daily goals, make sure you write it on a note or whiteboard. This would force you to see the goals on a regular basis. It will have a profound effect on you when you see your goals regularly.&lt;/p>
&lt;p>I wrote about my experience on &lt;a href="https://www.unsungnovelty.org/posts/01/2022/new-year-resolutions-can-be-a-useful-necessary-first-step/">my recent post&lt;/a>.&lt;/p>
&lt;h2 id="reconsume-things">Reconsume things&lt;/h2>
&lt;p>This is not mentioned enough. Reconsumption is extremely important to understand things clearly. If you have watched a movie multiple times and always comes across something new, that is exactly what happens when you reconsume. Redo the tutorials. Reread the books. Listen to that podcast episode again.&lt;/p>
&lt;p>Reconsumption helps you remember things better. It helps us see things in different angles. We also are humans. Humans who grow and learn things everyday. So when you reconsume something, you see it from different angles based on your current understanding. This is why when you didn&amp;rsquo;t like that move before. But now when you see it, there are relevant experiences that has happened since the last time you saw the movie. This makes you see it in a completely different way. You will be surprised with things when you reconsume. Give it a try. In a way, it is also maximum utilisation of things.&lt;/p>
&lt;h2 id="clear-your-backlog-before-adding-new-things-to-your-plate">Clear your backlog before adding new things to your plate&lt;/h2>
&lt;p>This might the most important thing I have learned last year. That is to clear my backlog before adding new things to my plate. We all have have 99 tabs opened on our browser. Have 100&amp;rsquo;s of bookmarked articles which we are most probably never going to read. And the anxiety tax which comes with it all every time we see them.&lt;/p>
&lt;p>This has been one of the hardest thing to do. But I had partial success and it feels great already! I have successfully closed all my tabs on my mobile and desktop. Not a mass closing. But consumed them and took necessary actions for each tab. This was only possible by resisting the urge to add more tabs as much as possible. This slows down the backlog and gives you time to take action and catch up. This will also make you be picky when it comes to adding things to your plate. Taking the necessary actions for the ones I have open already has made wonders. Cos it frees up a lot mental anxiety.&lt;/p>
&lt;p>This has been hard to do for the books I want to read. Cos you always have tons of books you want to read. And unlike tabs in your browser, taking action is hard and takes more effort/time. But so far I have slowed down the adding of books to my to-read list. I think it is a good first step and I hope to catch up.&lt;/p>
&lt;p>Following this for the projects you want to do and the blog posts you want to write might be very hard too. But clean them up by going through the ideas once more. Maybe you don&amp;rsquo;t find them interesting anymore. Evaluate the ideas properly before adding. I was able to remove a lot of ideas for my posts and projects just by looking at them regularly.&lt;/p>
&lt;h2 id="in-conclusion">In conclusion&amp;hellip;&lt;/h2>
&lt;p>Productivity is hard. It&amp;rsquo;s is a marathon and not a sprint. The goal is to &lt;em>try&lt;/em> your level best. There will be a dip in productivity from time to time. Don&amp;rsquo;t let this effect you. No one can always keep giving 100%. Have a productive year ahead!&lt;/p>
&lt;hr>
&lt;p>&lt;em>Found an error? Have feedback on my writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>initLogs 4: Why am I getting [object Promise] when calling async function in JavaScript</title><link>https://www.unsungnovelty.org/posts/02/2022/initlogs-4-why-am-i-getting-object-promise-when-calling-async-function-in-javascript/</link><pubDate>Thu, 17 Feb 2022 19:47:57 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/02/2022/initlogs-4-why-am-i-getting-object-promise-when-calling-async-function-in-javascript/</guid><description>&lt;p>When I learnt about promises and asynchronous coding. The biggest time consumer was when I tried calling an asynchronous function inside a normal function (synchronous code). I was hoping to use the asynchronous function to get the promises which had the values I was looking for. But what I got was &lt;code>[object Promise]&lt;/code>. The asynchronous function was working fine. But when I called the async function inside a normal function it would return &lt;code>[object Promise]&lt;/code>. So no promises!&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/initLogs4/no-promises.gif"
 alt="A gif where a woman tells a man no promises."/>
&lt;/figure>

&lt;h2 id="why">Why?&lt;/h2>
&lt;p>You are getting &lt;code>[object Promise]&lt;/code> as value because you are calling an asynchronous function inside a synchronous code. This means the synchronous code runs line by line giving no room for asynchronous code to wait and give a response (the promise). You have to wrap an asynchronous function around the asynchronous function you are calling to get the desired result.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/initLogs4/2022-02-17_22-00.png"
 alt="An image with an input field and a button."/>
&lt;/figure>

&lt;p class="text-center italic">Initial state of the webpage which have an input field and a button&lt;/p>&lt;/p>
&lt;p>In the below code, we are creating a function which returns a promise. The below &lt;code>callOpenWeather()&lt;/code> function uses fetch API to call the OpenWeather api so that we can get a value called &lt;code>feels_like&lt;/code>. This &lt;code>feels_like&lt;/code> is a numerical value.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">//Async function to fetch the weather info
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// using OpenWeather API
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">callOpenWeather&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">async&lt;/span> (&lt;span style="color:#a6e22e">url&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#75715e">// Try part when successful return of promise
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">try&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#75715e">// Calls the API url, parses to JSON, returns
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>		&lt;span style="color:#75715e">// feels_like value which is in Farenheit for a particular area.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">callJson&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">fetch&lt;/span>(&lt;span style="color:#a6e22e">url&lt;/span>, {&lt;span style="color:#a6e22e">mode&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#39;cors&amp;#39;&lt;/span>,});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">loadJson&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">callJson&lt;/span>.&lt;span style="color:#a6e22e">json&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		&lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">loadJson&lt;/span>.&lt;span style="color:#a6e22e">main&lt;/span>.&lt;span style="color:#a6e22e">feels_like&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#75715e">// Catch part if promise returns an error
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>	} &lt;span style="color:#66d9ef">catch&lt;/span>(&lt;span style="color:#a6e22e">error&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">error&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="incorrect-way-asynchronous-function-inside-a-synchronous-code">Incorrect way: Asynchronous function inside a synchronous code&lt;/h2>
&lt;p>Now let&amp;rsquo;s write a function which will interact with the above &lt;code>callOpenWeather()&lt;/code>. The below code won&amp;rsquo;t work. When you need to call &lt;code>callOpenWeather()&lt;/code> function which returns a promise, &lt;em>you cannot&lt;/em> call it inside a synchronous code as shown below. It will return &lt;code>[object Promise]&lt;/code> as response.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// DOM function to get the data from input and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// use checkWeather function to get the data displayed.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">displayWeather&lt;/span> &lt;span style="color:#f92672">=&lt;/span> () =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">submitButton&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;button&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">inputValue&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;search&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">infoBox&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;info-box&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">submitButton&lt;/span>.&lt;span style="color:#a6e22e">addEventListener&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;click&amp;#39;&lt;/span>, () =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">style&lt;/span>.&lt;span style="color:#a6e22e">display&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;grid&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">innerText&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">callOpenWeather&lt;/span>(&lt;span style="color:#e6db74">`http://api.openweathermap.org/data/2.5/weather?q=&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">inputValue&lt;/span>.&lt;span style="color:#a6e22e">value&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;amp;APPID=&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">apiKey&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>); &lt;span style="color:#75715e">// Use an api key of openweather instead of ${apiKey} to make this code work.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">style&lt;/span>.&lt;span style="color:#a6e22e">boxShadow&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;0 0 2px 0 #d3d3d3&amp;#39;&lt;/span>; 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">displayWeather&lt;/span>();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/initLogs4/2022-02-17_19-24.png"
 alt="An image with an input field and a button which displays [object Promise] as response."/>
&lt;/figure>

&lt;p class="text-center italic">The function returns [object Promise] instead of returning the expected value.&lt;/p>&lt;/p>
&lt;p>This is because when &lt;code>infoBox.innerText&lt;/code> calls the &lt;code>callOpenWeather()&lt;/code> function, the &lt;code>displayWeather()&lt;/code> function is still a normal synchronous function. This means the lines are executed line by line and does not wait for the value from &lt;code>callOpenWeather()&lt;/code> which is an asynchronous function. To call &lt;code>callOpenWeather()&lt;/code> and get the value (a promise), make it asynchronous. You can do this by wrapping &lt;code>callOpenWeather()&lt;/code> inside an async function using async/await method as shown below. This will make an api call to OpenWeather API and wait for the result so that the result can be set and displayed in &lt;code>infoBox.innerText&lt;/code>.&lt;/p>
&lt;h2 id="correct-way-asynchronous-function-wrapped-with-an-asynchronous-function">Correct way: Asynchronous function wrapped with an asynchronous function&lt;/h2>
&lt;p>We are wrapping an async function with the eventlistener for the click event. This will let &lt;code>callOpenWeather()&lt;/code> function to run properly and wait until it returns a response as provided by the Open Weather API. The below solution uses async/await method. You can see the usage of &lt;code>await&lt;/code> keyword which waits for a response from the &lt;code>callOpenWeather()&lt;/code> function and returns a promise.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// DOM function to get the data from input and
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// use checkWeather function to get the data displayed.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">displayWeather&lt;/span> &lt;span style="color:#f92672">=&lt;/span> () =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">submitButton&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;button&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">inputValue&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;search&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">infoBox&lt;/span> &lt;span style="color:#f92672">=&lt;/span> document.&lt;span style="color:#a6e22e">getElementById&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;info-box&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">submitButton&lt;/span>.&lt;span style="color:#a6e22e">addEventListener&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;click&amp;#39;&lt;/span>, &lt;span style="color:#66d9ef">async&lt;/span> () =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">style&lt;/span>.&lt;span style="color:#a6e22e">display&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;grid&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">innerText&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">callOpenWeather&lt;/span>(&lt;span style="color:#e6db74">`http://api.openweathermap.org/data/2.5/weather?q=&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">inputValue&lt;/span>.&lt;span style="color:#a6e22e">value&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;amp;APPID=&lt;/span>&lt;span style="color:#e6db74">${&lt;/span>&lt;span style="color:#a6e22e">apiKey&lt;/span>&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">`&lt;/span>); &lt;span style="color:#75715e">// Use an api key of openweather instead of ${apiKey} to make this code work.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">infoBox&lt;/span>.&lt;span style="color:#a6e22e">style&lt;/span>.&lt;span style="color:#a6e22e">boxShadow&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;0 0 2px 0 #d3d3d3&amp;#39;&lt;/span>; 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">displayWeather&lt;/span>();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/initLogs4/2022-02-17_19-21.png"
 alt="An image with an input field and a button which displays expected value as response."/>
&lt;/figure>

&lt;p class="text-center italic">The function returns the expected numerical value&lt;/p>&lt;/p>
&lt;p>This is how you could get the value from your asynchronous code when you are stuck with &lt;code>[object Promise]&lt;/code> as your output. This is one of those scenarios where if you think about it, it makes total sense. But our synchronous mind could find it tricky.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Found an error? Have feedback on my writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>New year resolutions can be a useful &amp; necessary first step</title><link>https://www.unsungnovelty.org/posts/01/2022/new-year-resolutions-can-be-a-useful-necessary-first-step/</link><pubDate>Mon, 24 Jan 2022 13:17:51 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/01/2022/new-year-resolutions-can-be-a-useful-necessary-first-step/</guid><description>&lt;p>I see a lot of dislike towards new year resolutions. There is a assumption that new year resolutions is bad and ineffective. Atleast some people think new year resolutions as a finalised plan. It is not. It is just a rough script for how you want your new year to go. You need to be working on it everyday. Trim it down or expand as necessary. You don’t have to hit it all. In fact, most people won’t hit it all. And that is fine. It is definitely better to start your year with a script than go unscripted and blind. Especially for people who didn’t have a script until one. New year resolutions can also be a first step towards setting up your own productivity system. A productivity system which you never had.&lt;/p>
&lt;p>But but&amp;hellip; if they were serious about it they wouldn’t wait till new year you might say. Yeah, sure! New year resolutions are not for people who already have their stuff together. Or for people who have a productivity system already. It is for people who don’t have it figured out or for people who don’t have a productivity system. It is for people who go unscripted all year.&lt;/p>
&lt;p>New year resolutions are not any different from how people find excuses to procrastinate on something either. New year for many is just an excuse to start fresh and do something better. Especially when they have had a bad year. Same reason why you move to a better company to work after working at a horrible workplace. The new company gives you hope and a fresh beginning. We also do this for major birthdays like when you reach 30 or 40. &lt;a href="https://piped.kavin.rocks/watch?v=LoldJNDLZHc">Will Smith did some crazy stuff at his 50th birthday&lt;/a>. Like all of this, new year is just a new beginning for many. The problem is that many don’t stick with it. For those who do, it will have positive effects on their life.&lt;/p>
&lt;p>As someone who started off the productivity push with new year resolutions, here is my story…&lt;/p>
&lt;p>It was the last week of 2016. I was working on my 2017 new year resolutions like every other year. I wrote all the goals – my new year resolutions I have for work was in a github ticket. It was public to other colleagues as well. This was encouraged by my manager at the time. It was the best thing I have done until then. Definitely scary to go public with my goals. But it was nice to have them somewhere.&lt;/p>
&lt;p>A couple of months passed and like the majority I started falling behind my resolutions. It was still public and my to-do lists remained majoritively unchecked. And I would see some of my colleagues updating their yearly goals and I was in the majority who didn’t. My new year resolutions became untouched all through Q1 2016 in case I remember correctly. I realised only a few people from the office were updating it regularly.&lt;/p>
&lt;p>It was the peer pressure that got to me eventually. I started working on my resolutions/goals more often. But I realised it was hard to remind myself about my goals. It was never in my focus point. To tackle this I set my browser to open the github ticket every time I launched the browser for the day. This means every morning I open my browser, I will see my resolutions. This had a profound effect on me.&lt;/p>
&lt;p>Seeing your to-do list regularly will have a positive effect on you. It will put the goals back into your focus point. Soon, I started sticking with the plan regularly. I ended the year by hitting all the main priorities. I didn’t finish all my goals. But I finished all the main goals I wanted to hit. Now I didn’t have to start from scratch anymore. I added new items and copied the backlog to the next year.&lt;/p>
&lt;p>New year resolutions that year was the first exposure for me to work on my productivity system. I didn’t want to go unscripted anymore. It was possible only because of the enforcement of the circumstances. But the reality is that it all started only because I wanted to change things during new year with new year resolutions. I could’ve written anything and never updated that ticket. But I tried to stick with it. And it worked out for me.&lt;/p>
&lt;p>New year resolutions might not be the most popular and effective way to kick off your life into a new direction. But it definitely one of the most common way people try out every year. It is just another way. Like everything else, just writing things down isn’t enough, you need to work on it.&lt;/p>
&lt;p>As a kid I was taught to dream thanks to Dr. Abdul Kalam. New year resolutions can be our dreams. Dreams that we can all work towards to.&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>”Dream, dream, dream. Dreams transform into thoughts and thoughts result in action.”&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>&lt;a href="https://en.wikipedia.org/wiki/Abdul_kalam">Dr. A.P.J Abdul Kalam&lt;/a>&lt;/em>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Do what you can NOW</title><link>https://www.unsungnovelty.org/posts/01/2022/do-what-you-can-now/</link><pubDate>Sat, 01 Jan 2022 20:41:30 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/01/2022/do-what-you-can-now/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>We all want to solve issues/problems for ourselves, for others or for the world. But if the solution depends on doing more than two things, it could mean that we are not even going to start working on them. Let alone solving it. We even use the most difficult action we can take regarding that issue as an excuse to NOT do the simple actions or things we can do right NOW! Even though we acknowledge that the issue is actually an issue, we will not do anything about it. It doesn&amp;rsquo;t matter why. Irrespective of whether the reason is helplessness, anxiety, ignorance, misunderstanding or the plain old laziness, the reality is that we don&amp;rsquo;t do the things we can do NOW.&lt;/p>
&lt;p>When the issue is personal or private, you alone or a small group alone face the aftermath/consequences for not doing anything. But when the issue is a larger or a public one, everybody suffers because of our inaction. &lt;em>Sins of ommission&lt;/em> is something that I learned about recently. Sins of ommission is when you didn&amp;rsquo;t do the things you could&amp;rsquo;ve done regarding something.&lt;/p>
&lt;p>One thing people forget is that we are all on different stages of our lives. Whether this be with regards to age, professional progress, socio-political knowledge/understanding or something else. You cannot expect a person do the same things &lt;em>you&lt;/em> are doing towards the same issue. This is because that person might be in a different stage with regards to life or with regards to that issue. That person might know more than you or lesser than you regarding that issue. So because of that alone (excluding their upbringing, their POV&amp;rsquo;s and many other factors), the way that person might be looking at the issue will be completely different.&lt;/p>
&lt;h2 id="so-what-do-we-do-then-do-what-you-can-now">So what do we do then? Do what you can NOW!&lt;/h2>
&lt;p>Everyone can do &lt;em>something&lt;/em> towards the issue/problem/thing they want to do. It might be something microscopic. But you can do it &lt;em>now&lt;/em>.&lt;/p>
&lt;p>You want to learn programming but don&amp;rsquo;t know how? Have you done the things that &lt;em>you know you can do&lt;/em> &lt;strong>NOW&lt;/strong>? It might be as small as asking your developer friend for advice on how to get started with programming. Or maybe &lt;em>what you can do NOW&lt;/em> is just searching online - &lt;em>how to learn programming?&lt;/em>. Have you done that? That is one thing you CAN do NOW, but haven&amp;rsquo;t. Do that first before making excuses to yourself and others on why can&amp;rsquo;t do anything.&lt;/p>
&lt;p>You wanna do something about online privacy? Do what you can NOW. It might be as small as cranking up the available privacy settings to the max for your google account NOW. It might not be the most effective thing you can do. But that is something you can do NOW! Do that before complaining about how incovenient it is route all your traffic through TOR or how hard it is to self host everything. &lt;em>Don&amp;rsquo;t use the hardest actions you can take towards an issue as an excuse to NOT do the things you can NOW.&lt;/em> You definitely CAN crank up the privacy settings NOW for your google account.&lt;/p>
&lt;p>Everytime I talk about privacy, my friend tells me I am a tinfoil hat. That am crazy to seek privacy the way I do. Like I mentioned before, he definitely identify it as an issue. Just not the way I do. But again, this all comes back to us being two different individuals with different backgrounds, ideologies and ideas for life. Expecting him to deal with privacy and do the same things I do for privacy is not realistic. And vice-versa as well. Cos our definition for privacy differs significantly. What privacy is for him is NOT what privacy is for me. So what he does is not going to be what I would do towards it.&lt;/p>
&lt;p>This fundamental pattern of different people doing different things regarding a problem is important to have. Cos only doing what I do or only doing what my friend does towards online privacy is not going to make things better. You need people from different backgrounds to do way more other things towards it. You need Edward Snowdens of the world. But also people who just decided to crank up the privacy settings for their google account. Every bit signifies a change in tide, and it matters. But if you are one of those folks who says &lt;em>one person cannot make a difference&lt;/em>, look at Greta Thunberg. Irrespective of what you think about her and her actions, she started it all alone. You don&amp;rsquo;t have to agree with her actions or the way she did them. But &lt;em>one person definitely CAN make a difference.&lt;/em>&lt;/p>
&lt;p>Likewise, you wanna do something towards climate change? &lt;em>Do what you can NOW&lt;/em>. It might be as small as stopping the usage of single-use plastic. Or something even more smaller. Don&amp;rsquo;t try to do what Greta Thunberg is doing. And you don&amp;rsquo;t have to stop eating beef. Start small. Do something you are able to &lt;em>now&lt;/em>. And make incremental changes if you can. And most importantly, don&amp;rsquo;t use beef as an excuse to NOT do the simple things you can NOW.&lt;/p>
&lt;p>In short, &lt;em>do what you can NOW!&lt;/em>&lt;/p>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Our Goals and Our Questions</title><link>https://www.unsungnovelty.org/posts/10/2021/our-goals-and-our-questions/</link><pubDate>Thu, 07 Oct 2021 13:49:45 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/10/2021/our-goals-and-our-questions/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>We all have goals and we all ask questions. Like everybody, I have a ton of goals that needs to be finished. Things I want to achieve or finish. I use todo list items to describes a goal. But when you start working on a todo list item, the thing you will have in your head won&amp;rsquo;t be goal itself, but a bunch of &lt;em>questions&lt;/em>.&lt;/p>
&lt;p>Goals are important though. But we often need a plan when we start working on things. Goals are essentially those plans. Goals makes our existence as humans justifiable. Because we need things. And in order for us to get things we need, we try to finish a set of tasks which will help us reach our goals. Having a plan instead of winging it all the time will help things easier for us. Todo lists are just one such &amp;ldquo;plan&amp;rdquo; or format which hosts most of our goals these days. Doing a bunch of task items from the todo lists helps us reach our goals faster. Or that is the general gist. We use a notebook or an application on our computer/smartphones to create these tasks. And when we start doing the tasks though, we end up asking &lt;em>questions&lt;/em>, to ourselves or others.&lt;/p>
&lt;p>Questions are in our head, at least initially. Questions most of the time are also not documented/written down anywhere like our todo list items (goals!). This means you know what you want to do but you don&amp;rsquo;t know how to do it. You still ask questions though. You often search online for answers to your questions. How do I make a website? How can I do this? How can I do that? Or you ask a friend or someone who knows better about the subject which you are meddling with. This is a problem if you think about it. Because you&amp;rsquo;d rarely document the question and the answer. Then when you ask the same question, you repeat the procedure of finding the same answer all over again. Questions are our notes, our journey. Snippets of information which constitutes a goal. We could document the answers for our questions we have in our head. This can lead to not having to ask the same question again. DRY principle anyone?&lt;/p>
&lt;p>I have recently started using questions for notes instead of a heading and the answer. I try to write the question I have in my head or use the question I asked the search engine instead of using a title/heading followed by the asnwer. This has been really helpful for me cos it is much more clear. Makes the note a lot better in my opinion. When you are using a software, product, project and you are going through the documentation, where do you go first? Mostly &lt;em>Frequently Asked Questions (FAQs)&lt;/em>. Have you noticed that FAQs are far more easier and much more accessible to you than the documentation itself? That is because you already have a question in your head and you are trying to find that question in the entire documentation in the hope that you can also find the answer to them. For example, my heading for notes on &lt;em>git tags&lt;/em> changed from &lt;em>&lt;strong>git tags&lt;/strong>&lt;/em> to &lt;strong>&lt;em>How do I create an annotated git tag?&lt;/em>&lt;/strong>. Because information about annonated tag is what I want. Even when I need to find something else specific to git tags, I will be searching online anyway. So why bother copy pasting the entire documentation as your note? By being specific and splitting a topic to multiple questions, I know exactly what to look for next time I encounter a question. Which is mostly a lot of times. You could even classify your questions under a specific title or heading to make it more organised. For example, all the questions about git tags can be asked under git tags heading. And this is a much better way of using headings or a title.&lt;/p>
&lt;h2 id="how-do-i-ask-better-questions">How do I ask better questions?&lt;/h2>
&lt;p>Obviously the next big question is, how and when should I ask a question? Hear are some pointers for you…&lt;/p>
&lt;ul>
&lt;li>Ask the question to yourself first. Sometimes all you want is a rubber duck. Someone to listen the words inside your head to get the answer. That is why sometimes when you ask a question/doubt to someone, midway through the question you answer it yourself.&lt;/li>
&lt;li>Ask the question to a search engine. You could ask the question to a search engine before asking a human. There is a high chance that what you are trying to find is already tried by someone else in the world. You might even get better ideas for the information you are trying to get.&lt;/li>
&lt;li>&lt;strong>DON&amp;rsquo;T BE A HELP VAMPIRE!&lt;/strong> A help vampire is someone who just ask for help without putting any effort on their own to find solution for themselves. Before you ask a question, do your due diligence so that others are not wasting their time. It will also be faster most of the times to just do the research yourself instead of waiting for somebody else&amp;rsquo;s reply.&lt;/li>
&lt;/ul>
&lt;h2 id="references-links">References / Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@gordon_zhu/how-to-be-great-at-asking-questions-e37be04d0603">https://medium.com/@gordon_zhu/how-to-be-great-at-asking-questions-e37be04d0603&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://xyproblem.info/">https://xyproblem.info/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/">https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://stackoverflow.com/help/how-to-ask">https://stackoverflow.com/help/how-to-ask&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://slash7.com/2006/12/22/vampires/">https://slash7.com/2006/12/22/vampires/&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Balancing production and consumption in the digital era</title><link>https://www.unsungnovelty.org/posts/09/2021/balancing-production-and-consumption-in-the-digital-era/</link><pubDate>Mon, 27 Sep 2021 22:02:43 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/09/2021/balancing-production-and-consumption-in-the-digital-era/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Most of us are addicted to consumption in this modern digital era. Or, &lt;a href="https://en.wikipedia.org/wiki/Information_Age">Information Age&lt;/a>. Information is available in abundance now. The amount which was never accessible for us humans ever since the dawn of time. We watch documentaries about planets, listen to podcasts on varied topics and can read about virtually anything in just Wikipedia alone. But this has reached a point where we are consuming in excess. We are less focused on doing anything with the information and more focused on the consumption itself. We have reached a point where we are in a consumption spree whether it be books, blogs, podcasts, youtube channels or learning.&lt;/p>
&lt;p>A great way to counter the consumption spree is by balancing it out with production. Producing things that you want to and always have wanted to produce. It might be blog posts, youtube videos or art. You get the idea. The idea is to balance the consumption out with production. But I should tell you that there is a lot of unlearning that you have to do first in order to &lt;em>balance excessive consumption out&lt;/em>.&lt;/p>
&lt;p>Unlearning means exactly what it sounds like. You will have to learn to do things in a different way by changing or forgetting the way you used to do things before. The first thing to do is to unlearn or remove the excess junk in your daily life.&lt;/p>
&lt;blockquote>
&lt;p>Our brain seeks things that we feed it regularly. If you feed useful and interesting things, our brain seeks more useful and interesting things. On the other hand if you feed it useless or uninteresting things, our brain will gladly seek more useless or uninteresting things.&lt;/p>
&lt;/blockquote>
&lt;p>If you are consuming in excess, it means there are many things like facebook, instagram, youtube or Twitter which are notorious for pushing you to an endless scroll of consuming useless information. You need to first clean up and unlearn them before having to do trade-offs between things that are more useful compared to these useless information. Like an interesting podcast or a youtube channel about history for instance are useful than endless scroll of useless information. Meanwhile learning a skill that will help you professionally is more useful than the aforementioned interesting podcast or the youtube channel about history.&lt;/p>
&lt;p>The process of unlearning and relearning is about constantly cleaning up our consumption habits and replacing with better, less excessive consumption habits until we reach a sweet spot we know is better for us.&lt;/p>
&lt;p>Going organic is great way to speed this process. I stopped having goals for reading books and writing blog posts. Or for the number of podcasts, youtube channels that I follow for that matter. Our brain needs time to process the information we have just consumed or are working with. So reading a book just after you finished another doesn’t let you extract the same amount of information. This is the same reason why you sometimes wake up with a solution you were working on the night before but couldn’t figure out. The same reason why sometimes short walks helps you solve a problem you were stuck with. So take your time to write a summary of the thing that you just consumed. I have personal notes for all the books that I have read and keep notes on podcast episodes I listen to. Going organic might seem slow for you at first. But if you really like consuming something, the best way to do it is by consuming it organically. This is because it will help you focus more and eventually the rate at which you can consume things increases.&lt;/p>
&lt;p>Once you’ve balanced out consumption, the main villain. It is time for you to start producing things. Write blog posts instead of just reading them. Create an app that you’ve always wanted to. Start working on your next big project and build things with the information you’ve learned. It is the best way to use your knowledge. So produce! …Instead of just consuming.&lt;/p>
&lt;h2 id="references-and-links">References and links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://www.fastcompany.com/90387269/your-obsession-with-learning-is-holding-you-back">https://www.fastcompany.com/90387269/your-obsession-with-learning-is-holding-you-back&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Prove them right! Not wrong.</title><link>https://www.unsungnovelty.org/posts/09/2021/prove-them-right-not-wrong./</link><pubDate>Thu, 09 Sep 2021 17:06:37 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/09/2021/prove-them-right-not-wrong./</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Conversations are important to learn and understand things better. It is one of the fundamental ways we learn and grow. It helps us to reach conclusions and validates our thoughts/ideas on what is &amp;ldquo;right&amp;rdquo; and what is &amp;ldquo;wrong&amp;rdquo;. But if you have observed, we end up having conversations which are pretty much one sided most times. Or it ends up being a debate where the last man standing wins. A productive conversation is getting hard to come by these days. Cos we have our own knowledge that defines what is right and what is wrong. That is not the problem though. The problem is that we are not ready to open up to the idea that we could be wrong about what is &amp;ldquo;right&amp;rdquo; and what is &amp;ldquo;wrong&amp;rdquo;.&lt;/p>
&lt;p>So how could we understand our biases better? How can we open up to the idea that we could be wrong? How can we have more productive conversations? An easy way to test your biases is to try to talk to the person you are having conversations and prove them right! Thereby trying to prove yourself &amp;ldquo;wrong&amp;rdquo;. This puts your thoughts and ideas into testing and helps you listen. So instead of noding along until the person stops talking so that you can prove them wrong, you tolerate and hopefullly listen better about what the other person has to say.&lt;/p>
&lt;p>This also makes it easy for you to callout your own biases easily in a conversation. To be very clear, this doesn&amp;rsquo;t mean you should defend everything the other person says though. It is just a simple test to check how biased you are when going into a conversation. Where the byproduct could be better listening and tolerance to opposite views.&lt;/p>
&lt;p>This only works when you are open to the possibility of thinking that you could be wrong. So be open next time you are having a conversation. Try to prove them &amp;ldquo;right&amp;rdquo; when you are trying to have a conversation with someone. And maybe you would be able to uncover your biases. Or validate your thoughts. So, prove them right. Not wrong!&lt;/p>
&lt;h2 id="references--links">References / links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Principle_of_charity">https://en.wikipedia.org/wiki/Principle_of_charity&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Steelmanning">https://en.wikipedia.org/wiki/Steelmanning&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>initLogs 3: Learnings From My Experience on How to Learn Programming</title><link>https://www.unsungnovelty.org/posts/05/2021/initlogs-3-learnings-from-my-experience-on-how-to-learn-programming/</link><pubDate>Mon, 17 May 2021 18:04:30 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2021/initlogs-3-learnings-from-my-experience-on-how-to-learn-programming/</guid><description>&lt;p>When you start your programming journey, you ask for recommendations from friends, colleagues or anybody who knows how to program. Either that or you just search online on how to learn programming. The recommendations would be something which you are blindly jumping into with no idea what to expect, in the hope that it will just “click”. This does work, sometimes. Especially if you have a mentor to help you out. Like a colleague in your company or a friend.&lt;/p>
&lt;p>You might have heard stories of people who have failed several times in programming before “it clicked”. But what they meaning is the time they took to figure out what they want to learn or specialise within software development. Like front-end, back-end, databases or full stack. Data visualisation, data analysis or web application security. This is possible only by moving forward with your journey to learn programming. And once you do, learning the actual thing like learning JavaScript for front-end development for instance needs less time comparatively. Because now you know what to do, which materials to use so that you can learn faster and move fast towards your goal.&lt;/p>
&lt;p>There are things that I found repeatable during my journey on how to learn programming. I hope this saves your time and help you learn programming faster.&lt;/p>
&lt;h2 id="dont-ask-advice-from-too-many-people">Don&amp;rsquo;t ask advice from too many people&lt;/h2>
&lt;p>If you&amp;rsquo;re just starting your journey on learning to program, don&amp;rsquo;t ask advises from too many people. It will not help you. Only confuse you more and could slow down your progress. People will recommend so many different ways and methods to learn or materials to use. So ask a very few people and try those methods and materials and see if it is working for you. Remember, the point is to learn and understand what is working &lt;em>for you&lt;/em>, not blindly follow someone&amp;rsquo;s advice. It doesn&amp;rsquo;t matter how successful the person recommending something to you is. If it is not working for you just try something else. It will save you a world of time and help you not dread learning.&lt;/p>
&lt;h2 id="champions-bias">Champion&amp;rsquo;s bias&lt;/h2>
&lt;p>Another important thing I wanna talk about is the champion&amp;rsquo;s bias or success bias. Champion&amp;rsquo;s bias or success bias is the inability of a person to understand and think from the point of view of a beginner or novice. The champion&amp;rsquo;s bias happens mainly because a person is more experienced now and forgot how it is to be a beginner. This means their recommendations and advises could be &lt;em>from their level of experience&lt;/em> meaning it could waste several hours of us beginners. This effects you mainly when they recommend study materials or course materials. They will be extremely hard for you to grasp and costs you a lot of time. So always keep this in mind when you are talking to an experienced professional. Teaching is a lot harder than learning things for yourself. You can always be a very good programmer and still suck at teaching.&lt;/p>
&lt;h2 id="use-a-material--method-that-works-for-you">Use a material / method that works for you&lt;/h2>
&lt;p>If you have reached until this post, you probably have a course, a material or a method that you are using to learn how to program. Like:&lt;/p>
&lt;ul>
&lt;li>Video courses: Like a Udemy course or Youtube videos .&lt;/li>
&lt;li>Books: Something like Eloquent JavaScript or Learn Python the hard way.&lt;/li>
&lt;li>Exercise based learning: Like freecodecamp.org or exercism.io&lt;/li>
&lt;li>Learning through building projects.&lt;/li>
&lt;/ul>
&lt;p>If it&amp;rsquo;s working, great! But what if it isn&amp;rsquo;t? What if you really dread opening that book or that video course? People are recommending things that worked &lt;em>for them&lt;/em>. It doesn&amp;rsquo;t mean they will work for you too. So if the material or the the method is not working for you, it means it is an issue with the material or the method. &lt;em>&lt;strong>NOT you&lt;/strong>&lt;/em>. Find a method or material that works for you. I personally use a mix of videos and learning through building as my preferred way. So try out things and if it is working, great! But if not, do not stick with it and make your life miserable. It doesn&amp;rsquo;t matter who recommended it to you, if it is not working for you, it just means it is not working for you. So move on. &lt;em>Fail fast to learn fast&lt;/em>.&lt;/p>
&lt;h2 id="stay-away-from-eloquent-javascript-if-you-are-a-beginner-to-programming-or-javascript">Stay away from Eloquent JavaScript if you are a beginner to programming or JavaScript!&lt;/h2>
&lt;p>Most of us beginners who are learning JavaScript would have heard the book &lt;a href="https://eloquentjavascript.net/">Eloquent JavaScript&lt;/a>. Recommended by people as a beginner friendly book. I have wasted countless amount of time and energy trying to make sense of this book. This was recommended to me by two experienced engineers. This was also recommended by the bootcamp which I was planning to get into before the Covid-19 happened. So it has to be good right? No! It has been the main reason for me getting stuck. Still, I see this recommended everywhere by experienced people, especially since this is a free book. This is not an unpopular opinion. There are so many people who are like me and have got stuck with this book. So if someone recommend you this book and you can&amp;rsquo;t follow, don&amp;rsquo;t stress yourself and waste too much time on it. Try a different resource.&lt;/p>
&lt;p>&lt;img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c8s6mxqcz7xu8ke2szmy.png" alt="Alt Text">
&lt;em>This is just one tweet. Reading &lt;a href="https://www.goodreads.com/book/show/8910666-eloquent-javascript#other_reviews">reviews of Eloquent JavaScript in Goodreads&lt;/a> will give you a clear indication on how a beginner vs experienced programmer perceives the book.&lt;/em>&lt;/p>
&lt;h2 id="tutorial-hell">Tutorial hell&lt;/h2>
&lt;p>It is common for beginners to get stuck with tutorials or exercises in loop. This is when you keep doing those exercises or going through course materials without doing anything with the information that you have learned. It can also be very hard to get out of this loop. Mainly because you will want to finish the entire course before doing anything with it. This is why course materials these days include projects after teaching you the next topic.&lt;/p>
&lt;p>Apart from building things, teaching by writing a blog post or by creating a YouTube video about what you learnt is also a great way to revise. These methods will challenge you to understand the topic you&amp;rsquo;ve just learned thoroughly. You will be surprised by the amount of information you are unable to explain properly when you start creating a video or starts writing a blog post. Doing this will make you learn topics thoroughly.&lt;/p>
&lt;h2 id="difference-between-programming-and-coding">Difference between programming and coding&lt;/h2>
&lt;p>Programming is about thinking and understanding how to do and coding is about what to do. These are two different things. To be a bit more clear, programming is about the thought process on how to solve a problem and coding is about the syntax to write once you know how to solve the problem. We use the word coder and programmer interchangeably. But as a beginner, you should strive to be a programmer and not a coder. You should be prioritising how to be a programmer over becoming a coder. Otherwise you will know what syntax to write but won&amp;rsquo;t know how to write it. &lt;a href="https://www.youtube.com/watch?v=azcrPFhaY9k">Andy Harris&amp;rsquo;s talk on How to begin thinking like a programmer&lt;/a> explains this very well. I really recommend you watch it. It is one the best video I have come across and I re-watch it from time to time.&lt;/p>
&lt;h2 id="community-is-important">Community is important!&lt;/h2>
&lt;p>What I don&amp;rsquo;t see people talk enough about this. It is important to be a part of a community while learning to program. freeCodeCamp has their forum. &lt;a href="https://www.theodinproject.com/">The Odin Project&lt;/a> has a Discord server which is faster than a forum for immediate queries. It is very useful to be a part of a community and to get involved with the community. You will learn about different point of views and see the problems others are facing. It is also a great place for you to find help and even make friends. So I recommend you find a community while you are learning to program. It could be the community channel of your courseware, a Telegram channel, Forum or even a subreddit. But do find it cos it will help a lot in your journey instead of doing a solo ride.&lt;/p>
&lt;h2 id="productivity-tips-as-you-learn">Productivity tips as you learn&lt;/h2>
&lt;p>Here are some of the productivity tips and advises that I found useful. Maybe it will help you too.&lt;/p>
&lt;h3 id="it-is-ok-to-search-online-for-tips">It is OK to search online for tips&lt;/h3>
&lt;p>I always had the feeling that I have to be able to do the exercises entirely based the material I was following. Searching online was thought as something bad. So when you are stuck, it&amp;rsquo;s OK to search online. About how to loop through an array, a better explanation to higher order functions. But Just search online for these building blocks. It is OK.&lt;/p>
&lt;h3 id="switch-between-two-tasks-to-be-more-productive">Switch between two tasks to be more productive&lt;/h3>
&lt;p>When you are on a problem or exercise and has been stuck for a while, you eventually might dread the problem. You will also end up wasting the entire day (or days) on it without being productive at all. The solution I found is to have a secondary task which you want to do when you don&amp;rsquo;t feel like doing your primary task and toggle between the two. &lt;em>I am NOT recommending multi tasking so don&amp;rsquo;t take two big projects and switch between them or don&amp;rsquo;t learn two programming languages at the same time!&lt;/em>&lt;/p>
&lt;p>Find a secondary task which is inferior in importance and priority but still important enough. Like writing a blog post. The idea is to switch back to your primary task after a while. This way you have less wasted time and will be more productive.&lt;/p>
&lt;h3 id="accepting-failures-is-part-of-learning">Accepting failures is part of learning&lt;/h3>
&lt;p>Following a material alone won&amp;rsquo;t help you learn things faster. You also have to learn when to accept failure while learning new things. So that you won&amp;rsquo;t waste a whole day (or days) on one problem. &lt;em>Make sure you give your 100% before accepting defeat&lt;/em>. Try go for a walk and if it&amp;rsquo;s late night, sleep it off. Or like I said before, switch your task or search online for tips etc. And if nothing works, accept defeat and ask for help with the community or your friend / mentor.&lt;/p>
&lt;h2 id="resources-i-like-for-learning-programming">Resources I like for learning programming&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://www.theodinproject.com/">The Odin Project&lt;/a>: The complete and best resource I have found for learning programming or to learn web development / full stack development. They offer a full stack developer path for JavaScript or Ruby on Rails. Their best part is, instead of creating materials for their curriculum like everybody else, they curate the best resources available online and let&amp;rsquo;s you track the progress through their website. Their Discord server will unlock a great community which is helpful and resourceful.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.freecodecamp.org/">freeCodeCamp&lt;/a>: If you love exercise based learning, you will love freeCodeCamp. They are home to a lot of exercises and I use fCC to practice algorithms and data structures among other things. They also have a forum which you should be part of if you are them. They offer certifications and courses for a wide range of specialities and is free.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.udemy.com/course/the-complete-javascript-course/">The complete JavaScript course by Jonas Schmedtmann&lt;/a>: This is the only paid course I have tried and it turned out to be amazing. This course dives deep into how JavaScript language works behind the scenes. It is focused on front end based exercises. The only caveat is that this course includes JavaScript only content. So if you don&amp;rsquo;t know enough HTML or CSS, you might feel out of place. There is an HTML &amp;amp; CSS course by Jonas if you wanna take that route and pay for another course. Or just learn enough HTML and CSS through W3Schools. ;)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.w3schools.com/">W3Schools&lt;/a>: W3Schools is best for getting started with web development quickly. While I didn&amp;rsquo;t use W3Schools as a standalone resource to learn programming or coding, I used it to get a quick start with HTML, CSS and JavaScript for web development. I found it very useful and beginner friendly.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://exercism.io/">Exercism&lt;/a>: This is an exercise based learning resource which cater to a wide range of languages. If you are into exercises, you will find it at home. I switch between freeCodeCamp and Exercism for their exercises.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://www.websiteplanet.com/blog/html-guide-beginners/">Basic HTML for Beginners&lt;/a>: A step-by-step instruction for beginners who want to understand HTML. This is a good first step guide that can walk you through the basics without overwhelming you.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="secret-sauce-to-learn-programming">Secret sauce to learn programming?!&lt;/h2>
&lt;p>&lt;img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jx4uwk2bzdhcp0b1y2bn.jpg" alt="Alt Text">&lt;/p>
&lt;p>Practice, practice and…… PRACTICE!&lt;/p>
&lt;p>The secret sauce is practicing over and over again until you become great at programming!&lt;/p>
&lt;h2 id="credits">Credits&lt;/h2>
&lt;p>Thank you Nora for sharing the HTML for Beginners resource with me. I hope this addition helps more people.&lt;/p>
&lt;hr>
&lt;p>&lt;em>If you like the content, think I am wrong about something or have any questions, drop a comment or DM me on twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungnovelty&lt;/a>&lt;/em>&lt;/p></description></item><item><title>Frequently asked questions about Privacy, Whatsapp, Telegram and Signal</title><link>https://www.unsungnovelty.org/posts/01/2021/frequently-asked-questions-about-privacy-whatsapp-telegram-and-signal/</link><pubDate>Sun, 24 Jan 2021 15:58:17 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/01/2021/frequently-asked-questions-about-privacy-whatsapp-telegram-and-signal/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>&lt;em>This article doesn&amp;rsquo;t have to be read from start to finish for understanding. Just use the &amp;ldquo;Table of contents&amp;rdquo; to go through questions you want to read and if you have any questions, DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungnovelty&lt;/a>.&lt;/em>&lt;/p>
&lt;p>&lt;strong>TLDR;&lt;/strong> Stop using Whatsapp and use &lt;a href="https://signal.org/">Signal&lt;/a> if you are serious about privacy and security.&lt;/p>
&lt;p>&lt;em>Update March 2024: I used to recommend Telegram if a person can&amp;rsquo;t use Signal for some reason when I initially posted this. But I don&amp;rsquo;t recommend Telegram now that Telegram has behavrioural ads and other anti-privacy featrues. I will rewrite the entire Telegram section to reflect that in the future. But keep this in mind while you are reading the Telegram section.&lt;/em>&lt;/p>
&lt;h2 id="privacy">Privacy&lt;/h2>
&lt;h3 id="i-dont-have-anything-to-hide-anyways-so-why-should-i-be-worried">I don&amp;rsquo;t have anything to hide anyways! So why should I be worried?&lt;/h3>
&lt;p>“I don&amp;rsquo;t have anything to hide” is a common argument that I hear everytime I talk to people about privacy. When you are saying you don&amp;rsquo;t have anything to hide, you&amp;rsquo;re denying privacy to others and you, for now and for the future. That is not how it should work.&lt;/p>
&lt;p>Privacy should be the default option for the end users. Any information about you should only be accessible to others like big corporations only with your consent. And you should be able to opt out of it. Law enforcement agencies or governments should be following due deligence if they have to access your data. This is also how it works in the real world, the offline world. But currently in online world, this is happening the other way around. So the end users are powerless and always gets exploited.&lt;/p>
&lt;h3 id="but-what-are-government-or-companies-like-facebook-going-to-do-with-my-data-that-is-harmful">But what are government or companies like Facebook going to do with my data that is harmful?&lt;/h3>
&lt;p>Your financial status, gender, race, marital status, health conditions, employment status to list a few are all private data. These are some of the data points that you shouldn&amp;rsquo;t be sharing with corporates unless absolutely necessary. The corporates share these kind of data with third parties you don&amp;rsquo;t even know. Currently, you don&amp;rsquo;t know who all have your data and how it is being used. When Facebook shares it with their third parties, there is nothing stopping them from sharing it to another company or other groups where they can use it for spam, something decieving or even something harmful to you. &lt;a href="https://restofworld.org/2020/all-the-data-fit-to-sell/">In India, we are seeing the data handling getting out of hand and having real world consequences&lt;/a>! So yes, privacy is important.&lt;/p>
&lt;h3 id="what-is-end-to-end-encryption">What is end to end encryption?&lt;/h3>
&lt;p>Imagine if Raj and Krish are talking something private. End to end encryption makes sure that the messages they send are not read by anybody along the way to make sure only they two can read it.&lt;/p>
&lt;p>End-to-end encryption (E2EE) is a system of communication where only the communicating users can read the messages. In principle, it prevents potential eavesdroppers – including telecom providers, Internet providers, and even the provider of the communication service.&lt;/p>
&lt;h2 id="whatsapp">Whatsapp&lt;/h2>
&lt;p>Whatsapp is one of the most popular text messenger app and is owned by Facebook. The recent privacy policy change created huge uproar from end users making Whatsapp to delay the policy from taking effect. I will try to answer questions which will hopefully tell you why this is important and why we should stop using Whatsapp.&lt;/p>
&lt;h3 id="whatsapp-have-decided-to-not-enforce-the-new-privacy-policy-is-it-true-should-we-go-back-to-whatsapp">Whatsapp have decided to not enforce the new privacy policy. Is it true? Should we go back to Whatsapp?&lt;/h3>
&lt;p>No. &lt;a href="https://techcrunch.com/2021/01/15/whatsapp-delays-new-data-sharing-policy-enforcement-to-may-15/">Whatsapp is delaying the enforcement of the privacy policy for another 3 months&lt;/a> since they saw a huge surge in migration to other services like Signal and Telegram which protects user&amp;rsquo;s privacy better. There is a reason why the &lt;a href="https://www.irishtimes.com/business/technology/whatsapp-says-european-users-do-not-have-to-share-data-with-facebook-1.4452435">latest policy change will not effect European countries&lt;/a>. This policy violates GDPR policies under which Whatsapp has to operate in EU countries. So countries which doesn&amp;rsquo;t have strict laws protecting user&amp;rsquo;s privacy will be exploited by companies like Facebook is a clear indication here. There is also a &lt;a href="https://www.businesstoday.in/technology/news/pil-against-whatsapp-new-privacy-policy-in-delhi-hc-says-violates-fundamental-rights/story/427986.html">public interest litigation filed against Whatsapp&amp;rsquo;s privacy policy change in India&lt;/a>.&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/d238d8327g2398.png"
 alt="Image of a article title which says EU user&amp;#39;s don&amp;#39;t have to share data with FB"/>
&lt;/figure>

&lt;h3 id="whatsapp-facebook-have-promised-that-they-are-going-to-protect-our-privacy-why-worry-then">Whatsapp (Facebook) have promised that they are going to protect our privacy. Why worry then?&lt;/h3>
&lt;p>&lt;a href="https://www.wsj.com/articles/BL-DGB-33012">Facebook first promised that they are going to operate Whatsapp independently&lt;/a> after Facebook&amp;rsquo;s acquisition and stay privacy focused. But &lt;a href="https://techcrunch.com/2016/09/30/whatsapps-privacy-u-turn-on-sharing-data-with-facebook-draws-more-heat-in-europe/">Whatsapp started sharing data with Facebook with 2016&amp;rsquo;s privacy policy change&lt;/a> which was against the promise Facebook made to European Commission during their Whatsapp takeover. And in 2017, &lt;a href="https://arstechnica.com/tech-policy/2017/05/facebook-fined-e110-million-for-misleading-eu-over-whatsapp-deal/">European Commission fined €110 million ($122 million) to Facebook&lt;/a> for misleading European Union during Whatsapp takeover. And in 2018, &lt;a href="https://www.theguardian.com/technology/2018/apr/30/jan-koum-whatsapp-co-founder-quits-facebook">Whatsapp co-founder left Whatsapp over privacy concerns and disagreements with Facebook&lt;/a>.&lt;/p>
&lt;p>And right now as we speak, there are &lt;a href="https://techcrunch.com/2020/12/09/facebook-antitrust-state-attorneys-general/">2 anti-trust lawsuits happening against Facebook from 48 attorney generals from 46 states&lt;/a> in the U.S regarding Whatsapp and Instagram&amp;rsquo;s acquisition. So are you sure you can trust Facebook?&lt;/p>
&lt;h3 id="what-is-the-big-deal-about-the-change-in-whatsapps-privacy-policy">What is the big deal about the change in Whatsapp&amp;rsquo;s privacy policy?&lt;/h3>
&lt;p>Whatsapp was bought by Facebook for $19 billion dollars. This change is a prequel to monetising Whatsapp. They are also going to start sharing data with broader Facebook family of companies like Instagram and Facebook itself. While this data doesn&amp;rsquo;t include conversations since &lt;a href="https://signal.org/blog/whatsapp/">Facebook uses Signal protocol to provide end to end encryption&lt;/a> feature, this includes metadata like but not limited to the ones mentioned below:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Data point&lt;/th>
&lt;th>What FB &lt;strong>could&lt;/strong> do with it&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>IP Address&lt;/td>
&lt;td>Which can be used to target you with regional ads based on your location and can be shared to the government.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>The way you use the app&lt;/td>
&lt;td>Behavioural data can be used to improve the app.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Location&lt;/td>
&lt;td>Targeted ads in your Facebook or Intagram account based on your location.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Contacts&lt;/td>
&lt;td>Targeted ads for you or your BFF&amp;rsquo;s and other close people in your circle based on eachothers data.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Information in the about section - Your name etc.&lt;/td>
&lt;td>Could be used to double down on any missing information of yours.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Display picture (DP)&lt;/td>
&lt;td>Which alone can be used by &lt;a href="https://www.theverge.com/2017/12/19/16794660/facebook-facial-recognition-tagging-photos">Facebook&amp;rsquo;s facial recognition technology to recognise you&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Phone number&lt;/td>
&lt;td>The missing data point which FB don&amp;rsquo;t have about everyone since you can sign into FB and Instagram without providing your phone number.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="oh-my-god-how-can-facebook-just-suddenly-start-sharing-data">Oh my god! How can Facebook just suddenly start sharing data?&lt;/h3>
&lt;p>The reality is, they have been doing this &lt;a href="https://techcrunch.com/2016/09/30/whatsapps-privacy-u-turn-on-sharing-data-with-facebook-draws-more-heat-in-europe/">since 2016 when Whatsapp changed their privacy policy&lt;/a>. They have been sharing the metadata listed above since then. But the difference was that the existing users were able to opt-out of the privacy policy meaning it will not share the data with Facebook. But any users who&amp;rsquo;ve joined Whatsapp post 2016 have been sharing these data already without being given an option to opt-out. That is why &lt;a href="https://www.nytimes.com/2017/05/18/technology/facebook-european-union-fine-whatsapp.html">Facebook was fined by EU for an amount of 110 million Euros ($122 million) back in 2017&lt;/a>.&lt;/p>
&lt;h3 id="so-my-data-is-already-with-whatsapp-what-is-the-point-of-me-moving-from-whatsapp-to-a-privacy-friendly-option-now">So my data is already with Whatsapp. What is the point of me moving from Whatsapp to a privacy friendly option now?&lt;/h3>
&lt;p>Do not see the data sharing/transfer between a service (like Whatsapp) and you as a one time transaction. Your data is an every growing set of informations. You will meet new people, your contacts will grow and the information about you will grow with it. Just like getting covid19 infected, your privacy also depends not only just you, but also everybody around you. When you protect your privacy, you are protecting everybody around you too. So make the change, choose privacy for you and others around you by using services like Signal.&lt;/p>
&lt;h3 id="whatsapp-conversations-are-end-to-end-encrypted-right-doesnt-that-mean-at-least-my-chats-are-secure">Whatsapp conversations are end to end encrypted right? Doesn&amp;rsquo;t that mean at least my chats are secure?&lt;/h3>
&lt;p>While conversations can&amp;rsquo;t be shared as it is end to end encrypted (e2ee), the metadata like the above listed ones are more than enough to identify that you are chatting with a particular person at a particular time exposing yourself to privacy risks. The data like the above is what Facebook is aiming for when they say they are sharing the data with Facebook. This can be particularly dangerous when these data can be accessed from Facebook by governments or third parties around the world to name a few scenarios.&lt;/p>
&lt;p>Another thing is, end to end encryption only means your data is safe during transfer from you to your sender - during the transit. You Whatsapp chats, messages and other media are stored in your phone unencrypted and hence not safe.&lt;/p>
&lt;h3 id="my-phone-is-safe-so-whatsapps-unencrypted-data-should-be-safe-in-my-phone-right">My phone is safe. So Whatsapp&amp;rsquo;s unencrypted data should be safe in my phone right?&lt;/h3>
&lt;p>Hopefully. But that is a big hope. Many of us have enabled &lt;a href="https://www.zdnet.com/article/whatsapp-warns-free-google-drive-backups-are-not-encrypted/">Whatsapp backups in our phones and they are not encrypted&lt;/a>. This means if anybody&amp;rsquo;s iCloud or Google Account gets breached, your entire whatsapp history including the chats and other medias are exposed. Also, a government could just request access to your Google account. Whatsapp chats and other data could be accessed and Facebook wouldn&amp;rsquo;t even know about it, even if they were to try and let you know.&lt;/p>
&lt;h4 id="i-will-just-disable-the-backup-on-my-phone-i-am-secure-now-right">I will just disable the backup on my phone. I am secure now right?&lt;/h4>
&lt;p>Great! But what about all the people who have chatted with you so far? How many of them have their backup disabled? Do you know that? Because that is another copy of your chat with them, exposed!&lt;/p>
&lt;h2 id="telegram">Telegram&lt;/h2>
&lt;p>Telegram is another popular alternative for Whatsapp. A good thing about Telegram is that they already have a hude user base meaning it is an easy choice without having to compromise on people when moving away from Whatsapp. While Telegram is better than Whatsapp, it might not be as secure or privacy oriented as we think it is.&lt;/p>
&lt;h3 id="telegram-is-end-to-end-encrypted-right-so-why-not-move-to-telegram-from-whatsapp">Telegram is end to end encrypted right? So why not move to Telegram from Whatsapp?&lt;/h3>
&lt;p>No. While Telegram is better than using Whatsapp, Telegram doesn&amp;rsquo;t have end to end encryption enabled by default. Telegram just have a feature to enable end to end encryption and it is called &lt;a href="https://core.telegram.org/blackberry/secretchats">secret chats&lt;/a>. You have to initiate a separate secret chat with the person you want to talk to if you want to use the end to end encryption feature. This means the normal group chats and private chats are not private nor end to end encrypted. This makes it less secure compared to by default end to end encrypted services like Signal. Telegram has my benefit of doubt with respect to their ethics and morales as &lt;a href="https://www.nytimes.com/2019/06/13/world/asia/hong-kong-telegram-protests.html">shown during Hong Kong protests&lt;/a> and &lt;a href="https://en.wikipedia.org/wiki/Telegram_in_Iran">their stint with Iran&lt;/a>. But they are far from being the privacy and secure text messenger application we want it to be.&lt;/p>
&lt;h3 id="isnt-telegram-100-open-source">Isn&amp;rsquo;t Telegram 100% open source?&lt;/h3>
&lt;p>While the Telegram clients (Official Telegram Apps for Android and iOS or the Telegram Desktop app for Linux and Windows) are open source, the server side of Telegram which does the encryption part is proprietary. There is still a grey area when it comes to Telegram and their home grown encryption protocol called &lt;a href="https://core.telegram.org/mtproto">MProto which is developed by Nikolai Derov&lt;/a> who is the brother of the Telegram founder Pavel Durov. Because a &lt;a href="https://www.vice.com/en/article/wnx8nq/why-you-dont-roll-your-own-crypto">golden rule of cryptography is to never roll your own crypto&lt;/a>. Which is exactly what Telegram has done here.&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/282f8f238g723.jpg"
 alt="Image of Brad pit in fight club saying first rule of crypto is to never roll your own crypto."/>
&lt;/figure>

&lt;h3 id="is-there-any-other-concerns-about-telegram">Is there any other concerns about Telegram?&lt;/h3>
&lt;p>Security reasearchers and cryptographers have raised concerns about the credibility of security in Telegram app because they rolled out their own crypto protocol. Here are some issues to be skeptical about when using Telegram:&lt;/p>
&lt;ul>
&lt;li>Telegram team or anyone who have access (if the Telgram servers get breached) to their server can read your normal chats and group messages since only secret chats are end to end encrypted. This is also &lt;a href="https://www.nextpit.com/how-telegram-is-trying-to-clean-up-its-app">how they moderate spam and issues&lt;/a>, by reading messages of groups or anything that gets reported by Telegram users.&lt;/li>
&lt;li>They collect a lot of metadata like your contacts, display pic, email if 2 factor authentication is enabled with your email, IP address etc just to name a few too.&lt;/li>
&lt;li>&lt;a href="https://www.theregister.com/2021/01/05/telegram_location_people_nearby/">Using Telegram&amp;rsquo;s nearby people feature could expose user&amp;rsquo;s precise location&lt;/a> issue.&lt;/li>
&lt;li>Telegram&amp;rsquo;s CEO &lt;a href="https://t.me/durov/142">Pavel Durov recently announced&lt;/a> that they will be trying to fund Telegram by providing ads. While I personally trust Telegram based on the past incidents. Their system is capable of providing targeted personalised ads. Only time will tell whether they will or will not do this. Paraphrasing Edward Snowden from Permanent Record&amp;hellip; &lt;em>&amp;ldquo;I was reminded of what is perhaps the fundamental rule of technological progress: if something can be done, it probably will be done, and possibly already has been.&amp;rdquo;&lt;/em>&lt;/li>
&lt;/ul>
&lt;h4 id="some-good-reads-on-the-security-and-privacy-of-telegram-messenger">Some good reads on the security and privacy of Telegram messenger:&lt;/h4>
&lt;ul>
&lt;li>&lt;a href="https://heimdalsecurity.com/blog/is-telegram-secure/">Is Telegram Secure? What You Need to Know Before Downloading the App&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://cqi.inf.usi.ch/publications/telegram_vs_signal.pdf">Telegram vs Signal comparison (pdf)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://security.stackexchange.com/questions/49782/is-telegram-secure">Is telegram secure?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://web.archive.org/web/20180420061726/http://unhandledexpression.com/2013/12/17/telegram-stand-back-we-know-maths/">Telegram, AKA “Stand back, we have Math PhDs!&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="should-i-use-telegram">Should I use Telegram?&lt;/h3>
&lt;p>Not if you really care about privacy or security. Ideally you should use Signal which is end to end encrypted by default. But Telegram is definitely better than using Whatsapp. So if you can&amp;rsquo;t or don&amp;rsquo;t want to use Signal and you can use Telegram, I would recommend Telegram over Whatsapp. With Telegram refusing to share data with &lt;a href="https://www.cbsnews.com/news/telegram-app-banned-in-russia-after-court-ruling/">Russia&lt;/a> and &lt;a href="https://hongkongfp.com/2020/07/05/exclusive-telegram-to-temporarily-refuse-data-requests-from-hong-kong-courts-amid-security-law-terrorism-row/">Hong Kong&lt;/a> among possible other scenarios, I feel they do have some level of trust and their mind in the right place. If you are going to stick to Telegram, use the secret chat feature which is end to end encrypted.&lt;/p>
&lt;h2 id="signalhttpswwwsignalorg">&lt;a href="https://www.signal.org/">Signal&lt;/a>&lt;/h2>
&lt;p>Signal is a privacy oriented text messenger developed by a non-profit and is open source. It uses end to end encryption by default for all their chats, calls and media without storing any data on you. Signal should be used for private conversations if you regard privacy and security.&lt;/p>
&lt;h3 id="whatsapp-skype-facebook-messenger-all-uses-signal-protocol-to-implement-end-to-end-encryption-right-so-what-is-the-difference-in-using-them-vs-signal-messenger">Whatsapp, Skype, Facebook messenger all uses Signal protocol to implement end to end encryption right? So what is the difference in using them vs Signal messenger?&lt;/h3>
&lt;p>The difference is meta data. Metadata is the data about your data. In this context, the data about the messages your are sending. The data that is generated electronically and automatically when using a software. Signal protocol spits out metadata such as time of a message, the phone number of you and whom you are talking with, and other data when sending a message. That can be used to identify you and whom you are speaking. This is a critical redflag when you don&amp;rsquo;t want people to know this. Signal messenger doesn&amp;rsquo;t store this information. This means Signal doesn&amp;rsquo;t have any information it can share with governments or when and if get compromised in anyway. Meanwhile, Whatsapp stores this metadata and can have shared this data with governments around the world. This means if a journalist or a whistleblower talks with someone, Whatsapp can share critical information such who they are talking to when they are talking to at what time. More than enought for governments since most countries can forcefully demand access to you (Including India).&lt;/p>
&lt;h3 id="what-is-so-great-about-signal-and-how-can-we-be-sure-that-signal-wont-sell-our-data">What is so great about Signal and how can we be sure that Signal won&amp;rsquo;t sell our data?&lt;/h3>
&lt;p>The &lt;a href="https://signalfoundation.org/">Signal Foundation&lt;/a> which helps develop Signal is also a &lt;a href="https://en.wikipedia.org/wiki/501(c)_organization#501(c)(3)">501(c)(3) nonprofit organisation&lt;/a> meaning it is not in the business of making money. Signal is an open source application and uses the Signal protocol (formerly known as TextSecure protocol) to provide end to end encryption by default. Apart from Signal requiring your mobile number to register, they don&amp;rsquo;t need any other data for you to start using it. Which means they don&amp;rsquo;t have any data to sell. &lt;a href="https://support.signal.org/hc/en-us/articles/360007061452-Does-Signal-send-my-number-to-my-contacts-">Signal also doesn&amp;rsquo;t even store your contacts anywhere or share it with your contacts&lt;/a>. Signal protocol which is used to provide end to end encryption is not only open source but also used by Whatsapp and Skype to provide end to end encryption for their apps which in itself should tell you one or two things about the credibility of Signal.&lt;/p>
&lt;h3 id="if-signal-is-run-by-a-non-profit-organisation-how-can-they-sustain-themselves-with-big-players-like-whatsapp-and-telegram-around">If Signal is run by a non profit organisation, how can they sustain themselves with big players like Whatsapp and Telegram around?&lt;/h3>
&lt;p>Signal is funded by donations from people like you and me. So head over to &lt;a href="https://signal.org/donate/">https://signal.org/donate/&lt;/a> to donate and support Signal&amp;rsquo;s development. Also, Signal foundation founded in 2018 by Moxie Marlinspike and Brian Acton (co-founder of Whatsapp) is currently well &lt;a href="https://en.wikipedia.org/wiki/Signal_Foundation">funded with ~$100 million dollar in loan&lt;/a> which is only due by 2068. So yes, Signal can stand up to big players like Whatsapp and Telegram. But let me remind you again to read the &lt;a href="https://support.signal.org/hc/en-us/articles/360031949872">Donor FAQ&lt;/a> if you have questions and &lt;a href="https://signal.org/donate/">donate&lt;/a>!&lt;/p>
&lt;h3 id="ok-i-am-intruiged-but-still-not-convinced-about-moving-to-signal">OK. I am intruiged. But still not convinced about moving to Signal.&lt;/h3>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/5674uhg3322hvu31uvy.jpg"
 alt="Screenshots of Tweets from Elon Musk, Jack Dorsey and Edward Snowden recommending to use Signal text messenger."/>
&lt;/figure>

&lt;p>Don&amp;rsquo;t just listen to me. Signal is recommended by people like &lt;a href="https://en.wikipedia.org/wiki/Elon_musk">Tesla/SpaceX CEO Elon Musk&lt;/a>, &lt;a href="https://en.wikipedia.org/wiki/Jack_Dorsey">Twitter CEO Jack Dorsey&lt;/a>, whistleblower &lt;a href="https://en.wikipedia.org/wiki/Edward_Snowden">Edward Snowden&lt;/a> and cryptographers like &lt;a href="https://www.schneier.com/blog/about/">Bruce Schneier&lt;/a> to name a few. It is also used by journalists, &lt;a href="https://www.schneier.com/blog/archives/2017/05/the_us_senate_i.html">U.S government officials&lt;/a> and &lt;a href="https://www.politico.eu/article/eu-commission-to-staff-switch-to-signal-messaging-app/">EU commission staff members&lt;/a>. These should be good enough reasons to use Signal for your daily use.&lt;/p>
&lt;h3 id="so-everything-is-perfect-on-the-signal-land-one-app-to-save-us-all">So everything is perfect on the Signal land? One app to save us all?&lt;/h3>
&lt;p>I wouldn&amp;rsquo;t say that. There are 2 main issues which I feel are concerning in Signal.&lt;/p>
&lt;ul>
&lt;li>Signal still needs a phone number to register which is a personal identifier. But &lt;a href="https://www.zdnet.com/article/signal-to-move-away-from-phone-numbers-as-user-ids/">Signal is already working on a possible solution&lt;/a> for this by &lt;a href="https://www.signal.org/blog/signal-pins/">introducing Signal pins&lt;/a>.&lt;/li>
&lt;li>Signal notifies you if your contacts have joined Signal. There is no opt-out of this feature and this is enabled by default. Even if disable it, the other person will be alerted even if you don&amp;rsquo;t want them to know. This is unncessary and dangerous if they are bullies, abusers or stalkers.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Update March 2024: Signal will soon introduce the option to create usernames to mask phone numbers being shared. It&amp;rsquo;s in beta at the time of writing. Read more - &lt;a href="https://signal.org/blog/phone-number-privacy-usernames/">https://signal.org/blog/phone-number-privacy-usernames/&lt;/a>&lt;/em>&lt;/p>
&lt;h3 id="how-do-i-use-signal-app-more-effectively">How do I use Signal app more effectively?&lt;/h3>
&lt;p>Just installing and using Signal provides you with a good amount of privacy way better than Whatsapp or Telegram. But if you are serious about privacy, you can do a lot more for your privacy in Signal.&lt;/p>
&lt;ul>
&lt;li>Enable these features from Settings → privacy → Screen lock, Incognito keyboard, Set a PIN, enable registration lock which all would provide more protection and privacy.&lt;/li>
&lt;li>Also &lt;a href="https://support.signal.org/hc/en-us/articles/360007060632-What-is-a-safety-number-and-why-do-I-see-that-it-changed-">verify safety number for extra security&lt;/a> if you want to make sure you are messaging the right person and that the security isn&amp;rsquo;t compromised somehow.&lt;/li>
&lt;/ul>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/98u23f239ub3fc9ub.jpg"
 alt="Screenshot of Signal&amp;#39;s privacy settings that is a good idea to enable."/>
&lt;/figure>

&lt;p>&lt;em>You can follow the &lt;a href="https://freedom.press/news/signal-beginners/">Signal, the secure messaging app: A guide for beginners&lt;/a> by Freedom of Press Foundation for a better understanding.&lt;/em>&lt;/p>
&lt;h2 id="i-know-this-already-but-my-work-depends-on-whatsapp-facebook-products-or-my-friends-are-all-on-whatsapp-what-can-i-do">I know this already! But&amp;hellip; my work depends on Whatsapp (Facebook products). Or my friends are all on Whatsapp. What can I do?&lt;/h2>
&lt;p>I agree that these are all genuine reasons. Work is important, so is friends whom all you want to talk to. But this again depends on whether you really care about privacy or not. Because nothing is stopping you from moving personal or important/sensitive conversations to a privacy friendly service like &lt;a href="https://signal.org">Signal&lt;/a>. There are genuine reasons to do so too. And move people slowly to the privacy alternative you want to use with them. Play the long game.&lt;/p>
&lt;p>Something is better than nothing. So it doesn&amp;rsquo;t matter if you move to a privacy alternative today, tomorrow, a month after or an year after! Whenever you move, you are giving less data to these companies and that is good. Just because you can&amp;rsquo;t move now doesn&amp;rsquo;t mean it is all over!&lt;/p>
&lt;p>Like I said &lt;a href="https://www.unsungnovelty.org/posts/01/2021/frequently-asked-questions-about-privacy-whatsapp-telegram-and-signal/#so-my-data-is-already-with-whatsapp-what-is-the-point-of-me-moving-from-whatsapp-to-a-privacy-friendly-option-now">here&lt;/a>, &lt;em>do not see the data sharing/transfer between a service (like Whatsapp) and you as a one time transaction&lt;/em>. You data is an ever growing entity. The less you give away, the better.&lt;/p>
&lt;h2 id="to-sum-it-up">To sum it up&lt;/h2>
&lt;p>When it comes to Whatsapp neither the technical implementation nor the company is trusted by people. But with Telegram, while a lot of people are skeptical about their technical implementation, Telegram - the company is trusted by a lot of people based on their actions so far. And then there is Signal which is trusted based on their technical implementation and also as an entity. They do this by making things verifiable and with their actions. And this increases the trust. So always choose privacy and use Signal or at very least Telegram. Just not Whatsapp!&lt;/p>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Home</title><link>https://www.unsungnovelty.org/home/</link><pubDate>Sun, 23 Aug 2020 19:02:55 +0530</pubDate><guid>https://www.unsungnovelty.org/home/</guid><description/></item><item><title>Levelling up my notes game with Zettelkasten</title><link>https://www.unsungnovelty.org/posts/06/2020/levelling-up-my-notes-game-with-zettelkasten/</link><pubDate>Mon, 15 Jun 2020 16:56:37 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/06/2020/levelling-up-my-notes-game-with-zettelkasten/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Notes are a great way to write things down. But as you start writing more notes, the number obviously keeps increasing. This leads to having a large number of notes which are outdated or forgotten. This is mainly because these are seperate notes and not connected with the other notes in anyway. So as humans, we forget about the conncetions as time passes.&lt;/p>
&lt;h2 id="zettelkasten-a-possible-solution">Zettelkasten, a possible solution!&lt;/h2>
&lt;p>Imagine that you just started working on a web application project. You already have seperate notes on what you know and have learnt about &lt;code>HTML&lt;/code>, &lt;code>CSS&lt;/code> and &lt;code>JavaScript&lt;/code>. And now, a new note called &lt;code>myWebApp&lt;/code>. In it, you wrote features the web application should have, your thoughts on the project etc. You know the ideas and learnings from your notes on &lt;code>HTML&lt;/code>, &lt;code>CSS&lt;/code> and &lt;code>JavaScript&lt;/code> are necessary for creating the web application. But since they are seperate notes, you often forget the connections with &lt;code>myWebapp&lt;/code>. Or how some information are connected.&lt;/p>
&lt;p>This is where Zettelkasten (Slip box in English) comes into play. With the Zettelkasten method, the idea is to link all these notes together. And the output will be like a mindmap of notes which are interconnected. It was invented by Niklas Luhmann who used this method to create 70+ books and 400+ research papers througout his career!&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/linkedNotes.webp"
 alt="An image of 4 rectangles namely HTML notes CSS Notes javascript notes and mywebapp notes connected together by a straight line illustrating how zettelkasten notes can be connected with each other."/>
&lt;/figure>

&lt;p class="text-center italic">An example illustration of how notes will look like when linked together&lt;/p>&lt;/p>
&lt;p>This is an overly simplified explanation of what Zettelkasten is and can be. You can get a better understanding by read any or all the below linked blog posts. They helped me get started with Zettelkasten.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://blog.viktomas.com/posts/slip-box/">Zettelkasten note-taking in 10 minutes by Tomas Vik&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://eugeneyan.com/2020/04/05/note-taking-zettelkasten/">Stop Taking Regular Notes; Use a Zettelkasten Instead by Eugene Yan&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://writingcooperative.com/zettelkasten-how-one-german-scholar-was-so-freakishly-productive-997e4e0ca125?gi=242ff7221300">Zettelkasten — How One German Scholar Was So Freakishly Productive by David B. Clear&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>All the small details thought to be insignificant or was a duplication from another note are currently noted. Since all you have to do is link the detail with a note it is related to. This helps me remember exactly why I noted it down.&lt;/p>
&lt;h2 id="so-another-note-taking-app-huh">So, another note taking app. Huh?&lt;/h2>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/productivity-hack.webp"
 alt="Tweet by Kyle Russel which states, productivity hack: not changing note taking apps. This tweet was posted by Kyle Russel on june 11th, 2020 at 8:35pm."/>
&lt;/figure>

&lt;p class="text-center italic">Tweet by Kyle Russel&lt;/p>&lt;/p>
&lt;p>I know! But I don&amp;rsquo;t change my notes application often. And Zettelkasten looks like the next logical step for a better information system for myself. If you are hesitant about transistioning right away, do it step by step. This helps you to see the tech in action and decide if it is really useful for you or not.&lt;/p>
&lt;p>As for the app, I found &lt;a href="https://zettlr.com/">Zettlr&lt;/a> and &lt;a href="https://obsidian.md/">Obsidian(Beta)&lt;/a> as the best fit based on my tastes.
No, I haven&amp;rsquo;t tried &lt;a href="https://roamresearch.com/">Roam Research&lt;/a> because it is a web application.&lt;/p>
&lt;p>Here is a comparison of features I was expecting from my next notes application. This is not a complete list of features these applications provide, just the features expected from a Zettelkasten note application I wanted to use. Both of them are nice, just check them out and choose the one you find fitting.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Features&lt;/th>
&lt;th>Zettlr&lt;/th>
&lt;th>Obsidian (Beta)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Open Source&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✖️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Free / Free plan&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✔️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Markdown&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✔️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pomodoro&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✖️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Graph View&lt;/td>
&lt;td>✖️&lt;/td>
&lt;td>✔️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Save data locally&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✔️&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>No vendor lock-in&lt;/td>
&lt;td>✔️&lt;/td>
&lt;td>✔️&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="what-is-next">What is next?&lt;/h2>
&lt;p>I am currently in the transition period. Since this could be time consuming if done in bulk, I am taking things slow. But I am enjoying the process of taking notes more than before. Only time will tell whether I will see a connection I wouldn&amp;rsquo;t have seen if it wasn&amp;rsquo;t for my Zettelkasten!&lt;/p>
&lt;hr>
&lt;p>&lt;em>Found this interesting or found some errors? DM me &lt;a href="https://twitter.com/unsungNovelty">@unsungnovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>initLogs 2: Sercret Life of Ifs</title><link>https://www.unsungnovelty.org/posts/05/2020/initlogs-2-sercret-life-of-ifs/</link><pubDate>Fri, 29 May 2020 17:49:00 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2020/initlogs-2-sercret-life-of-ifs/</guid><description>&lt;p>&lt;code>If&lt;/code> statement is one of the conditional statements in JavaScript. But &lt;code>if&lt;/code> is not the most commonly used conditional statement, at least not when you are new to JavaScript. That would be the &lt;code>if-else&lt;/code> or &lt;code>nested if else&lt;/code> statement. As a person who is new to JS, the learning materials or the execrises never teach you the real world use cases of an &lt;code>if&lt;/code> statement. It is always a basic explanation with a basic example after which the materials often move to &lt;code>if-else&lt;/code>.&lt;/p>
&lt;p>This has bothered me because I always wonder about the use of an &lt;code>if&lt;/code> statement is in JavaScript. I mean, we always need a &lt;code>else&lt;/code> part while writing the &lt;code>if&lt;/code> statements right?&lt;/p>
&lt;p>So, what are the usecases for an &lt;code>if&lt;/code> statement?
Here are some.&lt;/p>
&lt;h2 id="1-as-a-minimal-version-of-if-else">1. As a minimal version of if-else&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">biggest&lt;/span> (&lt;span style="color:#a6e22e">a&lt;/span>, &lt;span style="color:#a6e22e">b&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">a&lt;/span> &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#a6e22e">b&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;A is greater&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#e6db74">&amp;#34;B is greater&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">biggest&lt;/span> (&lt;span style="color:#ae81ff">5&lt;/span>, &lt;span style="color:#ae81ff">6&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; B is greater.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above example is for checking &lt;code>if a &amp;gt; b&lt;/code> or not. Here, you don&amp;rsquo;t need to add an &lt;code>else&lt;/code> part to check &lt;code>if a &amp;lt; b&lt;/code>. It is known that if &lt;code>a &amp;gt; b&lt;/code> is true what to execute and if it is false, what to execute. This is one way to use &lt;code>if&lt;/code> statements. But this technically has an &lt;code>else&lt;/code> part to execute when the initial condition is not satisfied. So where else can we use &lt;code>if&lt;/code> statements?&lt;/p>
&lt;h2 id="2-to-replace-switch-statements">2. To replace switch statements&lt;/h2>
&lt;p>You can essentially write &lt;code>if&lt;/code> statements instead of writing &lt;code>switch&lt;/code> statements. &lt;code>if&lt;/code> statements are easier to write and easier to understand compared to &lt;code>switch&lt;/code> statements.&lt;/p>
&lt;p>Here is a &lt;code>switch&lt;/code> statement:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">howMuchFor&lt;/span>(&lt;span style="color:#a6e22e">expr&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">switch&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Oranges&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Oranges are $0.59 a pound.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Apples&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Apples are $0.32 a pound.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Bananas&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Bananas are $0.48 a pound.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Cherries&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Cherries are $3.00 a pound.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Mangoes&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">case&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Papayas&amp;#39;&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Mangoes and papayas are $2.79 a pound.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">default&lt;/span>&lt;span style="color:#f92672">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Sorry, we are out of &amp;#39;&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39;.&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Is there anything else you&amp;#39;d like?&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">howMuchFor&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Cherries&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; Cherries are $3.00 a pound.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Is there anything else you&amp;#39;d like?
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This can be replaced with &lt;code>if&lt;/code> statements like&amp;hellip;&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">howMuchFor&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">===&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Oranges&amp;#39;&lt;/span>) { &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39; are $0.59 a pound.&amp;#39;&lt;/span>); }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">===&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Apples&amp;#39;&lt;/span>) { &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39; are $0.32 a pound.&amp;#39;&lt;/span>); }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">===&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Bananas&amp;#39;&lt;/span>) { &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39; are $0.48 a pound.&amp;#39;&lt;/span>);}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">===&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Cherries&amp;#39;&lt;/span>) { &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39; are $3.00 a pound.&amp;#39;&lt;/span>); }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">===&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Mangoes&amp;#39;&lt;/span> &lt;span style="color:#f92672">||&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Papayas&amp;#39;&lt;/span>) { &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#a6e22e">expr&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#e6db74">&amp;#39; are $2.79 a pound&amp;#39;&lt;/span>); }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">howMuchFor&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Mangoes&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; Mangoes are $2.79 a pound.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Which do you think is easier to write and easier to understand? The one with &lt;code>switch&lt;/code> or the one with &lt;code>if&lt;/code>?&lt;/p>
&lt;h2 id="3-then-there-is-another-usecase-validating">3. Then there is another usecase&amp;hellip; validating!&lt;/h2>
&lt;figure>&lt;img src="https://dev-to-uploads.s3.amazonaws.com/i/ovm8kcuyj6881aexwqp9.gif"
 alt="Tony stark demonstrates Jericho range of missiles in Ironman movie."/>
&lt;/figure>

&lt;p>This is something I learnt while doing a side project (R.I.P) and thought was really interesting. This is the reason I wrote this blog post, because I was not sure if all the people who have just started to learn JavaScript knows about this.&lt;/p>
&lt;p>The function I wrote in the project was essentially doing some CRUD (Create, Read, Update, Delete) operations. My friend told me to use &lt;code>if&lt;/code> statements to validate the user inputs and I was like wow, &lt;em>this is a great usecase for an &lt;code>if&lt;/code> statement!&lt;/em>&lt;/p>
&lt;p>So, let&amp;rsquo;s see how to validate using &lt;code>if&lt;/code> statement&amp;hellip;&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">infoDB&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">firstName&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#39;Bob&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">lastName&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#e6db74">&amp;#39;&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#a6e22e">age&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">37&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span>(&lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#a6e22e">infoDB&lt;/span>.&lt;span style="color:#a6e22e">firstName&lt;/span>) {&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#e6db74">&amp;#34;Please provide a first name to add your complete information.&amp;#34;&lt;/span>);} 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span>(&lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#a6e22e">infoDB&lt;/span>.&lt;span style="color:#a6e22e">lastName&lt;/span>) {&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Please provide a last name to add your complete information.&amp;#34;&lt;/span>);}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span>(&lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#a6e22e">infoDB&lt;/span>.&lt;span style="color:#a6e22e">age&lt;/span>) {&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>( &lt;span style="color:#e6db74">&amp;#34;Please provide a first name to add your complete information.&amp;#34;&lt;/span>);}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">infoDB&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; Please provide a last name to add your complete information.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Final infoDB object -&amp;gt; { firstName: &amp;#39;Bob&amp;#39;, lastName: &amp;#39;&amp;#39;, age: 37 }
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The way to read the above statement is &lt;code>if NO (for !) first name in myCompleteInfoDB&lt;/code>, do something. Or &lt;code>if NO last name in myCompleteInfoDV&lt;/code>, do something and &lt;code>if NO age in myCompleteInfoDB&lt;/code>, do something. Although this is very simple and somewhat not a very useful program, this shows how you can validate things using an &lt;code>if&lt;/code> statement.&lt;/p>
&lt;p>That is it! These are some use cases for using &lt;code>if&lt;/code> statements in JavaScript. I know this is just a very basic thing for most of the people. But since it was not covered in the learning resources I used, it really was fascinating to me to know that we can use an &lt;code>if&lt;/code> statement in all these ways!&lt;/p>
&lt;hr>
&lt;p>Found this article interesting or found a mistake/room for improvement? Please DM/Tweet me &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>. This is a part of a series of blogs called &lt;code>#initlogs&lt;/code> which shares some interesting things I found while learning to code.&lt;/p>
&lt;p>&lt;em>This post was first published under the title &lt;a href="https://www.unsungnovelty.org/blog/secret-life-of-ifs/">&amp;ldquo;Secret life of ifs&amp;rdquo;&lt;/a> in &lt;a href="https://www.unsungnovelty.org">https://www.unsungnovelty.org&lt;/a>&lt;/em>&lt;/p></description></item><item><title>initLogs 1: Swapping Numbers and Reversing Arrays in JavaScript</title><link>https://www.unsungnovelty.org/posts/04/2020/initlogs-1-swapping-numbers-and-reversing-arrays-in-javascript/</link><pubDate>Thu, 16 Apr 2020 13:15:09 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/04/2020/initlogs-1-swapping-numbers-and-reversing-arrays-in-javascript/</guid><description>&lt;p>I am gonna start writing about my experiences of learning JavaScript. Most of the topics/posts are going to be super basic but what I would like to focus is the interesting connections or point of view I learnt.&lt;/p>
&lt;p>And yes, thought I would categorise the series as &amp;ldquo;InitLogs&amp;rdquo; since these are the initial code/logs a lot of us will be learning and also because it will make it easy for people to look it up in case you all did find something interesting. This is also a way for me to teach/write about what I have learnt. So if you think I have to be a bit more clear or was I wrong somewhere? DM me here or &lt;a href="https://www.twitter.com/unsungnovelty">@unsungNovelty&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>If you&amp;rsquo;re a beginner learning to code, you will eventually come across swapping numbers or reversing an array exercise. Let&amp;rsquo;s look at how to do both of these in JavaScript.&lt;/p>
&lt;h2 id="swapping-two-numbers">Swapping two numbers&lt;/h2>
&lt;p>&lt;em>If you&amp;rsquo;re not a theory person, go directly to psuedocode part!&lt;/em>&lt;/p>
&lt;p>We will be swapping the value of two variables to each other. Meaning value of the variable &lt;code>a&lt;/code> will be put in variable &lt;code>b&lt;/code> and vice versa. In order to do that, we need a third variable which we will call &lt;code>temp&lt;/code> (for temporary). We will assign the value of &lt;code>a&lt;/code> to &lt;code>temp&lt;/code> after which we will assign the value of &lt;code>a&lt;/code> to &lt;code>b&lt;/code> and then value of &lt;code>b&lt;/code> to &lt;code>temp&lt;/code>.&lt;/p>
&lt;h3 id="psuedocode">Psuedocode&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-txt" data-lang="txt">&lt;span style="display:flex;">&lt;span>temp = a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a = b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>b = temp
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print a, b.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="in-javascript">In JavaScript&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">a&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">9&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">temp&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">temp&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">a&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">a&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">b&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">temp&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">a&lt;/span>,&lt;span style="color:#a6e22e">b&lt;/span>);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="reversing-an-array">Reversing an array&lt;/h2>
&lt;p>Reversing an array can be done mainly in two ways. Reversing the array with an empty array or reversing an array in place. Reversing an array in place is &lt;em>without&lt;/em> using the extra array.&lt;/p>
&lt;h3 id="reversing-an-array-with-an-extra-array">Reversing an array with an extra array&lt;/h3>
&lt;p>The general idea is to do the same method as we did for swapping two numbers. In this reversing an array method, our &lt;code>temp&lt;/code> is the variable called &lt;em>theReversed&lt;/em>. We use &lt;em>theReversed&lt;/em> which will start as an empty array to hold the temporary value and swap it until the numbers are swapped.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">reverseArray&lt;/span> &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">array&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">theReversed&lt;/span> &lt;span style="color:#f92672">=&lt;/span> [];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> (&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">array&lt;/span>.&lt;span style="color:#a6e22e">length&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>; &lt;span style="color:#a6e22e">i&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>; &lt;span style="color:#a6e22e">i&lt;/span>&lt;span style="color:#f92672">--&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">theReversed&lt;/span>.&lt;span style="color:#a6e22e">push&lt;/span>(&lt;span style="color:#a6e22e">array&lt;/span>[&lt;span style="color:#a6e22e">i&lt;/span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">theReversed&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">reverseArray&lt;/span>([&lt;span style="color:#ae81ff">1&lt;/span>,&lt;span style="color:#ae81ff">2&lt;/span>,&lt;span style="color:#ae81ff">3&lt;/span>,&lt;span style="color:#ae81ff">4&lt;/span>,&lt;span style="color:#ae81ff">5&lt;/span>,&lt;span style="color:#ae81ff">6&lt;/span>,&lt;span style="color:#ae81ff">9&lt;/span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; [ 9, 6, 5, 4, 3, 2, 1 ]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We declare an empty array called &lt;code>theReversed&lt;/code> inside the function and use the &lt;code>.push()&lt;/code> method to push values during each iteration using the for loop starting from the last value of the array to the first. &lt;code>theReversed&lt;/code> will end up being the reversed. As shown&lt;/p>
&lt;h3 id="reversing-an-array-in-place">Reversing an array in place&lt;/h3>
&lt;p>Reversing an array in place is by using the same method we used to swap numbers. But without the need of declaring an extra empty array.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">reverseArrayInPlace&lt;/span> &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">array&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> (&lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>; &lt;span style="color:#a6e22e">i&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> Math.&lt;span style="color:#a6e22e">floor&lt;/span>(&lt;span style="color:#a6e22e">array&lt;/span>.&lt;span style="color:#a6e22e">length&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>); &lt;span style="color:#a6e22e">i&lt;/span>&lt;span style="color:#f92672">++&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">let&lt;/span> &lt;span style="color:#a6e22e">temp&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">array&lt;/span>[&lt;span style="color:#a6e22e">i&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">array&lt;/span>[&lt;span style="color:#a6e22e">i&lt;/span>] &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">array&lt;/span>[&lt;span style="color:#a6e22e">array&lt;/span>.&lt;span style="color:#a6e22e">length&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">array&lt;/span>[&lt;span style="color:#a6e22e">array&lt;/span>.&lt;span style="color:#a6e22e">length&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#a6e22e">i&lt;/span>] &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">temp&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">array&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">reverseArrayInPlace&lt;/span>([&lt;span style="color:#ae81ff">1&lt;/span>,&lt;span style="color:#ae81ff">4&lt;/span>,&lt;span style="color:#ae81ff">7&lt;/span>, &lt;span style="color:#ae81ff">5&lt;/span>, &lt;span style="color:#ae81ff">7&lt;/span>, &lt;span style="color:#ae81ff">9&lt;/span>, &lt;span style="color:#ae81ff">13&lt;/span> ,&lt;span style="color:#ae81ff">86&lt;/span>, &lt;span style="color:#ae81ff">12&lt;/span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// -&amp;gt; [ 12, 86, 13, 9, 7, 5, 7, 4, 1 ]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We use &lt;code>Math.floor(array.length / 2)&lt;/code> to find out which one is the middle of the array. This is why we use &lt;code>/2&lt;/code>, total length of the array divided by 2. &lt;code>Math.floor()&lt;/code> will round off the number in case the total values in the array are in odd numbers. &lt;code>Math.floor()&lt;/code> function returns the largest integer less than or equal to a given number.&lt;/p>
&lt;p>And for looping through the array, we use the same method as swapping numbers. In case you didn&amp;rsquo;t understand &lt;code>array[array.length - 1 - i]&lt;/code>, it just means the last value of the array minus the value of &lt;code>i&lt;/code> which will swap the values from the array starting from the end of the array. So essentially we are swapping the front part and back part of the array while using the middle part as the pointer.&lt;/p>
&lt;p>And that is it! This is how you can swap or reverse arrays in JavaScript. The connection between them was fascinating to me. Maybe you&amp;rsquo;ll find it fascinating too!&lt;/p>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Takeaways from 2019</title><link>https://www.unsungnovelty.org/posts/02/2020/takeaways-from-2019/</link><pubDate>Tue, 11 Feb 2020 20:56:46 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/02/2020/takeaways-from-2019/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>We all are trying to do things in a better way everyday and improving is something we all strive towards. Let me share what I have learned from my experiences in 2019 for better productivity and personal growth. Hope this becomes useful to you like it is to me.&lt;/p>
&lt;h2 id="rules-are-mutable-so-dont-sweat-it">Rules are mutable, so don&amp;rsquo;t sweat it!&lt;/h2>
&lt;p>The first thing I want to talk about is that none of the rules, I mean none of those productivity tips, tricks or system you have in place are forever or perfect. There is always an exception to the system/rules you have, so keep it flexible and be open to improvements. This helps you be less rigid and helps your system to evolve. Otherwise you will feel tied down and you will eventually stop following the system/rules.&lt;/p>
&lt;p>A good example of this is, us trying to follow &lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro Technique&lt;/a> for better productivity. We don&amp;rsquo;t have to be rigid about the 20 minutes. You can make it 30 minutes or if you are zoned-in and 20 minutes are done, you can just start the next Pomodoro session immediately. Don&amp;rsquo;t worry, give yourself some room, be flexible and fine tune the rules/system so that it works for you not the other way around.&lt;/p>
&lt;h2 id="do-nothing-at-times">Do NOTHING (at times)!&lt;/h2>
&lt;p>Yes, &lt;em>do nothing.&lt;/em> Don&amp;rsquo;t get me wrong, but give your mind some rest and go for a walk or water some plants. This is important for better mental health and memory. After consuming things like a podcast, a book or after learning something, it helps you if you give it some time before moving on to the next thing.&lt;/p>
&lt;p>&lt;em>Doing nothing have become extremely challenging&lt;/em>. We are consuming something all the time. The urge, the need for us to finish our backlog of to do lists, podcasts, the chapters in that book. Or, let&amp;rsquo;s take a break and watch a movie? That is also consumption my friend! Albeit a less intensive one. Try to do nothing, you will be surprised by the results.&lt;/p>
&lt;h2 id="let-it-flooow">Let it flooow&amp;hellip;&lt;/h2>
&lt;p>I would like to call myself as an idea hamster and planner. I get a lot of ideas about the things I want to do in the future, later in the evening or NOW! So breaking the flow makes it harder for me to decide whether it is important or useless. Giving it some time without breaking the flow of thoughts helps me decide whether it is useful or not. It could be anything, an idea for a business, a project I want to do etc. Just let it flow! So instead of playing that unnecessary podcast episode, or trying to multi-task, just let it flow. I have found this useful and it helps me envision my ideas &amp;amp; thoughts better.&lt;/p>
&lt;h2 id="clean-up-regularly">Clean up regularly&lt;/h2>
&lt;p>We often make plans, goals, to-do lists. How often do you keep it updated though? That &lt;a href="https://en.wikipedia.org/wiki/Tsundoku">Tsundoku&lt;/a>/backlog you have, is &lt;em>all of it&lt;/em> necessary? Or is it relevant any more from the day you added it to your backlog?&lt;/p>
&lt;p>We often have the tendency to finish from A to Z, 100%. We are rigid and not at all flexible about our plans and goals. Most of the time this is not necessary. As a person who have a list of goals, to-do lists, list of books, 20 podcasts (down from 22 since I started writing this blog, clean up people!) shows to follow and an endless list of article bookmarks to finish, I realised last year (maybe I a bit slow with it?) it is necessary to clean it up regularly. Clean up your to-do lists, the goals, plans on how you are going to achieve them&amp;hellip; all of it!&lt;/p>
&lt;h2 id="consume-less">Consume less&lt;/h2>
&lt;p>The next thing to do once you have cleaned up things is to consume less. What&amp;rsquo;s wrong with consuming you ask? We get different points of views right? The problem is, we don&amp;rsquo;t stop at that. We keep consuming even after we have found the silver bullet or even though you got the information or knowledge you were looking for.&lt;/p>
&lt;p>A good way to explain this is by telling why I stopped reading &amp;ldquo;motivational/inspirational&amp;rdquo; articles in Medium. Have you tried reading those articles? It is crazy, you will be so pumped up by the time you finish the articles, you just found the perfect article which is inspirational as hell! Of course it will be, because it is&amp;hellip;&lt;/p>
&lt;ul>
&lt;li>Relatable&lt;/li>
&lt;li>Inspirational as hell!&lt;/li>
&lt;li>Provides solutions to your current problem(s).&lt;/li>
&lt;/ul>
&lt;p>But then you read another one tomorrow and another one the day after. It is an endless cycle and you&amp;rsquo;re trying out many things or just reading on and on without acting on any of those solutions. The idea is to find the perfect fit and just stop looking for solutions again! You are just going to confuse yourself if you don&amp;rsquo;t stop after getting what you were looking for in the first place.&lt;/p>
&lt;p>Consuming less is also generally a good practice. Read less motivational articles, less YouTube videos, less of those endless Twitter scrolling. Try to focus more on things that really matter and keep at it. This will help you reach all the goals and finish all those to-do lists.&lt;/p>
&lt;h2 id="unstuck-with-a-question">Unstuck, with a question?&lt;/h2>
&lt;p>Like all other people, I use questions a lot! I ask them, sometimes I answer them. But most of the time, my questions are to someone. It never occurred to me that I should be asking question to myself while I am stuck with something and is &lt;em>trying to figure it out myself!&lt;/em> Even when I used to ask questions to myself, it is often in my own head and unconscious.&lt;/p>
&lt;p>The whole idea of &lt;em>&amp;ldquo;questioning myself&amp;rdquo;&lt;/em> when stuck changed the way I think about my to-do lists and tasks at hand. I realised I don&amp;rsquo;t have the questions that needs to be answered to start/finish my tasks. This made me ask questions like &amp;ldquo;why am I stuck here?&amp;rdquo;, or a specific question like, &amp;ldquo;Which method or approach should I use to write this function/program or problem?&amp;rdquo;.&lt;/p>
&lt;p>Another thing to do is writing things. I always write down the questions under each tasks. Writing the questions in a paper helps me better articulate and envision the status, progress and next actions of a task. This brings me to the next thing I wanna share&amp;hellip;&lt;/p>
&lt;h2 id="write-things-down">Write things down!&lt;/h2>
&lt;p>2019 was an year where I rediscovered my love for fountain pens. This gave me another excuse to write things down in a paper, purely old school. I like to document the things in a notebook along with my notebook application. I also have a to-do list application but I write down the things I have to do for the day in my notebook as a to-do list. My search for the perfect to-do list application was completed. But even then, I always come back to writing things down in my notebook. I use my to-do list application as a tool to have an online database of long term goals and plans. This helps me be productive and accountable.&lt;/p>
&lt;h2 id="full-screen-mode">Full screen mode&lt;/h2>
&lt;p>Full screen mode in applications are seriously underrated! I am writing this article in an text editor with full screen mode on! It keeps me focused and less distracted. It is really easy to overlook the fact that we are constantly interrupted by other applications while working on your computer. But full screen mode can help you with that.&lt;/p>
&lt;p>You might be thinking, it is just a task bar of your operating system and the application, what is the big deal? We are not losing a big chunk of real estate right? But if you want to work on an important task but cannot focus, and the solution you have is to logout from Slack/Discord or abandon that noisy/distracting app, then full screen mode is definitely something you should try out. It will help you ignore all the Slack/Discord messages or any other noisy/distracting app. It will let you work in peace, focused. You don&amp;rsquo;t have to logout or abandon an application because they&amp;rsquo;re distracting, all you have to do is use the full screen mode.&lt;/p>
&lt;h2 id="music">Music&lt;/h2>
&lt;p>Still unable to be productive? Why not listen to some music while working? I have found that it helps you be focused on the tasks. I prefer a low voice music in the background which drowns the rest of the noises. And I use &lt;a href="coderadio.freecodecamp.org/">freeCodeCamp&amp;rsquo;s code radio&lt;/a> for this.&lt;/p>
&lt;p>The science behind this is a bit here and there, so I would suggest you to try it out and see if it&amp;rsquo;s working for you. It works for me and helps me be focused on the task at hand. But at times for some tasks, I just like the music when I start the task and silence after a while. Like I said before, &lt;em>&amp;ldquo;rules are mutable&amp;rdquo;&lt;/em>. Use it in a way that works for you, or don&amp;rsquo;t if it is not helping.&lt;/p>
&lt;h2 id="to-sum-it-up">To sum it up&lt;/h2>
&lt;p>These are my takeaways from 2019. I try to apply these in my day to day life wherever possible. Not every one of these points might be appealing for everybody. So try it out yourself and see if it works for you. And remember, &lt;em>&amp;ldquo;Rules/laws are mutable!&amp;rdquo;&lt;/em>&lt;/p>
&lt;h2 id="references--links">References / Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://guzey.com/productivity/">Every productivity thought I&amp;rsquo;ve ever had, as concisely as possible by Alexey Guzey&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.psychologytoday.com/us/blog/conquering-cyber-overload/201305/is-background-music-boost-or-bummer">Is Background Music a Boost or a Bummer?&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Did you find these tips useful? Let me know &lt;a href="https://twitter.com/unsungNovelty">@unsungnovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>Why do I host a website?</title><link>https://www.unsungnovelty.org/posts/11/2019/why-do-i-host-a-website/</link><pubDate>Fri, 15 Nov 2019 21:18:40 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/11/2019/why-do-i-host-a-website/</guid><description>&lt;blockquote>
&lt;p>License: &lt;a href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
_International Public License (CC BY-NC-ND
_4.0)&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>Hosting a website is not expensive or complicated as it was once before. It is easier than ever to build a website. You have platforms and technologies like &lt;a href="https://pages.github.com/">GitHub Pages&lt;/a>, &lt;a href="https://about.gitlab.com/product/pages/">GitLab Pages&lt;/a>, &lt;a href="https://www.netlify.com/">Netlify&lt;/a>, &lt;a href="https://letsencrypt.org/">Let&amp;rsquo;s encrypt&lt;/a> and many more to make it really easy and cheap. All you have to do is to take action and buy a domain for yourself (which I highly recommend if you want better control over your website.) to make it happen. In my first post, I want to share some of the other reasons why I decided to host a website apart from being inexpensive and easy.&lt;/p>
&lt;h2 id="step-towards-a-decentralised-internet">Step towards a decentralised internet&lt;/h2>
&lt;p>The Internet used to be a collection of individual websites. But it has changed into some platforms that is hoarding all of the conversations, ideas and most importantly - our data. In short, internet have become the opposite of what it was meant to be - centralised instead of being a decentralised platform.&lt;/p>
&lt;p>With events like data breaches and bad company policies, I think it is time to re-evaluate where we should use a centralised solution and where we shouldn&amp;rsquo;t. This website is one small step towards taking some control over my data and space on the internet. A website is only one piece of the puzzle, but below stories are becoming and increasing trend.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://medium.com/@jacksoncunningham/digital-exile-how-i-got-banned-for-life-from-airbnb-615434c6eeba">Digital Exile: How I Got Banned for Life from AirBnB&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://petapixel.com/2016/09/14/instagram-deleted-account-135k-followers-zero-warning/">Instagram Deleted My Account with 135K Followers. Zero Warning.&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://medium.com/@tokata/how-google-play-terminated-a-developer-for-no-reason-e4d760e9f472">How Google Play “Terminated” a Developer for No Reason&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://lists.zx2c4.com/pipermail/wireguard/2019-October/004596.html">WireGuard removed from Google Play Store, rectification in progress&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.vice.com/amp/en_us/article/43k7z3/nationwide-fake-host-scam-on-airbnb">I Accidentally Uncovered a Nationwide Scam on Airbnb&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The questions that we should be asking ourselves are, how dependent are we on that centralised solution? Can we find a better solution? Self host it? &amp;hellip;find an open source solution to do the same? And if we can, why aren&amp;rsquo;t we doing it?&lt;/p>
&lt;h2 id="a-platform-to-learn-create-and-share">A platform to learn, create and share&lt;/h2>
&lt;p>A website provides you with a platform where you can share your thoughts and to showcase things that you&amp;rsquo;ve built. You are not restricted within a platform and also have complete freedom over the things that you want to build, write and share.&lt;/p>
&lt;h3 id="posse">POSSE!&lt;/h3>
&lt;p>How to share you ask? POSSE or Publish (on your) Own Site, Syndicate Elsewhere is the method where you publish on your website first and then share it everywhere else. You might have noticed this at the end of some blog posts like the below mentioned.&lt;/p>
&lt;p>&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/76fyivbuoviv.png"
 alt="an example image of POSSE where a link back to the where the post appeared first or was published first / initially."/>
&lt;/figure>

&lt;em>A POSSE example from a Dev.to &lt;a href="https://dev.to/aarmora/cheeriojs-jordan-teaches-web-scraping-20">post by Jordan Hansen&lt;/a>&lt;/em>&lt;/p>
&lt;p>This way your thoughts and contents are resilient to any platform&amp;rsquo;s policy changes. Also, you don&amp;rsquo;t force anyone to use a particular platform but only make it more accessible to people who want to follow you and your work.&lt;/p>
&lt;h2 id="whos-blogswebsites-should-i-follow">Who&amp;rsquo;s blogs/websites should I follow?&lt;/h2>
&lt;p>I am new to the blog scene myself but I have been following a couple of people&amp;rsquo;s blog for a while now and they are &lt;a href="https://macwright.org/about/">Tom Macwright&lt;/a> and &lt;a href="https://danielmiessler.com/">Daniel Miessler&lt;/a>. But I have started catching up on the works and articles of &lt;a href="https://www.joelonsoftware.com/">Joel Spolsky&lt;/a>, &lt;a href="https://victoria.dev/">Victoria Drake&lt;/a>, &lt;a href="https://www.nahamsec.com">Ben Sadeghipour&lt;/a>. I am sure the list is going to be longer soon as I explore and read more.&lt;/p>
&lt;h2 id="you-hosted-your-website-whats-next">You hosted your website. What&amp;rsquo;s next?&lt;/h2>
&lt;p>I&amp;rsquo;ve read that the most difficult part is not to host a website, but to keep it up-to-date. In fact, out of the 37 people I follow and have websites, &lt;strong>~70%&lt;/strong> of them &lt;em>have not updated their websites for a minimum of almost an year or more!&lt;/em> So for the time being, I will keep an eye on making the best out of this website by writing about technology + human intersection and self documenting the things I&amp;rsquo;ve learnt!&lt;/p>
&lt;h2 id="inspiration">Inspiration&lt;/h2>
&lt;p>This website and article is inspired because of the two articles I&amp;rsquo;ve read recently. &lt;a href="https://www.jvt.me/posts/2019/07/22/why-website/">Why I Have a Website and You Should Too&lt;/a> by Jamie Tanna and &lt;a href="http://john.ankarstrom.se/html/">Writing HTML in HTML&lt;/a> by John Ankarström. Inspiration for content/text focused website is from &lt;a href="https://macwright.com/">Tom Macwright&amp;rsquo;s website&lt;/a> which is thoughtfully organised and well put together. There a lot of things I&amp;rsquo;ve learnt from them which I want to showcase here on this website eventually. Do check them out!&lt;/p>
&lt;h2 id="references--links">References / Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://soundcloud.com/user-98066669/131-is-your-personal-website-private-secure">The Privacy, Security, &amp;amp; OSINT Show Podcast - Is Your Personal Website Private &amp;amp; Secure?&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://indieweb.org/">https://indieweb.org/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://nownownow.com/about">About NowNowNow&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Have you thought about hosting your own website?&lt;/p>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item><item><title>License</title><link>https://www.unsungnovelty.org/license/</link><pubDate>Tue, 01 Oct 2019 10:47:22 +0530</pubDate><guid>https://www.unsungnovelty.org/license/</guid><description>&lt;h2 id="logo">Logo&lt;/h2>
&lt;p>©Nikhil(&lt;a href="https://twitter.com/unsungNovelty">unsungNovelty&lt;/a>).&lt;/p>
&lt;p>Logo was envisioned and conceptualised by me and brought to life by &lt;a href="https://arkives.in/">Ark Arjun&lt;/a>! And I agree now, the negative space &amp;ldquo;N&amp;rdquo; looks cool indeed! Thanks da! \o/&lt;/p>
&lt;h2 id="contents--arts-unless-specified">Contents / arts unless specified&lt;/h2>
&lt;p>©Nikhil(&lt;a href="https://twitter.com/unsungNovelty">unsungNovelty&lt;/a>)&lt;/p>
&lt;p>&lt;strong>NOTE:&lt;/strong> &lt;em>If you have any questions regarding the license or anything related to how to use any of the contents, drop an email at &amp;ldquo;nikhil at unsungnovelty dot org&amp;rdquo;&lt;/em>&lt;/p>
&lt;h2 id="theme">Theme&lt;/h2>
&lt;p>©Nikhil(&lt;a href="https://twitter.com/unsungNovelty">unsungNovelty&lt;/a>).&lt;/p>
&lt;p>I use custom built Hugo theme called &amp;ldquo;Brahma&amp;rdquo;. Built by me specifically for this website. Read more about the theme in the &lt;a href="https://www.unsungnovelty.org/about/#theme">about page&lt;/a>.&lt;/p>
&lt;h2 id="oss-licenses">OSS Licenses&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://tailwindcss.com/">Tailwind CSS&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>MIT License&lt;/p>
&lt;p>Copyright (c) Tailwind Labs, Inc.&lt;/p>
&lt;p>Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &amp;ldquo;Software&amp;rdquo;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:&lt;/p>
&lt;p>The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.&lt;/p>
&lt;p>THE SOFTWARE IS PROVIDED &amp;ldquo;AS IS&amp;rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>&lt;a href="https://icons.getbootstrap.com/">Bootstrap Icons&lt;/a>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>The MIT License (MIT)&lt;/p>
&lt;p>Copyright (c) 2011-2025 The Bootstrap Authors&lt;/p>
&lt;p>Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &amp;ldquo;Software&amp;rdquo;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:&lt;/p>
&lt;p>The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.&lt;/p>
&lt;p>THE SOFTWARE IS PROVIDED &amp;ldquo;AS IS&amp;rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.&lt;/p>
&lt;/blockquote></description></item><item><title>Now</title><link>https://www.unsungnovelty.org/now/</link><pubDate>Mon, 30 Sep 2019 21:49:01 +0530</pubDate><guid>https://www.unsungnovelty.org/now/</guid><description>&lt;p>&lt;em>This NOW page is about what I&amp;rsquo;m focused/thinking currently. Inspired from &lt;a href="https://nownownow.com/about">now page&lt;/a> by &lt;a href="https://sivers.org/">Derek Sivers&lt;/a>.&lt;/em>&lt;/p>
&lt;hr>
&lt;h2 id="projects--current-activities">Projects / Current activities&lt;/h2>
&lt;ul>
&lt;li>Catching up on my writing backlog&lt;/li>
&lt;li>Learning Svelte&lt;/li>
&lt;/ul>
&lt;h2 id="books">Books&lt;/h2>
&lt;ul>
&lt;li>Currently reading - &lt;a href="https://openlibrary.org/books/OL15063009M/The_eagle_has_landed.">The Eagle has Landed by Jack Higgins&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="career">Career&lt;/h2>
&lt;p>For my professional status and experience, read &lt;a href="https://www.unsungnovelty.org/about/#nikhil">about page&lt;/a>.&lt;/p>
&lt;h2 id="quotes">Quotes&lt;/h2>
&lt;blockquote>
&lt;p>&amp;ldquo;Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>Antoine de Saint-Exupéry&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;blockquote>
&lt;p>&amp;ldquo;People have a complicated relationshiop with change. I&amp;rsquo;d like to say that NERDS especially have a really complicated relationship with change. We love it to pieces. &lt;strong>Change is awesome! &amp;hellip;when we&amp;rsquo;re the ones doing it!&lt;/strong> As soon as change is something that is coming outside of us, it becomes untrustworthy. And it threatens what we think of as the familiar.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>Benno Rice, &lt;a href="https://youtu.be/o_AIw9bGogo?t=1525">Tragedy of Systemd&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;blockquote>
&lt;p>&amp;ldquo;Think deeply about things. Don’t just go along because that’s the way things are or that’s what your friends say. Consider the effects, consider the alternatives, but most importantly, just think.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>Aaron Swartz&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;blockquote>
&lt;p>&amp;ldquo;What is the most important thing you could be working on in the world right now?&amp;hellip; And if you&amp;rsquo;re not working on that, why aren&amp;rsquo;t you?&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>Aaron Swartz&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;hr>
&lt;blockquote>
&lt;p>&amp;ldquo;I&amp;rsquo;m perfectly happy with all the people who are walking around and just staring at the clouds and looking at the stars and saying, &amp;ldquo;I want to go there&amp;rdquo;. But I&amp;rsquo;m looking at the ground, and I want to fix the pothole that&amp;rsquo;s right in front of me before I fall in.&amp;rdquo;&lt;/p>
&lt;ul>
&lt;li>Linus Torvalds, &lt;a href="https://youtu.be/o8NPllzkFhE?t=1027">The mind behind Linux&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/blockquote></description></item><item><title>About</title><link>https://www.unsungnovelty.org/about/</link><pubDate>Mon, 30 Sep 2019 21:48:34 +0530</pubDate><guid>https://www.unsungnovelty.org/about/</guid><description>&lt;h2 id="nikhil">Nikhil&lt;/h2>
&lt;p>I am a developer with interests in information security, web development, data analysis, unix systems and open source software. Currently creating experiences as a Web Experience Specialist at &lt;a href="https://www.salesforce.com">Salesforce India&lt;/a>. Before that I was working as a full stack developer at &lt;a href="https://hmi-tech.net/">HMI Tech&lt;/a>. And before HMI Tech, I was taking care of security and IT operations at &lt;a href="https://www.mapbox.com">Mapbox&lt;/a> for 7 different time zones from Bengaluru. Before moving to Security and IT at Mapbox, I was a geospatial data analyst at Mapbox where I was leading the end user&amp;rsquo;s feedback pipeline while doing data analysis. This involved data analysis while working with teams across the organisation like engineering, sales, business, marketing etc. I started my career at &lt;a href="https://www.techmahindra.com/">Tech Mahindra&lt;/a> as a QA Analyst. Working with orders and network equipments (Think big Huawei and Cisco network equipments which fills a whole room).&lt;/p>
&lt;h2 id="whats-does-the-name-unsung-novelty-mean">What&amp;rsquo;s does the name &amp;ldquo;unsung novelty&amp;rdquo; mean?&lt;/h2>
&lt;p>We humans are all unique. People with a lot of unique characteristics, perspectives, skills or thoughts. But we also have a lot in common. Common things helps us humans work together. While our unique characteristics sets us apart. The name &amp;ldquo;unsung novelty&amp;rdquo; comes from the thought of sharing my own unique thoughts and potential with people whom I have a lot of common things with.&lt;/p>
&lt;h2 id="contact-me">Contact me&lt;/h2>
&lt;p>I am always open to to new challenges. Contact me through Email.&lt;/p>
&lt;ul>
&lt;li>Email - &lt;code>nikhil at unsungnovelty dot org&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="social-networks">Social networks&lt;/h2>
&lt;ul>
&lt;li>Twitter - &lt;a href="https://www.twitter.com/unsungNovelty">https://www.twitter.com/unsungNovelty&lt;/a>&lt;/li>
&lt;li>Mastodon - &lt;a href="https://mastodon.social/@unsungnovelty">https://mastodon.social/@unsungnovelty&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="part-of-indieweb">Part of Indieweb&lt;/h2>
&lt;p>I consider my website to be part of the independent websites of the internet realm which is referred to as indieweb.&lt;/p>
&lt;p>You will see my website listed in many such indieweb circles:
&lt;figure>&lt;img src="https://512kb.club/assets/images/green-team.svg"/>
&lt;/figure>
&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://512kb.club">https://512kb.club&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://250kb.club/">https://250kb.club/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://indieblog.page">https://indieblog.page&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://blogs.hn/">https://blogs.hn/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>And also indexed in this nice search engine called &lt;a href="https://marginalia-search.com/">https://marginalia-search.com/&lt;/a> operated by &lt;a href="https://www.marginalia.nu/">Viktor Lofgren&lt;/a> - &lt;a href="https://marginalia-search.com/site/www.unsungnovelty.org">https://marginalia-search.com/site/www.unsungnovelty.org&lt;/a>. If you haven&amp;rsquo;t tried it, give it a go. You will be surprised by the nice blog posts you find on niche topics by other humans from the internet.&lt;/p>
&lt;h2 id="blogroll">Blogroll&lt;/h2>
&lt;blockquote>
&lt;p>What is a blogroll? - &lt;a href="https://indieweb.org/blogroll">https://indieweb.org/blogroll&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>&lt;a href="https://arkives.in">Ark Arjun&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://krebsonsecurity.com/">Brian Krebs&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.schneier.com/">Bruce Schneier&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://drewdevault.com/">Drew Devault&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://edwardsnowden.substack.com/">Edward Snowden&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://joemorrison.substack.com/">Joe Morrison&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.joelonsoftware.com/">Joel Spolsky&lt;/a> (The ultimate place for tech flashbacks)&lt;/li>
&lt;li>&lt;a href="http://paulgraham.com/">Paul Graham&lt;/a> (Heads up - NO SSL certificate)&lt;/li>
&lt;li>&lt;a href="https://rusingh.com/">Ru Singh&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://macwright.com/">Tom Macwright&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://unixsheikh.com/">Unix Sheikh&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="cool-folks-with-website-but-inactiveno-blog">Cool folks with website but inactive/no blog&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://ajith.is">Ajith Ranka&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jeamland.net">Benno Rice&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://davidtheclark.com">David Clark&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.gokulg.in">Gokul Ganeshan&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://ankarstrom.se/~john">John Ankarström&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://sector-f.net">Rodolfo&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="about-this-website">About this website&lt;/h2>
&lt;h3 id="license">License&lt;/h3>
&lt;p>Checkout the &lt;a href="https://www.unsungnovelty.org/license/">license page&lt;/a>.&lt;/p>
&lt;h3 id="theme">Theme&lt;/h3>
&lt;p>The theme used is called &amp;ldquo;Brahma&amp;rdquo;. It was created by &lt;em>me&lt;/em> specifically for this website. But my friend &lt;a href="https://arkives.in/">ArkArjun&lt;/a> started using it as well thereby becoming my only &lt;em>&amp;ldquo;stakeholder&amp;rdquo;&lt;/em>.&lt;/p>
&lt;h3 id="backend">Backend&lt;/h3>
&lt;p>This website uses &lt;a href="https://themes.gohugo.io/">Hugo&lt;/a> bundled with &lt;strong>Brahma Theme&lt;/strong> created by me. &lt;a href="https://www.netlify.com/">Netlify&lt;/a> is behind the scenes.&lt;/p>
&lt;h3 id="privacy">Privacy&lt;/h3>
&lt;p>Privacy shouldn&amp;rsquo;t be a premium feature. So I made sure I have only used a basic site analytics which is Open Source and privacy friendly called &lt;a href="https://www.goatcounter.com/">Goat counter&lt;/a>. It is minimal and privacy friendly enough to be &lt;a href="https://www.goatcounter.com/gdpr">GDPR friendly without the need for a GDPR consent notice to be shown to the user&lt;/a> &lt;em>as far as I understand.&lt;/em> The only reason for analytics to be present in this website is to make sure I am not sharing into the void. Not to get the accurate number of folks visiting the website.&lt;/p>
&lt;p>While I am not digging deeply into GDPR anytime soon since this is a small personal website, if you think I am violating GDPR somehow, do write to me at &lt;code>nikhil at unsungnovelty dot org&lt;/code>. Do expect a delay in response. But I will try to find a solution for your query.&lt;/p></description></item><item><title>Distorted reality</title><link>https://www.unsungnovelty.org/gallery/distorted-reality/</link><pubDate>Fri, 13 Jul 2018 05:55:16 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/distorted-reality/</guid><description/></item><item><title>Lift off</title><link>https://www.unsungnovelty.org/gallery/lift-off/</link><pubDate>Sat, 28 Apr 2018 05:51:09 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/lift-off/</guid><description/></item><item><title>Blue night</title><link>https://www.unsungnovelty.org/gallery/blue-night/</link><pubDate>Wed, 25 Apr 2018 05:48:20 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/blue-night/</guid><description/></item><item><title>Stroll through DC</title><link>https://www.unsungnovelty.org/gallery/stroll-through-dc/</link><pubDate>Sat, 24 Mar 2018 05:33:10 +0530</pubDate><guid>https://www.unsungnovelty.org/gallery/stroll-through-dc/</guid><description/></item><item><title>Why Other Mapping Platforms Don't Cut It Anymore</title><link>https://www.unsungnovelty.org/posts/05/2015/why-other-mapping-platforms-dont-cut-it-anymore/</link><pubDate>Sun, 31 May 2015 12:04:34 +0530</pubDate><guid>https://www.unsungnovelty.org/posts/05/2015/why-other-mapping-platforms-dont-cut-it-anymore/</guid><description>&lt;p>&lt;em>Note: This post was written in 2015. The writing quality is not that great and I won&amp;rsquo;t try to improve it as well. This was republished from another platform for pure historic value of being my first blog post ever. My opinions and thoughts on the topics shared in this post might have changed.&lt;/em>&lt;/p>
&lt;h2 id="a-recap-on-the-discovery-of-openstreetmap-and-the-two-days-in-mapbox">A Recap on the discovery of Openstreetmap and the two days in Mapbox.&lt;/h2>
&lt;p>Maps were something that I was really good at! Or something I didn’t know much about until I bumped into Openstreetmap (OSM). I thought I was an expert in maps as I was using Google maps application. Keep it updated to the latest version, and i was doing only that. Come on.. I was working in Bangalore - A place I knew nothing about initially. I traveled less but when I did, I was using Google maps to tell me how to go to places. I didn’t know from where these guys where getting the data about everything. I mean, who cares right? I just wanted to go to those places. I let Google do all the work for me, And I was fine with it too! That’s when I got to know about Openstreetmap - which is an open source project.&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/why-other-mapping-platforms-dont-cut-it-anymore/osm.jpg"
 alt="Logo of OpenStreetMap"/>
&lt;/figure>

&lt;p>Openstreetmap - It was nothing like the other open source projects. You contribute map data instead of the codes (Most of the part I guess). Wait&amp;hellip; what? Map data? How do I get it? From where do I get it? Should I be copying from Google Maps&amp;hellip;? I had no idea! My mind was full of questions. As days passed, I was learning a lot about maps. Got to know a lot on what kind of data will be uploaded to openstreetmap, and the details that completes a map. I didn&amp;rsquo;t do much after that though. It was just another awesome project that I bumped into like many other.&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/why-other-mapping-platforms-dont-cut-it-anymore/mapbox.png"
 alt="Logo of Mapbox"/>
&lt;/figure>

&lt;p>I applied for the job, got acknowledged by Sajjad. We talked a lot about what they were working on in Mapbox. That’s when i got to know about the connection of Mapbox and Openstreetmap. I wanted to know more about Openstreetmap!&lt;/p>
&lt;p>Luckily my friend who had a good knowledge on OSM helped me out with it. And in the process I got to know about JOSM (A cross-platform editor for openstreetmap written in Java), the most used tool by OSM contributors!&lt;/p>
&lt;p>As planned earlier, I had the call with Sajjad where we talked about what my goals and passions were and reason for applying this job. I liked where the discussion was heading and how the company and I shared the same interests (Open source!!). After that I started mapping in a pretty small way&amp;hellip;. Started using OSM tracker for Android - which is an app on Google play store to track the GPS co-ordinates of your journey using your smartphone GPS. Went to some of the places in my village and got the raw data as .gpx files. Started adding the data and uploaded the same to the Openstreetmap.org. My first meaningful contribution to an open source project!&lt;/p>
&lt;p>Discussions were going on in mails and I was contacted by Arun from Mapbox and he gave me a much needed idea on what my role will be if i were to work full time on Mapbox. I learned a lot through the discussions and Arun was always there to help me with the answers for my queries. That was when Earthquake happened in Nepal and later in some parts of India. That is also the time when I knew the value of crowd sourcing and power of the Openstreetmap community. They updated the areas affected by earthquakes in two weeks or so. I was amazed by the sheer power Openstreetmap community. The changes made by them was significant compared to before and after the disastrous earthquake. This was amazing according to me because I have never seen anything like that till then. I was busy with my work that I have in Tech Mahindra (TechM) at this time. And because of this, I couldn’t be a contributor among the thousands who helped update the maps in Nepal post earthquake. Later I started working on Agra road network and completed a task and uploaded the same to OSM. It was a wonderful feeling and experience.&lt;/p>
&lt;p>Conversations were happening with me and Arun through mails quite often and I was getting closer and closer to OSM and Mapbox. It was at this time a call was arranged with Alex Barth who leads the data team in Mapbox. We had a discussion about what I did in TechM (the company that I work in currently), and how the clients of Mapbox uses the maps. Everything was interesting and I got to know much more about the company. After some days, I was called to Mapbox office for two days sprint.&lt;/p>
&lt;h2 id="the-meetup">The meetup&lt;/h2>
&lt;h3 id="day-1">Day-1&lt;/h3>
&lt;p>It was only 30mins travel from my room in Bangalore, so that was not a big issue for me. Reached Mapbox office at 8.35am or so. Nobody except Shravan was in the office. Met him and was on to work right away. We started tracing out buildings in Gangtok and after a while came Arun. Finally got to meet him. After everyone was in the office, we started to plan to go out for surveying parts of Indiranagar. For this we used Fieldpapers which is a website that helps us with Hand-drawn graphic to represent making a Field Papers atlas. It&amp;rsquo;s like, we will be taking the print out of an area, taking the survey and mark the changes in the paper. After the changes are marked, we can scan the sheet and upload the picture file to &lt;a href="https://www.fieldpapers.org">https://www.fieldpapers.org&lt;/a> and get it aligned properly with OSM maps in JOSM. The area to be covered was split into two namely A1 and A2. A1 containing 4 people and A2 containing the other 4 people. That was further split into two. Two for covering the Point of Interests (POI&amp;rsquo;s) and two people covering the trees and levels of the buildings. This is easier said than done. We had to go to each streets and crosses in the area to get all of this data and Me and Ruth from Mapbox was one team. Our job was to get the Point of Interests (POI&amp;rsquo;s) of the areas in A2.&lt;/p>
&lt;figure>&lt;img src="https://www.unsungnovelty.org/images/post-images/why-other-mapping-platforms-dont-cut-it-anymore/field-paper.jpg"
 alt="Image of the field paper survey which collected all the data from around Indiranagar."/>
&lt;/figure>

&lt;p>After the data was collected, which was a tiresome walk in the sun but fun at the same time we came back to the office so that we can start uploading the changes to OSM. As the fieldpapers.org aligning mechanism was not working as it&amp;rsquo;s suppose to be, we had this fun time learning to do the same in JOSM manually. Once the page was aligned exactly on top the OSM maps, we started uploading the changes to OSM. After a long period of continuous effort we all were able to upload the changes to OSM which had the names of all the shops and levels of the buildings and the trees that was there in the area. Yes.. trees!!! We had an awesome time after the work with the team talking and playing Jenga. Sajjad was playing this awesome song through his phone which i got to know was || Kygo – Firestone || which became one of my favorite song soon after.&lt;/p>
&lt;h3 id="day-2">Day-2&lt;/h3>
&lt;p>The second day started with Arun teaching what all is that we do in Mapbox as a Data analyst (which is the designation that I applied for). Learned a lot about how to manage the different kind of issues that come in daily. After that, Arun was showing the map that he have created about the Lakes in the south Bangalore with the help of OSM data. I was surprised and amazed to know that all the lakes were inter-connected! All the data that was in the maps was showing how the Bellandur lake was the meeting point where all the polluted and dirty water was flowing in. This partially explained why the lake is so polluted and how the fire emerged from the lake and the reason for the foam that was seen above the lake water like a layer. Everything proving the real power of crowd sourcing and opens source once again. After learning how to handle various types of issue that we may face on a daily basis, I knew it was time to call it a day. The two days went just like that with lots of fun and lots of new things learned. Thanks to Mapbox, I learned a lot on how you can trust to use an open source project as a base layer upon which a business can be made with the help of crowd sourcing and open source community it will offer.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Have thoughts or feedback regarding my post/writing? DM me on Twitter &lt;a href="https://twitter.com/unsungNovelty">@unsungNovelty&lt;/a>.&lt;/em>&lt;/p></description></item></channel></rss>