<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ricardo Giro</title>
    <description>The latest articles on DEV Community by Ricardo Giro (@xarop_pa_toss).</description>
    <link>https://dev.to/xarop_pa_toss</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F846006%2F2c58b26f-e07d-413c-8483-847e2e5d6447.jpeg</url>
      <title>DEV Community: Ricardo Giro</title>
      <link>https://dev.to/xarop_pa_toss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xarop_pa_toss"/>
    <language>en</language>
    <item>
      <title>Creating a personal AI assistant a.k.a An approachable series on learning new stuff!</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Fri, 10 May 2024 16:47:00 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/creating-a-personal-ai-assistant-aka-starting-a-new-project-and-letting-curiosity-take-over-gff</link>
      <guid>https://dev.to/xarop_pa_toss/creating-a-personal-ai-assistant-aka-starting-a-new-project-and-letting-curiosity-take-over-gff</guid>
      <description>&lt;p&gt;Although I've been programming professionaly for a couple of years now, most of my work has been rather narrowly focused on C# and .NET (and old versions at that), so I decided to start a new project and dive into completely unknown territory.&lt;/p&gt;

&lt;p&gt;As such, I'm creating this new series where I'll create &lt;strong&gt;Flo, a virtual, AI powered and fully voice controlled assistant that will be able to engage in conversation as well as do various things through the power of RESTful APIs!!&lt;/strong&gt; I'll be using Golang, a programming language I know nothing about too.&lt;/p&gt;

&lt;p&gt;I hope any and all beginners can learn as much as I hopefully will during this series! Feel free to ask any questions or give guidance in the comments.&lt;/p&gt;

&lt;p&gt;I'll be covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planning and thought process&lt;/li&gt;
&lt;li&gt;Structuring of tasks and problems&lt;/li&gt;
&lt;li&gt;Deconstruction of bigger goals/problems into smaller, more manageable pieces&lt;/li&gt;
&lt;li&gt;Learning a new programming language&lt;/li&gt;
&lt;li&gt;Using RESTful APIs and JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Things I'll be using (that I know of at the start):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://go.dev"&gt;Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/dialogflow"&gt;Google DialogFlow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/openai-api/"&gt;OpenAI API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://alphacephei.com/vosk/"&gt;Vosk STT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-us/products/ai-services/text-to-speech"&gt;Azure TTS (probably since it allows for custom voices too)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Meet Flo(w)
&lt;/h2&gt;

&lt;p&gt;The main focus of this project is &lt;strong&gt;Flo&lt;/strong&gt;, a fully voiced and voice activated AI assistant that will have two jobs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Interact with multiple online services mainly via 
  RESTful APIs
  &lt;p&gt;A RESTful API is an architectural style for an application program interface (API) that uses HTTP requests to access and use data. This basically mean we can connect to thousands of services on the web and ask it to do many different things. For example, get a video from Youtube, add an appoitment to you Outlook Calendar or read from a Google Sheets document.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;Keep a fluent conversation by using OpenAI's API which allows it to "talk" to ChatGPT.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The two big technologies at work here are &lt;strong&gt;Google's DialogFlow&lt;/strong&gt; and &lt;strong&gt;OpenAI's GPT&lt;/strong&gt;. To make the whole "I talk, you answer" thing work though I will also need a couple of STT (Speech to Text) and TTS (Text to Speech) services. I'm thinking of using the Azure ones, but OpenAI also has these services. Vosk is also an offline option which would increase perfomance; it might come down to a matter of cost and ease of use!&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the DialogFlo though?
&lt;/h2&gt;

&lt;p&gt;DialogFlow is an incredibly powerful, yet complex tool which makes it even more fun to learn!&lt;br&gt;
It is capable of recognizing speech patterns and it can be even be trained so it more easily recognizes intentions! You can then link these intentions (for example, setting up an appointment or asking what the weather is) to different parts of your program.&lt;/p&gt;

&lt;p&gt;One really cool thing about DialogFlow is that it can also recognize when it doesn't have enough information to proceed.&lt;/p&gt;

&lt;p&gt;As an example, lets say that you told it the following sentence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Hey Flo, can you setup a dentists appointment for me please?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The STT service would turn your voice into these words and then DialogFlow would go through and catch keywords that show your Intention and Context (more on this in following posts).&lt;/p&gt;

&lt;p&gt;So Flo would filter the words "setup", "appointment", "dentist" and would be routed to a coded function that uses the Google Calendar API and schedules something. But you didn't tell Flo &lt;em&gt;when&lt;/em&gt; to set this up. So Flo would reply with an AI voice (made by the TTS service) saying something like "When should I schedule this appointment to?".&lt;/p&gt;

&lt;p&gt;Now, DialogFlow in itself is a very capable tool but you do have to code in the responses and so on and it might feel pretty... robotic 🤖 Also, Flo doesn't need to just be a mindless assistant when we have the power of..&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversation with the GeePeeTee
&lt;/h2&gt;

&lt;p&gt;ChatGPT is the most well known service offered by OpenAI and gladly we can have our app talk to it! This is actually simpler than using DialogFlow and is basically just sending it some prompts just like you do on the &lt;a href="//www.chat.openai.com"&gt;ChatGPT website&lt;/a&gt;. I'll be using it mostly to the same effect I use the website version for which is learning, asking random stuff about the world but also to give Flo more natural responses after she completes tasks.&lt;br&gt;
For example, when Flo adds the dentist's appointment, I can run that information through ChatGPT and ask it to &lt;a href="https://chat.openai.com/share/bf599283-462c-440d-972d-16bbf21e42db"&gt;repeat it back in a natural, conversational way.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;On the next episode&lt;/em&gt;...&lt;br&gt;
We'll be going through some initial, yet important project setup!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting up a basic Go project using VSCode&lt;/li&gt;
&lt;li&gt;Importing the packages we need to make this all work&lt;/li&gt;
&lt;li&gt;Setting up API Keys and using Environment Variables to keep them safe&lt;/li&gt;
&lt;li&gt;Using GitHub for version control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cheers and bye for now! 😁&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>go</category>
      <category>learning</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>On requirements and their documents</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Mon, 05 Jun 2023 14:17:22 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/on-requirements-and-their-documents-1d26</link>
      <guid>https://dev.to/xarop_pa_toss/on-requirements-and-their-documents-1d26</guid>
      <description>&lt;h2&gt;
  
  
  A small preface on unexpected complexity
&lt;/h2&gt;

&lt;p&gt;I remember back in school when learning about &lt;a href="https://en.wikipedia.org/wiki/Relational_database" rel="noopener noreferrer"&gt;RDBs&lt;/a&gt;, my teacher asked the class to make a flowchart of how an ATM works (from user approaching it to receiving cash).&lt;/p&gt;

&lt;p&gt;The flowchart started small with inserting card, inputting code, choosing cash amount and finally receiving that amount. That's simple enough but hardly reflective of reality as we quickly realised that this simple algorithm is missing critical rules, presented here on the second column.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Restriction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Insert card&lt;/td&gt;
&lt;td&gt;Is card invalid? (marked as stolen, expired)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input Code&lt;/td&gt;
&lt;td&gt;Is code correct? If not, repeat up to two more times&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Choose cash amount&lt;/td&gt;
&lt;td&gt;Does account have enough funds?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Receive cash&lt;/td&gt;
&lt;td&gt;Does ATM have enough cash to give user?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It obviously gets more complex than this! Here is a flowchart I quickly found online (&lt;a href="http://www.softwareideas.net" rel="noopener noreferrer"&gt;www.softwareideas.net&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxce1euuids33y0mhqq3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxce1euuids33y0mhqq3v.png" alt="ATM flowchart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All of this to say that the importance of a good pre-study of the apps main functions, expected behaviour and it's obvious restrictions is very important. &lt;br&gt;
&lt;strong&gt;You can't account for everything at the start, but frontloading the obvious can save you loads of time and backtracking.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Requirement Documents
&lt;/h2&gt;

&lt;p&gt;GPT kept telling me about Requirement Documents and how they can help plan out the apps functionality. It suggested using something called &lt;a href="https://www.digitalnatives.hu/blog/user-story-vs-use-case/" rel="noopener noreferrer"&gt;User Stories and Use Cases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;, used in many fields besides IT, are basically interactions between an Actor and a System to reach a Goal. The Actor doesn't necessarily need to be a user, it can be some part of your app that is interacting with something else.&lt;br&gt;
&lt;strong&gt;User Stories&lt;/strong&gt; aren't much different but are seen/written from the users point of view. They are usually informal and describe a need that a hypothetical (or real) user has that they want the app to fulfil. There's more to it but I think I'll stick to the basic.&lt;/p&gt;

&lt;p&gt;I'll also simply list requirements and things I think matter in the document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the Req Doc
&lt;/h2&gt;

&lt;p&gt;I won't go into much detail but the document is a series of  lists that have some basic information on what I want the app to do, as well as things the project itself must explore!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Baseline functionality explained through bulletpoints, use cases, user stories, etc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authentication and Authorization: ASP.NET Core Identity for role based access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Database: using MariaDB and the Entity Framework Core. We'll get into schemas later!!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Statistics and Graphing: the app must have a section where it shows stats and graphs to the user. GPT recommended Chart.js or Google Charts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unit Testing: I have veeeeery little experience with testing but it is something I have to use all throughout the project. Will look into xUnit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Defining goals and base functionality!</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Mon, 05 Jun 2023 14:16:07 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/defining-goals-and-base-functionality-bc2</link>
      <guid>https://dev.to/xarop_pa_toss/defining-goals-and-base-functionality-bc2</guid>
      <description>&lt;p&gt;Let's start by putting to paper what the app is supposed to do. We'll start by what it is and then list out what is has to do, and what it will not do. What problems will it solve? What is the base approach to solving them?&lt;br&gt;
Regardless of what is written at the start, no plan survives contact with the enemy and the app is bound to change with time. But having a good idea of it's &lt;strong&gt;scope&lt;/strong&gt; is important.&lt;/p&gt;

&lt;h2&gt;
  
  
  This app is a workout tracker!
&lt;/h2&gt;

&lt;p&gt;It is meant to be used with the &lt;a href="https://www.hybridcalisthenics.com/"&gt;Hybrid Calisthenics&lt;/a&gt; programme (HC). It will have pre-created exercises.&lt;/p&gt;

&lt;p&gt;As per HC, exercises have progressions which are variations on the exercise itself (actual form, not reps/sets). As such, HC groups all push-up related exercises into a Push-Up group, and then their variations (knee push-ups, wall push-ups, etc.) as Progressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals
&lt;/h2&gt;

&lt;p&gt;The app will have/allow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.codecademy.com/article/what-is-crud"&gt;CRUD&lt;/a&gt; for exercise groups, their progressions, and the difficulty levels for each progression. Progressions will always have three difficulties (amount of sets + reps): Easy, Medium and Hard.&lt;/li&gt;
&lt;li&gt;CRUD workouts. Workouts are sets of exercises.&lt;/li&gt;
&lt;li&gt;CRUD reactions to past workouts. The user should be able to fill in if they were able to succeed or, if not, how far they got into their workout.&lt;/li&gt;
&lt;li&gt;Schedule workouts/single exercises and react to workouts on a calendar. The calendar is meant to be the main UI of the app.&lt;/li&gt;
&lt;li&gt;User authentication and verification (login system) with Role-based functionality. Normal users have access to their own stats and base app functionality. An Admin role will be created that can see statistics for everyone (anonymously) but will have no real power over the users.&lt;/li&gt;
&lt;li&gt;See statistics via tables and graphs of how workouts are going overtime.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These systems all seem to interconnect even if slightly, so designing the DB schema should be simple enough :)&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Some structural planning</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Sun, 28 May 2023 13:45:30 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/some-structural-planning-3mgn</link>
      <guid>https://dev.to/xarop_pa_toss/some-structural-planning-3mgn</guid>
      <description>&lt;p&gt;So my first conversation with GPT was a bit overwhelming. There's a lot of stuff that goes into planning an app that I wasn't aware of, but they all do seem necessary (or at least beneficial); however, I probably don't need to go for all the planning methods.&lt;/p&gt;

&lt;p&gt;From the start I told it I would be using ASP.NET and some form of relational database. Some things kept coming up during the conversation:&lt;/p&gt;

&lt;h2&gt;
  
  
  Object-Relational Mapping
&lt;/h2&gt;

&lt;p&gt;Apparently there are frameworks that work as intermediaries between DBs and the app itself. Fantastic! But as I dug deeper, the rabbit hole revealed itself.&lt;/p&gt;

&lt;p&gt;As I understand it, you make your DBs schema and map it to your applications model using the ORM which manages the connection between them (EF Core was suggested since I'm using dotnet). The question is... what's an application model? I also saw mentions of model-view-viewmodel which probably fits into that category.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Choice
&lt;/h2&gt;

&lt;p&gt;I want to use some sort of relational database and since I'm pretty comfortable with SQL, I asked GPT for some recommendations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.sqlite.org/index.html"&gt;SQLite&lt;/a&gt; which I used in CS50 is filebased and very easy to use but I was looking for something server-based.but MariaDB is server-based instead of file-based.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; aims to be big and scalable but was probably way more than I need for this small project. It seems very strong for when you need great security and stability for big apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://mariadb.org/"&gt;MySQL/MariaDB&lt;/a&gt; is pretty light and seems easy enough to install on my Fedora machine. MariaDB is advertised as the clear upgrade to base MySQL. I also don't have experience with MySQL which is a plus.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.microsoft.com/en/sql-server/sql-server-downloads"&gt;Microsoft SQL Server&lt;/a&gt; is the big one. I'm pretty familiar with it and its Management Studio program, and although the Express version is perfect for this project, I want to learn new things&lt;br&gt;
**&lt;br&gt;
I ended up choosing MariaDB**. Had to uninstall a previous problematic installation but I got it working with a test DB in 5 minutes!!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll make a future post with how I'm sketching up my DBs schema.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>It's been a year. Time to make an app</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Fri, 26 May 2023 22:29:25 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/its-been-a-year-time-to-make-an-app-3hak</link>
      <guid>https://dev.to/xarop_pa_toss/its-been-a-year-time-to-make-an-app-3hak</guid>
      <description>&lt;p&gt;Last post was around May 2022 right when I started working where I am now: a small IT company focusing on implementing anything other small companies need. &lt;br&gt;
I've had some practice with installing and configuring networks, providing remote and physical tech support with various things like servers, SQL databases, VPNs, Office365 and email, etc.&lt;/p&gt;

&lt;p&gt;I also had the chance to program several code libraries in both C# and VBA to provide extended functionality to the Primavera ERP.&lt;br&gt;
Unfortunately, as the sole programmer, I haven't had much chances to implement methodologies and have a senior guide me.&lt;/p&gt;

&lt;p&gt;So now, after finishing the fantastic CS50 course from Harvard, I've decided to start a web app to learn about and practice the fundamentals that will serve as a basis to future career endeavours.&lt;/p&gt;

&lt;p&gt;The app, a "simple" calisthenics workout tracker will be built with ASP.NET and I want to implement a database to support it.&lt;br&gt;
I'll be using GPT to guide me through the steps since I have basically no knowledge of web development and proper project planning and implementation.&lt;/p&gt;

&lt;p&gt;And that's it for now... I'll use DEV to log my progress. Even if no one reads it, it'll help me organize my ideas :)&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Facing daunting tasks..</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Fri, 20 May 2022 22:23:38 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/facing-daunting-tasks-41l3</link>
      <guid>https://dev.to/xarop_pa_toss/facing-daunting-tasks-41l3</guid>
      <description>&lt;p&gt;Haven't posted in a while but for a good reason since I finally got a proper job in IT. Small company that, like most of its kind around here, specializes in some sort of ERP software but will do mostly anything your business needs; that includes POS setup for hotels and such, as well as setting up the infrastructure like physical servers and networks, Office 365 and all its components, etc.&lt;/p&gt;

&lt;p&gt;The main ERP we work with is called Primavera. Very modular and it can handle HR, everything related to sales/purchases/stocks, aftersales support. Comparable to Sage or SAP I reckon.&lt;/p&gt;

&lt;p&gt;We are now helping some customers upgrade from v9 to v10, which is usually not a problem except some of them have custom built classes and functions that work inside the ERP itself.&lt;br&gt;
Here's the catch: v9 uses VBA in all it's glory, with the editor inside the ERP itself and where the code runs as Macros (much like Excel), and v10 was fully converted to C# and you write .dll's that you then upload and use inside the program.&lt;br&gt;
As a novice programmer, I'm slowly grasping the intricate web of code that makes up what's available for me to tinker but it sure is a challenge. For some ungodly reason the documentation is crap or non-existent and I'm drowning in complex code.&lt;/p&gt;

&lt;p&gt;The question to you more experienced with this kind of stuff is:&lt;br&gt;
How do you delve into something as complex as a 20yo program with minimal guidelines on what to look for? Do you have a good method or tools to help with this? Any words of encouragement? :)&lt;/p&gt;

&lt;p&gt;Thanks fellas&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>beginners</category>
      <category>help</category>
    </item>
    <item>
      <title>Ye Olde TicTacToe</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Thu, 21 Apr 2022 01:53:12 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/ye-olde-tictactoe-fo3</link>
      <guid>https://dev.to/xarop_pa_toss/ye-olde-tictactoe-fo3</guid>
      <description>&lt;p&gt;It is time. Time for the one of the greatest rites of passage of all time... &lt;a href="https://github.com/xarop-pa-toss/py-tictactoe"&gt;Programming Tic Tac Toe.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I've been going through the great Edube Interactive Python beginner course and I was sort of expecting it to show up at some point.&lt;br&gt;
They restricted my moves a bit by setting up some functions beforehand; I didn't see the use in a couple of them at the start but since they were there, I tried to incorporate them into my solution. It made the whole thing even more fun :)&lt;/p&gt;

&lt;p&gt;I already programmed ConnectFour before so this, although still a challenge, wasn't completely new.&lt;br&gt;
I coded the whole thing in about 3 hours but I have to say, it's probably some of the sloppiest code I've ever written. It really drives home the need to learn best practices from the start, which is harder than you'd give it credit to be honest. Lots of good tutorials on how to code, but learning best practices requires a non-basic knowledge of whatever you're learning.&lt;br&gt;
But all in due time.&lt;/p&gt;

&lt;p&gt;Do you remember when you first programmed Tic Tac Toe? What challenged you the most? =D&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>It's better together..</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Fri, 15 Apr 2022 10:48:08 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/its-better-together-4p58</link>
      <guid>https://dev.to/xarop_pa_toss/its-better-together-4p58</guid>
      <description>&lt;p&gt;Last couple of days were some of the most fun I've had programming. A friend of mine recently got an internship after his masters in Digital Marketing and he caught an interest in data analysis and website scrapers. So he started learning Selenium and asked me for help.&lt;/p&gt;

&lt;p&gt;I bet that, to a more experienced coder, figuring out and integrating Selenium's webdriver basic functionalities would take no time at all; but it was a challenge to us. But luckily we were going through it together, and each time we'd find something in the documentation that was cool that we could use, we'd rush to tell the other and try it out.&lt;br&gt;
Lots of errors and breakpoints later, we got it to work! The script goes through a restaurants reviews, changes pages, exports to a .csv. And the best part is, it can be made better in so many ways.&lt;/p&gt;

&lt;p&gt;The secret to this really was cooperation. Brainstorming, going through ideas, putting them to pseudo-code, getting errors and figuring out what tools Selenium had in place to prevent those errors, etc. It all came together much more easily because there were two of us, and importantly, because we were at the same skill level.&lt;/p&gt;

&lt;p&gt;Sometimes it's easy to think "I can't do this, it's too complicated" but all you need is a fresh set of eyes to give you a different point of view!&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Alright, here we go!</title>
      <dc:creator>Ricardo Giro</dc:creator>
      <pubDate>Tue, 12 Apr 2022 12:34:38 +0000</pubDate>
      <link>https://dev.to/xarop_pa_toss/alright-here-we-go-54a8</link>
      <guid>https://dev.to/xarop_pa_toss/alright-here-we-go-54a8</guid>
      <description>&lt;p&gt;After studying Networking and Sys Admin stuff back at school about 8 years ago (damn I'm getting old), I worked in the field for a couple years. But you know, life has it's ways of messing with you so I ended up doing something completely unrelated.&lt;br&gt;
But I never lost the enthusiasm for tech and now I can finally get back in the business.. thing is, I don't know all that much practical stuff.&lt;br&gt;
So here's the plan, I want to be in a Cloud or Sys Admin related job in a year's time. I'm a very "jack of some trades, master of none" guy, mostly because I've studied on my own but haven't put into daily practice at a job, so it'll definitely be a challenge but I have a good idea of where to start.&lt;/p&gt;

&lt;p&gt;As we all know, clouds are made of Linux servers and the sky is the limit, so I'm starting there; I'll sprinkle in some Python as well (and some Bash oc) since I believe anyone in tech needs to know the basics of programming. Being able to automate simple things is a very powerful tool.&lt;/p&gt;

&lt;p&gt;The way I'm getting familiar with Linux is mostly through Hack The Box and Over The Wire stuff which is incredibly fun, but probably lacking in the Admin side of things, so I have to find some other study materials. The objective is to get something like the LPI Linux Essentials or Linux+.&lt;br&gt;
I also have a small MikroTik router that I love messing around with, setting up and resetting it into different configurations and I plan on using it in conjunction with a Linux machine setup as a NAS later on.&lt;/p&gt;

&lt;p&gt;For Python, I'm going through the great Edube Interactive free Python course so I can then get the PCEP-30-01 Exam (entry-level). Programming isn't my main focus here so that exam will be enough for now.&lt;/p&gt;

&lt;p&gt;I think Dev.to will be an amazing platform for me to document my voyage and eventually look back on it with pride :)&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
