<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Victor Barzana on Medium]]></title>
        <description><![CDATA[Stories by Victor Barzana on Medium]]></description>
        <link>https://medium.com/@viticoinf?source=rss-39f4e21a8733------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*avaFnTHQkE-4vXnEPy1YnQ.jpeg</url>
            <title>Stories by Victor Barzana on Medium</title>
            <link>https://medium.com/@viticoinf?source=rss-39f4e21a8733------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 07 Jul 2026 03:06:02 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@viticoinf/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[AI Companions to Replace Developers by 2025: The End of the Road for Programming Jobs?]]></title>
            <link>https://viticoinf.medium.com/ai-companions-to-replace-developers-by-2025-the-end-of-the-road-for-programming-jobs-1047440f98d7?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/1047440f98d7</guid>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Wed, 15 Mar 2023 12:41:34 GMT</pubDate>
            <atom:updated>2023-03-15T12:47:36.668Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/512/1*LOIDvc1SccPKz8LtRgeadA.jpeg" /><figcaption>Generated with the free text-to image tool from DeepAI (<a href="https://deepai.org/machine-learning-model/text2img">https://deepai.org/machine-learning-model/text2img</a>)</figcaption></figure><blockquote>TLDR: Developers will not be replaced by AI, but their roles will evolve and require them to upskill in order to stay competitive in the job market. With the help of AI, developers will become more efficient and productive, allowing them to focus on more complex tasks while leaving repetitive tasks to automation. Overall, the demand for developers is unlikely to decrease, but the skills required for the job will change.</blockquote><p>Artificial Intelligence (AI) has been a hot topic in the tech industry, sparking debates about its impact on the job market. In recent years, there have been concerns that AI may replace developers, but is this really the case? In this essay, we will explore the relationship between AI and developers, and how the two can work together to create new opportunities for innovation and growth.</p><h3>The AI Revolution</h3><p>Artificial Intelligence is not a new concept, but it has certainly gained a lot of momentum in recent years. The development of powerful machine learning algorithms, combined with massive amounts of data, has enabled AI to make significant advances in areas such as image recognition, speech recognition, and natural language processing.</p><p>In software development, AI is being used to automate tasks such as testing, debugging, and code optimization. This has led to significant improvements in productivity, efficiency, and quality. AI is also being used to create new types of applications, such as chatbots, virtual assistants, and recommendation engines.</p><h3>The Rise of Low-Code and No-Code Platforms</h3><p>One of the most significant trends in software development in recent years has been the rise of low-code and no-code platforms. These platforms allow developers to build applications without writing much code, by using pre-built components and drag-and-drop interfaces.</p><p>Low-code and no-code platforms have been made possible by advances in AI, which can automate many of the tasks involved in application development. These platforms are making it easier for non-technical users to create their own applications, without needing to know how to code.</p><p>This trend has led some to suggest that low-code and no-code platforms could eventually replace developers altogether. However, this is unlikely to happen. While low-code and no-code platforms can make application development easier, they cannot replace the creativity and problem-solving skills that developers bring to the table.</p><h3>The Role of Developers in an AI World</h3><p>In the world of software development, many are predicting that AI companions may drastically reduce the demand for developers in the coming years.</p><p>AI is not going to replace developers, but it is going to change the way developers work. Developers will need to learn how to incorporate AI into their work, and to work with data scientists and other AI specialists to create applications that leverage AI effectively.</p><p>Developers will also need to become more adept at working with low-code and no-code platforms, which will require a different set of skills than traditional software development. This will involve learning how to work with pre-built components and templates, and how to customize them to meet specific requirements.</p><p>The good news is that there will continue to be a high demand for developers in the AI era. While AI can automate many tasks, there will always be a need for developers who can think creatively, solve complex problems, and collaborate effectively with other team members.</p><h3>The Importance of Upskilling</h3><p>As the role of developers evolves in the AI era, it’s important for developers to upskill and learn new skills that will be in demand. This includes learning how to work with AI tools and platforms, as well as learning new programming languages and frameworks.</p><p>Upskilling can take many forms, including taking online courses, attending workshops and conferences, and participating in hackathons and coding challenges. Developers can also learn from their colleagues and from AI experts in other fields, such as data science and machine learning.</p><p>Upskilling is not only important for individual developers, but also for companies. Companies that invest in upskilling their developers will be better equipped to compete in the AI era, and will be more likely to attract and retain top talent.</p><h3>Jobs that are IMHO will soon be replaced by AI</h3><p>While many jobs are being impacted by the rise of AI and automation, some roles are more vulnerable to being replaced than others. In general, jobs that involve repetitive and predictable tasks are most at risk of being automated. Here are a few examples of roles that may be in danger of being replaced by AI:</p><p><strong>Content Writers: </strong>This blog post was created using a combination of human input and AI assistance. Specifically, Chat GPT was used to generate approximately 70% of the text. While AI technology like Chat GPT can be incredibly useful for enhancing productivity and efficiency in content creation, it’s important to note that human input is still required to ensure accuracy and relevance.</p><p><strong>Data Entry:</strong> Jobs that involve manual data entry and processing are at a high risk of being automated. AI-powered tools can easily scan and digitize data from various sources, eliminating the need for human intervention.</p><p><strong>Customer Service:</strong> Basic customer service tasks such as responding to common inquiries or providing product information can be easily handled by AI chatbots, freeing up human agents to focus on more complex tasks.</p><p><strong>Manufacturing and Assembly Line Work:</strong> Many tasks in manufacturing and assembly lines are repetitive and can be easily automated using AI-powered robots.</p><p><strong>Telemarketing:</strong> Telemarketing is a highly repetitive task that can be easily automated using AI-powered voice assistants.</p><p>It’s important to note, however, that while some aspects of these roles may be automated, the need for human oversight, creativity, and problem-solving will still be necessary. In many cases, AI is being used to augment these roles, rather than replace them entirely. Additionally, as new technologies and industries emerge, new job roles will also be created, requiring unique human skills that cannot be replicated by machines.</p><h3>The Future of Developers in an AI World</h3><p>AI is not going to replace developers, but it is going to change the nature of the job. Developers will need to become more adept at working with AI tools and platforms, and to collaborate effectively with data scientists and other AI specialists.</p><p>Low-code and no-code platforms will also play a role in the future of software development, but they will not replace developers entirely. While these platforms can make it easier for non-technical users to create applications, they cannot replace the problem-solving skills and creativity that developers bring to the table.</p><p>In the future, developers will need to become more skilled at working with low-code and no-code platforms, as well as with AI tools and platforms. They will also need to develop a better understanding of data science and machine learning, and how these disciplines can be used to create more intelligent and innovative applications.</p><p>The demand for developers is not going away any time soon. While AI can automate many tasks, there will always be a need for developers who can think creatively, solve complex problems, and work effectively in teams.</p><p>Developers who upskill and learn new skills will be well positioned to take advantage of the opportunities presented by the AI era. They will be able to work on cutting-edge projects, collaborate with AI experts, and help to create new and innovative applications that will shape the future of technology.</p><p>Companies that invest in upskilling their developers will also be well positioned to compete in the AI era. These companies will be able to attract and retain top talent, and will be better equipped to create the innovative applications that customers demand.</p><h3>Conclusion</h3><p>In conclusion, AI is not going to replace developers, but it is going to change the way they work. Developers will need to become more skilled at working with AI tools and platforms, as well as with low-code and no-code platforms. They will also need to develop a better understanding of data science and machine learning, and how these disciplines can be used to create more intelligent and innovative applications.</p><p>Upskilling is crucial for developers who want to thrive in the AI era, and for companies that want to remain competitive. By investing in upskilling, developers and companies can take advantage of the opportunities presented by the AI revolution, and help to shape the future of technology.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1047440f98d7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A very cool job interview]]></title>
            <link>https://viticoinf.medium.com/a-very-cool-job-interview-4f2eaba33b56?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/4f2eaba33b56</guid>
            <category><![CDATA[job-interview]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Fri, 28 Oct 2022 22:38:38 GMT</pubDate>
            <atom:updated>2022-10-28T22:38:38.971Z</atom:updated>
            <content:encoded><![CDATA[<p>The competition to get a job in the middle of Corona crisis is really tough. First of all, you need to allocate time, knowledge, and experience if you really want to get a job. For someone like me that comes from a different stack, getting a job in React, Vue, and Angular is barely impossible. With this article, I would like to explain my journey and what has been for me a really cool and intuitive job interview which I would love to see repeated or similar for future employers.</p><p>There are many different types of job interviews, some more challenging, some very informal, but in general, there are many things you need to know about a company before you apply to it. I really like this article <a href="https://medium.com/@SproutRed/our-10-red-hot-tips-on-how-to-prepare-for-a-job-interview-f4a69b29173f">from RedSprout</a> where they mention 10 red hot tips on how to prepare for a job interview.</p><h3>I don’t like time-forced tests</h3><p>Depending on the employer, the challenge type may variate, for example, when I applied for Toptal, I had a really tough challenge for which I wasn’t prepared at all. I had a test in 90 minutes and 3 pretty complex questions to solve for which I was required to know the Greedy Algorithm and get enough time to understand the problem. Because I wasn’t prepared for this interview I lost 30 minutes trying to understand the first problem. Although I tried many times, I could not afford to finish the first exercise, so I jumped into the other two, but it was too late I figured out that I could solve them, but didn’t have more time. I did not manage to complete this test because of time, lack of knowledge, and practice, the truth is that once I jumped into <a href="https://www.hackerrank.com/">Hackerrank </a>and started practicing, I was able to complete multiple similar algorithms, and the more you practice, the better you get in solving the next problem of the same kind. If I had to choose I wouldn’t like to apply for this kind of test again.</p><h3>A really cool challenge at Evolution Gaming (Riga)</h3><p>One of the coolest job challenges I have had so far was for the company <a href="https://www.evolution.com/">Evolution Gaming in Riga</a>. I was given an URL and the challenge was to create a game out of it, once created, play it and then send them the 4 passwords I would find through the game, one for each level, if I could win ;)</p><p>So far so good, then I figured out that opening the link they sent me, would print a page with a message: “WebSocket Required!” and nothing else. I have enough experience using WebSockets protocol to communicate in a client/server infrastructure, so, I figured out that the connection to that URL should not be done via HTTPS, but via WebSocket. So, I quickly tested this using the native WebSocket stream provided by the browser, I opened the stream from the console, sent some data, a handshake took place and the response was: “Send help to see commands!”. Then my eyes shined with happiness, I had already gone through the first phase, understanding what kind of game was behind.</p><h3>A WebSocket Minesweeper with React</h3><p>So far so good, so, I installed React with <a href="https://reactjs.org/docs/create-a-new-react-app.html">create-react-app</a>, however, my React experience is now barely 9 months of study and 0 experience in a real production app, the employer already knew about this. I came up with this idea because I had to win all 4 levels and I wasn’t too happy to play Minesweeper from the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rNc1VRsqeFSBklsD" /></figure><p>So, I wireframed my app to have an idea of where buttons would end up, and what kind of actions and main features/requirements my app would need. For every map message coming from the server, I needed to render a map full of buttons to press, as well as the main menu and a way to pick different levels, additionally, I wanted to make sure that once you win or lose, the message received from the server should be shown to the user to discover the passwords or to show game/over.</p><p>So, I created my React App, installed socket.io client, and tried to connect to that URL via socket.io, here is where I figured out that a connection from socket.io would not be allowed by that server because it included additional URL query parameters that Socket.io, unfortunately, can’t remove from the URL because it includes the type of engine which is using. This made me try to hack socket.io to NOT send the query params in the first handshake, however, I would have to re-write the sendPacket function of socket.io to do so, therefore, I dropped that solution and went with an implementation of the raw WebSocket protocol to communicate.</p><h3>I got the connection, what was next?</h3><p>Once I got to successfully connect to the server, I could simply come up with a simple folder structure to React, adding the main components that I had previously wireframed. Created the main menu with 4 buttons and an online/offline indicator. Pretty simple, this way we know we are connected to the server and the user can choose an option, then we paint the map and start playing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/774/0*BtbYl4E5GJO4Ch6K" /></figure><p>The next step was to create the board, for this, I used a Cell React Component and pure CSS3 to not come up with weird hacks, I wanted exactly (n, m) cells, so, my board would only have cells rendered with CSS-grid to remove the complexity of adding rows and columns.</p><p>To not be too boring, this is how the game ended up with. At this point I had managed to have an onClick event in every cell that would send an “open (n, m)” command to the server and reload a new map, that was all the game was about. It took me about 14 hours to complete this challenge.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/762/0*KcpFd8SGdWXbLDFf" /></figure><p>The biggest problem is I didn’t know how to play the game, I have never played Minesweeper before in my life, so, I learned to play it in about a day and I won the first level :)</p><p>Then I tried playing the second level and almost finished it I exploded the bomb, this happened again and again and again. And I had to give up because I knew I would never discover the passwords behind the Master and King levels (3, 4) it was just too much work for a week.</p><h3>10k cells are no joke</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QQqXnGHIH_mWn5Sf" /></figure><h3>Conclusions</h3><ul><li>My React-level knowledge was not production-ready by then.</li><li>The game could have been rendering faster, although I did my best, I would have loved to get some support on it and learn how to make it better.</li><li>I did not complete any other level, it made my eyes super tired, so, maybe next time I pick a different color, maybe light gray, this would have helped in the completion of the levels.</li><li>I did not get this job, but I am very happy about this wonderful experience, this company is great and they really deserve someone who is pretty good at React and a good Gamer.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4f2eaba33b56" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hard work pays off]]></title>
            <link>https://viticoinf.medium.com/hard-work-pays-off-d30310fa402b?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/d30310fa402b</guid>
            <category><![CDATA[nasa]]></category>
            <category><![CDATA[international-space-apps]]></category>
            <category><![CDATA[fire]]></category>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[hazard-detection]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Sun, 04 Oct 2020 20:52:06 GMT</pubDate>
            <atom:updated>2020-10-04T21:21:08.643Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*innWliQDH8UADeaC.png" /><figcaption>Hazard Busters logo created by Irina Ivanova</figcaption></figure><p>I haven’t posted in a while, but I can ensure you I have been very busy. This weekend I had the fantastic opportunity to join NASA International Space Apps Hackathon. Trust me, this is not a normal hackathon, the International Space Apps Challenge is an international mass collaboration focused on space exploration that takes place over 48-hours in cities around the world. As I saw this event was running this year in Ventspils, Latvia, there was no way in the world I would lose this opportunity.</p><p>The event embraces collaborative problem solving with a goal of producing relevant open-source solutions to address global needs applicable to both life on Earth and life in space. This year we have over 25 challenges in four areas: Earth, Outer Space, Humans and Robotics. NASA is leading this global collaboration along with a number of government collaborators and over 100 local organizing teams across the globe.</p><p>If you are patient enough, I will tell you in this article about the team, the challenge, how it feels, the problems we faced and how we approached this with a really interesting solution and last but not least, how it all ended.</p><h4>The team</h4><p>Team, building phase is always hard, there are people from different backgrounds, but the thing is, we have to code something, no code = no win, unless you have a one in a million idea. After searching around among participants, we came up with a wonderful team of engineers:</p><ul><li><a href="https://www.linkedin.com/in/ciaoirina/">Irina Ivanova</a> (UI/UX designer): Irina has a broad knowledge about software development, she can wireframe, create logos, and much more in less than a wink.</li><li><a href="https://www.linkedin.com/in/vbarzana/">Victor Antonio Barzana Crespo</a> (Senior Software Engineer) with years of experience in the IT field, I love taking challenges, especially if they bring something good to humanity.</li><li><a href="https://www.linkedin.com/in/mahabir-gupta-6127b240/">Mahabir Gupta</a> (Data scientist &amp; AI specialist), take a minute and look at this man’s CV, I personally got impressed by how huge experience Mahabir has, he proved to all of us his knowledge and didn’t hesitate for a minute to come up with the solution that our project needed.</li><li><a href="https://www.linkedin.com/in/shenaha-sivakumar/">Shenaha Sivakumar</a> (Specialist in Geoinformatics) A map expert or someone with clear enough understanding of what a satellite data output looks like. BTW, she’s looking for job, if you read this, go and give her a chance in Riga, trust me, she’s good!</li><li><a href="https://www.linkedin.com/in/shravan-koundinya-vutukuru-01a653161/">Shravan Koundinya Vutukuru</a> (Researcher at Mechanical Engineering Department, Renewable energy technologies) if you need help to send your rocket to space, this is your man.</li></ul><p>So, we gave everyone a shovel, a helmet and jumped right into the challenge, ah and almost forgot it, we called our team: <strong>“Hazard Busters”.</strong> All the data about our project submission and challenge can be found here: <a href="https://2020.spaceappschallenge.org/challenges/inform/automated-detection-hazards/teams/hazard-busters/project">https://2020.spaceappschallenge.org/challenges/inform/automated-detection-hazards/teams/hazard-busters/project</a></p><h4>The challenge</h4><p>On Friday, October 2nd, 2020 we fired our engines and took the first challenge that was more according to our skillsets altogether.</p><blockquote><a href="https://2020.spaceappschallenge.org/challenges/inform/automated-detection-hazards/details">Automated Detection of Hazards</a></blockquote><blockquote>Countless phenomena such as floods, fires, and algae blooms routinely impact ecosystems, economies, and human safety. Your challenge is to use satellite data to <strong>create a machine learning model </strong>that detects a specific phenomenon and build an interface that not only displays the detected phenomenon, but also layers it alongside ancillary data to help researchers and decision-makers better understand its impacts and scope.</blockquote><p>Few hours after we started we already had details of which data comes from where, what satellite gives you which data and so on. But what we hadn’t figured out yet, was what we were going to do with this data at all, at this point about 16 hours of the challenge had passed and we had a very small idea how we would help researchers or for who our software was intended.</p><p><strong>We met with Linda to understand our challenge</strong></p><p>Luckily on Saturday afternoon, we got to talk to one of the experts <a href="https://www.linkedin.com/in/linda-gulbe-8b553527/">Linda Gulbe</a> (Researcher and lecturer at Ventspils Augstskola). If you want to know anything about satellite data, you have to ask Linda, she explained to us among other things that real-time satellite view is not quite there yet. That when there are clouds satellites are blind, among tons of other cool tips. Here is where our real journey started. How we would create the software, the AI algorithm, the training model, and for who all this was intended.</p><h4>But what problem we chose to solve?</h4><p>Making the best use of NASA satellite’s data, our team implemented a solution which uses CNN deep learning model to detect or predict potential natural hazards. At first, the model will be trained with already existing satellite images and the prediction output will be stored in a database that will be synchronized with the frontend web application. This is an interactive app which pushes notifications (to the areas they are interested in) to researchers, insurance companies, landowners and other parties, allowing them to make decisions about potential hazards.</p><h4>Satellites resolution &amp; evolution</h4><p>The reason why we went this way and not the real-time notification one is because of the below table, picture, for instance, the best-case scenario, where 1km is the minimum size in the grid, therefore, in order for us to find a red dot in the screen or altered temperature levels, already 1km of land should have been burned. Therefore, rather than informing in real-time, we would be informing in really-bad-time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/864/0*zabQ8-ZqUxUxwFeV" /><figcaption>Satellite resolution table <a href="https://smap.jpl.nasa.gov/data/">https://smap.jpl.nasa.gov/data/</a></figcaption></figure><h4>So, how we addressed this challenge?</h4><ul><li><em>Researched the favourable conditions for hazards and downloaded related satellite data</em></li><li><em>Created CNN Deep Learning Model</em></li><li><em>Trained the model with satellite images</em></li><li><em>Validated the output against the past fire-prone areas to check the accuracy and tuned the parameters accordingly.</em></li><li><em>Stored the output as GeoJSON format in a database accessible by the web application.</em></li><li><em>Wireframed and built a Web and Mobile App with Ionic Framework that allows users to interact, modify, dismiss or alert about a fire outbreak</em></li></ul><h4>How We Developed This Project?</h4><p>Used a deep learning model with an object detection algorithm to find out a spot in the satellite data. Moreover, we use computer vision and the OpenCV libraries for satellite image processing.</p><p>Once the output is generated, the data is stored as GeoJSON in the Firebase database so that any update is centrally triggered in real-time in Firebase. So that our server-less code can handle this with custom functions and notify the clients via push notification that have the mobile app installed. For the learning model was used Python FLASK, Google Collab, TensorFlow, GDAL and so on.</p><p>For the current project, the consumer application (Hybrid Mobile App), were chosen the following technologies:</p><ul><li>React.js: Frontend JavaScript Framework</li><li>Ionic Framework, allowing the same source code being served as a Web Application or deployed to the Google Play Store or to Apple App Store.</li><li>Google Firebase (Server-less) with real-time database and push notifications.</li><li>Google Maps API, although we will be moving to an OpenStreetMap server to save costs in the near future.</li><li>As the data communication format, we have chosen GeoJSON.</li><li>The user is able to authenticate either with username/password or with Google.</li></ul><h4>How We Used Space Agency Data in This Project?</h4><ul><li>The Landsat-8 and Modis data were used to detect vegetation (boreal forest), moisture content, Landuse/landcover, Fire region using indices like NDVI, NDMI, SPI, NBR.</li><li>We combined Landsat-8 data along with CNES and CSA datasets.</li><li>With Aster DEM we obtained slope and elevation information.</li><li>Using the GEOS 16&amp;17 satellite the abnormal change in the temperature near the burning region was identified to detect the source of fire within a few minutes of its outbreak.</li></ul><p>In the future, We plan to add even social indicators which help us to better estimate damage and losses that will be incurred. When extending to detect other hazards we plan to include some more satellite images which helps us in predicting that particular hazard accurately.</p><h4>Project Demo</h4><ul><li><em>To demonstrate our application, the frontend and backend will coordinate with each other. In the frontend, the user will login in the app and select a certain region he wants to monitor. Then it will send the coordinates to the backend so that the analysis can take place and the model will try to find the hazard within that region or in the configured radio.</em></li><li><em>Currently, the application is in development state, however, some of the source code of the training model and the AI side can be found in the </em><a href="https://github.com/vbarzana/hazard-busters"><em>GitHub repository</em></a><em>.</em></li><li><strong><em>Please see the detailed PowerPoint presentation with specific pictures, wireframe and other details here: </em></strong><a href="https://docs.google.com/presentation/d/1TleRe3S3Pc545lq1g82-bnOumf26jqF67_92lfjc4ZY/edit?usp=sharing"><em>https://docs.google.com/presentation/d/1TleRe3S3Pc545lq1g82-bnOumf26jqF67_92lfjc4ZY/edit?usp=sharing</em></a></li></ul><h4>Project Code</h4><p><a href="https://github.com/mahavir9008/HazardBusters;%20https://github.com/vbarzana/hazard-busters">https://github.com/mahavir9008/HazardBusters; https://github.com/vbarzana/hazard-busters</a></p><h4>🥳Our Team was selected as Global Nominees</h4><ul><li>Alongside with another team, we were selected to participate in the global NASA competition</li><li>That is the passageway out of Local straight forward to Global NASA competition level</li><li>And we even made some money, this was the best challenge I have been in so far, no doubt about it.</li></ul><h4>Conclusions</h4><ul><li>You may think of this as a funny scene where we delivered two projects at a 10–30% of completion. Reused things, copied code, the app is buggy and not functional, but the truth is that in 2 days, you barely get time to fill in a PowerPoint presentation, trust me, when you want to start writing the code there’s just no more time left.</li><li>With this project, I had the opportunity to meet and work together with amazing engineers.</li><li>You are not going to believe how many APIs NASA has. This weekend was a complete dive into a new world that I am not used to, AI, satellite data, NASA. I have enjoyed every bit of this challenge and I am looking forward to participating in any other upcoming events.</li><li>Never give up, we thought we had lost everything with almost a complete day lost, and we came up with the solution the second day, and still, we were able to write some code and <strong>we were selected as Global Nominees</strong>.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d30310fa402b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[5 reasons to stop Codegenio Software Engineers and move forward]]></title>
            <link>https://viticoinf.medium.com/5-reasons-to-stop-codegenio-software-engineers-and-move-forward-3616227ffb23?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/3616227ffb23</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[cuba]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[hire-software-engineers]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Wed, 26 Aug 2020 05:21:32 GMT</pubDate>
            <atom:updated>2020-08-26T05:21:32.111Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i_IGaf-wg3-71A1cnHdS8A.jpeg" /></figure><p>There are many reasons why I decided to launch Codegenio back in October 2019, one of them is because I wanted to give an opportunity to my Cuban people, university colleagues, (Senior or Mid-Senior and graduate trainees) Software Engineers that still live there to succeed and move forward in there. By having a headquarter in Europe and the team in Cuba would be a perfect fit to create software and be working almost 24 hours a day.</p><p>I also wanted to let the world know that Cuba not only has Tobacco, Rum, Salsa and beautiful women, but also produces very skilled Software Engineers that today work or have worked at Amazon, Google, NVIDIA and many other big companies out there. Engineers graduated in the most prestigious universities among Latin America.</p><p>I have started the business back in Spain when I was living in there, then moved back to Latvia and the truth is, we have no business anymore because of COVID-19. This article will try to explain why I have decided to stop/temporarily close Codegenio and move forward.</p><p>Even we have decided to stop, our website will still be available at <a href="https://codegenio.com">https://codegenio.com</a> but I will probably shut it down in the near future. If you have a few minutes, please read below which were the causes that led me to take this decision and why we are not able to continue.</p><h4>1- Software engineer salaries have fallen more than ever before</h4><p>A year ago, Senior Software engineer salaries were estimated in Europe from a minimum of 50k up to 120K+ EUR, however, with the current crisis, we start to see more and more companies post jobs for Senior Software engineers starting at 30, 40k EUR and for Lead Software Engineers from 50 to 75k at max. Such low-level salaries become the new standard in this field. The reasons for this are not only because of Coronavirus, but also because more and more people choose to be a Software Engineer. Additionally, companies take advantage of the current situation where many talented and skilled engineers are out of business, lost their job or are desperately looking for a salary to pay their rent, mortgage or simply to eat.</p><h4>2- COVID-19 a virus that succeeded sweeping small companies, weak, old people and unstable businesses</h4><p>When the reality hit, consider it done. Most companies out there couldn’t withstand the fact that the economy crashed, they had to fire employees, most customers went either bankrupt or closed the contracts temporarily. It’s all a big chaos and we have all been there. Some of us like me tried our best to keep our company up and running, but at some point, we realized that the fight is lost and is time to take a new path and move forward.</p><h4>3- I see any size software development organizations crashing every day</h4><p>With more and more customers losing their business, software companies like mine that had a contract with these customers had to stop the cooperation and hence, the chase becomes really hard. I have received in the past month about 12 emails of Software Company owners trying to reach my company to establish some kind of partnership. Most of them trying to sell me the cheapest possible services in order to keep alive during COVID or simply because they have lost their main customer/s and they can’t keep up on business.</p><p>Stories are many, I have pictured myself trying to reach out customers in Germany, Sweden, Italy, France, etc., sending emails to big companies, but the truth is that very few companies trust outsourcing their products, and when they do, they prefer to pay 100 EUR per hour, rather than 25 or 30 which are the standard European rates.</p><h4>4- Our biggest customers were from the tourism sector</h4><p>As I said before when you get hit you get hit very hard. With just a few months on the market, our biggest customers were from the tourism sector, we were implementing cloud applications, improving our knowledge in microservices, stateless applications, vertical and horizontal scaling and many other features. Although we had a pretty good architecture, Engineering knowledge, working with cutting-edge technologies, Corona comes in and our biggest software provider kicks our contract due to an almost 100% income reduction on booking fees (Nobody was travelling or booking, instead, people were cancelling all active bookings day by day).</p><h4>5- The market is saturated</h4><p>We have to admit it, there are too many software companies out there. Indian companies are as cheap as 11$ per hour, I received 1, 2, 3, n proposals in such a small time that I started to wonder whether we had a chance out there for almost 3 times that price.</p><p>In Upwork, people would work for as low as 1 to 5 bucks an hour. In the other hand, you will get complete websites for free and only would get billed by maintenance costs. It’s not worth even the effort of registering on this platform as a company because the competition is too big and rates too cheap.</p><p>With the high amount of Software Developers/Engineers looking for a job right now, outsourcing companies have barely any chance to get a software project outsourced to them. Companies would better pay a very low salary for a Software Developer (Mid-Senior level), rather than a high 3 to 6 figures price for outsourcing the software to another company that they have no idea about their quality.</p><p>In another point, I would like to mention that the client chase is hard and you have to understand that you will be mistreated, you will get very ugly responses from people, no matter how good you treat them. So, either you go out and do the chase by yourself, or you hire someone to do it for you. I had this experience, the customer chase is infinite and I prefer to stay out of it, or rather partner another big company that does the customer chase for you.</p><h4>Conclusions</h4><p>Decisions like this are hard to make, especially when you know you could help so many bright people, really good Engineers that one way or another haven’t had the chance to be considered in real projects. My people are stuck in a wall of laws, regulations, embargo and much more that restricts them from getting a job in big companies without first going through very lengthy processes to get a work permit or visa. I want to improve that by giving them the chance to work remotely with Codegenio to improve their lives, at some point in time I will reopen and relaunch Codegenio, but for now I have to stop and move forward in my career.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3616227ffb23" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Coronavirus outbreak brings an exponential increase in remote work for 2020]]></title>
            <link>https://viticoinf.medium.com/coronavirus-outbreak-brings-an-exponential-increase-in-remote-work-for-2020-69bfa16221da?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/69bfa16221da</guid>
            <category><![CDATA[remote-work]]></category>
            <category><![CDATA[jobs]]></category>
            <category><![CDATA[covid19]]></category>
            <category><![CDATA[stay-at-home]]></category>
            <category><![CDATA[workfromhome2020]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 16:06:48 GMT</pubDate>
            <atom:updated>2020-04-09T16:06:48.044Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*N1uAoXqNn83vtzH7.jpg" /></figure><h3>“We are not ready!” Bill Gates said it in his TED Talk from 2015</h3><p>The Microsoft co-founder has mentioned/warned us on multiple occasions over the past several years about the potential of a disease to cause huge damage in the population and how little we are prepared for it. The below video shows how he assured in his TED Talk from 2015 “The next outbreak? We’re not ready” and here we are with more than <a href="https://coronavirus.jhu.edu/map.html">205,400 people infected worldwide and more than 8200 deaths.</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F6Af6b_wyiwI%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D6Af6b_wyiwI&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F6Af6b_wyiwI%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/325701e040c4ab559215b20e30c81182/href">https://medium.com/media/325701e040c4ab559215b20e30c81182/href</a></iframe><h3>People losing their jobs, government supports</h3><p>The declaration of the state of alarm, valid from Saturday 14th March for 15 days, allows decisions to be taken that are necessary to guarantee the supply of food or medicine, to intervene in factories or workplaces as well as to limit the movement of citizens and vehicles. Nevertheless, even with all support from the Spanish government, the margin of unemployment grows exponentially due to companies not being able to hold any longer. With barely 0 revenue most hotels, real-estate, local businesses and even IT companies that provided software for the tourism start to face the hard reality of losing their jobs, and personnel reduction.</p><h3>Technology to the rescue</h3><p>Once again, some businesses have to get online to satisfy their needs and try to survive, we are seeing Lawyers, Architects, Teachers, Engineers recently starting to work from home due to the fact that most of the countries are in the middle of a severe lock-down. Online meetings and companies like Zoom, Skype, TeamViewer, Slack, Google for sure may have seen an increase in their revenues due to more and more people investing in online meetups and paying for premium plans to unlock features like chat with more people, screen sharing, removing limits in conversations and what not.</p><p>I personally think that remote work has improved with the crisis and is here to stay. Remote work has always been here, however, we didn’t know how to use it properly.</p><p>One of the things that always worried me was that some companies had a completely closed mindset for remote workers. I remember how hard it was for me some years ago to find a remote job, basically because most of the opportunities out there had a single requirement <em>“You have to relocate”</em>. I spent hours and hours searching for the right match (remote).</p><p>Since a few weeks this has not been a problem anymore, only LinkedIn has received in the past 24 hours about 309 remote jobs offers, 5k in the past week and 32k in the last month, not bad eh! Numbers speak by themselves.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/229/0*a-nYKsgvAKn-FSdW.png" /></figure><p>I have been working remotely since 2014 and the experience is amazing! I found out how much time I was saving by NOT having to commute to my work place, lunch time sometimes was in front of the computer, and even I worked more hours a day. However, we had to be very creative with my home office to ensure that kids understand that Daddy is here, but not available. I have to admit that this is a time saving machine, however, it does have some cons:</p><ul><li>You don’t get to meet people during the day unless you decide to go out for a walk.</li><li>This brings you personal problems until everybody in your family understands that this is a business, not a room in your house where you are playing in the computer.</li><li>Kids don’t understand what “work” means, so at the beginning you have to be very flexible and the adaptation process is hard.</li><li>Your wife will surely come in and ask you for help to do things here and there, you have to understand that this is like if you were at work, you need full concentration.</li><li>Responses are asynchronous, while you usually stand up and ask a question at your normal work, in remote working you won’t get a response until the other colleague replies who can be in a completely different timezone. So the complete concept of your company must change.</li></ul><h3>Some of my recommendations for remote working teams</h3><ul><li>You have to communicate more often with your work colleagues.</li><li>Find some shared whiteboard tools and probably get one of these <a href="https://www.lifewire.com/best-drawing-tablets-4141661">pencil drawing tablets</a> or a good camera in front of your board.</li><li>Document CLEAR requirements, so you don’t have to spend hours with the Team.</li><li>Find a good program to track your workers time like for instance <a href="https://clockify.me/">clockify</a></li><li>Adapt your team culture to know how to act if other members of the team are not available.</li><li>You will need Slack, Google Meet, Zoom for your online meetings, screen sharing.</li><li>If you are doing online video meetings, there is a <a href="https://martinfowler.com/articles/effective-video-calls.html">great article from Martin Fowler you don’t want to miss out, <em>how to make effective video calls</em></a> which can give you some guidelines of what’s best to do your video calls.</li><li>Make sure that your organization has a good network administrator and a good VPN server to access remotely to internal tools.</li><li>Trust your workers, you don’t have to be so restrictive because at the end they will cheat on you. I prefer to put it this way, log your time, but I don’t care when you work.</li><li>Be flexible with the workers working hours, but ensure availability depending on customers timezone.</li></ul><h3>You don’t need to have all your Team on-site anymore, c’mon it’s 2020</h3><p>The age of expensive relocation packages is over. Admit it, if your business has not crossed to the digital transformation phase, you may be staying behind. I will state below a few reasons why I believe that outsourcing is best and why you don’t have to gather everybody in one place:</p><ul><li>Most talents don’t live near you, it’s better to pay them a good rate and have them put all their working hours into your products rather than paying expensive relocation packages.</li><li>People like me prefer to live in the coast of Spain and be warm and happy, rather than in a cold country where I probably get more money but the life quality even with money decreases.</li><li>Be international. This increases your competence, your team skill set, enhances your code reviews and eventually we all learn from each other’s experiences. You will find a lot of bright people around the globe that don’t necessarily want to live in your country.</li><li>I have been part of so many different software teams and the general feeling is that sometimes you have a bad manager or a bad team member or simply because your team is so good that stars dazzle among them. This creates a bad working environment and mostly happens because your local talents are not meant to work for you, but that’s the best you could find in your area.</li><li>Finally you may want to give a shot to some outsourcing companies to take care of your software, trust me, who comes up with a software company has all the best resources out there to make your software in a wink.</li></ul><h3>Conclusions, remote work will stay</h3><p>Personally as a Software Engineer I am happy about the remote work increase. But I am sad about all the current situation with COVID-19 where so many families are in chaos right now and having no hope for the near future. Some companies collapsing, people losing their job, this is the biggest crisis the humanity has faced.<br>In our Team at Codegenio, we keep the heads up and have hope for a better future.<br>We are also open to help people at no cost with technology, remote work environment setup, shopping websites setup, helping old people to do their shopping, and much more.</p><p>Thank you for stepping by, keep safe and be positive, all this nightmare will be gone soon and we will all go back to normality.</p><p>This article was originally posted by me at <a href="https://codegenio.com/coronavirus-outbreak-brings-an-exponential-increase-in-remote-work-for-2020/">Codegenio’s blog</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=69bfa16221da" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[JavaScript on the server side “to be or not to be”]]></title>
            <link>https://viticoinf.medium.com/javascript-on-the-server-side-to-be-or-not-to-be-f31668c001eb?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/f31668c001eb</guid>
            <category><![CDATA[nestjs]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[fastify]]></category>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[nodejs]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 16:02:10 GMT</pubDate>
            <atom:updated>2022-10-28T22:51:30.195Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*t6BCxxLHUumM8_4I.jpg" /></figure><p>The present article attempts to explain the key benefits of using JavaScript programming language for building large-scale web applications on the server side. Will also cover how to improve efficiency, performance, and simplicity while using JS, as well as debugging and having strict control of which processes run in your production environment and how to monitor your server’s health. We will also mention what are the most popular JavaScript Frameworks on the server side.</p><h3>JavaScript in a nutshell</h3><blockquote><em>JavaScript is a scripting or programming language that allows you to implement complex features on web pages — every time a web page does more than just sit there and display static information for you to look at — displaying timely content updates, interactive maps, animated 2D/3D graphics, scrolling video jukeboxes, etc. — you can bet that JavaScript is probably involved. It is the third layer of the layer cake of standard web technologies, two of which (HTML and CSS) we have covered in much more detail in other parts of the Learning Area.</em></blockquote><blockquote><em>Source: </em><a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript"><em>Mozzilla Developers</em></a></blockquote><p>If you are interested in reading the history of JavaScript and its standardization by ECMA, you may want to read this <a href="https://auth0.com/blog/a-brief-history-of-javascript/">great article from Auth0</a>.</p><h3>What is JavaScript on the server side?</h3><p>Server-side JavaScript (SSJS) refers to having your entire application in the server implemented with JavaScript language, which is therefore not downloaded/executed in the browser. The first implementation of SSJS was Netscape’s LiveWire, which was included in their Enterprise Server 2.0 back in 1996. Since then, a number of other companies have followed them by offering an alternative to the usual server-side technologies based on JavaScript language.</p><h3>How does JavaScript run on a server?</h3><p>To be able to run JavaScript code on the server side, it is required to use a JavaScript Engine, which consists in a computer program that executes JavaScript code. The first JavaScript engines were mere <a href="https://en.wikipedia.org/wiki/Interpreter_(computing)">interpreters</a>, but all relevant modern engines utilize <a href="https://en.wikipedia.org/wiki/Just-in-time_compilation">just-in-time compilation</a> for improved performance.</p><p>The most common JavaScript engines are:</p><ul><li><a href="https://en.wikipedia.org/wiki/V8_(JavaScript_engine)">V8</a> (<a href="https://en.wikipedia.org/wiki/Node.js">Node.js</a>, <a href="https://en.wikipedia.org/wiki/ArangoDB">ArangoDB</a>)</li><li><a href="https://en.wikipedia.org/wiki/Rhino_(JavaScript_engine)">Rhino</a> (<a href="https://en.wikipedia.org/wiki/Apache_Sling">Apache Sling</a>, <a href="https://en.wikipedia.org/wiki/Alfresco_(software)">Alfresco</a>, <a href="https://en.wikipedia.org/wiki/Eclipse_(software)">Eclipse e4</a>, <a href="https://en.wikipedia.org/wiki/JSSP">JSSP</a>)</li><li><a href="https://en.wikipedia.org/wiki/WebKit#JavaScriptCore">WebKit JavaScriptCore</a></li><li><a href="https://en.wikipedia.org/wiki/SpiderMonkey">SpiderMonkey</a> (<a href="https://en.wikipedia.org/wiki/MongoDB">MongoDB</a>, <a href="https://en.wikipedia.org/wiki/CouchDB">CouchDB</a>, <a href="https://en.wikipedia.org/wiki/Jaxer#Aptana_Jaxer">Aptana Jaxer</a>)</li></ul><h3>JavaScript is NOT Node.js</h3><p>For newbies, with this question, the answer is NO. As we previously read, JavaScript is a programming language that runs in any browser, but on the other hand, Node.js is an interpreter of JavaScript. So, in other words, Node.js is:</p><ul><li>an open-source server environment</li><li>free and runs on various platforms (Windows, Linux, Unix, Mac OS X, etc.)</li><li>not a framework</li><li>not a package manager</li><li>not a programming language, but <strong>uses JavaScript on the server-side</strong></li></ul><p>At tourware we build most of our software applications with Node.js on the server side. Based on the concept, of re-usability at first, we always end up copying some piece of code we already did. Therefore, having a Node.js framework is crucial to gain speed of development and standardization among our products.</p><h3>How to pick a Node.js Framework?</h3><blockquote><em>Go with the flow, it’s the only way to survive to so many emerging technologies</em></blockquote><blockquote><em>Victor Barzana, CTO @tourware</em></blockquote><p>Node.js Frameworks are now emerging as the most commonly used development environment for building Frontend and Backend for web applications. As the JavaScript community grows, this language becomes crucial on both, the client and server side, more and more developers have the necessity to implement/look for standard frameworks that encapsulate all features that are required for developing a complete application. Even though the competition is tough, here the winners are the ones that allow you to do more with less code, however, won’t mention any name because this could create conflicts.</p><p>Picking the right Node.js Framework is quite complex, some of the things we keep in mind always is:</p><ul><li>Easy to use</li><li>Maintainability and long-term support</li><li>License and costs</li><li>Framework features</li><li>Database ORMs</li><li>Performance</li><li>Environment support</li><li>TypeScript support</li><li>Clear folder structure</li><li>CLI support</li><li>Community size</li><li>Hosting</li><li>Healthy and up-to-date documentation</li><li>Real-time working environment</li><li>Simple coding experience</li><li>Seamless data streaming</li><li>Same code pattern throughout development</li><li>User-friendly</li></ul><p>I could keep talking about features for a couple of pages, however, the truth is that there is not a perfect choice, especially because among the community everybody pulls to their own side, while it would be better to have the majority the effort and focus spent in only one powerful JavaScript framework.</p><p>Please keep in mind that the intention of this article is not to compare or criticize already existing frameworks. And my apologies if your framework is not mentioned in the list below. Currently, the most well-known JavaScript frameworks on the server side are:</p><h4>Express</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*CWOT4pkClgmiRY5Z.png" /></figure><p><a href="https://expressjs.com/">Express </a>is a fast, minimalist framework of Node.js. It provides a light coating of necessary web application features, without obscuring Node.js features. Furthermore, it’s easy to build powerful Web Services with the help of various HTTP utility methods &amp; middleware available. In other words, if your app is very small, I would definitely consider using Express.</p><h4>Sails.js</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jgqILm2NX-tSWnBu.png" /></figure><p><a href="https://sailsjs.com/">Sails.js</a> is a lightweight framework that sits on top of Express. Its ensemble of small modules works together to provide simplicity, maintainability, and structural conventions to Node.js apps. IMHO I use Sails.js for years in heavy-load production environments, clouds, and other SaaS applications and I have never had issues with it. The most important thing to keep in mind with this framework is to never do nested saves, avoid populating too much data, don’t mess too much with the blueprints. On the other hand, I love the API simplicity, with the passport integration you can build an OAuth or JWT integration in a matter of minutes, and you can build really huge applications with it. The biggest cons I find to Sails is that the Waterline ORM does not have so much maintenance that the community is open source and it could stop being supported one day in the future. The biggest con, it does not include TypeScript support yet.</p><h4>Nest.js</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*I92X3ECRwmLRHyS7.png" /></figure><p><a href="https://nestjs.com/">Nest (NestJS)</a> is a framework for building efficient, scalable <a href="https://nodejs.org/">Node.js</a> server-side applications. It uses progressive JavaScript, is built with and fully supports <a href="http://www.typescriptlang.org/">TypeScript</a> (yet still enables developers to code in pure JavaScript), and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming).</p><p>Under the hood, Nest makes use of robust HTTP Server frameworks like <a href="https://expressjs.com/">Express</a> (the default) and optionally can be configured to use <a href="https://github.com/fastify/fastify">Fastify</a> as well!<br>At tourware we are considering moving from Sails.js to the NestJS framework because of 3 main reasons:</p><ul><li>Has a bigger community</li><li>Full TypeScript support</li><li>Has more maintainability</li></ul><p><strong>Hapi.js</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*BcbYTZg49PZR71LN.png" /></figure><p>Every <a href="https://hapi.dev/">hapi</a> feature is designed to make the platform easier and more intuitive to use. That means there’s no need to hack things together, experiment to see what *might* work, or try to figure out hidden internals. There is no “magic” — the code does what you expect with easy-to-follow internal logic.<br>This framework is also used by Brendan Eich, the JavaScript Father, and by Auth0 in some internal applications, maybe that’s why it got famous. However, I think NestJS comes very strong and is their biggest competitor.</p><p><strong>Fastify</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*LUOtx30rer56QnlL.png" /></figure><p>An efficient server implies a lower cost of the infrastructure, better responsiveness under load, and happy users. How can you efficiently handle the resources of your server, knowing that you are serving the highest number of requests possible, without sacrificing security validations and handy development?<br>Enter Fastify. Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture. It is inspired by Hapi and Express and as far as we know, it is one of the fastest web frameworks in town.</p><p>Source: <a href="https://www.fastify.io/">https://www.fastify.io/</a></p><p><strong>My own preferences?</strong></p><p>So, my personal opinion is that we will choose <strong>Nest.js</strong> for future project development and if you want to know more reasons, please check out this article: <a href="https://medium.com/monstar-lab-bangladesh-engineering/why-i-choose-nestjs-over-other-node-js-frameworks-6cdbd083ae67">Why I choose NestJS over other Node JS frameworks</a> from Mr. Rahman in Medium.</p><h3>Is up to you whether you want to use a JS ORM or not but I recommend it</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/739/0*BbE_1ome6TY0gEbj.png" /></figure><p>There are plenty of JavaScript ORMs, you can see the most recommended for 2020 <a href="https://www.slant.co/topics/11235/~javascript-orms">here</a>. This is another topic that generates a lot of discussion. From my personal experience, there are so many people that hate Waterline, however, we have had it running in Production with a clustered MongoDB database and a Stateless Sails application and it has been very stable. At this point, our client’s database has grown to millions of records and there are no performance issues so far, although I have to admit that I am scared about the future updates of the MongoDB Driver.</p><p>On the other hand, I am pushing my Team to move to <a href="https://typeorm.io/#/">TypeORM</a> which is an <a href="https://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> that can run in NodeJS, Browser, Cordova, PhoneGap, Ionic, React Native, NativeScript, Expo, and Electron platforms and can be used with TypeScript and JavaScript (ES5, ES6, ES7, ES8). Its goal is to always support the latest JavaScript features and provide additional features that help you to develop any kind of application that uses databases — from small applications with a few tables to large-scale enterprise applications with multiple databases.</p><p>TypeORM goes with the flow, is easy to set up, super fast and elegant, and is the preferred one by the community out there.</p><h3>Application Performance Monitoring for Enterprise Applications</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jfB0gCQaOkIpSAbn.png" /></figure><p>Node.js is broadly supported by APM solutions such as <a href="https://docs.newrelic.com/docs/apm">New Relic</a>, <a href="https://www.datadoghq.com/">Datadog</a>, or <a href="https://www.elastic.co/apm">Elastic APM</a>. So you can run enterprise applications at scale with full traceability and real-time monitoring capabilities.</p><p>For newbies in the topic, APM allows you to monitor in real-time the performance of your applications down to fine-grained statements execution. Low-level components such as HTTP clients and database connections are transparently instrumented to publish real-time execution tracing metadata (response times, logs, etc…).</p><p>By using any of the described APM solutions, we can also benefit from distributed tracing, a characteristic that allows us to trace our program flows over the network of services.</p><h3>Debugging is key in Node.js</h3><p>As a Software Engineer/Developer <strong>YOU HAVE TO KNOW HOW TO DEBUG</strong> your code. Debugging is the routine process of locating and removing computer program bugs, errors, or abnormalities, which is methodically handled by software programmers via debugging tools.</p><p>There are plenty of ways to debug a Node.js App, however, every developer has a preferred way to debug. For example, I personally like debugging my app with <a href="https://blog.jetbrains.com/webstorm/2018/01/how-to-debug-with-webstorm/">Jetbrains WebStorm</a> which is pretty straightforward, see the below screenshot:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*aYaXpwdRMg0mtK4z.gif" /></figure><p>However, if you don’t have an IDE like WebStorm, but you have Visual Studio Code, please see <a href="https://code.visualstudio.com/docs/editor/debugging">Debugging in Visual Studio Code</a>.</p><p>If you still prefer the no IDE way, then you can do it using Google Crome Dev Tools to debug your JavaScript app, just follow these instructions from the Node.js docs: <a href="https://nodejs.org/en/docs/guides/debugging-getting-started/">https://nodejs.org/en/docs/guides/debugging-getting-started/</a></p><h3>Scaling your Node.js App</h3><p>Building an application should be planned from the beginning as if you were building a new bridge or a skyscraper. It requires a very carefully planned project using a clear Software Architecture from the beginning. You must foresee your app and think about all possible scenarios ahead of time. However, you have to be careful don’t over-complicate your architecture if it is not needed, for example, all apps don’t need a Microservices-based architecture, because it would become costly and extremely big for no reason.</p><p>When scaling an app there are a few things you want to take into consideration:</p><ul><li>Where are images and videos stored?</li><li>How many read/write requests are received per second? Per minute?</li><li>What is the level of security required?</li><li>Are these synchronous or asynchronous requests?</li><li>Will you support WebSockets?</li><li>How is the website handling sessions?</li></ul><p>IMHO there is one word that will answer all those questions <strong>“statelessness”</strong>. If you guarantee that your application is stateless or respects the stateless principle, you can ensure that it can be scaled in any kind of workload/processes diversity and you can run even Facebook on it. The below screenshot shows how Heroku handles the scalability of the same application in multiple Dynos by separating it into different process types or small sub-applications.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/420/0*VYy8oCKC995N8fa2.png" /></figure><p>This topic is rather complex and long, so, I recommend you to read my post about <a href="https://viticoinf.medium.com/guide-to-scale-a-sails-node-js-app-with-heroku-5a46dae41bc4">how to scale your app with Sails and Heroku</a>.</p><h3>What do I take home?</h3><ul><li>JavaScript on the server side is as powerful as any other programming language.</li><li>By using JavaScript on the server and client side your company will definitely save costs by avoiding hiring more people and instead focusing on good Full-Stack developers that know JavaScript.</li><li>JavaScript is not Node.js.</li><li>We have learned how to debug a Node.js application on the server side.</li><li>Now you have an idea of how to monitor and scale your JavaScript applications.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f31668c001eb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rolando Santamaría, an amazing engineer and personal friend]]></title>
            <link>https://viticoinf.medium.com/rolando-santamar%C3%ADa-an-amazing-engineer-and-personal-friend-49c6ab8633c?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/49c6ab8633c</guid>
            <category><![CDATA[friendship]]></category>
            <category><![CDATA[rolando-santamaria]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[teamwork]]></category>
            <category><![CDATA[software-engineer]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 15:56:32 GMT</pubDate>
            <atom:updated>2022-10-28T23:07:33.836Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/0*Fnr9OKcE98kWcq86.jpg" /></figure><p>Today I am going to explain the 10 different reasons why and how <a href="https://medium.com/u/59a64cc963b">Rolando Santamaria Maso</a> (my personal friend) has gone so far in his career. Additionally, sometimes I also get his support in his extra time with very important challenging architectural discussions at <a href="https://codegenio.com">Codegenio</a>.</p><h3>1- Modest childhood</h3><p>Rolando Santamaría Masó was born in the year 1986 in the bosom of a humble family in the neighborhood of <a href="https://goo.gl/maps/12EZtuQ7BGDTSc659">Calimete, Cuba</a>. From his parents he learned to be honest, educated, and studious, standing out from an early age for being a good student and having satisfactory results.</p><h3>2- Loved software since he was 11 years old</h3><p>Rolando discovered his first computer when he was 11 years old at his dad’s job. From that moment he realized that the field of computers and technology was going to be his future career.</p><h3>3- I was lucky to sit near Rolando at the university</h3><p>I met Rolando in 2007 when I joined the same University of Computer Sciences in Cuba where he was studying. At first, I belonged to another group, however, I was lucky enough to move to Rolando’s group and there I ended up, sitting right next to him for the next 5 years.</p><p>The University made us inseparable friends, personally and technologically. I have to admit that I trained for years to be able to type as fast as Rolando with the computer. We participated together in games, software competitions, and parties, and trust me, dancing was not our best talent 🤣 🤣 🤣</p><p>Rolando’s software expertise was unbeatable, I always said to myself. How comes he is so smart? The answer was easy, he was driven by love, and passion for computers, about making things just work by failing and failing until he was successful, that’s how we all learn.</p><p>The class Rolando loved the best was Programming, I remember our Teacher Joana, who would say, can someone please do this recursive algorithm in 3 lines of code? Then I remember I used to do it in maybe 4, but Rolando was doing it in just 1 line. I wish you have seen the teacher’s face trying to understand Rolando’s algorithm. I usually ended up copying Rolando’s algorithm and moving forward, he was definitely my idol, my biggest inspiration source, I always wanted to be like him.</p><h3>4- Innate Talent</h3><p>Within just weeks of sitting beside him I figured out that Rolando’s talent was unique, he was able to come up with complete software solutions in a matter of hours. And there I was again, trying to learn from the best of the best at my school. Even if he does not admit it still today, he was just born super smart.</p><p>I remember how he used to study Mathematics a day before the test achieving the best results in Calculation 1, (integrals and derivatives were a piece of cake for him), Physics, and many other topics were super easy for him.</p><h3>5- Participated in active Software Projects since the first year of the University</h3><p>The Computer Science University (UCI) prepared a small team of students to be linked to real productive projects that would solve problems within the university. Our project was called Informatization. We belonged to a very small faculty of UCI, with about 500 students in total. However, only 30 were lucky enough to participate in this Informatization project where we were tasked with very difficult projects that we had to achieve in a record time.</p><p>Some of the projects we implemented in the university were intended to optimize, and perfection already existing processes at the university level. While I focused mostly on the Frontend technologies, Rolando could take care of the server side and the database himself.</p><p>Rolando was good with PHP, so good that he created a PHP framework from scratch, he called it A++, and literally based on this framework he created many many applications that ran perfectly.</p><p>For example, on February 14th, 2009, he came up with a really interesting Web Application “Buzón del Amor” I am glad to share a screenshot of it with you! As you can see below, it was software intended to send messages privately encrypted to the person you loved in the university. Every user was assigned a unique identifier (UUID) that was then decrypted and converted to an email address internally, but the fun part is that the person who received the email could reply but didn’t really know who was sending it 💖 . Of course, some of my friends made a lot of fun out of this app, you can’t even imagine!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-TPoDlnbAL1HMvBL.png" /></figure><h3>6- Winner of many software competitions</h3><p>Great, with Rolando strong on the server side, he just needed someone with good Photoshop/Gimp skills to help him quickly put to work his Backend skills, that was me 🤭</p><p>We soon participated in the development of many software applications from the university. Some of them we just were part of, see below some examples:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xFvAQvFcUrf1PAGE.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/912/0*IMpK0aUnGjpOREXE.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2d_44TFdKQPItGCC.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QeUHHz3gWp1rWTew.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*BLQ7wxE6EIAxwTLF.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5uiGitoa-Ztyalux.jpg" /></figure><p>Some of the applications that Rolando Santamaría was part of implementing the Backend, Database, and Software Architect back in 2009</p><p>Rolando also had a lot of good positive results participating in Software competitions at the University level, getting always second or third place and sometimes even first. The knowledge combined with his personality made him a great personality, but also a great leader and example to follow by many others at the University.</p><h4>jWebSocket Framework defined an unforgettable experience in our lives</h4><p>Back in 2010 we left PHP aside and moved to Java Development as our main programming language at the university. Rolando of course learned it in a matter of weeks and started working in an open-source framework called jWebSocket. We quickly became part of this amazing WebSockets framework discovering real-time web communication. Our experience here was huge because we had a strong background in Web Programming, so, we kept doing JavaScript, HTML, and CSS, but this time the server was not PHP anymore, but Java. Rolando was soon one of the core developers of jWebSocket framework and I was together with him implementing demos, improving the technology, making video tutorials, etc.</p><p>Rolando’s contribution to this technology was ensuring that the TCP, Tomcat, Grizzly engine&#39;s low-level communication would accept as many connections as possible, multi-threading, and many other amazing features supporting the owner of the technology Alexander Schulze from Innotrade GmbH.</p><p>Although jWebSocket Technology, unfortunately, does not exist anymore, the Team still exists and some of them like Rolando are luckily today part of Codegenio’s core dev Team. Also, all the experience that we all got with it remains, as well as small videos on Youtube we will never forget still prove how powerful this technology was.</p><h3>7- Best Software Engineer graduated in the faculty of our University</h3><p>Because of his great performance, so many won competitions at the university level, his participation in all events, his good development during his 5 years, and his stunning Engineering Final Thesis, Rolando was chosen as the best student who graduated in the faculty of our university. He graduated in July 2012 as Gold Title Informatic Sciences Engineer in Cuba.</p><h3>8- Open source contributor</h3><p>Since then, Rolando has participated in international conferences and has been part of a lot of different enterprises increasing his knowledge base and growing professionally, being able to put into practice all the knowledge he got in the university.</p><ul><li>Rolando has been part of the open source community by participating first in the jWebSocket framework open source community as one of the core developers and contributors.</li><li>Recently Rolando released fast-gateway <a href="https://www.npmjs.com/package/fast-gateway">https://www.npmjs.com/package/fast-gateway</a>, a super fast, framework-agnostic Node.js API Gateway for the masses ❤️</li></ul><h4>See some of Rolando’s articles in Medium:</h4><ul><li><a href="https://medium.com/@kyberneees/node-js-api-gateway-a-developer-perspective-8defe575ed21">https://medium.com/@kyberneees/node-js-api-gateway-a-developer-perspective-8defe575ed21</a></li><li><a href="https://medium.com/sharenowtech/k-fastify-gateway-a-node-js-api-gateway-that-you-control-e7388c229b21">https://medium.com/sharenowtech/k-fastify-gateway-a-node-js-api-gateway-that-you-control-e7388c229b21</a></li></ul><h3>9- Tech Leader expertise</h3><p>With a stunning CV, Rolando is today part of the world’s first free-floating car-sharing service. The ShareNow company! As a tech lead, he has gained experience in many fields, including programming languages, Software Architecture, Leading a Team of Engineers, interviewing talents in the area, and many other skills.</p><p>So, if you like this article, please share/leave your comments, and spread the love!</p><h3>10- Work colleague&#39;s reviews</h3><p>Of course, I am not the only one that talks well about Rolando, the reviews on LinkedIn speak for themselves.</p><blockquote>Rolando has a calmness to him, even when things get chaotic in big complex engineering projects. It was a great pleasure to work with him on truly futuristic projects within the autonomous driving space. Great tech lead. I hope our paths will cross again!</blockquote><blockquote><em>Søren Halskov Nissen (Advisor at Simple Feast)</em></blockquote><blockquote>I had the privilege of working with Rolando for over one year on a very challenging project. I will only mention a few things about Rolando which made our collaboration very enjoyable and productive: — First, his excellent technical skills and deep knowledge of the field — I’ve learned a lot about nodejs and backend engineering from him. But these skills were always exhibited in a humble and calm manner. Rolando was also always ready to learn new things himself. — Second, his ability to set a technical vision for the team, design the system which solves the right problem and strikes a pragmatic balance between technical excellence and product roadmap. — And third, Rolando’s ability to lead the team in a way that makes it an enjoyable and safe environment for the engineers. I have really appreciated his leadership style(humble yet assertive when needed) which allowed the team to be a productive and fun place to work. I will always be happy to work together again!</blockquote><blockquote><em>Peter Popov (Engineering Manager — Autonomous Services)</em></blockquote><blockquote>Mr. Rolando Santamaría Masó, is a highly professional person, with a technical training and impressive productivity, entrepreneur, high teamwork skills, independence and ease in the interpretation and resolution of problems. He is a person, ethical, honest, modest, intelligent, good companion, he brings a lot of value to the teams in which he is linked. Personally, I do not just recommend it with all the guarantees</blockquote><blockquote><em>Rene LO (Chairman at Soltein sa de cv)</em></blockquote><h3>Conclusions</h3><p>Good people usually reach the stars, I am lucky I have met Rolando in my career and personal life and for sure good friendships still exist nowadays.</p><p>With this article, I have proven that we have more than 10 reasons to rely on Rolando’s expertise to discuss important challenges that we may come up with. Rolando has been there supporting me and my Team at <a href="https://codegenio.com">Codegenio </a>in his spare time and I am very thankful for this.</p><p>Rolando lives in Berlin, Germany and I am looking forward to participating in events, conferences, in nearby IT events that may occur in the near future in the European area to stay energized and up to date.</p><p>Please follow Rolando on LinkedIn (<a href="https://www.linkedin.com/in/kyberneees/">https://www.linkedin.com/in/kyberneees/</a>), and Twitter (<a href="https://twitter.com/kyberneees">https://twitter.com/kyberneees</a>).</p><p>If you speak Spanish you will find his Podcast very interesting and rich in knowledge with the title, <em>“Un ingeniero Informático en Berlin” </em>see the link here <a href="https://anchor.fm/kyberneees">https://anchor.fm/kyberneees</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=49c6ab8633c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Clustering your Google Map markers in the server side?]]></title>
            <link>https://viticoinf.medium.com/why-clustering-your-google-map-markers-in-the-server-side-49ea2d7f3700?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/49ea2d7f3700</guid>
            <category><![CDATA[geojson]]></category>
            <category><![CDATA[google-maps]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[supercluster]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 15:39:38 GMT</pubDate>
            <atom:updated>2022-02-17T04:37:54.858Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JHYn7zUsBBEjtQLw.jpg" /></figure><p>Currently, programmers have to face more frequently the development of applications that interact with maps, coordinates and markers. When developing such an application or module, a very important factor must be taken into consideration: performance. Imagine a module that shows a map and that the information generated by the markers grows daily, naturally if the markers increase, more information is sent from the server to the client and the time may come when the application does not respond. The solution will be to group the markers in a cluster to improve the performance in the representation of the information on the map. This solution is not new, there are libraries such as Google Maps API that handle this problem, but they do it completely on the client side asking the server for all the information to group the markers. This can cause a performance problem on the client, because all the information must be requested from the server for the clustering logic to take place.</p><p>During the reading of this article you will learn the basics to group the markers on the server and send them to the client in a minimized way. It can be mentioned that the Codegenio development team implemented this principle, obtaining the expected result.</p><h4>Why server clustering?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/797/0*3JTxC-pihTGe-6Lq.png" /></figure><p>Many developers prefer to use the Google Maps API as a map manager in their web applications. The Google Maps API has the advantage of having extensive documentation on its <a href="https://developers.google.com/maps/documentation/javascript/reference">official site</a>. This Library has support for clustering its markers (<a href="https://developers.google.com/maps/documentation/javascript/marker-clustering">see the following example</a>).</p><p>This is very good, but what would happen if we had to represent 100,000 markers, or what about 500,000 Humm, it is very likely that the browser does not respond because it has to make a request for 500,000 records to the server, create on client 500 000 markers and then group them to represent them on the map. This, as you may have noticed, is not entirely optimal, the ideal would be to send the client as little information as possible and represent all the data on the map.</p><p>In other words, it would basically be to perform the clustering process on the server and send the client a data structure that contains at least one position (lat, lng) and an integer representing the number of markers that exist in a given radius around the position. Our development team recently faced that problem and implemented this solution in the <a href="https://codegenio.com/reaquis-another-success-story-for-codegenio/">Reaquis</a> application, in which its database grew and therefore had to represent many more locations on the map.</p><h4>The solution</h4><p>If we had to name an axis dependency for the solution of the problem, it would undoubtedly be the library that groups the markers on the server, in this case the focus will be on what Codegenio used to solve the problem in question. Well, the magic of clustering was done with the <a href="https://github.com/mapbox/supercluster">SuperCluster</a> library, along with the <a href="http://geojson.org/">GeoJson</a> exchange format.</p><ul><li><strong>GeoJson:</strong> Format for encoding a variety of geographic data structures.</li><li><strong>SuperCluster:</strong> A very fast JavaScript library for geospatial point clustering for browsers and Node.</li></ul><p>Basically SuperCluster loads the data that includes the coordinates (lat, lng). Once loaded, the method that groups all this data for a given zoom level is invoked. All this input and output information for the SuperCluster library is done in GeoJSON format. Let’s look at the following code snippet that is nothing more than the logic of a <a href="https://sailsjs.com/documentation/reference">SailsJs</a> controller.</p><p>JavaScript</p><pre>const Supercluster = require(&#39;supercluster&#39;);<br>const GeoJSON = require(&#39;geojson&#39;);</pre><pre>module.exports = {<br> clusteredMarkers: async (req, res) =&gt; {<br>  try {<br>   let zoom = req.param(&#39;zoom&#39;);<br>   let data = await getData(req.allParams());<br>   let geoJsonData = GeoJSON.parse(data, {Point: [&#39;lat&#39;, &#39;lng&#39;]});<br>   let index = new Supercluster({<br>       radius: 128,<br>       maxZoom: 18<br>    }).load(geoJsonData.features);</pre><pre>let clusteredData = index.getClusters([-180, -90, 180, 90], zoom);</pre><pre>res.send({<br>    success: true,<br>    total: clusteredData.length,<br>    records: clusteredData<br>   });<br>  } catch (err) {<br>   if (err) {<br>    return res.negotiate(err);<br>   }<br>  }<br> }<br>};</pre><p>Did you miss something? Do not worry, explain each part of the code.</p><ul><li>First, they are the SuperCluster dependencies and a library that converts any javascript object to GeoJSON. To install them npm install geojson and <strong>npm install supercluster</strong>.</li><li>The zoom variable is obtained from the client and its value changes when the map changes, zooms in or out.</li><li>The variable data is an array of objects that are get from the database. Here it will be assumed that the getData() method will go to the database and get the data from a collection. If SailsJs is used with MongoDb as a database it is recommended to make a native query, a reference of this can be seen <a href="https://sailsjs.com/documentation/reference/waterline-orm/models/native">here</a>. The value of the data variable should be something like this:</li></ul><p>JSON</p><pre>[{<br>   &quot;name&quot;: &quot;mark 1&quot;,   <br>   &quot;status&quot;: &quot;STAUS-1&quot;,<br>   &quot;street&quot;: &quot;81 st&quot;<br>    ...<br>   &quot;lat&quot;: &quot;55.91581954235805&quot;,<br>   &quot;lng&quot;: &quot;39.01556461897831&quot;,</pre><pre>},<br>  { .....<br>  }<br>]</pre><ul><li>The geoJsonData variable is the result of parsing the data object, see that the second parameter specifies what data attributes the latitude and longitude contain for each element. The result would be an object with a collection of features as shown below:</li></ul><p>JSON</p><pre>{<br> &quot;type&quot;: &quot;FeatureCollection&quot;:<br> &quot;features&quot;: [{<br>    &quot;type&quot;: &quot;Feature&quot;,<br>    &quot;geometry&quot;: {<br>     &quot;type&quot;: &quot;Point&quot;,<br>     &quot;coordinates&quot;: [125.6, 10.1]<br>      },<br>    &quot;properties&quot;: {<br>      &quot;name&quot;: &quot;mark 1&quot;,<br>      &quot;status&quot;: &quot;STAUS-1&quot;,<br>      &quot;street&quot;: &quot;81 st&quot;,<br>       ...<br>      &quot;lat&quot;: &quot;55.91581954235805&quot;,<br>      &quot;lng&quot;: &quot;39.01556461897831&quot;<br>      <br>      }     <br>     },....<br> ]<br>}</pre><ul><li>The index variable is an instance of SuperCluster and is loaded when invoking the load() method by passing the features of the GeoJson object.</li><li>The clusteredData variable is the final result of the grouping, it is an array of features that will be sent to the client to create the markers on the map. Depending on the information of the feature a cluster or a marker will be displayed.</li></ul><p>JSON</p><pre>[<br> {<br> &quot;type&quot;: &quot;Feature&quot;,<br> &quot;id&quot;: 2120,<br> &quot;properties&quot;: {<br>   &quot;cluster&quot;: true,<br>   &quot;cluster_id&quot;: 2120,<br>   &quot;point_count&quot;: 1800,<br>   &quot;point_count_abbreviated&quot;: 1.8k<br>   },<br> &quot;geometry&quot;: {<br>   &quot;type&quot;: &quot;Point&quot;,<br>   &quot;coordinates&quot;: [<br>      6.082657800000026,<br>      50.77498895307875<br>     ]<br>  }<br>},<br>{<br> &quot;type&quot;: &quot;Feature&quot;,<br> &quot;properties&quot;: {  <br>  &quot;name&quot;: &quot;mark 1&quot;,<br>  &quot;status&quot;: &quot;STAUS-1&quot;,<br>  &quot;street&quot;: &quot;81 st&quot;<br>  },<br>&quot;geometry&quot;: {<br>    &quot;type&quot;: &quot;Point&quot;,<br>    &quot;coordinates&quot;: [<br>       6.0771259,<br>       50.78158579999999<br>     ]<br>  }<br>},<br>...<br>]</pre><p>So far what has been done is to obtain the data that will form the markers, convert it to the GeoJson format, load it into SuperCluster, cluster it and send it to the client.</p><p>Here the reader is only given an idea of how to group these markers on the server and send them to the client when an HTTP request arrives at the method.</p><h4>How do we represent this in the client?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*woo-A7oT7cTHkzbs.png" /></figure><p>As previously mentioned, the Google Maps API is one of the most used by developers, so the focus will be based on this API. Surely you noticed that SuperCluster is a library developed by <a href="https://www.mapbox.com/">MapBox</a> but do not worry that we can make it work with Google Maps, in addition the logic of the clusters has been made on the server allowing Google Maps not to know that we are using SuperCluster.</p><p>To represent the markers, the following must be done:</p><ol><li>Create a map</li><li>Add an event that triggers when the visual limits of the map change</li><li>Make a request to our method on the server with the value of limits and zoom</li><li>Represent the markers on the map using the server information</li></ol><p>JavaScript</p><pre>const map = new google.maps.Map(document.getElementById(&#39;map&#39;));<br>const markers = [];</pre><pre>map.addListener(&#39;bounds_changed&#39;, function () {<br> const bounds = map.getBounds();</pre><pre> const northEast = bounds.getNorthEast();<br> const southWest = bounds.getSouthWest();<br> const zoom = map.zoom;<br> getDataFromServer(<br>    southWest.lng(), <br>    southWest.lat(), <br>    northEast.lng(), <br>    northEast.lat(), <br>    zoom<br> ).then(function (res) {<br>  const geoJsonData = res.records;<br>  for (let data of geoJsonData) {<br>   if (data.properties.cluster) {<br>    markers.push(new google.maps.Marker({<br>      label: data.properties.point_count_abbreviated,<br>      icon: {<br>       path: google.maps.SymbolPath.CIRCLE        <br>      },<br>      map: map<br>     })<br>    );</pre><pre>} else {<br>    markers.push(new google.maps.Marker({<br>      label: data.properties.name,<br>      icon: {<br>       path: google.maps.SymbolPath.BACKWARD_OPEN_ARROW<br>      },<br>      map: map<br>     })<br>    );<br>   }<br>  }<br> });<br>});</pre><p>In this code these 4 aspects are covered, it is a basic example that the final result will be to show the grouped markers that have been grouped on the server.</p><p>If you are familiar with the Google Maps API it will not be difficult to understand the operation of the previous code. Note that it is assumed that the getDataFromServer () method is responsible for going to the server through an HTTP request to the clusteredMarkers method of our server and obtaining the information in GeoJson format to build the markers. This method was not implemented because it is not the objective of this article, but you can use some of the libraries used to make HTTP requests such as <a href="https://github.com/request/request">Request</a>, <a href="https://github.com/axios/axios">axios</a> or <a href="https://github.com/socketio/socket.io">socket.io</a>.</p><h4>Conclusions</h4><p>If you have reached this point, we can share the conclusion of this article, focusing on the fact that doing the process of grouping markers on the server will ensure that our application does not collapse when we zoom out of the map and a few thousand markers should be displayed. What is shown here is just an example that can be used for developers to apply this principle in modules that interact with maps that require displaying large amounts of information.</p><p>This article was originally posted at <a href="https://codegenio.com/clustering-google-map-markers-server-side/">Codegenio’s blog</a> by our Backend Engineer Dariel Noa.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=49ea2d7f3700" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Defining requirements as an agile Team]]></title>
            <link>https://viticoinf.medium.com/defining-requirements-as-an-agile-team-41e057193ce1?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/41e057193ce1</guid>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[agile-methodology]]></category>
            <category><![CDATA[software-life-cycle]]></category>
            <category><![CDATA[software-requirements]]></category>
            <category><![CDATA[jira]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 15:31:54 GMT</pubDate>
            <atom:updated>2020-04-09T15:31:54.625Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pUfKcxutGyTGtCt6.jpeg" /></figure><p>Defining the requirements is undoubtedly one of the most important steps to take into consideration during the development life cycle of a system. A requirements document meets the needs that give rise to the beginning of a project and is used to define what needs to be done; it is the basis of any software project.</p><p>When we talk about writing a requirements document, we instantly think (those of us who knew how it was done in the past), in a super detailed document that is difficult to maintain, but this is not practical or a trend in the development world today.</p><p>The objective of this article is to illustrate how the requirements are classified in the world nowadays and how we do the process of lifting requirements in Codegenio, so that our future clients have a better idea of how we function as a company.</p><p>When defining requirements, it is easy to get confused when attempting to distinguish between business, user and software requirements. Each and every one of them is different and serves different purposes.</p><h3>Requirements Classification</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iMqGd713kQraLcz3.png" /></figure><p>In Codegenio we take care of separating the requirements in these three categories so that it is much simpler for our clients and developers to understand the projects we develop.</p><h3>Business requirements</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*YL9JQzB_3ehu-hV_.png" /></figure><h3>User requirements</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*N4GWJEJX1hDcnQmw.png" /></figure><p>In Codegenio we have business analysts that carefully analyze user requirements and build a set of high quality system requirements and ensure that requirements meet quality standards defined by the company.</p><h3>System requirements</h3><p>These requirements are the building blocks developers use to build the system. These are the traditional “shall” statements that describe what the system “shall do.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*F7QdrI-MtjZqWrg-.png" /></figure><p>The plan for implementing functional requirements is detailed in the system design. The plan for implementing non-functional requirements is detailed in the system architecture. Some examples of non-functional requirements are: Usability, Security, Reliability, Performance, among others.</p><h3>Managing requirements as an agile team</h3><p>When developing a product in Codegenio, we always make sure that the stakeholders agree on what needs to be delivered first. Product owners prioritize user stories in order to make them ready at the start of a sprint resulting in higher product quality. Iterations can also be used to clarify a requirement.</p><p>A user story is a documented description of a software feature seen from the end-user perspective. The user story describes exactly what the user wants the system to do. In Agile projects such as the ones we develop at Codegenio, user stories are organized in a <em>backlog</em>, which is an ordered list of product functions. Nowadays, user stories are considered to be the best format for backlog items.</p><p>A typical user story is written like this: <em>As a &lt;type of user&gt;, I want &lt;some goal&gt; so that &lt;some reason&gt;.</em></p><p><strong><em>Example</em></strong><em>: As a service provider, I want to add descriptions to services so that users can later view these descriptions and compare the products.</em></p><p>Every user story must be accompanied by acceptance criteria. These are the conditions that the product must satisfy to be accepted by a user, stakeholders, or a product owner.</p><h3>Conclusion</h3><p>Our team is aware of all the new agile methodologies in order to make easier the creation and maintenance of any project’s requirements. We work in sprints, with user stories managed in our backlog guaranteeing all the stakeholders satisfaction. As a company we are perfectly able to develop any project using the best practices to write a requirements document.</p><p>This article was originally posted at <a href="https://codegenio.com/defining-requirements-as-an-agile-team/">Codegenio’s blog</a> by our Project Manager <a href="https://medium.com/u/a0f889e1cd23">Guelmis Lázara Martínez Ramírez</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=41e057193ce1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why use “Clean Architecture” in our projects?]]></title>
            <link>https://viticoinf.medium.com/why-use-clean-architecture-in-our-projects-1fdaa0a4dec2?source=rss-39f4e21a8733------2</link>
            <guid isPermaLink="false">https://medium.com/p/1fdaa0a4dec2</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[clean-architecture]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[web-development]]></category>
            <dc:creator><![CDATA[Victor Barzana]]></dc:creator>
            <pubDate>Thu, 09 Apr 2020 15:28:42 GMT</pubDate>
            <atom:updated>2020-04-09T15:28:42.293Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*57dIbpGGrFR2hhoC.jpg" /></figure><p>This article’s objective is to explain the reasons that led me to propose “Clean Architecture” as an architecture to develop projects in our company. After learning about it, the Codegenio projects are developed following this architecture and we solve the problems of coupling, maintenance and productivity in general. Before being able to answer why are we using this architecture, I present some basic concepts for greater understanding.</p><h3>What is Software Architecture?</h3><p>It consists of a set of coherent patterns and abstractions that provide a clear and defined framework to interact with the software source code, allowing programmers, analysts and the entire set of software developers to share the same line of work and cover all objectives and application restrictions. It is considered the highest level in the design of the architecture of a system since they establish the structure, operation and interaction between the parts of the software.</p><h3>What is Clean Architecture?</h3><p>Clean Architecture is a compendium of development principles and patterns that aim to facilitate the software construction process, as well as its maintenance. It refers to organizing the project making it easy to understand and change as the project grows or one of the technologies used needs to be replaced, either because it has become obsolete or for any other strategic reason.</p><h3>Similarities between architectures</h3><p>Applying Clean Architecture was not so difficult to assimilate by the team. Domain-oriented architectures such as the Layered Architecture proposed by Eric Evans, Uncle Bob’s Clean Architecture, Jeffrey Palermo’s Onion Architecture have features in common with it.</p><p>Each of these architectures produces systems that have the following characteristics:</p><ul><li><strong>Independent of frameworks</strong>. The architecture does not depend on the existence of some library of feature-laden software. This allows you to use such frameworks as tools, rather than forcing you to cram your system into their limited constraints.</li><li><strong>Testable</strong>. The business rules can be tested without the UI, database, web server, or any other external element.</li><li><strong>Independent of the UI</strong>. The UI can change easily, without changing the rest of the system. A web UI could be replaced with a console UI, for example, without changing the business rules.</li><li><strong>Independent of the database</strong>. You can swap out Oracle or SQL Server for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.</li><li><strong>Independent of any external agency</strong>. In fact, your business rules don’t know anything at all about the interfaces to the outside world.</li></ul><p>The following diagram is an attempt at integrating all these architectures into a single actionable idea.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/772/0*-oPQJVOqQhseDmP_.jpg" /></figure><h3>Benefits</h3><ul><li>Creating decoupled applications that are easier to test.</li><li>Greater flexibility to add or remove software features.</li><li>Component-based design with well-defined responsibilities.</li><li>Postponement of critical decisions until the last required moment.</li></ul><h3>Main Uses</h3><ul><li>Business applications projected that are in operation indefinitely.</li><li>Distributed systems that benefit from an uncoupled design (e.g. using microservices).</li><li>Heterogeneous infrastructures at the level of databases, web services, etc.</li><li>Applications designed to be extended by third parties through plugins.</li></ul><h3>Conclusion</h3><p>Conforming to these simple rules is not difficult, and it will save you a lot of headaches going forward. By separating the software into layers and conforming to the Dependency Rule, you will create a system that is intrinsically testable, with all the benefits that it implies. When any of the external parts of the system become obsolete, such as the database, or the web framework, you can replace those obsolete elements with a minimum of fuss.</p><p>These advantages are not obtained by chance, intentional planning is needed, because of them, our company uses Clean Architecture.</p><p>This article was originally posted by Marcos Gonzalez <a href="https://codegenio.com/why-use-clean-architecture-in-our-projects/">at Codegenio’s blog</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1fdaa0a4dec2" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>