<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mostafa Ahangarha</title>
    <description>The latest articles on Forem by Mostafa Ahangarha (@ahangarha).</description>
    <link>https://forem.com/ahangarha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F837125%2F95aaa5c7-643b-4259-8a0f-1ad58d063d8a.jpg</url>
      <title>Forem: Mostafa Ahangarha</title>
      <link>https://forem.com/ahangarha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ahangarha"/>
    <language>en</language>
    <item>
      <title>Rebasing a Branch Created from Another Branch to Main After Squash Merge: A Step-by-Step Guide</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sun, 03 Dec 2023 10:15:01 +0000</pubDate>
      <link>https://forem.com/ahangarha/rebasing-a-branch-created-from-another-branch-to-main-after-squash-merge-a-step-by-step-guide-3ehg</link>
      <guid>https://forem.com/ahangarha/rebasing-a-branch-created-from-another-branch-to-main-after-squash-merge-a-step-by-step-guide-3ehg</guid>
      <description>&lt;h2&gt;
  
  
  What is the issue?
&lt;/h2&gt;

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

&lt;p&gt;In a project using Git as a version control system, we have a main branch from which we have created a feature branch (the blue branch). While making changes in this branch, we decided to add another feature on top of the changes we made in this feature branch, so we created another feature branch (referred to as the red branch) on top of the earlier branch. Now we squash merge the first feature branch to the main branch. (Note: the diagram is drawn to make it easier to understand the structure of branches and commits. When we do a squash merge, the new m3 commit will have only one parent.)&lt;/p&gt;

&lt;p&gt;Now, we want to rebase the red branch to the latest commit on the main branch. Though in this simple case, it is not needed, let's imagine a situation where we need to do this to ensure we have the latest changes on the main branch (supposedly with some extra commits after m3). What will happen?&lt;/p&gt;

&lt;p&gt;If we try to rebase, something strange happens. The history of the red branch doesn't only include &lt;code&gt;b1&lt;/code&gt; and &lt;code&gt;b2&lt;/code&gt; but also &lt;code&gt;a1&lt;/code&gt; and &lt;code&gt;a2&lt;/code&gt;. Why so? Simply because &lt;code&gt;b1&lt;/code&gt; is based on &lt;code&gt;a2&lt;/code&gt;, which is based on &lt;code&gt;a1&lt;/code&gt;. Because of the nature of squash merge, we don't have &lt;code&gt;a1&lt;/code&gt; and &lt;code&gt;a2&lt;/code&gt; on &lt;code&gt;m3&lt;/code&gt;. We only have their changes but not any reference to those commits. So there are possibilities of conflict between &lt;code&gt;a1&lt;/code&gt; and &lt;code&gt;a2&lt;/code&gt; changes and the changes in &lt;code&gt;m3&lt;/code&gt; (if there are more commits, reverting each other in the blue branch).&lt;/p&gt;

&lt;p&gt;What to do? Should we resolve all of these conflicts? What is the point? We only want to rebase the red branch with its own commits on the main branch, which now has the changes made in the blue branch. Why include other commits? Well, this is what this post is all about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do?
&lt;/h2&gt;

&lt;p&gt;We must clean up the red branch history while rebasing it to the main branch. Now let's go step by step:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If this is your first time doing this, it is good to make a backup by making a copy of the branch by &lt;code&gt;git branch --copy red-branch-backup&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure you know the first commit of the red branch, either by its commit SHA or the commit message (if it is unique and meaningful).&lt;/li&gt;
&lt;li&gt;While on the red branch, run &lt;code&gt;git rebase --interactive main&lt;/code&gt; command. You get a text file open in your editor. This (temporary) file lists all the commits in the red branch compared to the new base commit (&lt;code&gt;m3&lt;/code&gt;). Here, you can do different things, but we only want one thing: Remove all the lines containing commits from the blue branch.&lt;/li&gt;
&lt;li&gt;Save the temporary file. Now you notice rebase starts to apply changes from the remaining commits you left in the file (should be &lt;code&gt;b1&lt;/code&gt; and &lt;code&gt;b2&lt;/code&gt;). You are done if your &lt;code&gt;b1&lt;/code&gt; and &lt;code&gt;b2&lt;/code&gt; commits don't conflict with the main branch. Otherwise, resolve conflicts as you usually do.&lt;/li&gt;
&lt;li&gt;You can check the commit history. You should have the same commits but with new SHA (since they are different commits with different histories than &lt;code&gt;b1&lt;/code&gt; and &lt;code&gt;b2&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;You are done.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Is there any better way to achieve the same result? Please share it in the comments.&lt;/p&gt;

</description>
      <category>git</category>
      <category>rebase</category>
    </item>
    <item>
      <title>Happy GNU 40th</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Wed, 27 Sep 2023 06:49:13 +0000</pubDate>
      <link>https://forem.com/ahangarha/happy-gnu-40th-1b93</link>
      <guid>https://forem.com/ahangarha/happy-gnu-40th-1b93</guid>
      <description>&lt;p&gt;Forty years ago, a young, passionate programmer decided not to go with the new flow in the IT industry and, instead, start a new project to produce software that, instead of snatching power from its users, empowers them and puts them in control.&lt;/p&gt;

&lt;p&gt;Richard Stallman announced his decision to start a new operating system called GNU. That inspired many other developers whose concerns were beyond coding. They started the Free Software Movement, and over time, despite all the obstacles, they shaped the history of software development and beyond.&lt;/p&gt;

&lt;p&gt;The 40th anniversary of the GNU project and Free Software Movement reminds us that we can always take control of our destiny. Instead of begging corporations and relying on their mercy or expecting the government to control corporations' data hunger, we can choose to build the solutions that we (the public) own and decide for. These 40 years prove this is possible; it has happened and can continue to be even more vital.&lt;/p&gt;

&lt;p&gt;Happy #GNU40&lt;/p&gt;

</description>
      <category>gnu</category>
      <category>gnu40</category>
    </item>
    <item>
      <title>On Turbo Dropping TypeScript</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sat, 16 Sep 2023 12:32:59 +0000</pubDate>
      <link>https://forem.com/ahangarha/on-turbo-dropping-typescript-4c8a</link>
      <guid>https://forem.com/ahangarha/on-turbo-dropping-typescript-4c8a</guid>
      <description>&lt;p&gt;Recently, David Heinemeier Hansson (also known as DHH) announced that &lt;a href="https://world.hey.com/dhh/turbo-8-is-dropping-typescript-70165c01" rel="noopener noreferrer"&gt;Turbo 8 is dropping its use of TypeScript&lt;/a&gt;. This announcement sparked substantial reactions against the decision. However, rather than focusing on the technical aspects, I want to discuss this differently.&lt;/p&gt;

&lt;p&gt;Let's get straight to my point: If someone wants Turbo to be built with TypeScript, they can create their own fork (potentially named turbo-ts) and become its maintainer. This is not a dead-end situation. In fact, it's a common occurrence in the Free/Open Source world. The principles of Software Freedom include the liberty to modify software and to distribute the modified version to the public.&lt;/p&gt;

&lt;p&gt;Consider, for instance, how &lt;a href="http://libreoffice.org" rel="noopener noreferrer"&gt;LibreOffice&lt;/a&gt; was born from OpenOffice (backed by Oracle), &lt;a href="https://nextcloud.com" rel="noopener noreferrer"&gt;NextCloud&lt;/a&gt; emerged from OwnCloud (by its core developers), and &lt;a href="https://wintercms.com/blog/post/we-have-forked-october-cms" rel="noopener noreferrer"&gt;WinterCMS&lt;/a&gt; was created from OctoberCMS after it transitioned into proprietary software.&lt;/p&gt;

&lt;p&gt;Ultimately, Turbo is a project of DHH and his team. They developed it to streamline their own development processes. They have full authority to make decisions regarding the Turbo project.&lt;/p&gt;

&lt;p&gt;It's crucial to remember that Free/Open Source development differs significantly from proprietary software development. Consider the recent decision made by Unity (the game engine). Unity users are often forced to accept whatever the company imposes on them, especially after they become deeply entrenched in its ecosystem. This scenario would never occur if Unity were a Free/Open Source game engine. As long as there is a community and a need, such software can continue to be developed. The Free/Open Source world is not a place where we are merely users or operators, where we can only hope for the mercy of a company to do us a favor by doing what we like. Here, we can take the initiative and build what is missing. Imagine the possibilities if we take action as a community.&lt;/p&gt;

&lt;p&gt;Also, it's worth noting that some of the uproar around the TypeScript-less Turbo 8 comes from those who have never contributed to the project or used it once. Let's show more respect to those who do contribute. The Free/Open Source world is a &lt;a href="https://en.wiktionary.org/wiki/do-ocracy" rel="noopener noreferrer"&gt;do-ocratic&lt;/a&gt; world. Actions matter more than words.&lt;/p&gt;

</description>
      <category>turbo</category>
      <category>dhh</category>
      <category>opensource</category>
      <category>typescript</category>
    </item>
    <item>
      <title>We always can...; For 20th Software Freedom Day</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sat, 26 Aug 2023 16:55:02 +0000</pubDate>
      <link>https://forem.com/ahangarha/we-always-can-for-20th-software-freedom-day-4n29</link>
      <guid>https://forem.com/ahangarha/we-always-can-for-20th-software-freedom-day-4n29</guid>
      <description>&lt;p&gt;Four decades ago, Richard Stallman might have abandoned the idea of building a free (as in freedom) operating system known as &lt;a href="https://en.wikipedia.org/wiki/GNU_Project" rel="noopener noreferrer"&gt;GNU&lt;/a&gt;, given the plethora of proprietary ones available. Three decades ago, Linus Torvalds might have opted to mock the GNU project, forsaking his attempt to develop a kernel (ultimately for the GNU project) and instead selecting an option readily available in the market. Twenty years ago… Ten years ago… Now…&lt;/p&gt;

&lt;p&gt;A brief look at the history of the Free Software Movement reveals a long list of projects that emerged and developed in the presence of strong proprietary “competitors”. I’m not referring to those using permissive licenses intended to exploit the free labor of volunteer developers. Rather, I’m highlighting many projects released under strong CopyLeft licenses (to protect the user’s freedom); and their numbers are still growing. Among those with AGPL (the strongest CopyLeft license), we have NextCloud, a project for running cloud services, developed amidst a plethora of proprietary cloud solutions. Mastodon, PeerTube, and several other software for creating a network of free and decentralized social media were developed when everyone seemed trapped in centralized and proprietary solutions. The list can be expanded further, but I believe this is sufficient to convey the message.&lt;/p&gt;

&lt;p&gt;We can always choose to be the catalyst for change. And we can always choose to make excuses for capitulating to the status quo. The Free Software Movement is one of the best examples of the possibility of change and control over our digital lives when others see no hope. We can always wait and watch for opportunities like a hunter to seize a good moment for contribution, to find the right people to collaborate with, to work in a company for building free/open source software, and more. Maybe it comes late, but we can always take a step forward while others campaign to spread despair.&lt;/p&gt;

&lt;p&gt;This year marks the 40th anniversary of the GNU project, the 32nd for the Linux kernel, the 30th for Debian, the 20th for WordPress, and so forth. On the 20th anniversary of &lt;a href="https://en.wikipedia.org/wiki/Software_Freedom_Day" rel="noopener noreferrer"&gt;Software Freedom Day&lt;/a&gt;, we can reflect on our involvement in this movement and reconsider what it means to be part of such a movement.&lt;/p&gt;

</description>
      <category>freesoftwaremovement</category>
      <category>softwarefreedomday</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Collaboration is the key</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sun, 24 Jul 2022 13:05:54 +0000</pubDate>
      <link>https://forem.com/ahangarha/collaboration-is-the-key-22h0</link>
      <guid>https://forem.com/ahangarha/collaboration-is-the-key-22h0</guid>
      <description>&lt;p&gt;I just finished my technical curriculum at Microverse and became a certified full-stack developer. The last phase of this intense journey was a three-weeks-long group activity on the final capstone project. Here I try to share some of my experiences in these three weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The worry
&lt;/h2&gt;

&lt;p&gt;Nearly from the beginning of the course in January I witnessed the lack of interest in collaboration among many students....&lt;/p&gt;

&lt;p&gt;My worry was that what if I get paired with those who don't want to collaborate in the final capstone project. Thankfully I got paired with top collaborators in my cohort. So the module started with positive energy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working
&lt;/h2&gt;

&lt;p&gt;We knew each other from our previous modules. We knew we were responsible, passionate, and good team players. Maybe not the best, but we were also good in our programming skills. Soon we started to work. We came with different ideas (based on the core requirements of Microverse). Among all (almost all were good), we chose to make a website for mentorship. Not only we could relate to it, we could imagine it to be a real project (rather a useless car renting app which would remain the same after project submission) in the near future. We spent time to choose name and make logo for it. We chose "&lt;a href="https://github.com/UpliftLab/al-mentoria-frontend/" rel="noopener noreferrer"&gt;Al mentoria&lt;/a&gt;" which has a mixed vibe for Spanish and Arabic in it.&lt;/p&gt;

&lt;p&gt;We had discussion on how to divide our work. While we could divide tasks into two groups of front and back-end, we decided that all of us work on all parts. Each had its own benefits. I was supporting front/back division, but at the end I think the group decision was better (despite its problems).&lt;/p&gt;

&lt;p&gt;One interesting issue was that we had much more ideas than the project requirements. We wanted to make any ordinary user be able to apply for having mentorship profile. We wanted to use TypeScript. Unlike other group projects in which my worry was that the other teammates were not working, this time the issue was how to manage this motivation in a way we could keep the integrity of the app and still deliver the final project in best quality as per the minimum requirements.&lt;/p&gt;

&lt;p&gt;Apart from the above example, there were many other cases of disagreement. For instance I believed that it would be much better if we would implement the HTML/CSS design first and then convert it into React app. Others found it unnecessary, and of course we followed the group decision. In another case, we had disagreement on how to implement authentication on front end. The task we used to think shouldn't take more than two hours, took two days to come to a relatively robust implementation. In all cases, whenever we had an issue that could impact everyone, we all were getting involved actively to make the best decision.&lt;/p&gt;

&lt;p&gt;As mentioned before, the unfortunate norm among many students in Microverse (despite the Microverse attempt for change) is that many students do not appreciate team work. In the morning sessions many students prefer to keep their mic and camera off; hardly some would attend mob programming. Standup is worse. People only attend for attendance while it could be a fun session to wrap up the day. But our group was totally the opposite. Right from morning till evening we had fun sessions while helping each other. Even there were days in which we continued our sessions after standup, not just for work but to have chat about other topics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;I mentioned before that our issue was how to limit ourselves. I was the leader in the group, and I tried my best making sure all ideas are heard. We made a list of desired features and refactoring candidates. I assured everyone that we will implement all these good ideas but let's focus on delivering the first version according to the project requirements as best as we can. Thankfully the team accepted this proposal.&lt;/p&gt;

&lt;p&gt;We had another challenge: we all must have roughly equal contribution to the project. The rationale behind this condition is legitimate. Where many students do not do their tasks effectively in a group, Microverse tries to push people to work equally. This limitation pushes the fast teammates to work with others and help them to work better. But in our case, this rule was a big barrier. It prevented us utilizing our extra time and energy to add more features while others were working on their own features.&lt;/p&gt;

&lt;p&gt;It was interesting that after finishing our own tasks, instead of going and resting, we all would come to see if we could offer any help to the other teammates. We never said (or even thought) something like "I have done my task, you should do yours". We all considered the whole project as ours. We respected others autonomy while tried to offer help.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outcome
&lt;/h2&gt;

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

&lt;p&gt;We presented our project on time. Not only we implemented all the core requirements, but also we implemented a relatively robust authentication and error handling in front-end. We wrote 100+ test cases for back-end and 50+ for front end while it was not a requirement. And for the design, we tried to be as loyal to &lt;a href="https://www.behance.net/gallery/26425031/Vespa-Responsive-Redesign" rel="noopener noreferrer"&gt;the proposed design&lt;/a&gt; as possible despite having disagreement with some part of it. I think we achieved this fully. So from technical point of view, we were successful. &lt;/p&gt;

&lt;p&gt;To me (and I guess other teammates), the main success was in our collaboration. We had three fun and joyful weeks. We worked together and much more than that. We were working, laughing, joking, and totally enjoying each others' company. We strengthen our bond and friendship. And this is the most valuable achievement of this project.&lt;/p&gt;

&lt;p&gt;We made our project not in our personal profile but in an organization called "&lt;a href="https://github.com/UpliftLab/" rel="noopener noreferrer"&gt;UpliftLab&lt;/a&gt;". We made our own workspace on slack to keep remaining connected and work collectively on projects that can help ourselves and other junior programmers to develop skills.&lt;/p&gt;

&lt;p&gt;At the end, I want to thank all my teammates: &lt;a href="https://github.com/mirouhml" rel="noopener noreferrer"&gt;Ammar Hamlaoui&lt;/a&gt;, &lt;a href="https://github.com/awais-amjed" rel="noopener noreferrer"&gt;Awais Amjed&lt;/a&gt;, and &lt;a href="https://github.com/sboursen" rel="noopener noreferrer"&gt;Soufiane Boursen&lt;/a&gt;, for their contributions in this wonderful experience. I want to thank &lt;a href="https://microverse.org" rel="noopener noreferrer"&gt;Microverse&lt;/a&gt; (despite all limitations) for its attempts to improve the students skills as developers and as effective team players especially in a remote environment.&lt;/p&gt;

&lt;p&gt;And the final word: value collective growth.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Released under CC BY-SA&lt;/em&gt;&lt;/p&gt;

</description>
      <category>teamwork</category>
    </item>
    <item>
      <title>بررسی پشتیبانی bidi در dev.to - left</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Fri, 29 Apr 2022 20:30:43 +0000</pubDate>
      <link>https://forem.com/ahangarha/brrsy-pshtybny-bidi-dr-devto-left-2h6p</link>
      <guid>https://forem.com/ahangarha/brrsy-pshtybny-bidi-dr-devto-left-2h6p</guid>
      <description>&lt;p&gt;This is a post to test bidirectional text support on dev.to.&lt;/p&gt;




&lt;p&gt;این یک text ساده است که شما easily و بدون problem می‌توانید آن را بخوانید. درست می‌گویم؟ &lt;/p&gt;

&lt;p&gt;This is some متن that you can read به راحتی without any مشکل. Am I right? &lt;/p&gt;

</description>
      <category>bidi</category>
      <category>bidirectional</category>
    </item>
    <item>
      <title>Enjoying web design using Tailwindcss</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Fri, 01 Apr 2022 11:39:19 +0000</pubDate>
      <link>https://forem.com/ahangarha/enjoying-web-design-using-tailwindcss-1f1l</link>
      <guid>https://forem.com/ahangarha/enjoying-web-design-using-tailwindcss-1f1l</guid>
      <description>&lt;p&gt;Do you enjoy the pain of moving between HTML and CSS files for designing a web page? I don’t and I don’t think anybody would. Then what is the solution? Are there any CSS frameworks good enough to overcome this pain? If yes, which of them to use? My ultimate answer is &lt;a href="https://tailwindcss.com" rel="noopener noreferrer"&gt;Tailwindcss&lt;/a&gt; and here I am going to share some of my thoughts about it.&lt;/p&gt;

&lt;p&gt;An ordinary day for a frontend developer consists of opening an HTML file, a CSS file, and a web browser. We frequently go from HTML to CSS files, make new classes, combine them, make complex selectors, and deal with issues such as specificity. We wrestle with all these to get something we want. For years, many ideas came up to make this procedure more smooth and less painful. Many people use less, sass, scss, or frameworks like foundation and bootstrap. But still, the field on which we wrestle is the same, maybe just fancier.&lt;/p&gt;

&lt;p&gt;How nice would it be if we could remove one of HTML, CSS, and a web browser for design? Wrestle with two is much easier than with three. We cannot remove HTML since our content is there. Removing the web browser also is not practical since we need to examine our design step by step. What remains is CSS! But if we remove CSS, how can we design? One may say frameworks like Bootstrap have many premade styles so without touching any CSS files, we can use relevant classes to design the page. Yes! That is a good start but don’t you think this approach makes all websites look the same (and look ugly :D). This is why I say this is just a fancier wrestling field and not a different one.&lt;/p&gt;

&lt;p&gt;Let’s change the field and play differently. Tailwindcss is at your service. Tailwindcss provides us with a bunch of utility classes we can add to HTML elements. Do you want padding of 1rem? Add p-4 class. Do you want a red color text on the hover? Add hover:text-red-500 class. But wait! Isn’t this the same as Bootstrap classes? At once yes but deeply no.&lt;/p&gt;

&lt;p&gt;Bootstrap has two kinds of classes: utilities and components. Components are sets of classes that are related to each other and without one, the other won’t have any meaningful impact. Classes for making navbar or cards,... are among component classes. But also there are utility classes which are kind of independent of others and can be used anywhere. Classes related to typography, spacing,... are among this group.&lt;/p&gt;

&lt;p&gt;Tailwindcss is a utility-first framework. Unlike working with Bootstrap which provides a limited (really limited) number of utility classes, Tailwindcss provides many. And since version 3 practically we have an unlimited number of classes. You just make a new class right inside the HTML file and Tailwindcss generates the CSS style for that class on the fly. Isn’t it cool? This way one can implement nearly any possible design without leaving the HTML file. It is easy, fast, and fun!&lt;/p&gt;

&lt;p&gt;In short, Tailwindcss provides these advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You only focus on design right in the HTML file.&lt;/li&gt;
&lt;li&gt;You get a small CSS file since Tailwindcss only generates classes you have used in your HTML file&lt;/li&gt;
&lt;li&gt;The HTML component becomes portable. Just copy it from one project to another and it fits the design system of that project.&lt;/li&gt;
&lt;li&gt;No specificity issue anymore.&lt;/li&gt;
&lt;li&gt;No garbage classes and style in CSS files&lt;/li&gt;
&lt;li&gt;Perfect for React, Vue, Angular project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is much more to talk about Tailwindcss. It has good &lt;a href="https://tailwindcss.com/docs/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; and also it has a &lt;a href="https://play.tailwindcss.com/" rel="noopener noreferrer"&gt;playground&lt;/a&gt;. At first, it may look weird and pointless but I promise if you start working with it, it shows up its power very soon. I am not sure how one can resist it then.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;First published &lt;a href="https://fediverse.blog/~/LibreCode/Enjoying%20web%20design%20using%20Tailwindcss" rel="noopener noreferrer"&gt;here&lt;/a&gt; under CC BY-SA&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>css</category>
      <category>programming</category>
    </item>
    <item>
      <title>Open Source is more than open-source.</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sun, 27 Mar 2022 08:13:01 +0000</pubDate>
      <link>https://forem.com/ahangarha/open-source-is-more-than-open-source-1f5d</link>
      <guid>https://forem.com/ahangarha/open-source-is-more-than-open-source-1f5d</guid>
      <description>&lt;p&gt;If you are reading this article, you should already have some idea about Open Source software. Is that idea suggesting the code of the software to be available? Let's examine how well your idea fits the definition of Open Source.&lt;/p&gt;

&lt;p&gt;Maybe it is not a bad idea to look back a bit and see how this term came to the scene. Much earlier and in the mid-1980s, the Free Software definition was introduced. Though the definition was about four essential freedoms of the software user (to use, study, modify, and share), many people were taking the "Free" as free of cost.&lt;/p&gt;

&lt;p&gt;This confusion along with a few other motivations led to another term to get into the scene at the end of the 1990s: Open Source. Open Source came to achieve some goals including removing confusion about the "Free" part of the Free Software idea. The Open Source Definition (OSD) listed ten criteria for a software to be called Open Source:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Free redistribution&lt;/li&gt;
&lt;li&gt;Include source code&lt;/li&gt;
&lt;li&gt;Allow derived works&lt;/li&gt;
&lt;li&gt;May protect the integrity of the author's source code&lt;/li&gt;
&lt;li&gt;No discrimination against persons or groups&lt;/li&gt;
&lt;li&gt;No discrimination against fields of endeavor&lt;/li&gt;
&lt;li&gt;Distribution of license&lt;/li&gt;
&lt;li&gt;Not be specific to a product&lt;/li&gt;
&lt;li&gt;Not restrict other software&lt;/li&gt;
&lt;li&gt;Technology-neutral&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Interestingly, the availability of the source code is not the first criterion but the second. This simply means software that only shares the source code and does not comply with the rest of the nine criteria, is not Open Source software. Such software is called Source Available.&lt;/p&gt;

&lt;p&gt;In this regard, having access to lots of JavaScript code doesn't mean they are Open Source. Releasing a code without explicitly mentioning the license (approved by OSI) means it is not Open Source software. Again: "Open source doesn't just mean access to the source code. The distribution terms of open-source software must comply with the" ten criteria mentioned above.&lt;/p&gt;

&lt;p&gt;Next time you hear Open Source, remember that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open Source &amp;gt; open source
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Dev.to misses Open Source definition</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sat, 26 Mar 2022 11:58:57 +0000</pubDate>
      <link>https://forem.com/ahangarha/devto-misses-open-source-definition-24el</link>
      <guid>https://forem.com/ahangarha/devto-misses-open-source-definition-24el</guid>
      <description>&lt;p&gt;I just joined Dev.to. As usual, I look for things related to Free/Libre software. I realized there is a tag for &lt;strong&gt;OpenSource&lt;/strong&gt; and if I try to make a see tag page for &lt;strong&gt;FreeSoftware&lt;/strong&gt;, it redirects me to OpenSource. That is OK I try to understand it, but quickly something very wrong took my attention: the definition provided for the tag was wrong!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1lgzl3hj9c9oo9frgeq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1lgzl3hj9c9oo9frgeq.png" alt="Wrong definition of Open Source on Dev.to" width="659" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open Source came to provide an alternative term to avoid confusion over the meaning of Free Software (free as in freedom, not free beer). Despite having clear &lt;a href="https://opensource.org/docs/osd" rel="noopener noreferrer"&gt;official definition&lt;/a&gt;, many people take open-source literally as software with publicly available code. Providing the source code is the second of the 10 conditions for software to be considered as Open Source one. I do strongly suggest going through the definition and reading all the 10 criteria.&lt;/p&gt;

&lt;p&gt;Here my question is why does a platform like dev.to send such a wrong message about Open Source definition? I try to contact admins and I hope to see change.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Mostafa Ahangarha © 2022 under CC BY-SA&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Hello dev.to!</title>
      <dc:creator>Mostafa Ahangarha</dc:creator>
      <pubDate>Sat, 26 Mar 2022 11:21:15 +0000</pubDate>
      <link>https://forem.com/ahangarha/hello-devto-53l1</link>
      <guid>https://forem.com/ahangarha/hello-devto-53l1</guid>
      <description>&lt;p&gt;As a Software Freedom enthusiast, I care about using platforms that are based on Free/Libre and Open Source software. I have an account on Twitter, LinkedIn, Instagram but also I use Mastodon, Peertube, PixelFed,... I resist making an account on Medium and instead use a Plume instance at fediverse.blog.&lt;/p&gt;

&lt;p&gt;I made up my mind to be here. It is not only based on Free/Libre Software but also the software is an AGPL licensed one. I wish it had a federation feature with other Forem instances or even would use ActivityPub to be a part of Fediverse (the universe of free, decentralized, and federated social media instances). That might come in the future but even to that day, it is nice to be in a community of developers which is gathered on a FLOSS platform.&lt;/p&gt;

&lt;p&gt;Let's see how it goes.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
