<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ali Kamalizade</title>
    <description>The latest articles on DEV Community by Ali Kamalizade (@alidev).</description>
    <link>https://dev.to/alidev</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%2F243487%2F322fa4e0-0ebd-4cf7-ab4b-a48d2369e5e1.png</url>
      <title>DEV Community: Ali Kamalizade</title>
      <link>https://dev.to/alidev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alidev"/>
    <language>en</language>
    <item>
      <title>My 10 Favorite Software Engineering Blogs</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Tue, 29 Jun 2021 18:54:49 +0000</pubDate>
      <link>https://dev.to/alidev/my-10-favorite-software-engineering-blogs-3mcf</link>
      <guid>https://dev.to/alidev/my-10-favorite-software-engineering-blogs-3mcf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I0r27C34--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u4mon264i6l3qd03tuhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I0r27C34--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u4mon264i6l3qd03tuhz.png" alt="Photo by Fotis Fotopoulos on Unsplash" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, there’s hardly any bigger tech company that does not have an engineering blog. In my opinion there are a few characteristics of a good engineering blog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The content is written by people like software engineers or data scientists&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The blog posts are not just glorified product marketing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post I want to share blogs I follow to stay up to date regarding software engineering. Of course, there are way more interesting blogs out there.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://instagram-engineering.com"&gt;Instagram&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Instagram is a widely used platform. Hence, it faces a lot of tough engineering challenges (e.g. regarding scalability, data protection). The following is one post about making the web version of Instagram faster by reducing the amount of JavaScript and optimize the execution.&lt;br&gt;
&lt;a href="https://instagram-engineering.com/making-instagram-com-faster-code-size-and-execution-optimizations-part-4-57668be796a8"&gt;&lt;strong&gt;Making instagram.com faster: Code size and execution optimizations (Part 4)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/bbc-design-engineering"&gt;BBC&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;BBC is not only a broadcasting company but they also employ a capable engineering team. Accessibility is a topic that is often neglected in software products. Hence, I am glad to know how accessibility helped to improve their internal design system.&lt;br&gt;
&lt;a href="https://medium.com/bbc-design-engineering/shifting-left-how-introducing-accessibility-earlier-helps-the-bbcs-design-system-716ec5cfbcd8"&gt;&lt;strong&gt;Shifting left: how introducing accessibility earlier helps the BBC’s design system&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://engineering.leanix.net"&gt;LeanIX&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Disclaimer: naturally, I’m biased about this one. Nevertheless, I want to include LeanIX as the blog is fairly new but the topics range from learnings to open-source work. Here’s a great post which answers a popular question: why software has bugs.&lt;br&gt;
&lt;a href="https://engineering.leanix.net/blog/why-software-has-bugs/"&gt;&lt;strong&gt;Why software has bugs - explained with kids | LeanIX Engineering&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://netflixtechblog.com"&gt;Netflix&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Netflix has done a lot of pioneering work in the software engineering world. If you have never heard of GraphQL then I can recommend to take a look at this post. Many companies like Netflix are now creating new APIs entirely with GraphQL instead of REST.&lt;br&gt;
&lt;a href="https://netflixtechblog.com/beyond-rest-1b76f7c20ef6"&gt;&lt;strong&gt;Beyond REST&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.blog/category/engineering/"&gt;GitHub&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;GitHub hardly needs any introduction: at this point, most software engineers should have used GitHub at least once. Web Components is a new standard to write and reuse components regardless of any JavaScript framework. Check out this post to learn more about how GitHub uses Web Components.&lt;br&gt;
&lt;a href="https://github.blog/2021-05-04-how-we-use-web-components-at-github/"&gt;&lt;strong&gt;How we use Web Components at GitHub | The GitHub Blog&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/wix-engineering"&gt;Wix&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Wix is a popular website builder to create websites with no code. Their engineering team shares content about microservices, the technical interview process and more. As someone who likes to create something new I can recommend this post for some motivation.&lt;br&gt;
&lt;a href="https://medium.com/wix-engineering/lets-not-ditch-another-side-project-5181575e57ac"&gt;&lt;strong&gt;Let’s Not Ditch Another Side Project&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/google-developer-experts"&gt;Google Developer Experts&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;You may have heard about the GDE program. There is a lot of knowledge shared as there are various topics covered related to Google technologies. I like this post about best practices regarding pull requests.&lt;br&gt;
&lt;a href="https://medium.com/google-developer-experts/how-to-pull-request-d75ac81449a5"&gt;&lt;strong&gt;How to Pull Request.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/paypal-tech"&gt;PayPal&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;PayPal is a widely used service to pay people or businesses in an easy way. If you’ve ever been interested into the idea of the &lt;a href="https://jamstack.org/"&gt;JAMstack&lt;/a&gt; then this is a good entry into the topic.&lt;br&gt;
&lt;a href="https://medium.com/paypal-tech/what-exactly-is-jamstack-a9c05f513823"&gt;&lt;strong&gt;What exactly is JAMstack?&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/airbnb-engineering"&gt;Airbnb&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Airbnb should be known to most of you. As a fan of TypeScript I like their work on ts-migrate which Airbnb has developed to migrate large code bases from JavaScript to TypeScript.&lt;br&gt;
&lt;a href="https://medium.com/airbnb-engineering/ts-migrate-a-tool-for-migrating-to-typescript-at-scale-cd23bfeb5cc"&gt;&lt;strong&gt;ts-migrate: A Tool for Migrating to TypeScript at Scale&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://medium.com/capital-one-tech"&gt;Capital One&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Working in a finance company does not mean to only work with legacy systems. The engineers at Capital One are regularly sharing their lessons learned in areas like machine learning, cloud infrastructure and web performance. I like this post about ways to avoid coupling in microservices design as many companies are struggling with following the microservices mindset.&lt;br&gt;
&lt;a href="https://medium.com/capital-one-tech/how-to-avoid-coupling-in-microservices-design-b241d77ae233"&gt;&lt;strong&gt;How to Avoid Coupling in Microservices Design&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Thanks for reading this post about my favorite tech blogs. Which engineering blogs are you following? Let me know in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>blogging</category>
      <category>microservices</category>
    </item>
    <item>
      <title>How to Fix the “Failed to Read the CSSRules Property From CSSStyleSheet” Error</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Mon, 12 Oct 2020 16:08:20 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-fix-the-failed-to-read-the-cssrules-property-from-cssstylesheet-error-lld</link>
      <guid>https://dev.to/alidev/how-to-fix-the-failed-to-read-the-cssrules-property-from-cssstylesheet-error-lld</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-fix-the-failed-to-read-the-cssrules-property-from-cssstylesheet-error-431d84e4a139?source=rss-3a534b5053e6------2"&gt;Originally posted on my Medium blog »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--clShGUiQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/11274/0%2AzkTnxU6wI4XGLL4k" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--clShGUiQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/11274/0%2AzkTnxU6wI4XGLL4k" alt="Photo by [Graham Ruttan](https://unsplash.com/@gramdaman?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)." width="800" height="532"&gt;&lt;/a&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@gramdaman?utm_source=medium&amp;amp;utm_medium=referral"&gt;Graham Ruttan&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recently, a few customers ran into a problem in an Angular web application where an exception was thrown. Because of this problem, you couldn’t use a major part of the application. As a developer, I want to have clear instructions on how to reproduce an issue to not waste time. Good customer support or customers willing to share more details beyond “It isn’t working for me” can provide meaningful information to make the life of developers easier. Customer support wasn’t able to reproduce the issue on their devices, yet it was consistently happening for a few customers.&lt;/p&gt;

&lt;p&gt;When this issue was brought up, I did what I typically do when encountering issues like this. This article is about this particular problem as well as debugging critical issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding the Root Cause
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I used &lt;a href="https://www.instana.com/product-overview#web-browser2/"&gt;Instana&lt;/a&gt;, which is a great SaaS for monitoring microservices and websites. Through our monitoring tool, I was able to confirm that the error occurred for a few customers as well as the user actions that led to the issue. Even with this information, I couldn’t reproduce the issue at first.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I had the error stack trace thanks to our monitoring tool. With this, I found the code that caused the exception to be thrown. As you can see below, this code is querying all stylesheets in the DOM and doing something with the CSS rules of each stylesheet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Our monitoring tool also provides browser data, so I checked which browsers were affected the most. It turned out it’s mainly recent versions of Chromium-based browsers like Google Chrome. As many of my coworkers use Google Chrome as the main browser for development, I found it strange that no other developer stumbled upon this yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There were no tests for this function. I tried to replicate the issue with unit tests with Jest, but the tests ran through successfully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I searched online for this particular error message and found some helpful posts regarding rather recent changes in Chrome. In the latest version of Chrome, CORS security rules are also applicable for stylesheets (similar to Iframe rules). You can load and render them, but you cannot access the content stylesheets loaded from another domain through JavaScript. While this information was helpful, I still did not understand why this should be a problem.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How to Fix the Error
&lt;/h2&gt;

&lt;p&gt;With all the knowledge mentioned above, a theory formed in my head: What if somehow there were stylesheets loaded into the DOM that were not from us? This was the only thing I could think of that could cause this issue, so I began thinking, “How do stylesheets not from us get loaded into the DOM?”&lt;/p&gt;

&lt;p&gt;The answer: browser extensions. You probably know web extensions that remove ads from websites or provide functionality that your browser does not have. Browser extensions are typically built on web technologies like HTML, CSS, and JavaScript. This means it’s totally possible for a web extension to load a stylesheet from another domain — unless you are not using extensions that do that.&lt;/p&gt;

&lt;p&gt;The issue can be reproduced easily by injecting a style (e.g. by using the Chrome Developer Tools) that points to a CSS file from another domain (e.g. a CDN). If your CSS Stylesheet is from the same domain as the HTML, you will be able to access the document.&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/styleSheets"&gt;styleSheets&lt;/a&gt;.get(index).&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/cssRules"&gt;cssRules&lt;/a&gt; property. Otherwise, it will throw the following error:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Now that we understand and found the root cause, the fix for the problem is easy: only keep stylesheets that are loaded from the same domain or where href is null (this may be the case if stylesheets are inlined, such as when using Angular):&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;After the fix was released, we reached out to affected customers and they could confirm the issue was not occurring anymore. Besides, our monitoring tool also did not report any more occurrences of this issue, so we knew we were on the safe side.&lt;/p&gt;

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

&lt;p&gt;Thanks for reading this short article. As you can see, the fix for the issue can be implemented in minutes, but understanding the root cause of issues often takes longer than we expect.&lt;/p&gt;

&lt;p&gt;Did this help you? Let me know in the comments.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>javascript</category>
      <category>css</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why and how to use Static IPs in Frontend &amp; Backend</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Sun, 11 Oct 2020 16:39:57 +0000</pubDate>
      <link>https://dev.to/alidev/why-and-how-to-use-static-ips-in-frontend-backend-4cei</link>
      <guid>https://dev.to/alidev/why-and-how-to-use-static-ips-in-frontend-backend-4cei</guid>
      <description>&lt;p&gt;&lt;a href="https://itnext.io/why-and-how-to-use-static-ips-in-frontend-backend-4d1ed9a65eb8?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hxBdAn0a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/2600/0%2At8LwZkvOLoYjlLTX" alt="" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://itnext.io/why-and-how-to-use-static-ips-in-frontend-backend-4d1ed9a65eb8?source=rss-3a534b5053e6------2"&gt;Originally published on my Medium blog »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A beta customer once approached us because he was unable to login in to our Angular web application. The page was loading but any HTTP requests to our API failed. After talking to the customer we found that their company is using IP restrictions. Therefore, he wanted to know if we could provide static IPs which they could add on their side to allow using our application in their company.&lt;/p&gt;

&lt;p&gt;Unfortunately, our cloud platform of choice (&lt;a href="https://render.com"&gt;Render&lt;/a&gt;) did not directly support this feature yet at that point of time. Hence, we could not provide a definite list of IPs that would never change. That’s why we had to look for a product which could provide static IPs. Changing our cloud platform was off the table as we are quite happy with it even to this day. As this was the first customer requesting this, we also did not want to spend a lot of money for this right now.&lt;/p&gt;

&lt;p&gt;Luckily, I stumbled over a solution which seemed to provide everything I’d need for now. &lt;a href="https://www.quotaguard.com"&gt;QuotaGuard&lt;/a&gt; is a service which describes itself as “&lt;em&gt;the world’s leading Static IP solution provider for distributed networks and cloud-based applications&lt;/em&gt;”. They support multiple cloud platforms including the one we use and the pricing is fair in my opinion.&lt;/p&gt;

&lt;p&gt;In our case we only needed an inbound proxy which allows us to access our application from a static IP. Outbound would be necessary if we want to route traffic from our application to an external service via a static IP.&lt;/p&gt;

&lt;p&gt;Keep in mind that aside from the account registration, the following steps are rather general so they should work with alternative solutions as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to create an inbound proxy to use static IPs with QuotaGuard Static
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create an account&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create an inbound proxy. This requires you to provide the URL of your API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to allow your application to use the inbound proxy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure to use the domain URL instead of directly calling your API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide all the static IPs to your customers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optional: only use the inbound proxy for certain requests or customers to not exceed your quota 🤓&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After creating the inbound proxy we see the static IPs as well as the domain URL. We should provide interested customers the static IPs we can see here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_-NEQ8gV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/kzec8v8md3sd8fa7uv75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_-NEQ8gV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/i/kzec8v8md3sd8fa7uv75.png" alt="Creating an inbound proxy" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our case, our Angular web application uses &lt;a href="https://itnext.io/how-to-send-jwt-automatically-in-angular-http-requests-31c1fd060871"&gt;JWT&lt;/a&gt; for authentication. Pay attention to whitelistedDomains which includes the new domain URL of our inbound proxy.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// called on every request to retrieve the token
export function jwtOptionsFactory(tokenService: MyTokenService) {
  return {
    tokenGetter: () =&amp;gt; tokenService.getToken(),
    whitelistedDomains: ['some-api.com', 'some-api.gestatica.com']
  };
}
// the actual module imports (simplified)
@NgModule({
  ...,
  imports: [JwtModule.forRoot({
      jwtOptionsProvider: {
        provide: JWT_OPTIONS,
        useFactory: jwtOptionsFactory,
        deps: [MyTokenService]
      }
    }),
  ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The only thing left to do: use the correct URL for HTTP requests. In our case we created a feature flag for this. Hence, only customers which require this feature will use the inbound proxy while the rest will directly use the API as usual. However, we don’t know this information until the user is logged in so we always use the proxy for login requests.&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getApiUrl(route: string, useStaticIps: boolean): string {&lt;br&gt;
  if (!environment.production) {&lt;br&gt;
   return '&lt;a href="https://some-api.com"&gt;https://some-api.com&lt;/a&gt;';&lt;br&gt;
  } else {&lt;br&gt;
   return useStaticIps || route.includes('authentication/login') ?&lt;br&gt;
    '&lt;a href="https://some-api.gestatica.com"&gt;https://some-api.gestatica.com&lt;/a&gt;' :&lt;br&gt;
    '&lt;a href="https://some-api.com"&gt;https://some-api.com&lt;/a&gt;';&lt;br&gt;
  }&lt;br&gt;
 }&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Conclusion&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;Thanks for reading this short post about using QuotaGuard as a solution for static IPs. As you can see the setup is done in a few minutes and everyone can access our application again. How do use static IPs in your products? Let me know in the comments.&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>webdev</category>
      <category>softwareengineering</category>
      <category>angular</category>
    </item>
    <item>
      <title>Things to Consider When Choosing a Component Library</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Sun, 11 Oct 2020 11:06:52 +0000</pubDate>
      <link>https://dev.to/alidev/things-to-consider-when-choosing-a-component-library-45e0</link>
      <guid>https://dev.to/alidev/things-to-consider-when-choosing-a-component-library-45e0</guid>
      <description>&lt;p&gt;Modern UIs are composed of multiple components. Popular component libraries include components like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Buttons&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forms: input fields, select elements, checkboxes, radio buttons&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dialogs, modals, and popovers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cards&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tabs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of the most important things to consider when picking a component library:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Maintainability: Who are the people behind the library? Is it a company, a group of passionate open-source contributors, or a one-man army?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexibility: To what degree can this library be customized to your needs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ease of use: How difficult is it to use and integrate this library into a project?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Popularity: Is this library used by millions of developers or just a few developers in one company?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependencies: How much does this library depend on other third-party libraries?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documentation and resources: Where and how can I get tutorials and other information about this library?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this post, I want to take a closer look at this with a real-life example. The project will be an &lt;a href="https://angular.io/"&gt;Angular&lt;/a&gt; web application and I’ll use the following component libraries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://material.angular.io/"&gt;Angular Material&lt;/a&gt;: A framework that contains material design components for Angular.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://getbootstrap.com/"&gt;Bootstrap 4&lt;/a&gt;: The most popular CSS framework, originally created by Twitter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://valor-software.com/ngx-bootstrap/#/"&gt;ngx-bootstrap&lt;/a&gt;: An implementation of the popular Bootstrap framework which is intended for Angular applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://akveo.github.io/nebular/"&gt;Nebular&lt;/a&gt;: A customizable Angular UI Library with multiple components, themes, and further feature modules like Auth and Security.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While we’re taking a closer look at component libraries many of these aspects apply to libraries and frameworks in general.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Maintainability
&lt;/h2&gt;

&lt;p&gt;Software maintainability is defined as the degree to which an application is understood, repaired, or enhanced. If you think about it: most SaaS are never finished. New features are implemented while countless bugs are squashed and new bugs are inadvertently introduced. So maintainability is an important factor for the long-term.&lt;/p&gt;

&lt;p&gt;Let’s look at how our candidates fare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular material&lt;/strong&gt; is mainly driven by developers working in the Angular team which means they keep up with the Angular ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; has a lot of contributors and a rich ecosystem, so it will be supported for quite some time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; is developed by the software development company Valor Software. While Bootstrap itself is quite mature, ngx-bootstrap is more or less bound to Bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; is mainly driven by the software company Akveo, which has experience in open source projects. They offer professional services if you need consulting or further help to develop your application.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flexibility and Configuration
&lt;/h2&gt;

&lt;p&gt;Different products have different needs, so UX and design can vary a lot. Take news websites — while &lt;a href="https://techcrunch.com/"&gt;TechCrunch&lt;/a&gt; and &lt;a href="https://www.theverge.com/"&gt;Verge&lt;/a&gt; both report technology news they differ in their visual representation and features.&lt;/p&gt;

&lt;p&gt;Let’s look at how our candidates fare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; provides multiple themes and can be customized using SASS. The &lt;a href="https://material.angular.io/cdk/categories"&gt;Angular Component Dev Kit&lt;/a&gt; (CDK) is a set of behavior primitives for building UI components in a style-agnostic way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; can be customized using SASS. There is a variety of free and paid themes available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; can be customized the same way as Bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; provides decent extensibility. You can use SASS or CSS Custom Properties (aka &lt;a href="https://medium.com/better-programming/how-to-make-your-website-themeable-with-css-variables-81468d7c6f72"&gt;CSS Variables&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ease of Use
&lt;/h2&gt;

&lt;p&gt;Often in life, we pick things that are easy to use and require the least amount of effort. The same applies to picking the right library for a job. Some libraries can be installed with one command and you can use them right away.&lt;/p&gt;

&lt;p&gt;On the other hand, some libraries depend on other libraries or need more effort to set up. Typically, integrating a library becomes harder if it requires other libraries or tools. Angular CLI has a great feature called &lt;a href="https://angular.io/guide/schematics"&gt;schematics&lt;/a&gt; — template-based code generators for transforming a software project by generating or modifying code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; can be installed with one command by using the Angular &lt;a href="https://material.angular.io/guide/getting-started"&gt;schematic&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; requires jQuery and Popper.js, so all three of these libraries need to be installed. Since it’s primarily a CSS framework you can import parts of the library to keep your bundle sizes as small as possible. For example, it’s possible to just import its UI components but neglect the grid if you want to use another grid solution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; needs Bootstrap so both libraries need to be installed. You also need to include the Bootstrap style. There’s a handy Angular &lt;a href="https://valor-software.com/ngx-bootstrap/#/documentation#getting-started"&gt;schematic&lt;/a&gt; to automate these steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; requires the Angular CDK so both libraries need to be installed. You also need to include the Nebular theme. There’s a handy Angular &lt;a href="https://akveo.github.io/nebular/docs/guides/install-nebular#install-nebular"&gt;schematic&lt;/a&gt; to automate these steps.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Popularity
&lt;/h2&gt;

&lt;p&gt;The popularity of software as a metric is interesting. On the one hand, popularity can be an indicator of a certain degree of quality — if thousands of developers are using the library, posting good things about it, it seems a good sign for the future of the project. On the other hand, popularity can be faked. Or it’s not applicable —&lt;a href="https://github.com/auchenberg/volkswagen"&gt;when a joke project has more stars than most GitHub projects&lt;/a&gt; we can’t take popularity as a serious metric without taking a closer look.&lt;/p&gt;

&lt;p&gt;Let’s take a look at how our candidates fare when it comes to popularity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; has ~20k GitHub stars and more than 430 contributors. There are new (beta) releases rather frequently. There are quite a number of open issues but many are being resolved by the team behind Angular Material.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; has ~141k GitHub stars and more than 1100 contributors. New releases are not as often as for some more recent projects. However, Bootstrap is quite mature at this point and therefore focuses more on stability and consistency than piling up features. For a project of its popularity, there are quite a few open issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; has a few thousand GitHub stars and around 100 contributors. New releases are not seen as often as for some more recent projects. As ngx-bootstrap is a wrapper around Bootstrap the project won’t make drastic changes, which helps with stability but hinders innovation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; has ~6k GitHub stars and more than 80 contributors. There are new releases rather frequently. The project is still rather young but gaining traction.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dependencies
&lt;/h3&gt;

&lt;p&gt;Most software projects have third-party dependencies. Especially in the beginning of a software project, when you want to build an MVP quickly, you don’t have the time and resources to implement everything yourself. This is one of the most compelling reasons for choosing a component library. Successful companies like Airbnb or Atlassian often create component libraries, which are sometimes even open-sourced. However, it can get increasingly difficult to do.&lt;/p&gt;

&lt;p&gt;Let’s look at how our candidates fare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; requires no further third-party dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; requires jQuery and Popper.js. Luckily, jQuery probably won’t be required anymore when Bootstrap 5 will be released.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; requires Bootstrap and Angular. However, you don’t need to include further scripts like jQuery or Popper.js, which are normally required when using Bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; requires no further third-party dependencies except Angular.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documentation and Resources
&lt;/h2&gt;

&lt;p&gt;When you approach a new topic, tool or language many developers search for information on the internet. There are a few ways to get information: posts on Stack Overflow, official documentation, and how-to tutorials. Raise your hand if you’ve ever copied and pasted an error message into Google and clicked on the first search result!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; has good documentation with examples. I especially like that you can edit the examples in the documentation directly in your browser using &lt;a href="https://stackblitz.com/"&gt;StackBlitz&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; has good documentation with examples for all components. Since it’s a widely used framework there are lots of tutorials and external resources available for Bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; has good documentation with examples for all components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; has good documentation with examples for all components. However, it does not have as many external resources as some of its older competitors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Evaluation
&lt;/h3&gt;

&lt;p&gt;Now that we’ve talked about some important decision factors for choosing a component library we can evaluate our choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular Material&lt;/strong&gt; is a good choice if you like material design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; is a solid choice if you want a simple and easy to use solution. However, with growing project complexity Bootstrap might feel too barebones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ngx-bootstrap&lt;/strong&gt; is a good choice if you want to use Bootstrap in an Angular project. However, you implicitly rely on Bootstrap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nebular&lt;/strong&gt; is a great choice and my personal winner. It’s heavily customizable and there are useful extensions around it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see there are always tradeoffs to be made. It depends on your needs — often, a perfect solution is not available. In a smaller project, all you need may need is basic components like buttons, while in a larger project you often need things like forms, grid systems, tables, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Component Library? Evaluate Carefully
&lt;/h2&gt;

&lt;p&gt;As mentioned above, successful companies often create their own component libraries. If you modify 90% of the code to make it work for you, you might be better off creating your own components.&lt;/p&gt;

&lt;p&gt;This was the case for Airbnb with the popular &lt;a href="https://github.com/airbnb/react-dates"&gt;react-dates&lt;/a&gt; project. They tried out solutions and had to change so much code that, at some point, they decided to build their own. The answer to the question of whether to create a component library is, as always, that it depends.&lt;/p&gt;

&lt;p&gt;When I talk creating your own component library I’m not talking about making a fancy button and calling it a day. There are important aspects you need to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Development costs: Someone needs to actually implement the components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintenance costs: R.equirements change and so does software. Be careful — the effort of maintaining code is often underestimated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessibility: Popular component libraries often make sure to incorporate accessibility. Sadly, in many projects accessibility is quite neglected. &lt;a href="https://material.angular.io/cdk/a11y/overview"&gt;The Angular CDK includes multiple tools to improve accessibility&lt;/a&gt;, like implementing keyboard navigation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;User experience: Popular component libraries like Bootstrap are used on millions of websites in various ways. This means users have experience with them and are accustomed to them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Thanks for reading this post. As you can see, picking the right component library can be difficult. Choose wisely as it will be more expensive to change it later.&lt;/p&gt;

&lt;p&gt;If you’re a startup, a single developer, or if the project is not too complex then I recommend picking an existing component library. However, at some point, you might reevaluate whether it makes sense to create your component library when you find that existing component libraries don’t fit your needs anymore.&lt;/p&gt;

&lt;p&gt;What makes you choose one component library over another? Let me know in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>mobile</category>
      <category>components</category>
    </item>
    <item>
      <title>es-check-action - check JavaScript files against a specified version of ECMAScript</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Sat, 05 Sep 2020 10:14:40 +0000</pubDate>
      <link>https://dev.to/alidev/es-check-action-github-action-checks-javascript-files-against-a-specified-version-of-ecmascript-es-44en</link>
      <guid>https://dev.to/alidev/es-check-action-github-action-checks-javascript-files-against-a-specified-version-of-ecmascript-es-44en</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;es-check-action&lt;/code&gt; checks JavaScript files against a specified version of ECMAScript (ES). If a specified file's ES version doesn't match the ES version argument, this action will throw an error and log the files that didn't match the check.&lt;/p&gt;

&lt;p&gt;In modern JavaScript builds, files are bundled up so they can be served in an optimized manner in the browsers. It is assumed by developers that future JavaScript—like ES8 will be transpiled (changed from future JavaScript to current JavaScript) appropriately by a tool like Babel or TypeScript. Sometimes there is an issue where files are not transpiled which would cause issues in browsers who don't support all the latest features (e.g. IE11).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/check-your-javascript-bundles-for-browser-support-d769c1fca4c"&gt;Check out my blog post about this topic (Medium.com)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Main motivation: avoid unexpected issues with unsupported features in web browsers without having to always do manual checking in those browsers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;I'd say it's &lt;strong&gt;Maintainer Must-Haves&lt;/strong&gt; but it also belongs somewhat to &lt;strong&gt;DIY Deployments&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;The source code including a example is available on GitHub.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ali-kamalizade"&gt;
        ali-kamalizade
      &lt;/a&gt; / &lt;a href="https://github.com/ali-kamalizade/es-check-action"&gt;
        es-check-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A GitHub action that checks JavaScript files ES version against a specified ES version. If a specified file's ES version doesn't match the ES version argument, this action will throw an error and log the files that didn't match the check.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
es-check-action&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/ali-kamalizade/es-check-action/workflows/Checks/badge.svg?branch=master"&gt;&lt;img src="https://github.com/ali-kamalizade/es-check-action/workflows/Checks/badge.svg?branch=master" alt="Checks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This GitHub Action checks JavaScript files against a specified version of ECMAScript (ES). If a specified file's ES version doesn't match the ES version argument, this action will throw an error and log the files that didn't match the check.&lt;/p&gt;
&lt;p&gt;In modern JavaScript builds, files are bundled up so they can be served in an optimized manner in the browsers. It is assumed by developers that future JavaScript—like ES8 will be transpiled (changed from future JavaScript to current JavaScript) appropriately by a tool like Babel or TypeScript. Sometimes there is an issue where files are not transpiled which would cause issues in browsers who don't support all the latest features (e.g. IE11).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://medium.com/better-programming/check-your-javascript-bundles-for-browser-support-d769c1fca4c" rel="nofollow"&gt;Check out my blog post about this topic.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Speed: this check shouldn't take more than a few seconds&lt;/li&gt;
&lt;li&gt;Flexibility: choose which files should be checked&lt;/li&gt;
&lt;li&gt;Compability: choose the ES version you want to target. &lt;code&gt;ES5&lt;/code&gt; is…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ali-kamalizade/es-check-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;This action uses itself as part of a &lt;a href="https://github.com/ali-kamalizade/es-check-action/blob/master/.github/workflows/continuous-integration.yml"&gt;GitHub Workflow&lt;/a&gt; #recursion&lt;/p&gt;

</description>
      <category>actionshackathon</category>
      <category>javascript</category>
      <category>github</category>
      <category>ci</category>
    </item>
    <item>
      <title>Angular: How to Include Scripts Only in Production</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Wed, 29 Apr 2020 14:28:24 +0000</pubDate>
      <link>https://dev.to/alidev/angular-how-to-include-scripts-only-in-production-4ni8</link>
      <guid>https://dev.to/alidev/angular-how-to-include-scripts-only-in-production-4ni8</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/angular-how-to-include-scripts-only-in-production-a08580823029?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KMVNkVSI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/720/1%2Ak0_HgnEUyErKnERH8Udrsg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Load scripts on websites only when you need them&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/angular-how-to-include-scripts-only-in-production-a08580823029?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>angular</category>
      <category>programming</category>
      <category>technology</category>
    </item>
    <item>
      <title>How to Prevent CSS Animation From Running on Page Load</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Thu, 16 Apr 2020 12:02:19 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-prevent-css-animation-from-running-on-page-load-56b5</link>
      <guid>https://dev.to/alidev/how-to-prevent-css-animation-from-running-on-page-load-56b5</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-prevent-css-animation-from-running-on-page-load-ced731144af7?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4xqyw5nq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2600/0%2As64gCpGF_v4GqG5i" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Load your pages as you intend them to be shown&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-prevent-css-animation-from-running-on-page-load-ced731144af7?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>css</category>
      <category>softwareengineering</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Use Custom Angular Form Controls in Jest and Storybook</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Fri, 20 Mar 2020 00:44:30 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-use-custom-angular-form-controls-in-jest-and-storybook-1hkg</link>
      <guid>https://dev.to/alidev/how-to-use-custom-angular-form-controls-in-jest-and-storybook-1hkg</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-use-custom-angular-form-controls-in-jest-and-storybook-6479e52b7636?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oECDdHPD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2600/0%2A5q8PloYuDfH2_diK" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Develop highly functional and beautiful custom form controls in Angular&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-use-custom-angular-form-controls-in-jest-and-storybook-6479e52b7636?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>softwareengineering</category>
      <category>ux</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Debug Angular Ivy Apps in the Browser Console With ng</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Mon, 24 Feb 2020 01:34:04 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-debug-angular-ivy-apps-in-the-browser-console-with-ng-nei</link>
      <guid>https://dev.to/alidev/how-to-debug-angular-ivy-apps-in-the-browser-console-with-ng-nei</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-debug-angular-ivy-apps-in-the-browser-console-with-ng-950facb490c7?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e6jn6bs6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2600/1%2A3FynclD83RxpBjsRFbftMg.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inspecting and modifying Angular components directly in the browser&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-debug-angular-ivy-apps-in-the-browser-console-with-ng-950facb490c7?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>javascript</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Work With JSON in the Command Line and Terminal With FX</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Mon, 17 Feb 2020 11:44:35 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-work-with-json-in-the-command-line-and-terminal-with-fx-488o</link>
      <guid>https://dev.to/alidev/how-to-work-with-json-in-the-command-line-and-terminal-with-fx-488o</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-work-with-json-in-the-command-line-and-terminal-with-fx-58ac3cef8e04?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ffs-Jtll--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2048/1%2An7hiw-rddd3pK13I7VCrHA.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Easily handle pipe curl requests and handle the JSON in your terminal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-work-with-json-in-the-command-line-and-terminal-with-fx-58ac3cef8e04?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>terminal</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Why You Should Write Small Git Commits</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Tue, 11 Feb 2020 00:07:44 +0000</pubDate>
      <link>https://dev.to/alidev/why-you-should-write-small-git-commits-2koc</link>
      <guid>https://dev.to/alidev/why-you-should-write-small-git-commits-2koc</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/why-you-should-write-small-git-commits-c9a042737aa6?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zSRRVd1F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2600/1%2A0rhFthwFYv_OD1jWBXRCAQ.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Small commits that are easy to understand are the backbone of great software development&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/why-you-should-write-small-git-commits-c9a042737aa6?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>technology</category>
      <category>javascript</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How to Avoid Tedious CSS and XPath Queries in End-to-End and Component Tests</title>
      <dc:creator>Ali Kamalizade</dc:creator>
      <pubDate>Fri, 07 Feb 2020 03:04:13 +0000</pubDate>
      <link>https://dev.to/alidev/how-to-avoid-tedious-css-and-xpath-queries-in-end-to-end-and-component-tests-836</link>
      <guid>https://dev.to/alidev/how-to-avoid-tedious-css-and-xpath-queries-in-end-to-end-and-component-tests-836</guid>
      <description>&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-avoid-tedious-css-and-xpath-queries-in-end-to-end-and-component-tests-732c5b86f2f6?source=rss-3a534b5053e6------2"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_C1ULW0s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2600/0%2AjNu6u0bH5uvLmdzr" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five tips to improve your front-end tests&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/better-programming/how-to-avoid-tedious-css-and-xpath-queries-in-end-to-end-and-component-tests-732c5b86f2f6?source=rss-3a534b5053e6------2"&gt;Continue reading on Better Programming »&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>programming</category>
      <category>tdd</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
