<?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: Alex Arroyo</title>
    <description>The latest articles on DEV Community by Alex Arroyo (@alexaldearroyo).</description>
    <link>https://dev.to/alexaldearroyo</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%2F1153786%2F0851b9f8-003c-4765-95ac-200da489b641.png</url>
      <title>DEV Community: Alex Arroyo</title>
      <link>https://dev.to/alexaldearroyo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexaldearroyo"/>
    <language>en</language>
    <item>
      <title>The Importance of Pseudocode: Developing a Web App Using the Principles of Atomic Design</title>
      <dc:creator>Alex Arroyo</dc:creator>
      <pubDate>Thu, 16 Nov 2023 15:51:00 +0000</pubDate>
      <link>https://dev.to/alexaldearroyo/the-importance-of-pseudocode-developing-a-web-app-using-the-principles-of-atomic-design-56ai</link>
      <guid>https://dev.to/alexaldearroyo/the-importance-of-pseudocode-developing-a-web-app-using-the-principles-of-atomic-design-56ai</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rWf3PI4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/abbw9er999z39jsvjfng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rWf3PI4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/abbw9er999z39jsvjfng.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the realm of modern web development, crafting interactive user experiences is paramount, and JavaScript stands as the pivotal tool for such dynamic interactions. For developers, an intimate understanding of JavaScript's capabilities is a prerequisite, even before leveraging the abstraction layers provided by frameworks like React and Angular.&lt;/p&gt;

&lt;p&gt;To go deeper into this topic, I will present in this article a case study of a task management web app I made called "Priorities Online".&lt;/p&gt;

&lt;p&gt;"Priorities Online" will be handy here to exemplify JavaScript web app development, integrating user interaction and dynamic content manipulation without the overhead of heavy frameworks. This article will delve into the intricate process of building this application, leveraging the concept of Atomic Design, which is proposed in line with the fundamental principles of object-oriented programming (OOP).&lt;/p&gt;

&lt;p&gt;To make our web app, before starting to write code, I sketch a visual frame of how it could look and then I plan a layout using this methodology that I write in a markdown program like Obsidian, where I write pseudo code and plan each part of the app beforehand within its respective structural frame.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Wireframes to Functional Outline
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hnfTTFdl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lvui4ucx4izchxkot2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hnfTTFdl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5lvui4ucx4izchxkot2d.png" alt="Image description" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To start off, I want to have at least a visual clue of how the app will be, that is why I usually start to develop my apps creating some wireframes for Figma. Once I have those, I proceed to outline the app's functionality in Obsidian or other note taking app with markdown functionalities using the Atomic Design principles to organize the components systematically. This meticulous planning phase is pivotal, forming a clear pathway from design to development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atomic Design: A Modular Approach
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n3i7r-En--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dn1nd8ar7zdy4qlq2fgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n3i7r-En--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dn1nd8ar7zdy4qlq2fgm.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Atomic Design, &lt;a href="https://atomicdesign.bradfrost.com/table-of-contents/]"&gt;a concept I came across online&lt;/a&gt; years ago, is an insightful paradigm for decomposing complex interfaces into fundamental building blocks within a hierarchical structure. It borrows from the natural world, where sentient beings can be broken down into organisms, molecules, and atoms, all residing within a specific environment (this being a term I've personally added to the original layout). In this manner, Atomic Design offers a logical blueprint for constructing a web app with a clear separation of concerns, facilitating maintenance and scalability. This conceptual approach is coupled with the principles of encapsulation, inheritance and compartmentalization used in OOP in general.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment: The Single Page Application
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k1VY7c7B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zyt7xpldr5t0li4xmxeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k1VY7c7B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zyt7xpldr5t0li4xmxeg.png" alt="Image description" width="696" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Priorities Online" breathes within a single-page application environment, with the index file orchestrating the overall structure. It encompasses two organisms that facilitate user navigation and action zones: the "sideBar" for navigation and the "contentBox", where the action happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organisms: Dynamic UI Elements
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--84wkAlgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09syry3c18yu47npl7nz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--84wkAlgq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09syry3c18yu47npl7nz.png" alt="Image description" width="696" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The organisms, such as the "sideBar" and "contentBox," are the cornerstone components that define the spatial and functional organization of the web app. The sidebar acts as a navigation hub, while the content box is the central area for user interaction and task management. They house various molecules, which are combinations of atomic elements working together to execute a particular task module.&lt;/p&gt;

&lt;h3&gt;
  
  
  Molecules and Atoms: Reusable Components
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C2g-Vong--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5c4aarg2cw7mrktt24fb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C2g-Vong--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5c4aarg2cw7mrktt24fb.png" alt="Image description" width="732" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Molecules are combinations of various elements that perform a particular function—like a task "molecule" that includes a button to add tasks. As shown, molecules can be conceptualized as a parallel to "modules" in real code. Atoms can be considered as the smallest reusable units, like buttons or input boxes, etc. These design units are leveraged across different modules, ensuring a consistent and maintainable codebase. In the Priorities Online app, an example of an atom would be the "Add Task" button, which resides in the task module (or molecule).&lt;/p&gt;

&lt;p&gt;I also like to utilize the concept of "particle" (as a broader sense than atom) as an analogue to classes of prototypes, which have properties (or "subatomic particles") shared all across.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing the Vision: Pseudocode to Execution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4cGRz7Yp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xlswk6jv915y5y3dfj4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4cGRz7Yp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xlswk6jv915y5y3dfj4r.png" alt="Image description" width="753" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having set out all the pseudocode with the Atomic Design in mind in obsidian, and having all the structure in place, I translated the pseudocode to real javascript (and jQuery) code, which was now easier as we have delineated already how the UI elements interact within the DOM. And through the app's functionality is rooted in JavaScript, its pseudocode serves as its architectural blueprint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The environment is the single page application (index.html)&lt;/li&gt;
&lt;li&gt;The organisms are the main divs within the "environment": sideBar and contentBox.&lt;/li&gt;
&lt;li&gt;The molecules are the different modules used throughout the app: priorities.js, projects.js, tasks.js, etc.&lt;/li&gt;
&lt;li&gt;There are two particles or classes for "projects" and "tasks" defined in the tasks and priorities modules.&lt;/li&gt;
&lt;li&gt;The atoms are the different objects also shared throughout the app or locally. Many of them are defined with classes for styling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this article I hope to have illustrated how a systematic approach to design and development can yield a robust approach for abstraction thus simplifying the development process.&lt;/p&gt;

&lt;p&gt;For the code itself, you can check it &lt;a href="https://github.com/alexaldearroyo/priorities_online"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://drive.google.com/file/d/1UqfLnKA_zuLfgZUaFBrT_0z-aDxDtwhr/view?usp=share_link]"&gt;Here is the pseudocode&lt;/a&gt;.&lt;br&gt;
And &lt;a href="https://alexaldearroyo.github.io/priorities_online/"&gt;here you can see the app live&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>pseudcode</category>
      <category>obsidian</category>
      <category>figma</category>
    </item>
    <item>
      <title>Building an Installable Desktop App with Python, PyQt, and Py2app</title>
      <dc:creator>Alex Arroyo</dc:creator>
      <pubDate>Tue, 05 Sep 2023 07:58:35 +0000</pubDate>
      <link>https://dev.to/alexaldearroyo/building-an-installable-desktop-app-with-python-pyqt-and-py2app-j83</link>
      <guid>https://dev.to/alexaldearroyo/building-an-installable-desktop-app-with-python-pyqt-and-py2app-j83</guid>
      <description>&lt;p&gt;Desktop applications remain a popular choice for many utilities and tools. With Python being one of the most versatile and widely used programming languages, combining it with a GUI library like PyQt can yield robust applications. In this tutorial, we’ll go through the process of creating a simple installable desktop app using Python, PyQt, and Py2app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Installing Python and pip
&lt;/h3&gt;

&lt;p&gt;Ensure you have both Python and pip installed. If not, here’s how you can do it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download and install Python from the official Python website.&lt;/li&gt;
&lt;li&gt;Pip is included by default with Python 3.4 and later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Installing necessary libraries
&lt;/h3&gt;

&lt;p&gt;With pip in place, install the necessary libraries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;py2app PyQt5 pyinstaller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating Your Desktop Application:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Writing &lt;code&gt;app.py&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Here’s a simple PyQt application that displays a window with a greeting message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PyQt5.QtWidgets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;QMainWindow&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QMainWindow&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setWindowTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello PyQt'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QLabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Hello, world!'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setAlignment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Qt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AlignCenter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setCentralWidget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'__main__'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec_&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Creating &lt;code&gt;setup.py&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This script informs py2app how to package your application. Here’s a basic example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;setuptools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;

&lt;span class="n"&gt;APP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'app.py'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;DATA_FILES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;OPTIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s"&gt;'argv_emulation'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;'packages'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'PyQt5'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;APP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data_files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DATA_FILES&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'py2app'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;setup_requires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'py2app'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Making Your Python GUI App Executable:
&lt;/h2&gt;

&lt;p&gt;Execute the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python setup.py py2app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will bundle your PyQt application into a standalone executable. Once finished, you’ll find a .app bundle in the &lt;code&gt;dist&lt;/code&gt; directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Your Desktop App Installable:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install Node.js and npm
&lt;/h3&gt;

&lt;p&gt;You can download and install both from the official Node.js website.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install &lt;code&gt;create-dmg&lt;/code&gt; using npm
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; create-dmg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Create an installable dmg for macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;create-dmg &lt;span class="s1"&gt;'dist/YourApp.app'&lt;/span&gt; destination_path/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YourApp.app&lt;/code&gt; with your actual application name and &lt;code&gt;destination_path/&lt;/code&gt; with where you want the .dmg file to be saved.&lt;/p&gt;




&lt;p&gt;And voila! You now have an installable desktop app created with Python and PyQt. This process provides a straightforward method to develop and distribute GUI applications for macOS. Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mastering VS Code: The Power of Keyboard Shortcuts</title>
      <dc:creator>Alex Arroyo</dc:creator>
      <pubDate>Tue, 05 Sep 2023 07:56:38 +0000</pubDate>
      <link>https://dev.to/alexaldearroyo/mastering-vs-code-the-power-of-keyboard-shortcuts-5g4</link>
      <guid>https://dev.to/alexaldearroyo/mastering-vs-code-the-power-of-keyboard-shortcuts-5g4</guid>
      <description>&lt;p&gt;Every professional tool has its nuances that allow for an optimized and efficient workflow. One of the many reasons developers love Visual Studio Code (VS Code) is its robust set of keyboard shortcuts. Keyboard shortcuts not only speed up your workflow but also give you a feel of fluency and mastery over your tools. In this article, we’ll dive deep into some of my most frequently used keyboard shortcuts in VS Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Keyboard Shortcuts?
&lt;/h2&gt;

&lt;p&gt;Before we delve into the specifics, let’s address the importance of using keyboard shortcuts. By eliminating the need to constantly reach for your mouse or to navigate through menus, you’re not only saving precious seconds but also maintaining your flow state. Over time, these saved seconds add up, leading to significant productivity gains.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Most-Used VS Code Shortcuts
&lt;/h2&gt;

&lt;p&gt;Below are the (MacOS) shortcuts that I find myself using the most in my daily workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Navigating between tabs and terminal:&lt;/strong&gt; &lt;code&gt;⌘ +&lt;/code&gt;` &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formatting code:&lt;/strong&gt; &lt;code&gt;⇧ + ⌥ +&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commenting out code:&lt;/strong&gt; &lt;code&gt;⌘ + /&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indenting and outdenting code:&lt;/strong&gt; &lt;code&gt;⌘ + ]&lt;/code&gt; / &lt;code&gt;⌘ + [&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moving lines of code:&lt;/strong&gt; &lt;code&gt;⌥ + ↑&lt;/code&gt; / &lt;code&gt;⌥ ↓&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copying an entire line:&lt;/strong&gt; &lt;code&gt;⇧ + ⌥ + ↑&lt;/code&gt; / &lt;code&gt;⇧ + ⌥ ↓&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deleting a section or line:&lt;/strong&gt; &lt;code&gt;⌘ + ⇧ + K&lt;/code&gt; / &lt;code&gt;⌘ + X&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starting a new line:&lt;/strong&gt; &lt;code&gt;⌘ + Enter&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jumping to the start or end of a document:&lt;/strong&gt; &lt;code&gt;⌘ + ↑&lt;/code&gt; / &lt;code&gt;⌘ + ↓&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Folding a function or section:&lt;/strong&gt; &lt;code&gt;⌥ + ⌘ + [&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unfolding a function or section:&lt;/strong&gt; &lt;code&gt;⌥ + ⌘ + ]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessing quick actions and commands:&lt;/strong&gt; &lt;code&gt;⌘ + ⇧ + P&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigating to settings:&lt;/strong&gt; &lt;code&gt;⌘ + ,&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dive Deeper
&lt;/h2&gt;

&lt;p&gt;The beauty of VS Code is its flexibility. If the above shortcuts don’t align with your personal preferences or if you have a unique set of commands you frequently access, you can always customize your shortcuts. Just head over to settings &amp;gt; keyboard shortcuts in VS Code to explore and set your own combinations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Mastering keyboard shortcuts in VS Code (or any tool, for that matter) is akin to mastering a musical instrument. The more you practice, the more fluent and efficient you become. Embrace these shortcuts, and watch your productivity soar!&lt;/p&gt;

&lt;p&gt;I hope this article encourages you to dive deeper into the functionalities of VS Code and truly harness its power. Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Learn How to Use Git &amp; GitHub: A Guide for Absolute Beginners</title>
      <dc:creator>Alex Arroyo</dc:creator>
      <pubDate>Tue, 05 Sep 2023 07:51:29 +0000</pubDate>
      <link>https://dev.to/alexaldearroyo/learn-how-to-use-git-github-a-guide-for-absolute-beginners-j18</link>
      <guid>https://dev.to/alexaldearroyo/learn-how-to-use-git-github-a-guide-for-absolute-beginners-j18</guid>
      <description>&lt;p&gt;Embarking on Your Coding Journey? You’ve probably heard of Git &amp;amp; GitHub. Dive in, and let’s demystify these essential tools for every developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Git &amp;amp; GitHub?
&lt;/h2&gt;

&lt;p&gt;Version control is paramount for collaborative projects and individual projects alike. Git helps you manage changes to your code, while GitHub provides an online platform to share, collaborate, and version-control your repositories. Together, they’re an unbeatable combination for any developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Git
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setting Up Your Identity
&lt;/h3&gt;

&lt;p&gt;It’s essential Git knows who’s making changes. Let’s set that up:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your terminal or command prompt.&lt;/li&gt;
&lt;li&gt;Enter:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   git config --global user.name "Your Name"
   git config --global user.email "your.email@example.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Ensure the email used is the same as your GitHub account for a seamless experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Creating Your First Repository
&lt;/h3&gt;

&lt;p&gt;Before diving deep, check if a repository exists in your current directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls -a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you spot a &lt;code&gt;.git&lt;/code&gt; directory, a repository already exists!&lt;/p&gt;

&lt;p&gt;Otherwise, initialize a new one with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Syncing with GitHub
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setting Up Your GitHub Repository
&lt;/h3&gt;

&lt;p&gt;Head over to the &lt;a href="https://github.com/"&gt;GitHub website&lt;/a&gt; and create a new repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting the Dots
&lt;/h3&gt;

&lt;p&gt;Now, let’s link your local repository (on your machine) with the remote one on GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin https://github.com/your_username/repository_name.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run into trouble? Don’t fret!&lt;/p&gt;

&lt;p&gt;Check if a git repository already exists connected to the directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that’s the case, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modify the URL for origin:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git remote set-url origin https://github.com/your_username/repository_name.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Or perhaps, you’d like to start afresh by removing origin and adding it again:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git remote remove origin
  git remote add origin https://github.com/your_username/repository_name.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Alternatively, you can try a different name other than origin:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git remote add another_name https://github.com/your_username/another_repository.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Naming conventions can help streamline your workflow. Choose names that resonate with your project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Staying Updated with Git
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tracking Changes
&lt;/h3&gt;

&lt;p&gt;Add and commit changes within your repository. This helps Git understand and track your modifications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For all files:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git add .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;For a specific file:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git add file_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Commit the change with a descriptive message:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git commit -m "Your descriptive message here"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating GitHub
&lt;/h3&gt;

&lt;p&gt;Every time you modify your code, it’s a good practice to push changes to GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If it’s your first push:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;For subsequent pushes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Cheat Sheet:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add file_name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "descriptive message"
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Determined to Learn More?
&lt;/h2&gt;

&lt;p&gt;Delve deeper into the world of GitHub with its &lt;a href="https://docs.github.com/en"&gt;official documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extra Help:
&lt;/h3&gt;

&lt;p&gt;If you’re just starting out and only making simple pushes on your own, you might want to check out the VisualGit script, which automates the processes described in this guide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/alexaldearroyo/visualgit/"&gt;You can find it here.&lt;/a&gt;&lt;/p&gt;

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