<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Ricardo Aragão - Blog]]></title><description><![CDATA[Software Engineer, Entrepreneur, IT Consultant]]></description><link>https://www.ricardoaragao.com.br/</link><image><url>https://www.ricardoaragao.com.br/favicon.png</url><title>Ricardo Aragão - Blog</title><link>https://www.ricardoaragao.com.br/</link></image><generator>Ghost 5.17</generator><lastBuildDate>Fri, 24 Apr 2026 12:13:23 GMT</lastBuildDate><atom:link href="https://www.ricardoaragao.com.br/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Why Use Blaze with Meteor: A Powerful Combination for Web Development]]></title><description><![CDATA[<p>When it comes to building web applications, choosing the right front-end framework is essential. In the case of <a href="https://meteor.com">Meteor</a>, <a href="blaze.org">Blaze</a> is a natural choice. Blaze, Meteor&apos;s built-in front-end templating engine, offers a range of advantages that make it an excellent companion for Meteor development. In this article, we</p>]]></description><link>https://www.ricardoaragao.com.br/why-use-blaze-with-meteor-a-powerful-combination-for-web-development/</link><guid isPermaLink="false">647566e3fb12980001281f41</guid><category><![CDATA[Meteor]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[NodeJS]]></category><category><![CDATA[Framework]]></category><dc:creator><![CDATA[Ricardo Aragão]]></dc:creator><pubDate>Tue, 30 May 2023 03:08:17 GMT</pubDate><media:content url="https://www.ricardoaragao.com.br/content/images/2023/05/blaze-logo-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://www.ricardoaragao.com.br/content/images/2023/05/blaze-logo-1.png" alt="Why Use Blaze with Meteor: A Powerful Combination for Web Development"><p>When it comes to building web applications, choosing the right front-end framework is essential. In the case of <a href="https://meteor.com">Meteor</a>, <a href="blaze.org">Blaze</a> is a natural choice. Blaze, Meteor&apos;s built-in front-end templating engine, offers a range of advantages that make it an excellent companion for Meteor development. In this article, we will delve into the reasons why you should use Blaze with Meteor, highlighting its simplicity, low learning curve, reactivity, component-based approach, and ready-to-use templates. We will also compare Blaze with other popular front-end frameworks to showcase its unique strengths.</p><ol><li><strong>Simplicity</strong>: Blaze was designed with simplicity in mind. Its syntax is similar to HTML, making it intuitive and accessible for developers familiar with web development fundamentals. By leveraging Blaze, you can quickly create dynamic user interfaces without the need for extensive configuration or complex build processes. The straightforward nature of Blaze allows developers to focus on building features rather than spending time on setup and boilerplate code.</li><li><strong>Low Learning Curve</strong>: Blaze&apos;s minimalistic approach makes it easy to learn, especially for developers who are new to web development or those transitioning from traditional templating engines. Its simplicity and resemblance to HTML reduce the learning curve, enabling developers to become productive with Blaze in a short amount of time. This ease of adoption makes it an ideal choice for teams looking to onboard new developers quickly or for individuals who want to rapidly prototype their ideas.</li><li><strong>Reactivity</strong>: Blaze is built on Meteor&apos;s reactive data system, which enables automatic UI updates when underlying data changes. This reactivity feature eliminates the need for manual DOM manipulation, making the development process more efficient. With Blaze, you can create real-time user interfaces that respond to changes in data without writing additional code. This reactivity extends to both the server and client sides, providing a seamless end-user experience.</li><li><strong>Components</strong>: Blaze embraces a component-based approach, allowing developers to build reusable and modular UI components. With the use of Blaze components, you can encapsulate the structure, behavior, and styling of individual parts of your application. This modular design promotes code reusability, maintainability, and scalability, making it easier to manage and update your UI components as your application grows.</li><li><strong>Ready-to-Use Templates</strong>: Meteor&apos;s integration with Blaze offers a vast collection of ready-to-use templates and UI components. The Meteor community has developed numerous Blaze packages that provide pre-built templates for common functionalities such as authentication, forms, data visualization, and more. Leveraging these templates not only accelerates development but also ensures consistent and well-tested UI components for your application.</li><li><strong>Blaze vs Other Front-end Frameworks</strong>: Compared to other popular front-end frameworks like React or Vue.js, Blaze offers a different set of advantages. While React and Vue.js excel in complex and dynamic UI scenarios, Blaze shines in its simplicity and seamless integration with Meteor. Blaze&apos;s tight integration with Meteor&apos;s reactivity system and its built-in templating engine make it a natural choice for Meteor developers who want a straightforward and productive development experience.</li></ol><p>Conclusion: Blaze, when used in conjunction with Meteor, provides a powerful combination for web development. Its simplicity, low learning curve, reactivity, component-based approach, and availability of ready-to-use templates make it an attractive choice for building applications with Meteor. While other front-end frameworks have their strengths, Blaze&apos;s tight integration with Meteor&apos;s ecosystem and its focus on simplicity set it apart. Whether you&apos;re a beginner or an experienced developer, considering Blaze as your front-end framework with Meteor can lead to rapid development, enhanced reactivity, and streamlined UI component management.</p>]]></content:encoded></item><item><title><![CDATA[Meteor - The best choice]]></title><description><![CDATA[<p>The <strong><a href="https://www.meteor.com">Meteor</a></strong> is a full-stack open-source framework to create Web, Mobile, and Desktop applications.</p><p>The main characteristic of the Meteor is using the <strong>same language in the Backend and in the Frontend</strong>, JavaScript (NodeJS). Due to the new wave of frontend frameworks, the developers need to learn more than one</p>]]></description><link>https://www.ricardoaragao.com.br/meteor-the-best-choice/</link><guid isPermaLink="false">614bff4002a0e90001d456ef</guid><category><![CDATA[Meteor]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Ricardo Aragão]]></dc:creator><pubDate>Wed, 29 Sep 2021 04:59:56 GMT</pubDate><media:content url="https://www.ricardoaragao.com.br/content/images/2021/09/Meteor.png" medium="image"/><content:encoded><![CDATA[<img src="https://www.ricardoaragao.com.br/content/images/2021/09/Meteor.png" alt="Meteor - The best choice"><p>The <strong><a href="https://www.meteor.com">Meteor</a></strong> is a full-stack open-source framework to create Web, Mobile, and Desktop applications.</p><p>The main characteristic of the Meteor is using the <strong>same language in the Backend and in the Frontend</strong>, JavaScript (NodeJS). Due to the new wave of frontend frameworks, the developers need to learn more than one language, besides all concepts of software engineering. Then, to use the same language in the entire project is a blessing.</p><p>Only one language in back and front is great, but to can create a <strong>Web, Mobile and Desktop application with the same code base</strong> is awesome. With Meteor, you can save time and money of course. </p><p>Despite using the same language, <strong>client and server can be decoupled</strong>. Meteor has its own communication protocol between client and server, the DDP (Data Distribute Protocol). It gives a lot of goods to developers, as a default reactivity of data from the database (<strong>MongoDB</strong>). DDP works inside a Web socket, then you can connect to it using any language which supports Web socket.</p><p>An important variable to define how useful a framework can be is how many and how good are its tools (libs). &#xA0;How about using any NPM Package? Yes, you <strong>can import any NPM package</strong> to the front or backend. The power of this is infinite.</p><p>I&apos;ve been working with many languages and frameworks along with my professional life, and I ever hate losing hours or days to set up my development environment. It doesn&apos;t make sense. Meteor <strong>can be installed in Windows, Linux, and Mac using just one command line</strong> of NPM (you need NodeJS installed, of course, that is simple to install too). After Meteor is installed, you just need to start your application.</p><p>To <strong>deploy</strong>, you have some directions to follow: </p><ul><li>use a specific Meteor host (Meteor Cloud/Galaxy, Scalingo, NodeChef); </li><li>use a NodeJS host; </li><li>create your own server (Docker, Meteor-Up, Passenger). </li></ul><p>The first way has many advantages and is good for beginners. They usually have a free tier to tests. </p><p>The <strong>documentation is huge</strong>, and the <strong>community is active</strong>. There are tutorials for each type of frontend technology you want to test. Meteor supports the most used frontend frameworks (<strong>React, Vue, Blaze, Svelte, and Angular</strong>).</p><p>If you or your team knows JavaScript, starting with Meteor is very simple, and the results come fast. <strong>Save your time!</strong></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Meteor with Docker Compose]]></title><description><![CDATA[I just want to show how to prepare your Meteor application to be deployed using a Docker Compose in your own production environment.]]></description><link>https://www.ricardoaragao.com.br/meteor-with-docker-compose/</link><guid isPermaLink="false">612133c97c3dbb00011f01c7</guid><category><![CDATA[Devops]]></category><category><![CDATA[Deploy]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Meteor]]></category><category><![CDATA[NodeJS]]></category><dc:creator><![CDATA[Ricardo Aragão]]></dc:creator><pubDate>Sun, 22 Aug 2021 00:20:36 GMT</pubDate><media:content url="https://www.ricardoaragao.com.br/content/images/2021/08/nick-karvounis-SmIM3m8f3Pw-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://www.ricardoaragao.com.br/content/images/2021/08/nick-karvounis-SmIM3m8f3Pw-unsplash.jpg" alt="Meteor with Docker Compose"><p>Meteor is a great Node framework. I love it. Mainly because it is very easy how to prepare a development environment. Just a simple command line. You don&apos;t need to worry about the version of Node, database, anything. But when you go to put in production, you have two options: use a specialized host to meteor (<a href="https://www.meteor.com/cloud">Meteor Cloud</a>, <a href="https://sclng.io/r/69c5d25a65208f4e">Scalingo</a>, <a href="https://www.nodechef.com/meteorhosting">NodeChef</a>, etc.) or build your own environment.</p><p>I think there are pros and cons to each scenario, and I don&apos;t want to discuss them in this article. Here, I just want to show how to prepare your Meteor application to be deployed using a Docker Compose in your own production environment.</p><p>With Docker Compose, you can have sure that your application is ready to go to production. You can run it in your own machine, in a server with Docker compose, or in a Docker Swarm cluster.</p><p>Now I&apos;m going to stop talking and let&apos;s get down to business.</p><p><em>I don&apos;t want to teach about Docker concepts, so I&apos;ll show a Dockerfile ready, and I&apos;ll comment on every step I did.</em></p><h2 id="creating-a-meteor-simple-application">Creating a Meteor simple application</h2><p>We&apos;ll use a default Meteor Blaze application to complete the task. Choose a specific place in your computer and execute this command:</p><pre><code class="language-shell">meteor create --blaze meteor-test</code></pre><h2 id="building-my-application">Building my application</h2><p>We need to build the application to be used inside the docker. Remember, here I&apos;m just showing a simple example to build a Meteor application. There are many other parameters that you can be setting in build time.</p><p>Go to the path of your application and execute this command:</p><pre><code class="language-shell">cd meteor-test
meteor build --allow-superuser --directory ./build/
</code></pre><p>The above command will create a <code>build</code> folder with a Node code built inside. We&apos;ll use it inside de Dockerfile in the next step.</p><p>Y<em>ou will have a warning message like this below, just ignore it:<br>WARNING: The output directory is under your source tree.<br>Your generated files may get interpreted as source code!<br>Consider building into a different directory instead<br>meteor build ../output</em></p><h2 id="preparing-the-dockerfile">Preparing the Dockerfile</h2><p>This step is to create a docker image to be used by Docker Compose (or a Stack in the Swarm). Below, is the complete and simple Dockerfile:</p><figure class="kg-card kg-code-card"><pre><code class="language-dockerfile">FROM node:14.17.5-alpine
LABEL maintainer=&quot;Ricardo Aragao&quot;
LABEL meteor.version=&quot;2.3.5&quot;

COPY ./build/bundle /bundle
RUN (cd /bundle/programs/server &amp;&amp; npm i)

USER node

CMD node /bundle/main.js</code></pre><figcaption>Filename: Dockerfile</figcaption></figure><p>Commenting on each line:</p><p><strong>FROM</strong>: define what node image you&apos;ll use as a base to create the image of your application. There are two important points here:</p><!--kg-card-begin: markdown--><ol>
<li>The chosen version should be the same as your meteor version. In this case, we are using meteor version 2.3.5 which uses Node version 14.17.5. You can verify in the <a href="https://docs.meteor.com/changelog.html">Meteor Changelog</a>;</li>
<li>For this simple example, we are using Linux distro alpine, but sometimes there are some problems with alpine, then use slim to test. Ex: <code>FROM node:14.17.5-slim</code>. You can see other options in the <a href="https://hub.docker.com/_/node">Docker Hub</a>.</li>
</ol>
<!--kg-card-end: markdown--><p><strong>LABEL</strong>: it is just to add metadata to your file.</p><p><strong>COPY</strong>: remember that we built that application outside of docker, then this command is to copy the result of the build (a node application) to inside the Docker.</p><p><strong>RUN</strong>: it will execute a shell command inside the docker in build time. In this case, we are executing the <code>npm i</code> to install all NPM dependencies of your application because meteor build doesn&apos;t do.</p><p><strong>USER</strong>: define the user we&apos;ll use to run the node app.</p><p><strong>CMD</strong>: will execute the application.</p><h2 id="building-a-docker-image">Building a Docker Image</h2><p>After the preparation of Dockerfile, save it in the root of your Meteor project and run this command to build a Docker image:</p><pre><code>docker build -t my-meteor-test:latest .</code></pre><p>When ended, you can check the image using the command: </p><pre><code class="language-shell">docker images</code></pre><p>The result will be like this:</p><pre><code class="language-shell">REPOSITORY                                                          TAG              IMAGE ID       CREATED       SIZE
my-meteor-test                                                      latest           70abf23d15a3   2 hours ago   271MB</code></pre><p>Now you have your application Docker image ready to use with Docker Compose. You can remove the build folder created, you don&apos;t need it after this step.</p><h2 id="preparing-the-docker-compose-file">Preparing the Docker Compose file</h2><p>I prepared a small Docker Compose file as an example:</p><figure class="kg-card kg-code-card"><pre><code class="language-yaml">version: &quot;3.7&quot;

services:
  my-app:
    image: my-meteor-test:latest

    ports:
      - 80:3000
      
    environment:
      NODE_ENV: production
      ROOT_URL: http://localhost
      PORT: 3000
</code></pre><figcaption>Filename: docker-compose.yml</figcaption></figure><p>Differently from Dockerfile syntax, a docker-compose file is a <a href="https://yaml.org">YAML</a> file. Each indentation means that that line is inside the other level. By default, we are using 2 spaces to define an indentation.</p><p>Commenting on each line:</p><p><strong>version</strong>: define the version of docker-compose. See the documentation about versions <a href="https://docs.docker.com/compose/compose-file/compose-file-v3/">here</a>.</p><p><strong>services</strong>: define each service (or application) we need to start. In this case, we just will deploy our app.</p><p><strong>my-app</strong>: the name that I chose for my application.</p><p><strong>image</strong>: the image&apos;s name that I want to use for my service, in this case, the image we built.</p><p><strong>ports</strong>: the map of the external port to the internal port. 80 is external and 3000 is internal in the example.</p><p><strong>environment</strong>: here you can put all environment variables that Node or Meteor needs to run.</p><p><strong>NODE_ENV</strong>: define what environment Node is running.<br><strong>ROOT_URL</strong>: the URL that the app will respond to based on the port exposed.<br><strong>PORT</strong>: port that the application will be running inside the container.</p><p>For this simple example, I put just the minimal of environment variables are necessary to power on an app. I&apos;ll show others <a href="https://docs.meteor.com/environment-variables.html">common variables</a> that you will need for real applications:</p><p><strong>MONGO_URL</strong>: the URL of MongoDB that you use for your application.<br><strong>MONGO_OPLOG_URL</strong>: the URL of OPLOG of MongoDB.<br><strong>METEOR_SETTINGS</strong>: load a string with the settings to Meteor (is a JSON format stringified).</p><p>Environment variables can be set on Dockerfile too, but I prefer to use them in a docker-compose to allow us to use the same Docker Image to any environment (tests, staging, production, etc.).</p><h2 id="running-the-application">Running the Application</h2><p>To start the application, execute this command line:</p><pre><code class="language-shell">docker-compose up -d</code></pre><p>You will see a result like this:</p><pre><code>Creating network &quot;meteor-test_default&quot; with the default driver
Creating meteor-test_my-app_1 ... done</code></pre><p>Now you can check if the container was created and is running fine executing this command line:</p><pre><code>docker ps</code></pre><p>The result will be:</p><pre><code class="language-shell">CONTAINER ID   IMAGE                   COMMAND                  CREATED              STATUS              PORTS                                   NAMES
2bd396ec088d   my-meteor-test:latest   &quot;docker-entrypoint.s&#x2026;&quot;   About a minute ago   Up About a minute   0.0.0.0:80-&gt;3000/tcp, :::80-&gt;3000/tcp   meteor-test_my-app_1</code></pre><p>And you can go to the browser and access <a href="http://localhost">http://localhost</a></p><p>You&apos;ll see:</p><figure class="kg-card kg-image-card"><img src="https://www.ricardoaragao.com.br/content/images/2021/08/image.png" class="kg-image" alt="Meteor with Docker Compose" loading="lazy" width="346" height="301"></figure><p>Let me know if you could publish your application using this article.</p><p>References:</p><!--kg-card-begin: markdown--><ol>
<li><a href="https://blaze-tutorial.meteor.com/simple-todos/01-creating-app.html#1-2-Create-Meteor-Project">https://blaze-tutorial.meteor.com/simple-todos/01-creating-app.html#1-2-Create-Meteor-Project</a></li>
<li><a href="https://guide.meteor.com/deployment.html#deploying">https://guide.meteor.com/deployment.html#deploying</a></li>
<li><a href="https://docs.docker.com/engine/reference/builder/">https://docs.docker.com/engine/reference/builder/</a></li>
<li><a href="https://docs.docker.com/compose/compose-file/compose-file-v3/">https://docs.docker.com/compose/compose-file/compose-file-v3/</a></li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Frameworks, how to select?]]></title><description><![CDATA[<p>First of all, before I explain my process on how to select a framework, it&apos;s important to think about why we need to use a framework.</p><p>When you start to implement a small software and you are very comfortable with the programming language chosen, a framework can bring</p>]]></description><link>https://www.ricardoaragao.com.br/frameworks-how-to-select/</link><guid isPermaLink="false">610b30c1262ab0000100f540</guid><category><![CDATA[Framework]]></category><dc:creator><![CDATA[Ricardo Aragão]]></dc:creator><pubDate>Thu, 05 Aug 2021 00:49:17 GMT</pubDate><media:content url="https://www.ricardoaragao.com.br/content/images/2021/08/christina-wocintechchat-com-49UXHs41UPI-unsplash.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://www.ricardoaragao.com.br/content/images/2021/08/christina-wocintechchat-com-49UXHs41UPI-unsplash.jpg" alt="Frameworks, how to select?"><p>First of all, before I explain my process on how to select a framework, it&apos;s important to think about why we need to use a framework.</p><p>When you start to implement a small software and you are very comfortable with the programming language chosen, a framework can bring excessive tools and extra layers. By the way, if this small solution can grow fast, using a framework can be prepared for future expansion.</p><p>If your project has more than one member, it isn&apos;t a small project. Use a framework.</p><p>In my opinion, the great advantage to using a framework is just because of these points:</p><!--kg-card-begin: markdown--><ol>
<li>It has many features ready to use;</li>
<li>Many people testing it;</li>
<li>Many people help it to improve.</li>
</ol>
<!--kg-card-end: markdown--><p>You can create your framework or library set, but using something ready is very smart.</p><p>I tend to look for frameworks that use languages that I have some domain or that I plan to have soon.</p><p>An important point to analyze in a framework is its documentation and how quickly it is updated. You can check in forums and repositories. Then you need to evaluate the quality. I usually follow tutorials and change them by consulting official documentation to have my perception about it.</p><p>When you go to search tips on forums, you can validate the activity of the community. A strong community makes all the difference when you need support.</p><p>With the primary contact done you can have your first impression. You need to like how the framework works, don&apos;t be deceived. If you don&apos;t like it, in a few weeks you will want to change it.</p><p>Thus, you can go to the more technical part of your analysis with the below main questions:</p><!--kg-card-begin: markdown--><ol>
<li>Have It all the main features that the system needs for the short term?</li>
<li>Do the public benchmarks comply with the system demand?</li>
<li>How is the update process? Easy, hard?</li>
<li>How is the deployment process?</li>
<li>How is the learning curve?</li>
<li>There are people in the market that know it?</li>
<li>There are some companies where you can get help? Paid, of course.</li>
<li>There are any available courses?</li>
<li>What hardware resources do you need?</li>
</ol>
<!--kg-card-end: markdown--><p>There are many other variables that you can evaluate, but if you get these as a base, your choice can be better. Make a spreadsheet and write your results, because we forget quickly.</p><p>A concern that you need to have is don&apos;t forget how the language works, then you will never have a problem that you cannot solve.</p><p>Any framework will help you in 80% of your work and don&apos;t so much in 20%. There isn&apos;t a silver bullet, but you can be more efficient.</p>]]></content:encoded></item></channel></rss>