<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Luis Aviles</title>
    <link>https://luixaviles.com/</link>
    <description>Recent content on Luis Aviles</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 16 Jun 2026 11:00:00 +0000</lastBuildDate>
    <atom:link href="https://luixaviles.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to Speed Up Test Coverage Using Multi-Agent Orchestration</title>
      <link>https://luixaviles.com/posts/autonomous-coding-nebubox-parallel-subagents/</link>
      <pubDate>Tue, 16 Jun 2026 11:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/posts/autonomous-coding-nebubox-parallel-subagents/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://luixaviles.com/posts/autonomous-coding-nebubox-unit-test-generation/&#34;&gt;Part 1 of this series&lt;/a&gt;, we looked at how to run a single, autonomous AI agent inside a &lt;strong&gt;Nebubox&lt;/strong&gt; container to generate unit tests, patch bugs in our CLI code, and open a Pull Request.&lt;/p&gt;&#xA;&lt;p&gt;That sequential, closed-loop workflow works great for smaller modules. But as codebases grow, forcing a single agent to write extensive test suites line-by-line can be slow, hitting context window limits and increasing execution time.&lt;/p&gt;&#xA;&lt;p&gt;To solve this, we can scale our workflow horizontally. In this post, let&amp;rsquo;s look at how the &lt;a href=&#34;https://antigravity.google/product/antigravity-cli&#34;&gt;Antigravity CLI&lt;/a&gt; can orchestrate &lt;strong&gt;parallel subagents&lt;/strong&gt; to divide and conquer test generation concurrently, merging their work before running verification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Safely Automate Unit Test Generation Using AI Sandboxes</title>
      <link>https://luixaviles.com/posts/autonomous-coding-nebubox-unit-test-generation/</link>
      <pubDate>Wed, 10 Jun 2026 10:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/posts/autonomous-coding-nebubox-unit-test-generation/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://luixaviles.com/2026/02/run-ai-coding-tools-safely-docker-nebubox/&#34;&gt;previous post&lt;/a&gt;, I introduced &lt;code&gt;nebubox&lt;/code&gt;, a CLI tool I built to run AI coding tools (like Claude Code, Antigravity, and Codex) safely inside Docker containers. By restricting the filesystem access of the agent to just your project directory, you get the productivity gains of autonomous coding without risking your SSH keys, env files, or other local repositories.&lt;/p&gt;&#xA;&lt;p&gt;Today, we are taking this setup a step further to run a fully autonomous coding workflow. In this post, let&amp;rsquo;s look at how to orchestrate the &lt;a href=&#34;https://antigravity.google/docs/cli-overview&#34;&gt;Antigravity CLI&lt;/a&gt; to inspect our code, write missing unit tests, verify them against Vitest, and open a GitHub Pull Request (all safely contained within a sandboxed environment).&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Run AI Coding Tools Safely Inside Docker Containers</title>
      <link>https://luixaviles.com/2026/02/run-ai-coding-tools-safely-docker-nebubox/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2026/02/run-ai-coding-tools-safely-docker-nebubox/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using AI coding agents (Claude Code, Gemini CLI, Codex CLI) to refactor and write code across different projects. They work well. But every time I ran one code agent, I kept asking myself: can this agent run autonomously without risking access to my SSH keys, my cloud credentials, or even other projects content?&lt;/p&gt;&#xA;&lt;p&gt;I wanted the productivity gains without the risk, so I built &lt;a href=&#34;https://github.com/luixaviles/nebubox&#34;&gt;nebubox&lt;/a&gt;: a CLI tool that runs each AI coding agent inside a Docker container where only your project directory is visible. You get full capabilities but a strict limit on what files the agent can reach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Practical Guide to use Context Caching</title>
      <link>https://luixaviles.com/2025/12/a-practical-guide-to-use-context-caching-gemini/</link>
      <pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2025/12/a-practical-guide-to-use-context-caching-gemini/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/a-practical-guide-context-caching-gemini.jpg&#34;/&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve built an LLM-based application, you&amp;rsquo;ve likely faced &amp;ldquo;The Context Problem&amp;rdquo;: providing enough information to the model to get a good answer often means sending massive amounts of text with &lt;em&gt;every single request&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In a recent project, &lt;a href=&#34;https://electobot.info&#34;&gt;ElectoBot&lt;/a&gt;, I built a tool to help citizens compare government plans from different presidential candidates. Each candidate has a dense PDF/Markdown document detailing their proposals. Sending 50 pages of &amp;ldquo;Government Plan&amp;rdquo; text for every user question? That&amp;rsquo;s slow and expensive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Gemini Pro Vision for Image Processing using Angular and NestJS</title>
      <link>https://luixaviles.com/2024/03/using-gemini-pro-vision-image-processing-using-angular-nestjs/</link>
      <pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2024/03/using-gemini-pro-vision-image-processing-using-angular-nestjs/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/gemini-pro-vision_angular-nestjs.jpg&#34;/&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;In a previous &lt;a href=&#34;https://luixaviles.com/2024/03/build-gemini-chatbot-with-angular-and-nestjs/&#34;&gt;post&lt;/a&gt;, I explained the main aspects of building a full-stack web application from scratch and explored current capabilities for chat and text generation of Gemini models.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we will use the same Nx workspace as a starting point and will add the ability to process images using the Gemini Pro vision model.&lt;/p&gt;&#xA;&lt;p&gt;If you want to code along this tutorial, make sure to clone or download the code using the tag &lt;code&gt;v0.1&lt;/code&gt;, which can be found &lt;a href=&#34;https://github.com/luixaviles/gemini-angular-nestjs/releases/tag/v0.1&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build your First Gemini Powered Chatbot with Angular and NestJS</title>
      <link>https://luixaviles.com/2024/03/build-gemini-chatbot-with-angular-and-nestjs/</link>
      <pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2024/03/build-gemini-chatbot-with-angular-and-nestjs/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/gemini-angular-nestjs.jpg&#34;/&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The rise of Natural Language Processing(NLP) has opened up exciting opportunities for developers, allowing them to create engaging and interactive chatbot applications.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we will guide you through the process of creating a chatbot application from scratch using the TypeScript programming language. The project will be based on the latest version of the Angular framework for the frontend and we will use NestJS for creating the API services through the existing Gemini API capabilities for chat and text generation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build your First PaLM API Powered Chatbot with Angular</title>
      <link>https://luixaviles.com/2023/08/build-your-first-palm-api-chatbot-angular/</link>
      <pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2023/08/build-your-first-palm-api-chatbot-angular/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/chatbot-angular-palm-api.jpg&#34;/&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Chatbot applications have become a trend in the past months due to the introduction of natural language processing technologies. And the good news for developers is we can start using these powerful APIs to build our applications.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we will understand how to build a Chatbot that leverages the&lt;a href=&#34;https://ai.google/discover/palm2/&#34;&gt; Google PaLM&lt;/a&gt; API along with the Angular framework.&#xA;The frontend application will allow the users to ask questions and receive comprehensive answers through PaLM&amp;rsquo;s natural language processing technology.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Create Standalone Components in Angular</title>
      <link>https://luixaviles.com/2023/05/how-create-standalone-components-angular/</link>
      <pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2023/05/how-create-standalone-components-angular/</guid>
      <description>&lt;p&gt;Angular has become one of the most popular frameworks to build web applications today.&#xA;One of the key features of the framework is its the component-based architecture, which allows coding best practices as the modularity and reusability. Each Angular component consists of a template, a TypeScript class and metadata.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we will dive deeper into standalone components and we will explore the anatomy of an application based on them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Manage Breakpoints using BreakpointObserver in Angular</title>
      <link>https://luixaviles.com/2022/04/how-to-manage-breakpoints-breakpointobserver-angular/</link>
      <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2022/04/how-to-manage-breakpoints-breakpointobserver-angular/</guid>
      <description>&lt;p&gt;Defining Breakpoints is important when you start working with Responsive Design and most of the time they&amp;rsquo;re created using CSS code. For example:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;media&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;600px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, the text size value will be 12px and this value will be changed to 14px when the viewport gets changed to a smaller screen(a maximum width of 600px).&lt;/p&gt;&#xA;&lt;p&gt;That solution works. However, what about if you need to &lt;em&gt;listen&lt;/em&gt; for certain breakpoints to perform changes in your application? This may be needed to configure third-party components, processing events or any other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Build a Slideshow App Using Swiper and Angular</title>
      <link>https://luixaviles.com/2022/03/how-to-build-a-slideshow-app-using-swiper-and-angular/</link>
      <pubDate>Wed, 23 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2022/03/how-to-build-a-slideshow-app-using-swiper-and-angular/</guid>
      <description>&lt;p&gt;Google Slides and Microsoft PowerPoint are the most popular options to build presentations nowadays. However, have you ever considered having a custom tool where you can use your web development knowledge to create beautiful slides?&lt;/p&gt;&#xA;&lt;p&gt;In this post, we will build a slideshow app with the ability to render one slide at a time using Angular, Swiper, and a little bit of CSS.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h2&gt;&#xA;&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll need to have installed the following tools in your local environment:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Update the Application Title based on Routing Changes in Angular</title>
      <link>https://luixaviles.com/2022/02/update-app-title-routing-changes-angular/</link>
      <pubDate>Wed, 16 Feb 2022 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2022/02/update-app-title-routing-changes-angular/</guid>
      <description>&lt;p&gt;Have you tried to update the document&amp;rsquo;s title of your application? Maybe you&amp;rsquo;re thinking that applying interpolation should be enough:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{{myCustomTitleVariable}}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;root-app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;root-app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That solution is not going to work since the &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; element is outside of the scope of the Angular application. In fact, the root component of your app is within &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tag and the title is part of the &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; element.&lt;/p&gt;&#xA;&lt;p&gt;Luckily, Angular provides the &lt;a href=&#34;https://angular.io/api/platform-browser/Title&#34;&gt;Title&lt;/a&gt; service with the methods to read the current title of the application and a &lt;code&gt;setTitle(title)&lt;/code&gt; to update that value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Migrate from Protractor to Cypress?</title>
      <link>https://luixaviles.com/2022/01/why-migrate-from-protractor-to-cypress/</link>
      <pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2022/01/why-migrate-from-protractor-to-cypress/</guid>
      <description>&lt;p&gt;Great memories come to my mind when I read about Protractor. I remember those days when I was working actively using the &lt;a href=&#34;https://angularjs.org/&#34;&gt;AngularJS&lt;/a&gt; framework to build Single-Page Applications, and Protractor was the most viable option for writing E2E(End-to-End) tests.&lt;/p&gt;&#xA;&lt;p&gt;In fact, &lt;a href=&#34;https://github.com/angular/protractor&#34;&gt;Protractor&lt;/a&gt; has been created in 2013 when AngularJS was the most popular web framework and it allowed run tests through the web application in a real browser, along with interaction commands to mimic the user behavior.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular CDK: Sorting Items using Drag &amp; Drop</title>
      <link>https://luixaviles.com/2021/11/angular-cdk-sorting-items-using-drag-and-drop/</link>
      <pubDate>Tue, 23 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/11/angular-cdk-sorting-items-using-drag-and-drop/</guid>
      <description>&lt;p&gt;There is no doubt that we are living in an era where the interactivity of your web application is a very important part of retaining your users.&lt;/p&gt;&#xA;&lt;p&gt;For example, it&amp;rsquo;s very common to find requirements to perform a Drag and Drop operation inside of your web application: Upload image files, prioritize activities (think in a Task Board) or even sort elements in your web app.&lt;/p&gt;&#xA;&lt;p&gt;Luckily, the Angular Team has implemented a library to enable the creating of drag-and-drop interfaces in your Angular application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to integrate Web Components using Lit in Angular</title>
      <link>https://luixaviles.com/2021/10/how-to-integrate-web-components-using-lit-in-angular/</link>
      <pubDate>Thu, 14 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/10/how-to-integrate-web-components-using-lit-in-angular/</guid>
      <description>&lt;p&gt;In previous posts, I explained how to create projects in &lt;a href=&#34;https://lit.dev&#34;&gt;Lit&lt;/a&gt; and TypeScript from scratch. Also, I covered different topics about Web Components, and Single-Page Applications, using them.&lt;/p&gt;&#xA;&lt;p&gt;In this tutorial, I&amp;rsquo;ll explain the needed steps to integrate these Web Components in Angular. Spoiler: You can find the source code of a demo project at the end.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/lit-web-components-angular.png&#34;/&gt;&#xA;    &lt;figcaption&gt;Integration of Web Components using Lit and Angular&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h2&gt;&#xA;&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll need to have installed the following tools in your local environment:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started with Here Maps and Web Components using Lit</title>
      <link>https://luixaviles.com/2021/08/getting-started-with-here-maps-and-web-components-using-lit/</link>
      <pubDate>Thu, 05 Aug 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/08/getting-started-with-here-maps-and-web-components-using-lit/</guid>
      <description>&lt;p&gt;In the past months, I have been actively working on the development of geolocation-oriented solutions in web applications. My experience has been good so far, taking into account the availability of modern tools and libraries, with a wide range of features that even enable the use of interactive maps and location services.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I&amp;rsquo;ll explain how to integrate &lt;a href=&#34;https://developer.here.com/develop/javascript-api&#34;&gt;Here Maps&lt;/a&gt; through web components, using &lt;a href=&#34;https://lit.dev/&#34;&gt;Lit&lt;/a&gt; and TypeScript, in just a few steps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Solve CORS using a Proxy Server and Koa</title>
      <link>https://luixaviles.com/2021/08/how-to-solve-cors-using-proxy-server-koa/</link>
      <pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/08/how-to-solve-cors-using-proxy-server-koa/</guid>
      <description>&lt;p&gt;No matter how much experience you have in software development, you&amp;rsquo;ve likely had to deal with the CORS problem.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that there are now new and different ways to solve this issue, from using an extension for your favorite browser, to defining a custom solution.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;ll explain how to implement a basic Proxy Server using Node.js so that you can use it even if you&amp;rsquo;re using a different programming language for your main application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Implement an Event Bus in TypeScript</title>
      <link>https://luixaviles.com/2021/07/how-to-implement-event-bus-typescript/</link>
      <pubDate>Fri, 16 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/07/how-to-implement-event-bus-typescript/</guid>
      <description>&lt;p&gt;In real-world software development, design patterns offer reusable solutions and, most prominently, make code easier to maintain.&lt;/p&gt;&#xA;&lt;p&gt;The Event Bus idea is generally associated with the &lt;a href=&#34;https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern&#34;&gt;Publish-subscribe pattern&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Publish–subscribe is a messaging pattern through which message senders, called &amp;ldquo;publishers&amp;rdquo;, do not program the messages to be sent directly to specific receivers, called &amp;ldquo;subscribers&amp;rdquo;. Instead, they classify published messages without knowledge of which subscribers sent them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In other words, an Event Bus can be considered as a global way to transport messages or events to make them accessible from any place within the application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drawing HTML Elements upwards/downwards dynamically in the Screen</title>
      <link>https://luixaviles.com/2021/07/drawing-html-elements-upwards-downwards-dynamically-in-the-screen/</link>
      <pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/07/drawing-html-elements-upwards-downwards-dynamically-in-the-screen/</guid>
      <description>&lt;p&gt;A couple of weeks ago, I start writing a custom component that allows rendering a list of other components dynamically. One of its features shows the list up or down, according to the space available in the viewport (or the screen).&lt;/p&gt;&#xA;&lt;p&gt;A solution to this type of problem may require the use of the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API&#34;&gt;web APIs&lt;/a&gt; available through the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Window&#34;&gt;Window&lt;/a&gt; interface.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-web-apis&#34;&gt;The Web APIs&lt;/h2&gt;&#xA;&lt;p&gt;API comes from &lt;em&gt;Application Programming Interface&lt;/em&gt;, and according to &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Introduction&#34;&gt;MDN&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Handle Time Zones using DateTime and Luxon</title>
      <link>https://luixaviles.com/2021/07/how-to-handle-timezones-datetime-luxon/</link>
      <pubDate>Wed, 07 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/07/how-to-handle-timezones-datetime-luxon/</guid>
      <description>&lt;p&gt;Raise your hand if you ever had issues dealing with time zones or even if you asked about &amp;ldquo;How to convert a Date object to another timezone in JavaScript&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In my personal experience, this kind of requirement can become a big problem for developers if the date-handling-related concepts are not clearly understood or the right tools are not used.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-dates-and-time-zones-in-javascript&#34;&gt;Using Dates and Time Zones in JavaScript&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s suppose you got a date representation from an external API and you need to convert the date to any desired time zone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web Components communication using an Event Bus</title>
      <link>https://luixaviles.com/2021/06/web-components-communication-event-bus-typescript/</link>
      <pubDate>Wed, 16 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/06/web-components-communication-event-bus-typescript/</guid>
      <description>&lt;p&gt;Imagine you&amp;rsquo;re building a Single Page Application using Web Components only, you got several pages, configured the routes and you need to handle general events or actions.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s when you start to think about potential solutions as well: Maybe It&amp;rsquo;s time to adding state management to the application? Is it a good time to build a &amp;ldquo;custom&amp;rdquo; solution? Or what about using some design patterns in this case?&lt;/p&gt;&#xA;&lt;p&gt;The answers to these questions will depend on the complexity of the current scenario, the experience of the developers, or mainly on the opinions of the team. It is clear that there is no absolute answer!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lit 2.0 Released: Building fast and lightweight Web Components</title>
      <link>https://luixaviles.com/2021/05/lit-2-building-fast-lightweight-web-components/</link>
      <pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/05/lit-2-building-fast-lightweight-web-components/</guid>
      <description>&lt;p&gt;In the past months, I&amp;rsquo;ve been using Web Components actively to build single-page applications. It has been a great experience so far, not only because I learned a lot about the latest web standards but also because the web applications ended up being quite fast.&lt;/p&gt;&#xA;&lt;p&gt;The Web Component development story is not something new. In fact, it has been nearly three years since &lt;a href=&#34;https://lit-element.polymer-project.org/guide&#34;&gt;LitElement&lt;/a&gt; has been introduced as a base class to build Web Components using JavaScript with the addition of great support of TypeScript. On other hand, &lt;a href=&#34;https://lit-html.polymer-project.org/guide&#34;&gt;lit-html&lt;/a&gt; has been released almost four years ago as a way to create small and fast HTML templates in JavaScript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Share styles in Web Components with LitElement and TypeScript</title>
      <link>https://luixaviles.com/2021/05/share-styles-web-components-litelement-typescript/</link>
      <pubDate>Thu, 06 May 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/05/share-styles-web-components-litelement-typescript/</guid>
      <description>&lt;p&gt;Have you ever thought about the benefits of code reuse?&lt;/p&gt;&#xA;&lt;p&gt;It is common to try to find techniques or strategies that allow us to save time and reuse existing code for the implementation of our applications. However, let&amp;rsquo;s start by first understanding what we mean by &lt;a href=&#34;https://en.wikipedia.org/wiki/Code_reuse&#34;&gt;code reuse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Code reuse, also called software reuse, is the use of existing software, or software knowledge, to build new software, following the reusability principles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Observe Property Changes with LitElement and TypeScript</title>
      <link>https://luixaviles.com/2021/03/how-observe-property-changes-litelement-typescript/</link>
      <pubDate>Wed, 03 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/03/how-observe-property-changes-litelement-typescript/</guid>
      <description>&lt;p&gt;In a previous post, I explained &lt;a href=&#34;https://labs.thisdot.co/blog/litelement-properties-property-vs-internalproperty&#34;&gt;how to manage LitElement properties&lt;/a&gt; using &lt;code&gt;@property&lt;/code&gt; and &lt;code&gt;@internalProperty&lt;/code&gt; decorators through TypeScript. Also, I explained how LitElement manages the declared properties and when it triggers an update cycle, causing the component to re-render its defined template.&lt;/p&gt;&#xA;&lt;p&gt;A couple of days ago I saw an interesting question regarding these property changes on a developer website:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How to observe @property changes in a LitElement component?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In this article, I will explain how you can observe(and &amp;ldquo;react&amp;rdquo; maybe?) these properties considering the lifecycle of a LitElement component.&lt;/p&gt;</description>
    </item>
    <item>
      <title>LitElement properties: @property vs @internalProperty</title>
      <link>https://luixaviles.com/2021/02/litelement-properties-property-vs-internalproperty/</link>
      <pubDate>Wed, 17 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/02/litelement-properties-property-vs-internalproperty/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lit-element.polymer-project.org&#34;&gt;LitElement&lt;/a&gt; is an excellent alternative to build lightweight web applications since it’s based on the Web Components standard, and with the help of TypeScript, we can see more possibilities to build Web Components faster with a good developer experience.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I will explain practically the use of &lt;code&gt;@property&lt;/code&gt; and &lt;code&gt;@internalProperty&lt;/code&gt; decorators using a TypeScript implementation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s suppose you&amp;rsquo;re building a small application that needs to display a list of &lt;em&gt;Users&lt;/em&gt;. You can select any of them and then other details should be displayed, in this case, the &lt;em&gt;Address&lt;/em&gt; information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Handle Events with LitElement and TypeScript</title>
      <link>https://luixaviles.com/2021/02/how-to-handle-events-litelement/</link>
      <pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/02/how-to-handle-events-litelement/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;&#34;&gt;previous posts&lt;/a&gt;, I covered different topics about Web Components and Single-Page Applications using &lt;a href=&#34;https://lit-element.polymer-project.org/&#34;&gt;LitElement&lt;/a&gt; and &lt;a href=&#34;https://www.typescriptlang.org/&#34;&gt;TypeScript&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s very known that LitElement has added a good support to manage &lt;em&gt;Properties&lt;/em&gt; and &lt;em&gt;Events&lt;/em&gt; to write powerful web components. In this post, we&amp;rsquo;ll focus on event handling using a LitElement-based component as a use case using the TypeScript language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-custom-component&#34;&gt;The Custom Component&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start the Web Component creation using the &lt;a href=&#34;https://stackblitz.com/&#34;&gt;Stackblitz&lt;/a&gt; editor and define the initial code for our first component:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Setup environment variables using JSON files with Rollup and TypeScript</title>
      <link>https://luixaviles.com/2021/02/how-to-setup-env-variables-json-rollup-typescript/</link>
      <pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/02/how-to-setup-env-variables-json-rollup-typescript/</guid>
      <description>&lt;p&gt;In previous posts, I explained &lt;a href=&#34;&#34;&gt;How to setup a TypeScript project using Rollup.js&lt;/a&gt; from scratch. Also, I covered &lt;a href=&#34;&#34;&gt;How to Serve a Single Page Application(SPA) using Rollup.js and Web Dev Server&lt;/a&gt; step by step. Then, I covered &lt;a href=&#34;&#34;&gt;How to Build a LitElement Application&lt;/a&gt; with &lt;a href=&#34;&#34;&gt;Rollup.js&lt;/a&gt; and TypeScript.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I&amp;rsquo;ll take the result of those tutorials as a starting point to set up environment variables using JSON files.&lt;/p&gt;&#xA;&lt;h2 id=&#34;environment-variables&#34;&gt;Environment Variables&lt;/h2&gt;&#xA;&lt;p&gt;Reading environment variables is very common in software development. It&amp;rsquo;s a helpful way to cover security concerns and even provides the convenience to set configuration parameters in your application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Build a LitElement Application with Rollup.js and TypeScript</title>
      <link>https://luixaviles.com/2021/01/how-to-build-litelement-application-rollup-typescript/</link>
      <pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2021/01/how-to-build-litelement-application-rollup-typescript/</guid>
      <description>&lt;p&gt;In previous posts, I explained &lt;a href=&#34;&#34;&gt;How to setup a TypeScript project using Rollup.js&lt;/a&gt; from scratch. Also, I covered &lt;a href=&#34;&#34;&gt;How to Serve a Single Page Application(SPA) using Rollup.js and Web Dev Server&lt;/a&gt; step by step.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I&amp;rsquo;ll take the result of both tutorials as a starting point to integrate &lt;a href=&#34;https://lit-element.polymer-project.org/&#34;&gt;LitElement&lt;/a&gt; into the game to write the first Web Components through the latest web standards and powerful TypeScript features.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-setup&#34;&gt;Project Setup&lt;/h2&gt;&#xA;&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll need to have installed the following tools in your local environment:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Serve a Single Page Application(SPA) using Rollup.js and Web Dev Server</title>
      <link>https://luixaviles.com/2020/12/how-to-server-single-page-application-spa-rollup-web-dev-server/</link>
      <pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/how-to-server-single-page-application-spa-rollup-web-dev-server/</guid>
      <description>&lt;p&gt;In a previous post, I explained &lt;a href=&#34;&#34;&gt;How to setup a TypeScript project using Rollup.js&lt;/a&gt;. In that article, I covered the necessary steps to have a &lt;a href=&#34;https://github.com/luixaviles/typescript-rollup/tree/01-setup-ts-rollup&#34;&gt;Project Setup&lt;/a&gt; ready to generate a build using TypeScript and Rollup configurations.&lt;/p&gt;&#xA;&lt;p&gt;So let&amp;rsquo;s take that project as a starting point to serve a Single-page Application using modern web tools.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-spa-single-page-application&#34;&gt;What is a SPA (Single-page Application)?&lt;/h2&gt;&#xA;&lt;p&gt;According to &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Glossary/SPA&#34;&gt;MDN Documentation&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An SPA (Single-page application) is a web app implementation that loads only a single web document, and then updates the body content of that single document via JavaScript APIs such as XMLHttpRequest and Fetch when different content is to be shown.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to setup a TypeScript project using Rollup.js</title>
      <link>https://luixaviles.com/2020/12/how-to-setup-typescript-project-using-rollup/</link>
      <pubDate>Tue, 29 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/how-to-setup-typescript-project-using-rollup/</guid>
      <description>&lt;p&gt;A couple of months ago I started to work through web standards, Rollup.js, and TypeScript. It’s my first experience using Rollup although I’ve been working with TypeScript on different projects and using it along with frameworks like Angular.&lt;/p&gt;&#xA;&lt;p&gt;So far it has been a good experience in terms of performance and tools integration, so I decided to write a quick tutorial to have a setup ready using it.&lt;/p&gt;&#xA;&lt;figure style=&#34;text-align:center&#34;&gt;&#xA;   &lt;img src=&#34;https://luixaviles.com/assets/images/posts/rollup-typescript.png&#34;/&gt;&#xA;   &lt;figcaption&gt;Rollup with TypeScript&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-is-rollup&#34;&gt;What is Rollup?&lt;/h2&gt;&#xA;&lt;p&gt;In words of the official &lt;a href=&#34;https://rollupjs.org/guide/en/&#34;&gt;documentation&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding flatMap and mergeMap operators in RxJS with TypeScript</title>
      <link>https://luixaviles.com/2020/12/understanding-flatmap-mergemap-operators-rxjs-typescript/</link>
      <pubDate>Wed, 16 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/understanding-flatmap-mergemap-operators-rxjs-typescript/</guid>
      <description>&lt;p&gt;RxJS is a popular library nowadays and it’s used in a wide range of applications. And it even becomes part of popular frameworks like Angular.&lt;/p&gt;&#xA;&lt;p&gt;It’s not unknown that the library comes with many powerful functions that can be used together to solve complex problems with only a few lines of code. A couple of days ago I saw the following question on a developer website:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How to use &lt;em&gt;flatMap&lt;/em&gt; operator to process a list of data as an &lt;em&gt;Observable&lt;/em&gt; and then process the data one by one as &lt;em&gt;Observables&lt;/em&gt; too?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Form Handling using TypeScript and RxJS</title>
      <link>https://luixaviles.com/2020/12/form-handling-using-typescript-rxjs/</link>
      <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/form-handling-using-typescript-rxjs/</guid>
      <description>&lt;p&gt;RxJS and TypeScript are becoming more and more popular these days. It&amp;rsquo;s feasible to use both technologies alone or even as part of any JavaScript library or framework.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s an interesting fact to know that the RxJS project is using TypeScript actively and it helped to find bugs when the library was migrating from JavaScript.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we&amp;rsquo;ll see a &lt;em&gt;Reactive&lt;/em&gt; approach to handle HTML forms using TypeScript and RxJS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding switchMap and forkJoin operators in RxJS with TypeScript</title>
      <link>https://luixaviles.com/2020/12/understanding-switchmap-forkjoin-operators-rxjs-typescript/</link>
      <pubDate>Wed, 09 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/understanding-switchmap-forkjoin-operators-rxjs-typescript/</guid>
      <description>&lt;p&gt;RxJS is a library with more than 22 Million downloads per week. It&amp;rsquo;s widely used in the JavaScript world and it has great support of TypeScript. There&amp;rsquo;s no need to say much about it to understand how important is today.&lt;/p&gt;&#xA;&lt;p&gt;Some days ago I saw the following question in a developer forum:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is there a way to handle a list of &lt;em&gt;Observables&lt;/em&gt; and get the final result of them once they&amp;rsquo;re completed?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Route Guards, Actions and Web Components with TypeScript</title>
      <link>https://luixaviles.com/2020/12/using-route-guards-actions-web-components-typescript/</link>
      <pubDate>Tue, 08 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/using-route-guards-actions-web-components-typescript/</guid>
      <description>&lt;p&gt;Imagine you are building a Single Page Application using Web Components only, you already defined a set of views, configured the routes and you&amp;rsquo;re handling the authentication very well.&lt;/p&gt;&#xA;&lt;p&gt;Suddenly you understand that you must manage autorizations to decide to render a view or not. For example, you need to manage the &lt;code&gt;/admin&lt;/code&gt; and &lt;code&gt;/analytics&lt;/code&gt; route for authorized users only.&lt;/p&gt;&#xA;&lt;p&gt;In a previous post, I explained how to define rules to avoid &lt;a href=&#34;&#34;&gt;loading pages for restricted users&lt;/a&gt; using the Navigation Lifecycle functions from &lt;a href=&#34;https://vaadin.com/router&#34;&gt;Vaadin Router&lt;/a&gt;. In fact, a solution based on the use of these functions works very well for simple and isolated views.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Form Validation using RxJS and TypeScript</title>
      <link>https://luixaviles.com/2020/12/form-validation-using-rxjs-typescript/</link>
      <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/form-validation-using-rxjs-typescript/</guid>
      <description>&lt;p&gt;In a previous post, I explained how you can handle your HTML Forms using RxJS and TypeScript.&lt;/p&gt;&#xA;&lt;p&gt;Talking in a &lt;em&gt;Reactive&lt;/em&gt; approach, I will show you some techniques to validate an HTML Form using static types and the help of some powerful RxJS operators.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-html-form&#34;&gt;The HTML Form&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s define the following HTML Form as a starting point.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;wrapper&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;form&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;novalidate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;form-group needs-validation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Email address&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;invalid-feedback&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;form-group needs-validation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Password&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;invalid-feedback&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;disabled&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;btn btn-primary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Submit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The previous markup is using &lt;a href=&#34;https://getbootstrap.com/&#34;&gt;Bootstrap&lt;/a&gt; which is a powerful CSS framework that contains several styles ready to use. At the same time, we can rely on &lt;a href=&#34;https://getbootstrap.com/docs/4.0/components/forms/#validation&#34;&gt;Bootstrap Validation&lt;/a&gt; to provide actionable feedback to the users as the next screen shows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing Web Components with Karma, Mocha, Chai and TypeScript</title>
      <link>https://luixaviles.com/2020/12/testing-web-components-karma-mocha-chai-typescript/</link>
      <pubDate>Tue, 01 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/12/testing-web-components-karma-mocha-chai-typescript/</guid>
      <description>&lt;p&gt;Imagine yourself building an electric car.&lt;/p&gt;&#xA;&lt;p&gt;By design, this car has an electric motor, a thermal system(cooling), a battery, a charge port, a transmission, and other &lt;strong&gt;units&lt;/strong&gt;. Every part of the system has requirements that must be met before being attached to the other components.&lt;/p&gt;&#xA;&lt;p&gt;If any of these components has not been properly tested, it may happen that when testing the whole car it does not work or has faults in its operation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RxJS 7 and Beyond: What to Expect and Prepare For</title>
      <link>https://luixaviles.com/2020/11/rxjs-7-and-beyond-what-to-expect/</link>
      <pubDate>Mon, 30 Nov 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/11/rxjs-7-and-beyond-what-to-expect/</guid>
      <description>&lt;p&gt;Some days ago I&amp;rsquo;ve been part of the &lt;a href=&#34;https://modernweb.podbean.com/&#34;&gt;Modern Web Podcast&lt;/a&gt; along with &lt;a href=&#34;https://twitter.com/ladyleet&#34;&gt;Tracy Lee&lt;/a&gt; and we interviewed to &lt;a href=&#34;https://twitter.com/BenLesh&#34;&gt;Ben Lesh&lt;/a&gt;, the author of &lt;a href=&#34;https://rxjs.dev/&#34;&gt;RxJS&lt;/a&gt;(A JavaScript library for reactive programming using Observables), on the most recent updates for RxJS 7 and it&amp;rsquo;s targeted release date.&lt;/p&gt;&#xA;&lt;p&gt;It was an opportunity to understand how RxJS has been improved over time, how TypeScript helped to identify bugs and improved the project itself.&lt;/p&gt;&#xA;&lt;p&gt;It worths mentioning that RxJS 7 has been around a year now. Actually, the v7 &lt;em&gt;alpha&lt;/em&gt; was released a year ago and the first &lt;em&gt;beta&lt;/em&gt; came out 7 months ago. Let&amp;rsquo;s discover the upcoming features and breaking changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing Web Components with Cypress and TypeScript(E2E)</title>
      <link>https://luixaviles.com/2020/10/testing-web-components-cypress-typescript/</link>
      <pubDate>Wed, 28 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/10/testing-web-components-cypress-typescript/</guid>
      <description>&lt;p&gt;In my previous posts, I covered a wide range of topics about LitElement and TypeScript. Then I created a &lt;a href=&#34;https://github.com/luixaviles/litelement-website&#34;&gt;Single Page Application&lt;/a&gt; based on Web Components.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s deep dive over this project to understand how to add the End-to-End(E2E) testing capability using &lt;a href=&#34;https://www.cypress.io/&#34;&gt;Cypress&lt;/a&gt; and TypeScript.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-shadow-dom&#34;&gt;The Shadow DOM&lt;/h2&gt;&#xA;&lt;p&gt;The Shadow DOM API is about web components encapsulation and that means it keeps the styling, markup, and behavior hidden and separate from other code on the page. This API provides a way to attach a separated DOM to an element.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web Components Integration using LitElement and TypeScript</title>
      <link>https://luixaviles.com/2020/10/web-components-integration-using-litelement-typescript/</link>
      <pubDate>Mon, 05 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/10/web-components-integration-using-litelement-typescript/</guid>
      <description>&lt;p&gt;In my previous posts, I explained how to create a project based on LitElement and TypeScript from scratch. Also, I added the routing management and explained how to have more control over the navigation lifecycle.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s deep dive over the Web Components creation to understand how to reuse them, respond to any property change, and dispatch custom events.&lt;/p&gt;&#xA;&lt;h2 id=&#34;writing-a-web-component&#34;&gt;Writing a Web Component&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s define a base template to display an overview of every blog post in our web application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Navigation Lifecycle using Vaadin Router and LitElement</title>
      <link>https://luixaviles.com/2020/09/navigation-lifecycle-router-litelement/</link>
      <pubDate>Mon, 21 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/09/navigation-lifecycle-router-litelement/</guid>
      <description>&lt;p&gt;In a previous post, I explained the main aspects to add a Routing Management with LitElement and TypeScript to build a SPA(&lt;em&gt;Single Page Application&lt;/em&gt;). It&amp;rsquo;s important to note that a good understanding of the routing library you selected to work through can help you to have more control over the navigation lifecycle.&lt;/p&gt;&#xA;&lt;h2 id=&#34;navigation-lifecycle&#34;&gt;Navigation Lifecycle&lt;/h2&gt;&#xA;&lt;p&gt;Creating and configuring routes into your Web Application is only one part of the &lt;em&gt;Routing Management&lt;/em&gt; story.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Routing Management with LitElement and TypeScript</title>
      <link>https://luixaviles.com/2020/09/routing-management-with-litelement-typescript/</link>
      <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/09/routing-management-with-litelement-typescript/</guid>
      <description>&lt;p&gt;Most modern frameworks provide a routing mechanism to handle the navigation between views within the application. This is a critical feature for a Single Page Application(SPA).&lt;/p&gt;&#xA;&lt;p&gt;This is where the &lt;strong&gt;Route Matching&lt;/strong&gt; comes in mind. When a SPA relies on a router, you&amp;rsquo;ll need to define a set of &lt;em&gt;routes&lt;/em&gt; with the supported locations.&lt;/p&gt;&#xA;&lt;p&gt;In the JavaScript world, most of &lt;em&gt;route&lt;/em&gt; definitions are inspired by &lt;a href=&#34;https://expressjs.com/en/guide/routing.html&#34;&gt;Express Routing&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;routes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;posts&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;posts/:id&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;about&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this example, the application will render a view associated with the specific location that &amp;ldquo;matches&amp;rdquo; with the &lt;code&gt;path&lt;/code&gt; value.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting started with LitElement and TypeScript</title>
      <link>https://luixaviles.com/2020/08/getting-started-with-litelement-typescript/</link>
      <pubDate>Wed, 26 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/08/getting-started-with-litelement-typescript/</guid>
      <description>&lt;p&gt;The use of powerful frameworks and libraries is very widespread nowadays. We can name Angular, React.js, Vue, Svelte, among with others.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s hard to imagine to build a web application without the use of any of those component-based frameworks. For these options, the components are reusable and configurable &lt;em&gt;widgets&lt;/em&gt;, they are able to provide a custom behavior and styling, and they&amp;rsquo;re used as building blocks for the application.&lt;/p&gt;&#xA;&lt;p&gt;Can we share a component between these frameworks? The short answer is no. Every framework/library has a custom API definition to build components and they are not interoperable with each other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build Your First Voice-Driven Web Application</title>
      <link>https://luixaviles.com/2020/07/build-your-first-voice-driven-web-app/</link>
      <pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/07/build-your-first-voice-driven-web-app/</guid>
      <description>&lt;style&gt;&#xA;.videoWrapper {&#xA;    position: relative;&#xA;    padding-bottom: 56.25%; /* 16:9 */&#xA;    padding-top: 25px;&#xA;    height: 0;&#xA;    margin-bottom: 10px;&#xA;}&#xA;.videoWrapper iframe {&#xA;    position: absolute;&#xA;    top: 0;&#xA;    left: 0;&#xA;    width: 100%;&#xA;    height: 100%;&#xA;}&#xA;&#xA;.videoContainer {&#xA;  margin-bottom: 20px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;Some time ago I had the goal to implement a web application to be able to write what I&amp;rsquo;m speaking automatically and allow to execute actions through my voice commands. I thought it was a good idea to provide a way to listen to some feedback from the application too. After doing quick research I discovered a couple of Web APIs to solve this problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why you should learn JavaScript?</title>
      <link>https://luixaviles.com/2020/06/why-you-should-learn-javascript/</link>
      <pubDate>Mon, 08 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2020/06/why-you-should-learn-javascript/</guid>
      <description>&lt;script src = &#34;https://cdnjs.cloudflare.com/ajax/libs/d3/5.16.0/d3.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src = &#34;/scripts/javascript-race.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src = &#34;/scripts/developer-type.js&#34;&gt;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;   .fa-cookie {&#xA;      color: #CCA853;&#xA;   }&#xA;   .fa-cookie-bite {&#xA;      color: #CCA853;&#xA;   }&#xA;   text{&#xA;      font-size: 16px;&#xA;      font-family: &#34;Open Sans&#34;, &#34;sans-serif&#34;;&#xA;   }&#xA;    text.title{&#xA;       height: 0;&#xA;       font-size: 24px;&#xA;       font-weight: 500;&#xA;    }&#xA;    text.subTitle{&#xA;       font-weight: 500;&#xA;       fill: #777777;&#xA;    }&#xA;    text.caption{&#xA;       font-weight: 400;&#xA;       font-size: 14px;&#xA;       fill: #777777;&#xA;       z-index: 10;&#xA;    }&#xA;    text.label{&#xA;       font-weight: 600;&#xA;    }&#xA;&#xA;    text.valueLabel{&#xA;       font-weight: 300;&#xA;    }&#xA;&#xA;    text.yearText{&#xA;       font-size: 64px;&#xA;       font-weight: 700;&#xA;       opacity: 0.25;&#xA;    }&#xA;    .tick text {&#xA;       fill: #777777;&#xA;    }&#xA;    .xAxis .tick:nth-child(2) text {&#xA;       text-anchor: start;&#xA;    }&#xA;    .tick line {&#xA;       shape-rendering: CrispEdges;&#xA;       stroke: #dddddd;&#xA;    }&#xA;    .tick line.origin{&#xA;       stroke: #aaaaaa;&#xA;    }&#xA;    path.domain{&#xA;       display: none;&#xA;    }&#xA;    .javascriptrace {&#xA;       display: flex;&#xA;       justify-content: center;&#xA;       margin-bottom: 20px;&#xA;    }&#xA;    &#xA;    #chartcontainer {&#xA;      display: flex;&#xA;      justify-content: center;&#xA;      margin-bottom: 20px;&#xA;    }&#xA;    #developertype {&#xA;       display: flex;&#xA;       justify-content: center;&#xA;    }&#xA;    #reset {&#xA;      border: 2px solid black;&#xA;      background-color: white;&#xA;      color: black;&#xA;      padding: 5px;&#xA;      font-size: 12px;&#xA;      cursor: pointer;&#xA;      border-color: #2196F3;&#xA;      color: dodgerblue;&#xA;    }&#xA;    .jsracecontainer {&#xA;       display: flex;&#xA;       align-items:center;&#xA;       flex-direction: column;&#xA;    }&#xA;&#xA;    @media only screen and (max-width: 600px) {&#xA;      text{&#xA;         font-size: 11px;&#xA;      }&#xA;    }&#xA;   &lt;/style&gt;&#xA;&lt;figure class=&#34;jsracecontainer&#34;&gt;&#xA;   &lt;button id=&#34;reset&#34;&gt;Restart Animation&lt;/button&gt;&#xA;   &lt;div id=&#34;chartcontainer&#34;&gt;&#xA;      &lt;div id=&#34;javascriptrace&#34;&gt;&lt;/div&gt;&#xA;   &lt;/div&gt;&#xA;   &lt;figcaption&gt;Animation: JavaScript&#39;s domain 2015 - 2020&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;JavaScript is undoubtedly one of the most popular languages and it adapts with great ease to various use cases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Real Time Apps with TypeScript: Integrating Web Sockets, Node &amp; Angular</title>
      <link>https://luixaviles.com/2018/01/real-time-apps-with-typescript-integrating-web-sockets-node-angular/</link>
      <pubDate>Tue, 09 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2018/01/real-time-apps-with-typescript-integrating-web-sockets-node-angular/</guid>
      <description>&lt;p&gt;Some time ago I implemented a simple chat application using TypeScript language only. The main goal was to write a demo to explain how you can use this programming language on the client side and on the server. The client app is using latest Angular features.&lt;/p&gt;&#xA;&lt;p&gt;In this post I will show you how I implemented the app from scratch.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;    &lt;a href=&#34;https://typescript-chat.firebaseapp.com&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://luixaviles.com/assets/images/posts/typescript-chat/typescript-chat.gif&#34;&gt;&lt;/a&gt;&#xA;    &lt;figcaption&gt;Demo: TypeScript Chat Application&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;what-is-a-real-time-application&#34;&gt;What is a Real Time Application?&lt;/h3&gt;&#xA;&lt;p&gt;According this &lt;a href=&#34;https://en.wikipedia.org/wiki/Real-time_web&#34;&gt;Wikipedia definition&lt;/a&gt;, a real-time application allows information to be received &lt;strong&gt;as soon as it is published&lt;/strong&gt;, rather than requiring a source to be checked periodically for updates. Therefore, this kind of app should give a feeling to users that events and actions happen immediately.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Releasing v1.0.0 of a Socket.io-TypeScript Chat Project</title>
      <link>https://luixaviles.com/2017/09/releasing-socket-io-typescript-chat-project/</link>
      <pubDate>Mon, 04 Sep 2017 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2017/09/releasing-socket-io-typescript-chat-project/</guid>
      <description>&lt;p&gt;Some months ago I implemented a simple chat version using TypeScript language only.&#xA;This project was presented in a local conference, explaining some reasons to use TypeScript language in your backend and frontend projects.&lt;/p&gt;&#xA;&lt;p&gt;Today I&amp;rsquo;m happy to announce that my &lt;a href=&#34;https://github.com/luixaviles&#34;&gt;GitHub repository&lt;/a&gt; is fully updated and version &lt;code&gt;1.0.0&lt;/code&gt; has been released.&lt;/p&gt;&#xA;&lt;h3 id=&#34;live-demo&#34;&gt;Live Demo&lt;/h3&gt;&#xA;&lt;p&gt;Open at least two browser windows and try the application here: &lt;a href=&#34;https://typescript-chat.firebaseapp.com&#34;&gt;https://typescript-chat.firebaseapp.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;source-code&#34;&gt;Source Code&lt;/h3&gt;&#xA;&lt;p&gt;Source code available here: &lt;a href=&#34;https://github.com/luixaviles/socket-io-typescript-chat&#34;&gt;https://github.com/luixaviles/socket-io-typescript-chat&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Local Environment to Develop Angular Applications</title>
      <link>https://luixaviles.com/2017/08/setup-local-environment-angular-apps/</link>
      <pubDate>Fri, 04 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://luixaviles.com/2017/08/setup-local-environment-angular-apps/</guid>
      <description>&lt;figure&gt;&#xA;  &lt;img src=&#34;https://luixaviles.com/assets/images/posts/code-computer.jpeg&#34;/&gt;&#xA;  &lt;figcaption&gt;Photo by Blake Connally on Unsplash&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Angular is definitely in a great stage and every new version comes with awesome features. The &lt;a href=&#34;https://github.com/angular&#34;&gt;project&lt;/a&gt; itself comes with great tools that will allow you to start to develop web applications from scratch.&lt;/p&gt;&#xA;&lt;p&gt;A common question, from the people that I know, is about the tools they need in their environments before starting to develop with the framework, and that’s why I decided to write this post.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
