<?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: Andres Ramirez</title>
    <description>The latest articles on DEV Community by Andres Ramirez (@gara501).</description>
    <link>https://dev.to/gara501</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F17215%2Fcb6b0970-3d4a-4ad1-bf41-aaec0a38c80d.jpeg</url>
      <title>DEV Community: Andres Ramirez</title>
      <link>https://dev.to/gara501</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gara501"/>
    <language>en</language>
    <item>
      <title>Apex Bestiary: a living cryptid archive powered by Sanity</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Tue, 22 Sep 2026 06:14:08 +0000</pubDate>
      <link>https://dev.to/gara501/apex-bestiary-a-living-cryptid-archive-powered-by-sanity-5aae</link>
      <guid>https://dev.to/gara501/apex-bestiary-a-living-cryptid-archive-powered-by-sanity-5aae</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path Two: Vibe-Code Something Strange&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apex Bestiary&lt;/strong&gt; is a living archive of cryptid sightings. It treats folklore as field intelligence: each report becomes a signal on a dark, interactive world map, and each signal can open a classified dossier containing the creature’s illustration, threat level, canonical traits, witness testimony, and folklore origin.&lt;/p&gt;

&lt;p&gt;I wanted the experience to feel less like browsing a database and more like receiving a strange transmission. The map has animated beacons, a cartographic loading state, a &lt;strong&gt;Random transmission&lt;/strong&gt; button that takes the visitor to an unexpected case file, and an opt-in &lt;strong&gt;Field receiver&lt;/strong&gt; that creates a subtle ambient signal in the browser. There is no autoplay or external audio asset: the receiver is synthesized only after an intentional click.&lt;/p&gt;

&lt;p&gt;The important part is that the weird interface is backed by real structured content. New reports are stored in Sanity and the map subscribes to the archive so it can reflect changes without a page refresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live map:&lt;/strong&gt; &lt;a href="https://apex-bestiary.vercel.app/map" rel="noopener noreferrer"&gt;apex-bestiary.vercel.app/map&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sighting report form:&lt;/strong&gt; &lt;a href="https://apex-bestiary.vercel.app" rel="noopener noreferrer"&gt;apex-bestiary.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/gara501/supremebestiary" rel="noopener noreferrer"&gt;github.com/gara501/supremebestiary&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Video
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/HwexrZf5Hes" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;No login is needed to explore the map. For the quickest tour, open the live map and press &lt;strong&gt;Random transmission&lt;/strong&gt;. It flies to a sighting and opens the corresponding creature dossier.&lt;/p&gt;

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

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

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

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is an Astro + React frontend and a Sanity Studio, deployed on Vercel.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Astro, React, Leaflet, and OpenStreetMap tiles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content layer:&lt;/strong&gt; Sanity Content Lake, Sanity Studio, GROQ, image assets, and real-time listeners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The map resolves the connected content it needs with a GROQ projection: a sighting retrieves its creature and region references, then uses the creature illustration and metadata in the dossier. The map’s real-time listener re-fetches the full projected sighting after an archive event, because live events alone do not resolve those relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Build Process
&lt;/h2&gt;

&lt;p&gt;I built this with &lt;strong&gt;Codex&lt;/strong&gt; as an AI-native coding partner, but the project was shaped through a series of concrete product and technical decisions rather than a single one-shot prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with the content model, not the map pins
&lt;/h3&gt;

&lt;p&gt;The first decision was to model the archive as relationships, not a flat list of monster locations. I created three document types in Sanity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Creature ── referenced by ──&amp;gt; Sighting &amp;lt;── references ── Region
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Creature&lt;/strong&gt; has its canonical and regional names, visual archive illustration, physical description, distinctive traits, threat level, and folklore origin.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Region&lt;/strong&gt; has a country, a geographic center, folklore history, and an estimate of oral-tradition depth.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Sighting&lt;/strong&gt; has an exact geopoint, witness details, a freeform account, observed traits, environmental conditions, corroboration references, a review status, and a computed credibility index.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That structure meant I could make a sighting feel like evidence rather than a marker with a tooltip. When someone opens a signal, the frontend can join the report with the creature’s illustration and cultural context in one dossier.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Make the map feel like an interface from the archive
&lt;/h3&gt;

&lt;p&gt;The early version worked, but it did not create much tension or curiosity. I iterated on the visual language: dark field notes, phosphor-green credibility signals, amber controls, scanning lines, and animated beacons.&lt;/p&gt;

&lt;p&gt;The main interaction changes were deliberately small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Locate signals&lt;/strong&gt; frames the active evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Random transmission&lt;/strong&gt; gives a visitor an immediate story without requiring them to know where to click.&lt;/li&gt;
&lt;li&gt;Selecting a marker flies the map to the case and opens a detailed dossier.&lt;/li&gt;
&lt;li&gt;A selected beacon intensifies, so the connection between map and dossier remains clear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The dossiers use Sanity image assets directly and show a short "developing archive plate" reveal while an illustration is loading. That turned an otherwise awkward blank image moment into part of the fiction.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Course-correct a real map failure
&lt;/h3&gt;

&lt;p&gt;One of the useful failures was the base map. I initially used a vector-style provider, but a content filter blocked the tile/style request in testing. The sighting markers still appeared, which made the archive feel broken: data without geography.&lt;/p&gt;

&lt;p&gt;Instead of treating that as a cosmetic issue, I changed the map to direct Leaflet + OpenStreetMap raster tiles and added a clear loading and timeout state. The frontend now waits for the base layer’s load event before dismissing the map loader. The result is both more reliable and much easier to explain to a first-time visitor.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Add sound without making the site noisy
&lt;/h3&gt;

&lt;p&gt;I considered background music, but decided it would work better as an instrument the visitor controls. The &lt;strong&gt;Field receiver&lt;/strong&gt; is an optional Web Audio composition: a very low oscillator pair and a small chirp when a dossier is selected. It starts only after a user gesture and can be switched off immediately.&lt;/p&gt;

&lt;p&gt;That gave the map atmosphere without shipping a heavy audio asset or surprising visitors with autoplay.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Ship and verify the complete path
&lt;/h3&gt;

&lt;p&gt;I deployed the frontend to Vercel, configured the Sanity project variables and CORS origin, and verified the live map, tile loading, animated signals, and an opened illustrated dossier in production.&lt;/p&gt;
&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sanity project ID:&lt;/strong&gt; &lt;code&gt;en0s05um&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset:&lt;/strong&gt; &lt;code&gt;bestiary&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The schema definitions are public in &lt;a href="https://github.com/gara501/supremebestiary/tree/main/backend/schemaTypes" rel="noopener noreferrer"&gt;&lt;code&gt;backend/schemaTypes&lt;/code&gt;&lt;/a&gt;. They are the core of the project: the frontend is designed around the relationships and editorial context in those documents, rather than using Sanity as a generic key-value store.&lt;/p&gt;
&lt;h2&gt;
  
  
  Agent Session
&lt;/h2&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;“From blank map to living archive: building Apex Bestiary with Codex&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I will evaluate the mapping options against the existing Leaflet and MapLibre setup, then keep the choice that gives the project a reliable, maintainable base.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;OpenStreetMap is a strong fit as the cartographic data source. The important distinction is between the data and the tile provider. It lets the project retain flexibility while Leaflet handles interaction and the custom archive interface.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I will build a field-archive visual language: dark cartography, phosphor and amber signals, scanning texture, animated beacons, and a control that frames active sightings. The structured content and real-time updates will remain intact.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The project fits Path Two because it uses Astro on the frontend and Sanity as the structured content layer. The submission still needs a public demo, a DEV.to post using the Path Two template and #sanitychallenge, a source link, and the Sanity project ID or public dataset reference.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Vercel is appropriate because the Astro app has a server-side reporting flow. I will use the Astro Vercel adapter, configure production environment variables and the Sanity CORS origin, then verify the public deployment.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Testing revealed that the original remote vector style could be blocked, leaving signals over an empty background. I replaced it with direct Leaflet plus OpenStreetMap tiles and added a cartographic loader that waits for the tile layer load event, with a clear fallback if the base map is unavailable.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I connected each sighting to its Sanity creature reference and created an illustrated dossier: threat level, credibility, canonical traits, witness account, location and folklore origin. I also added Random transmission to discover a case and an optional Field receiver using Web Audio, so there is atmosphere without autoplay or a separate audio asset.&lt;/p&gt;

                &lt;/div&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I added a reviewer-focused README with the live demo, architecture, schema relationships and setup instructions. The final submission draft explains the content model, the map failure and course correction, the interactive dossiers, the optional audio, and the production verification.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        1 of 1 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The most interesting part of this project was discovering that structured content can be the engine of a strange interface. A map of cryptids only becomes compelling when each point knows which creature it belongs to, where the tradition comes from, what traits were observed, and how a report relates to the rest of the archive.&lt;/p&gt;

&lt;p&gt;Sanity made it possible to build that connection first and then let the interface turn it into a field investigation.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
    <item>
      <title>The End of "Vibe Coding": Why Spec-Driven Development is the Future</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Wed, 03 Dec 2025 16:34:27 +0000</pubDate>
      <link>https://dev.to/gara501/the-end-of-vibe-coding-why-spec-driven-development-is-the-future-3hpa</link>
      <guid>https://dev.to/gara501/the-end-of-vibe-coding-why-spec-driven-development-is-the-future-3hpa</guid>
      <description>&lt;h2&gt;
  
  
  Spec Driven Development
&lt;/h2&gt;

&lt;p&gt;In the rapidly evolving world of software development, a new term has emerged to describe the current state of AI-assisted programming: &lt;strong&gt;"Vibe Coding."&lt;/strong&gt; It refers to the unstructured, chaotic process of chatting with an LLM (like Claude or ChatGPT), pasting code back and forth, and hoping the AI "gets the vibe" of what you're trying to build.&lt;/p&gt;

&lt;p&gt;While fun for prototypes, vibe coding is a nightmare for complex or long-term projects. Context gets lost, requirements drift, and you end up with a "spaghetti chat" history that no one can audit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter OpenSpec
&lt;/h3&gt;

&lt;p&gt;In a recent deep-dive, I explored &lt;strong&gt;OpenSpec&lt;/strong&gt;, a new open-source tool that brings engineering discipline back to AI coding through &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unlike context-driven frameworks (like BMAT) which can be overly complex, OpenSpec is lightweight and focuses on one core principle: &lt;strong&gt;Agree on the plan before writing the code.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;OpenSpec flips the script. Instead of asking an AI to "write a function," you ask it to "create a proposal."&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Proposal:&lt;/strong&gt; The AI generates a structured plan (&lt;code&gt;proposal.md&lt;/code&gt;) and a task list (&lt;code&gt;tasks.md&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Review:&lt;/strong&gt; You (the human) review these files. This is your chance to catch logic errors before a single line of code is written.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Implementation:&lt;/strong&gt; Once approved, the AI agent (works with Cloud Code, Windsurf, Cursor, etc.) executes the plan step-by-step.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Archive:&lt;/strong&gt; The change is merged and archived, keeping your active context clean.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why OpenSpec Wins for Beginners
&lt;/h3&gt;

&lt;p&gt;Many AI tools require you to start a project from scratch ("Greenfield"). OpenSpec, however, can be initialized in a repository with thousands of lines of code (Similar to GitHub SpecKit but simpler). It respects your existing structure; it only adds a &lt;code&gt;.openspec&lt;/code&gt; folder to manage future changes and all the definitions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;If you are tired of repeating yourself to your AI assistant, it's time to adopt a spec-driven workflow. OpenSpec offers a professional, scalable, and free way to harness the power of AI without losing control of your codebase.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ready to try it? Check out the &lt;a href="https://github.com/Fission-AI/OpenSpec" rel="noopener noreferrer"&gt;Fission-AI/OpenSpec&lt;/a&gt; repository on GitHub.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openspec</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Amazon Q - Kiro-dev</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Tue, 25 Nov 2025 03:15:10 +0000</pubDate>
      <link>https://dev.to/gara501/amazon-q-kiro-dev-faj</link>
      <guid>https://dev.to/gara501/amazon-q-kiro-dev-faj</guid>
      <description>&lt;p&gt;Of all the IDEs, CLIs, and systems in general that allow process automation through agents that I’ve tested, Kirodev has definitely been a great surprise. I decided to create a very simple test application: I obtained a dashboard-style template and replicated the components and look and feel as closely as possible.&lt;/p&gt;

&lt;p&gt;When installing the IDE, I found a new tab showing the enhanced tools: Specs, Hooks, Agent Steering, and MCP (I’ll explain this in more detail later). On the right side, the chat window, very similar to any other chat, like Kilocode, Continue, Windsurf, etc.&lt;/p&gt;

&lt;p&gt;But what makes it innovative? In my opinion, the simplified implementation of SDD (Spec Driven Development) is very well executed. Unlike GitHub’s version (GitHub Spec Kit), which is more complex and requires more definitions, Kiro integrates a simplified version that allows maximum control over the project’s development. You could say it’s vibe coding with steroids and a police officer watching every step. To me, this is truly the next step in the evolution of programming, where the machine handles the routine work and developers focus on the logic and architecture of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDD (Spec Driven Development)
&lt;/h2&gt;

&lt;p&gt;Programming through specs basically means you first define the specifications (specs)—a clear document describing what a functionality must do and how it should behave—and then you write code based on those specifications.&lt;/p&gt;

&lt;p&gt;To program using SDD in Kiro, we need to define 3 base files:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;requirements.md&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here, we define user stories and acceptance criteria, just as we do in Jira or any other ticketing tool, but using the EARS (Easy Approach to Requirements Syntax) notation. This notation looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WHEN&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;condition&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;THE&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="n"&gt;SHALL&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt; &lt;span class="n"&gt;behavior&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way of defining requirements allows greater clarity and traceability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;design.md&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this file, we define the entire architecture—everything we need for implementation, diagrams, etc.&lt;br&gt;
Here, we define how our system will work in terms of components and their interactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tasks.md&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is our implementation plan. Here we define the list of tasks to follow, step by step. Each task must be well defined and must specify what will be received. We must also specify whether we have dependencies (external libraries or other resources).&lt;br&gt;
One advantage is that this file runs task by task, allowing more granular control over the changes made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PBT (Property Based Tests)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another interesting feature of KIRO is PBTs, which in short are a more complete way of testing our development.&lt;/p&gt;

&lt;p&gt;Usually unit tests focus on testing specific functionalities without considering the broader context; this is exactly what PBT aims to fix.&lt;br&gt;
Properties are defined as the functionalities that must be fulfilled in our system. (For example, if we define a login, the user should be able to log in.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example of a PBT:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional test: The user adds car #5 to favorites, car #5 appears in their favorites list.&lt;/p&gt;

&lt;p&gt;Property-based test: For any user and any car, WHEN the user adds the car to favorites, THE system MUST display it in their favorites list.&lt;/p&gt;

&lt;p&gt;KIRO extracts the properties automatically from our requirements.md file and generates the test cases, trying to cover as many scenarios as possible.&lt;/p&gt;
&lt;h2&gt;
  
  
  Agent Steering
&lt;/h2&gt;

&lt;p&gt;If the specs define what needs to be created, agent steering defines how it must be created. This allows controlling the agents and telling them how to generate the implementation following specific rules.&lt;/p&gt;

&lt;p&gt;For example, if I have a project using React + Vite + Tailwind + TypeScript, I could define an agent steering file like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tailwind&lt;/span&gt;
  &lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;responsive&lt;/span&gt;
  &lt;span class="na"&gt;propsValidation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TypeScript interfaces&lt;/span&gt;
  &lt;span class="na"&gt;interaction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hooks only&lt;/span&gt;

&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;structure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;src/components&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;src/features&lt;/span&gt;
  &lt;span class="na"&gt;namingConvention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PascalCase for components&lt;/span&gt;

&lt;span class="na"&gt;pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mustInclude&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Header&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Sidebar&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MainContentLayout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In short, specs are the map and steering is the driver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hooks
&lt;/h2&gt;

&lt;p&gt;Another interesting addition is hooks, which are functions that trigger through events—events tied to creating, editing, or deleting a file, or even triggered manually.&lt;/p&gt;

&lt;p&gt;Hooks receive a prompt as a parameter and, depending on their trigger, can be very useful for code review, documentation, security review, automated commit message generation, and much more.&lt;br&gt;
An example of a manual hook would be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Review the current file for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="s"&gt;1. Code quality issues&lt;/span&gt;
&lt;span class="s"&gt;2. Potential bugs&lt;/span&gt;
&lt;span class="s"&gt;3. Performance optimizations&lt;/span&gt;
&lt;span class="s"&gt;4. Security vulnerabilities&lt;/span&gt;
&lt;span class="s"&gt;5. Accessibility concerns&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This hook would be executed manually on whichever file we choose.&lt;/p&gt;

&lt;p&gt;While there is an ocean of tools like this right now (Cursor, TRAE, Windsurf, Antigravity, etc.), KIRO has something in its favor: integration with AWS and its simplified definition of Spec Driven Development.&lt;br&gt;
Despite being a good tool, it is not exempt from errors—like all tools. Sometimes agent execution gets stuck, and lately, due to high demand, it takes a long time to execute some processes.&lt;/p&gt;

&lt;p&gt;We’ll see in a few months whether it manages to position itself as a leading tool in the market.&lt;/p&gt;

</description>
      <category>ia</category>
      <category>generative</category>
      <category>amazonq</category>
      <category>kirodev</category>
    </item>
    <item>
      <title>Agentic Context Engineering (ACE): una nueva forma de mejorar los LLMs sin tocar sus pesos</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Fri, 10 Oct 2025 15:59:39 +0000</pubDate>
      <link>https://dev.to/gara501/agentic-context-engineering-ace-una-nueva-forma-de-mejorar-los-llms-sin-tocar-sus-pesos-2ke8</link>
      <guid>https://dev.to/gara501/agentic-context-engineering-ace-una-nueva-forma-de-mejorar-los-llms-sin-tocar-sus-pesos-2ke8</guid>
      <description>&lt;p&gt;Los modelos de lenguaje grandes (LLMs) han demostrado un potencial enorme, pero también sus límites. Una de las preguntas más importantes hoy es: ¿cómo podemos hacer que un modelo mejore sin tener que volver a entrenarlo desde cero?&lt;/p&gt;

&lt;p&gt;Este &lt;a href="https://www.arxiv.org/pdf/2510.04618" rel="noopener noreferrer"&gt;artículo&lt;/a&gt; presenta una respuesta interesante: Agentic Context Engineering (ACE), un nuevo marco de trabajo diseñado para potenciar el rendimiento de los LLMs a través de una idea simple pero poderosa: no cambiar el modelo, sino cambiar su contexto.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema con los enfoques actuales
&lt;/h2&gt;

&lt;p&gt;Cuando hablamos de adaptar un modelo a nuevas tareas, la mayoría de los métodos actuales se centran en ajustar los pesos del modelo o en reescribir los prompts. Pero eso tiene sus límites. ACE identifica dos grandes problemas en estas estrategias:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sesgo de brevedad (Brevity Bias):&lt;/strong&gt; Los modelos tienden a preferir instrucciones cortas y concisas, lo que a menudo elimina detalles valiosos o heurísticas específicas del dominio. Resultado: un modelo más rápido, sí, pero menos preciso en tareas complejas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Colapso del contexto (Context Collapse):&lt;/strong&gt; Cada vez que un modelo reescribe o resume su propio contexto, tiende a simplificarlo demasiado. Con el tiempo, la información importante se degrada, y el rendimiento cae.&lt;/p&gt;

&lt;h2&gt;
  
  
  La propuesta de ACE: contextos que aprenden
&lt;/h2&gt;

&lt;p&gt;ACE parte de una idea inspirada en cómo aprendemos los humanos: experimentar, reflexionar y consolidar.&lt;br&gt;
En lugar de tratar el contexto como un texto estático o un simple resumen, ACE lo concibe como un “playbook” vivo, que evoluciona con cada interacción.&lt;/p&gt;

&lt;p&gt;Este proceso se organiza en tres componentes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generador (Generator):&lt;/strong&gt; Produce trayectorias de razonamiento frente a nuevas consultas, revelando patrones útiles y errores comunes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reflector (Reflector):&lt;/strong&gt; Analiza esas trayectorias y extrae lecciones, refinándolas con iteraciones sucesivas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Curador (Curator):&lt;/strong&gt; Sintetiza esas lecciones en actualizaciones incrementales del contexto, que se integran sin perder coherencia.&lt;/p&gt;

&lt;p&gt;De esta forma, el modelo no solo responde mejor, sino que aprende de su propio desempeño sin requerir supervisión constante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ojo a estos resultados:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En las evaluaciones realizadas, ACE mostró mejoras notables frente a los enfoques tradicionales:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rendimiento superior:&lt;/strong&gt; obtuvo una ganancia promedio del 10.6% en tareas de agentes y del 8.6% en benchmarks especializados como análisis financiero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-mejora sin supervisión:&lt;/strong&gt; fue capaz de construir contextos útiles basándose únicamente en retroalimentación de ejecución, sin etiquetas humanas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mayor eficiencia:&lt;/strong&gt; redujo los costos y la latencia de adaptación, permitiendo una mejora continua con mínima sobrecarga.&lt;/p&gt;

&lt;p&gt;ACE representa un cambio de enfoque: pasamos de diseñar prompts a diseñar contextos dinámicos que evolucionan junto al modelo.&lt;br&gt;
Esto abre la puerta a sistemas de IA más adaptativos, escalables y, sobre todo, capaces de mejorar por sí mismos con el tiempo.&lt;/p&gt;

&lt;p&gt;En un mundo donde los LLMs ya son parte central de la innovación, frameworks como ACE nos recuerdan que el futuro de la inteligencia artificial no siempre pasa por modelos más grandes, sino por modelos que aprenden a aprender mejor.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>spanish</category>
      <category>llm</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Modelos de Lenguaje Grandes (LLMs) y su Potencial Malicioso</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Wed, 24 Sep 2025 16:51:15 +0000</pubDate>
      <link>https://dev.to/gara501/modelos-de-lenguaje-grandes-llms-y-su-potencial-malicioso-5aci</link>
      <guid>https://dev.to/gara501/modelos-de-lenguaje-grandes-llms-y-su-potencial-malicioso-5aci</guid>
      <description>&lt;p&gt;La proliferación y el avance de los Modelos de Lenguaje Grandes (LLMs) han transformado significativamente el panorama tecnológico, ofreciendo capacidades sin precedentes en procesamiento de lenguaje natural y generación de contenido. Sin embargo, este progreso no está exento de desafíos, particularmente en lo que respecta al uso indebido de estas tecnologías. Un estudio exhaustivo realizado por Maximilian Mozes y su equipo profundiza en las implicaciones de seguridad de los LLMs, categorizando sus riesgos en amenazas, medidas de prevención y vulnerabilidades. Este análisis busca proporcionar una comprensión estructurada de cómo los LLMs pueden ser explotados y qué estrategias se están implementando para mitigar dichos riesgos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Las Amenazas Intrínsecas de los LLMs: Un Análisis de su Potencial Malicioso&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Las capacidades generativas de los LLMs, si bien son la base de su utilidad, también constituyen la fuente principal de las amenazas que el estudio identifica. Estas amenazas se manifiestan a través de diversas modalidades de explotación, detalladas a continuación:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Fraude, Suplantación de Identidad e Ingeniería Social&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La sofisticación en la generación de texto por parte de los LLMs ha elevado el riesgo de fraude, suplantación de identidad y ataques de ingeniería social. Estos modelos permiten la creación de correos electrónicos de phishing y mensajes engañosos altamente personalizados y contextualmente relevantes, lo que dificulta su detección por parte de los usuarios. La eficiencia y el bajo costo asociados a la generación masiva de este tipo de contenido, facilitados por herramientas especializadas como WormGPT y FraudGPT, democratizan el acceso a tácticas ciberdelictivas, permitiendo su ejecución incluso por individuos con conocimientos técnicos limitados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Generación de Malware&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los LLMs poseen la capacidad de generar código informático, lo que incluye la creación de software malicioso. Esta funcionalidad reduce significativamente la barrera de entrada para el desarrollo de malware, posibilitando que actores sin experiencia en programación elaboren herramientas para ciberataques. Esta democratización del desarrollo de código malicioso representa un desafío considerable para la ciberseguridad global.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Mala Conducta Científica&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En el ámbito académico y de investigación, la capacidad de los LLMs para producir contenido original que puede eludir los sistemas de detección de plagio plantea serias preocupaciones sobre la integridad y la autoría. El uso de LLMs para la generación de ensayos, artículos o resúmenes sin la debida atribución o supervisión puede socavar la credibilidad de la producción científica y educativa, afectando la confianza en los procesos de evaluación y publicación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Desinformación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los LLMs son herramientas extremadamente potentes para la generación de desinformación a gran escala. Su habilidad para producir narrativas coherentes y persuasivas, indistinguibles en muchos casos del contenido generado por humanos, facilita la propagación de noticias falsas, propaganda y contenido engañoso. Este fenómeno contribuye a la polarización social, erosiona la confianza en las fuentes de información y dificulta la distinción entre hechos y ficción, con profundas implicaciones para la cohesión social y el discurso público.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Memorización de Datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Durante su proceso de entrenamiento, los LLMs pueden memorizar fragmentos específicos de los vastos conjuntos de datos que procesan. Si estos datos contienen información personal identificable (PII) o datos sensibles, existe el riesgo de que el modelo los revele involuntariamente durante la generación de respuestas. La probabilidad de esta fuga de información aumenta en modelos de mayor tamaño y en aquellos entrenados con datos duplicados, lo que subraya la necesidad de una gestión rigurosa de la privacidad en los conjuntos de entrenamiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Envenenamiento de Datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El envenenamiento de datos implica la introducción deliberada de ejemplos maliciosos o sesgados en los conjuntos de entrenamiento de los LLMs. El objetivo es manipular el comportamiento del modelo, induciéndolo a generar resultados no deseados o a facilitar ataques de puerta trasera (backdoor attacks). En estos ataques, el modelo es condicionado para ejecutar una acción maliciosa específica cuando se le presenta un "disparador" particular. Esta forma de sabotaje compromete la fiabilidad y la seguridad del modelo desde su fase de entrenamiento, afectando su rendimiento y su comportamiento ético.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estrategias de Defensa: Medidas de Prevención Contra el Mal Uso de los LLMs
&lt;/h3&gt;

&lt;p&gt;Frente a las amenazas identificadas, la comunidad científica y tecnológica ha desarrollado y está implementando diversas estrategias para salvaguardar la integridad y la seguridad de los LLMs. Estas medidas buscan mitigar los riesgos asociados a su uso malicioso y fortalecer su robustez.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Detección de Contenido&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una línea fundamental de defensa es la capacidad de discernir entre contenido generado por humanos y por IA. Esto es crucial para combatir la desinformación y el plagio. Técnicas como el watermarking (marca de agua digital) permiten incrustar una huella digital imperceptible en el texto generado por LLMs, facilitando su identificación algorítmica. Asimismo, se emplean enfoques discriminatorios, que utilizan modelos de clasificación binaria para diferenciar el texto humano del artificial. No obstante, la efectividad de estas medidas puede verse comprometida por técnicas de parafraseo o la reescritura del contenido por otros LLMs, lo que exige una evolución constante de los métodos de detección.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Red Teaming&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El red teaming es una metodología proactiva que implica la formación de equipos (compuestos por humanos o incluso otros LLMs) con la misión de identificar y explotar deliberadamente las debilidades de seguridad de un LLM. Al simular ataques y explorar vulnerabilidades, los desarrolladores pueden fortalecer las defensas del modelo contra la generación de contenido dañino o comportamientos indeseados. Esta práctica es esencial para descubrir fallos antes de que sean explotados por actores maliciosos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Filtrado de Contenido de LLM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Más allá de la detección post-generación, el filtrado de contenido busca prevenir que los LLMs produzcan lenguaje inapropiado o dañino. Esto se logra mediante la implementación de filtros y reglas que guían el comportamiento del modelo, a menudo a través de un ajuste fino (fine-tuning) que inculca principios de seguridad y ética. El objetivo es que el LLM internalice estas restricciones y evite la generación de contenido perjudicial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Salvaguarda Mediante Aprendizaje por Refuerzo a partir de la Retroalimentación Humana (RLHF)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El RLHF es una técnica avanzada que adapta directamente el comportamiento de los LLMs. A través de la retroalimentación humana, el modelo aprende a preferir respuestas que son consideradas útiles y seguras, y a rechazar aquellas que son dañinas. Sin embargo, el estudio advierte sobre el riesgo de un "comportamiento de seguridad exagerado", donde el modelo puede volverse excesivamente cauteloso y negarse a responder a consultas legítimas, comprometiendo su utilidad en aras de una seguridad extrema. El desafío reside en encontrar un equilibrio óptimo entre la utilidad y la seguridad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Seguridad Mediante el Seguimiento de Instrucciones&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta línea de investigación explora la capacidad de los LLMs para autocorregirse moralmente a través de instrucciones explícitas proporcionadas en el prompt. Se ha observado que los modelos de mayor escala demuestran una mayor aptitud para seguir estas directrices y ajustar su comportamiento en consecuencia, lo que sugiere un potencial para la implementación de códigos de conducta directamente en la interacción con el usuario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Métodos para Evitar la Memorización&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para contrarrestar la fuga de información sensible, se están desarrollando métodos que reducen la propensión de los LLMs a memorizar datos de entrenamiento. Esto incluye técnicas de aprendizaje por refuerzo que promueven la parafraseo en lugar de la repetición literal, y el prompt-tuning con preservación de la privacidad, diseñado para ajustar el modelo sin comprometer la confidencialidad de los datos. El objetivo es garantizar la inteligencia del modelo sin sacrificar la privacidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Métodos para Evitar el Envenenamiento de Datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La protección contra el envenenamiento de datos y los ataques de puerta trasera es crucial. Las defensas incluyen el uso de puntuaciones de perplejidad para identificar patrones anómalos, la aplicación de perturbaciones robustas para reducir la sensibilidad del modelo a modificaciones maliciosas, y el análisis detallado de las representaciones internas y características del modelo. También se exploran defensas basadas en gradientes y atribución, que buscan rastrear el origen de las influencias en el comportamiento del modelo, con el fin de construir LLMs resilientes al sabotaje y capaces de identificar y rechazar información maliciosa en sus datos de entrenamiento.&lt;/p&gt;

&lt;h3&gt;
  
  
  Puntos de Explotación: Vulnerabilidades en la Arquitectura de los LLMs
&lt;/h3&gt;

&lt;p&gt;A pesar de la implementación de medidas preventivas, los LLMs presentan vulnerabilidades inherentes que pueden ser explotadas por actores maliciosos para eludir las salvaguardas establecidas. El estudio destaca dos categorías principales de estas vulnerabilidades:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Inyección de Prompts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La inyección de prompts es una técnica mediante la cual un usuario malintencionado manipula o extrae las instrucciones internas (el "prompt del sistema") que guían el comportamiento de un LLM. Esta vulnerabilidad se manifiesta de dos formas principales:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Secuestro de Objetivo (Goal Hijacking): Consiste en la introducción de un prompt que anula o sobrescribe las directrices originales del sistema, forzando al modelo a generar contenido que, bajo sus reglas preestablecidas, debería rechazar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fuga de Prompt (Prompt Leaking): Implica inducir al LLM a revelar su propio prompt del sistema. El conocimiento de estas instrucciones internas puede facilitar a los atacantes la identificación de métodos más efectivos para eludir las defensas del modelo. Es importante señalar que estos ataques pueden ser indirectos, ocultando prompts maliciosos en fuentes de datos externas (como el código HTML de sitios web) que el LLM procesa. Incluso se ha demostrado la inyección de prompts en modelos multimodales, donde elementos como imágenes o sonidos pueden contener la "inyección" maliciosa.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Jailbreaking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El jailbreaking se refiere a la creación de prompts diseñados para eludir los filtros de seguridad de los LLMs, induciéndolos a generar contenido no deseado o inapropiado. A diferencia de la inyección de prompts, el jailbreaking no siempre requiere acceso al prompt del sistema, sino que se basa en la manipulación de la interacción para sortear las restricciones del modelo. Ejemplos notables incluyen el uso de técnicas como "DAN" (Do Anything Now) o la simulación de personalidades que carecen de restricciones éticas.&lt;/p&gt;

&lt;p&gt;Un aspecto preocupante del jailbreaking es su potencial para ser "universal" (efectivo en múltiples modelos) y "transferible" (si funciona en un modelo, es probable que funcione en otros). Además, se ha descubierto que el jailbreaking no solo puede utilizarse para generar lenguaje dañino, sino también para extraer información personal identificable (PII) que el modelo haya memorizado. El estudio atribuye estas vulnerabilidades a la existencia de "objetivos en conflicto" dentro del modelo (la tensión entre ser útil y ser seguro) y a una "generalización desajustada" (la incapacidad del modelo para manejar ciertos tipos de prompts maliciosos para los que no fue específicamente entrenado).&lt;/p&gt;

&lt;h3&gt;
  
  
  Consideraciones Finales: El Futuro de la Seguridad en la Inteligencia Artificial
&lt;/h3&gt;

&lt;p&gt;La rápida adopción y la visibilidad pública de los LLMs, ejemplificadas por el crecimiento exponencial de plataformas como ChatGPT, han puesto de manifiesto tanto su extraordinario potencial como los profundos desafíos éticos y de seguridad que conllevan. El estudio de Mozes et al. subraya la imperativa necesidad de una investigación rigurosa y continua para abordar estas complejidades.&lt;/p&gt;

&lt;p&gt;Es fundamental que la comunidad científica y tecnológica priorice la investigación revisada por pares para validar y contextualizar las amenazas reales que los LLMs presentan en la actualidad. La velocidad con la que emergen nuevas investigaciones, a menudo sin el escrutinio de la revisión por pares, puede generar una percepción distorsionada de los riesgos, desviando la atención de problemas tangibles como la desinformación masiva o el fraude automatizado. La validación científica es crucial para asegurar que los esfuerzos de mitigación se dirijan a los desafíos más pertinentes y urgentes.&lt;/p&gt;

&lt;p&gt;Las limitaciones inherentes a la seguridad de los LLMs reflejan un dilema fundamental: la tensión entre la maximización de la utilidad y la garantía de la seguridad. No existe una solución única que elimine completamente los comportamientos no deseados sin introducir nuevas vulnerabilidades o comprometer la funcionalidad del modelo. El futuro de la seguridad habilitada por LLMs plantea interrogantes complejos sobre la adicción tecnológica, la privacidad de los datos, la equidad en el acceso a estas tecnologías y la posibilidad de que los propios LLMs desarrollen comportamientos engañosos o sean susceptibles a la persuasión.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implicaciones y Responsabilidades
&lt;/h3&gt;

&lt;p&gt;Para los usuarios, es esencial desarrollar un pensamiento crítico y una alfabetización digital avanzada para evaluar la información generada por IA. Para los desarrolladores y las organizaciones, la responsabilidad de diseñar, implementar y desplegar LLMs de manera segura y ética es primordial. Para la sociedad en su conjunto, se requiere un compromiso sostenido con la investigación, el diálogo interdisciplinario y la formulación de políticas públicas informadas que permitan navegar este complejo paisaje tecnológico de manera responsable.&lt;/p&gt;

&lt;p&gt;Los LLMs son herramientas transformadoras que están redefiniendo nuestra interacción con el conocimiento y la tecnología. Comprender sus riesgos y trabajar proactivamente para mitigarlos es un paso indispensable para asegurar que su impacto sea, en última instancia, beneficioso y constructivo para la humanidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fuentes&lt;/strong&gt;&lt;br&gt;
Use of LLMs for Illicit Purposes: Threats, Prevention Measures, and&lt;br&gt;
Vulnerabilities, Maximilian Mozes, Xuanli He, Bennett Kleinberg, Lewis D. Griffin, Aug 2023.&lt;/p&gt;

</description>
      <category>ia</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>Fractals and Amazon Q Developer</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Tue, 06 May 2025 04:14:39 +0000</pubDate>
      <link>https://dev.to/gara501/fractals-and-amazon-q-c58</link>
      <guid>https://dev.to/gara501/fractals-and-amazon-q-c58</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aws-amazon-q-v2025-04-30"&gt;Amazon Q Developer "Quack The Code" Challenge&lt;/a&gt;: That's Entertainment!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I did an interactive application using ThreeJS, Audio API, and Shaders, 9 scenes show different interactive fractals and effects applied.&lt;br&gt;
You can access it from a cellphone or a computer. I recommend using headphones to enjoy the experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  URL Parameters
&lt;/h2&gt;

&lt;p&gt;You can switch between different initial visual modes using URL parameters, this will apply only to the first scene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;?effect=basic&lt;/code&gt; - Basic 3D scene with objects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?effect=psychedelic&lt;/code&gt; - Psychedelic shader effect&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?effect=crt&lt;/code&gt; - CRT distortion effect (default)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://gara501.github.io/amazonqchallenge/" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/gara501/amazonqchallenge" rel="noopener noreferrer"&gt;Code&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Amazon Q Developer
&lt;/h2&gt;

&lt;p&gt;I created a super big prompt following some rules like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assigning a personality to the IA (You are a WebGL Expert)&lt;/li&gt;
&lt;li&gt;Detailed instructions in each scene to create the screens and the shaders&lt;/li&gt;
&lt;li&gt;Added a basic structure and mapped the audio files, I get the files from pixabay (royalty free files).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prompt
&lt;/h2&gt;

&lt;p&gt;You are an expert in Shaders, webGL and ThreeJS. Create a minimal HTML file for a WebGL-based demo using Three.js. The canvas must fill the entire browser window with no scrollbars and load a JavaScript module named main.js. In main.js, do the following:&lt;/p&gt;

&lt;p&gt;Scene 1: Psychedelic Intro&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a full-screen plane using a custom ShaderMaterial.&lt;br&gt;
Pass u_time and u_resolution as uniforms to both vertex and fragment shaders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animate the scene using requestAnimationFrame.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write a basic vertex shader that directly passes the vertex position to gl_Position.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write a fragment shader that displays a colorful, animated, psychedelic effect using sine and cosine waves. Colors should change over time to evoke a retro 90s visual style.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overlay a CRT-style distortion effect: simulate scanlines, screen curvature, and RGB channel offsets to mimic an old monitor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a scrolling text banner like the Star Wars intro (from bottom to top), using either HTML/CSS or a Three.js text mesh.&lt;br&gt;
Load and autoplay a looping background track (assets/music1.mp3). &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handle browser autoplay restrictions and add a button to mute/unmute the music.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scenes 2 to 6: Interactive Fractal Visuals&lt;br&gt;
For each of the following five full-screen WebGL scenes, use a new fragment shader and its own background music:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Scene 2 (Sierpinski): X-axis controls scale, Y-axis controls variation

&lt;ul&gt;
&lt;li&gt;In Scene 3 (Julia): Mouse position changes the constants in the Julia set equation&lt;/li&gt;
&lt;li&gt;In Scene 4 (Mandelbrot): Mouse position changes the view offset&lt;/li&gt;
&lt;li&gt;In Scene 5 (Newton-Raphson): X-axis controls polynomial degree, Y-axis controls relaxation factor&lt;/li&gt;
&lt;li&gt;In Scene 6 (Menger Sponge): X-axis controls scale, Y-axis controls variation&lt;/li&gt;
&lt;li&gt;In Scene 7 (Koch Curve): X-axis controls scale, Y-axis controls iterations&lt;/li&gt;
&lt;li&gt;In Scene 8 (Blood Vessels): X-axis controls scale, Y-axis controls detail&lt;/li&gt;
&lt;li&gt;In Scene 9 (Atoms): X-axis controls atom size, Y-axis controls number of electrons&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For all fractal scenes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ShaderMaterial with full-screen fragment shaders.&lt;/li&gt;
&lt;li&gt;Use u_time, u_resolution, and u_mouse as uniforms.&lt;/li&gt;
&lt;li&gt;Update fractal constants dynamically based on mouse movement.&lt;/li&gt;
&lt;li&gt;Each scene should render and update in real time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Navigation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a menu on the main page to switch between all the scenes.&lt;/li&gt;
&lt;li&gt;When a scene loads, the corresponding music file should also load and autoplay.&lt;/li&gt;
&lt;li&gt;For each scene containing a fractal, implement real-time dynamic interaction based on mouse movement. The mouse position should modify the constants used in the fractal’s equation. Each shader must include u_time and u_resolution uniforms, and the fractal should be rendered in real time. Create a navigation button on the main page that links to each individual fractal scene. Additionally, load and play the corresponding .mp3 audio file for each scene when it loads.&lt;/li&gt;
&lt;li&gt;In all scenes that display fractals, add a fixed text element centered on the screen. This text should show the mathematical formula of the corresponding fractal. Ensure the text has a legible color with sufficient contrast against the background. Additionally, implement a subtle flowing animation (e.g., shimmer or gentle wave) triggered when the user hovers the mouse over the text.&lt;/li&gt;
&lt;li&gt; Add this text in the center of the screen in the scene 9: "In the sacred dance of the universe, fractals mirror the infinite within the finite, each pattern echoing the breath of creation. Quantum physics whispers that reality is not solid, but woven from probabilities—just as fractals emerge from simple laws into endless complexity. In this harmony, spirit and science converge, revealing that the cosmos may be a divine self-reflecting dream." This quote won't overlap the formula text,&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;Check the README in github to see all the documentation, which algorithms used, etc. &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>awschallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Permit Io in game development? why not!</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Fri, 02 May 2025 05:11:03 +0000</pubDate>
      <link>https://dev.to/gara501/permit-io-in-game-development-why-not-55c0</link>
      <guid>https://dev.to/gara501/permit-io-in-game-development-why-not-55c0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/permit_io"&gt;Permit.io Authorization Challenge&lt;/a&gt;: API-First Authorization Reimagined&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My intention with this project is to have a different approach to create Role Games in Javascript (or any other language in the front side, like Python, Lua, even Unity), I made a set or roles and resources based on a simple definition of elements, in this case a super basic role game with 4 different characters (Elf, Wizard, Warrior, Dwarf), each character has its abilities, weapons, curses, etc.&lt;/p&gt;

&lt;p&gt;This approach isolates the logic of abilities, weapons, and other stuff for each character from the game logic. If I want to change a character's abilities, I only need to go to Permit IO Interface and change the policies, which will be reflected directly in the game without touching the game code. &lt;/p&gt;

&lt;p&gt;The API returns the list of Resources (abilities, weapons, armor, etc) and players (roles in Permit IO).&lt;/p&gt;

&lt;p&gt;The free version of Permit IO doesn't allow me to create resourceTypes using the SDK (nodejs). I tried this approach that could be implemented in the full version, allowing the application to be more dynamic, avoiding using Permit IO UI.&lt;/p&gt;

&lt;p&gt;Finally, I made a &lt;em&gt;backend&lt;/em&gt; using Express and NodeJS, &lt;em&gt;frontend&lt;/em&gt; using React/Tailwind/DaisyUI to show the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fy6evu4n280t6fv6rzbtt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fy6evu4n280t6fv6rzbtt.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fttndmbeu7glsar6n64mr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fttndmbeu7glsar6n64mr.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Frb68awlatbf313prp0rc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Frb68awlatbf313prp0rc.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz7p3i6950bgg1675kz6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz7p3i6950bgg1675kz6m.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Ftljeq9tw0px8v5e2n62l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Ftljeq9tw0px8v5e2n62l.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/mW5r1emQWrw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Repo
&lt;/h2&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/gara501/permithackaton" rel="noopener noreferrer"&gt;Permit Hackaton&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Journey
&lt;/h2&gt;

&lt;p&gt;I like to organize logic into layers, and my approach to this project was based on that principle. I began by researching different ways to integrate Permit.io and decided to try something unique by applying its authorization logic to a role-playing game (RPG) configurator, since I enjoy creating video games.&lt;/p&gt;

&lt;p&gt;Initially, I encountered problems when attempting to use ES Modules in Node.js. Each time I enabled "type": "module" and utilized import statements, the Permit.io library would fail. After investing almost six hours trying to fix it, I ultimately reverted to the require method—a more conventional CommonJS approach, which functioned reliably.&lt;/p&gt;

&lt;p&gt;Second, when finally my backend worked, I built a Node.js API and tested a few basic calls following Permit.io’s documentation. Once I had a working prototype, I explored more advanced ideas, such as dynamically creating resources and policies. Unfortunately, that part didn’t work as expected, so I reviewed the latest version of the Permit.io API to troubleshoot and adapt.&lt;/p&gt;

&lt;p&gt;Third, I created a screen that displays players along with their roles and access permissions. These settings will later be reflected directly in the gameplay, forming the foundation for role-based interactions in the RPG.&lt;/p&gt;

&lt;p&gt;Fourth, I created the frontend using React/Typescript/Tailwind/Vite to provide a good option for showing the resources, players, and configurations. Only the admins can change elements in this interface. Permit IO and Clerk (to manage User Login and JWT) also manage this logic, which works well with Permit IO. &lt;/p&gt;

&lt;h2&gt;
  
  
  API-First Authorization
&lt;/h2&gt;

&lt;p&gt;Based on the number of characters in my game, I added four &lt;em&gt;Roles&lt;/em&gt;, each Role represents a character in my game.&lt;br&gt;
These roles have different rules, the rules are related to the items (an item can be an ability, a weapon, a magic, a curse, etc). These items are saved in Permit IO as a &lt;em&gt;Resources&lt;/em&gt;.&lt;br&gt;
All this configuration is possible using the SDK via my Backend. With my UI connected to those services, I'm calling different functions to create roles and assign permissions to them.&lt;br&gt;
You can find this functionality in two sections: &lt;code&gt;create character&lt;/code&gt; and &lt;code&gt;create actions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This approach gives me much flexibility if I need to change each character's abilities, weapons, etc. without touching my frontend/backend code, which is perfect when I need to manage &lt;em&gt;separation of concerns&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I created a middleware in my backend to verify the access via Permit IO, using &lt;code&gt;permit.check&lt;/code&gt;.&lt;br&gt;
I get the Resources using &lt;code&gt;permit.api.resources.list()&lt;/code&gt;&lt;br&gt;
I get the Players using &lt;code&gt;permit.api.roles.list()&lt;/code&gt;&lt;br&gt;
I create new Players from the UI using &lt;code&gt;permit.api.roles.create()&lt;/code&gt;&lt;br&gt;
I create new items and actions for a player using &lt;code&gt;permit.api.updateRole&lt;/code&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>permitchallenge</category>
      <category>webdev</category>
      <category>security</category>
    </item>
    <item>
      <title>Recursos para crear Juegos</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Wed, 24 Jul 2024 15:18:45 +0000</pubDate>
      <link>https://dev.to/gara501/recursos-para-crear-juegos-3j1l</link>
      <guid>https://dev.to/gara501/recursos-para-crear-juegos-3j1l</guid>
      <description>&lt;p&gt;De las cosas mas complejas al iniciar a crear juegos es saber como abordar la gran cantidad de perfiles que se necesitan, desde el sonido hasta el script sin olvidar la parte gráfica.&lt;/p&gt;

&lt;p&gt;Esta es una lista de algunos recursos que he usado para crear juegos en 2D, cabe resaltar que puede servir también para juegos en 3D, pero mi experiencia es mas orientada hacia lo primero.&lt;/p&gt;

&lt;p&gt;Para empezar debemos tener en cuenta, que hay que cubrir una cantidad considerable de aristas, también dependiendo de la técnica que pensemos usar (Rotoscopia, Pixelart, etc):&lt;/p&gt;

&lt;p&gt;Esta lista es solo una propuesta, en la mayoría con software open source o con costos muy bajos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Graficos&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Si vamos a usar pixelart, tenemos opciones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.aseprite.org/" rel="noopener noreferrer"&gt;Aseprite&lt;/a&gt; (Mi preferida)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.piskelapp.com/" rel="noopener noreferrer"&gt;Piskel&lt;/a&gt; (Buena opcion gratis)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pixilart.com/" rel="noopener noreferrer"&gt;Pixilart&lt;/a&gt; (Online)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adobe.com/products/photoshop.html?clickref=1101lyLxN8fY&amp;amp;mv=affiliate&amp;amp;mv2=pz&amp;amp;as_camptype=&amp;amp;as_channel=affiliate&amp;amp;as_source=partnerize&amp;amp;as_campaign=artturijalli" rel="noopener noreferrer"&gt;Photoshop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para edición de assets, tenemos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.gimp.org/" rel="noopener noreferrer"&gt;Gimp&lt;/a&gt; (Open source)&lt;/li&gt;
&lt;li&gt;Photoshop (De pago)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Sonidos&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reaper.fm/" rel="noopener noreferrer"&gt;Reaper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.audacityteam.org/" rel="noopener noreferrer"&gt;Audacity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sfxr.me/" rel="noopener noreferrer"&gt;Sfxr&lt;/a&gt; (Para crear sonidos de 8 bits, genial para juegos retro)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Motor de desarrollo&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unity.com/" rel="noopener noreferrer"&gt;Unity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://godotengine.org/" rel="noopener noreferrer"&gt;Godot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.construct.net/en" rel="noopener noreferrer"&gt;Construct&lt;/a&gt; (De pago)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://defold.com/" rel="noopener noreferrer"&gt;Defold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rpgmakerweb.com/" rel="noopener noreferrer"&gt;RPG Maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gamemaker.io/en" rel="noopener noreferrer"&gt;Game Maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.unrealengine.com/en-US" rel="noopener noreferrer"&gt;Unreal Engine&lt;/a&gt; (Solo 3D)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Storyboard&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.office.com/" rel="noopener noreferrer"&gt;Microsoft Word&lt;/a&gt; o cualquier otro editor de texto, acá lo mas importante es aprender a ensamblar una historia coherente, aprender a crear personajes, este &lt;a href="https://www.spacedraft.com/knowledge-base/video-game-script-writing-html/" rel="noopener noreferrer"&gt;post puede servir como guia&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Assets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Muchas veces no tenemos tiempo o el conocimiento para crear toda la parte artistica desde 0, estos son algunos recursos de assets para juegos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opengameart.org/" rel="noopener noreferrer"&gt;Open Game Art&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://itch.io/" rel="noopener noreferrer"&gt;Itch Io&lt;/a&gt; (Mi preferida)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kenney.nl/" rel="noopener noreferrer"&gt;Kenney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://craftpix.net/" rel="noopener noreferrer"&gt;CraftPix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.artstation.com/marketplace/game-dev/assets" rel="noopener noreferrer"&gt;ArtStation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gamedevmarket.net/" rel="noopener noreferrer"&gt;DevMarket&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Project Management&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para llevar las tareas y tiempos de nuestro proyecto tenemos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://monday.com/" rel="noopener noreferrer"&gt;Monday&lt;/a&gt; (Tiene version gratis)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://trello.com/" rel="noopener noreferrer"&gt;Trello&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.airtable.com/" rel="noopener noreferrer"&gt;Airtable&lt;/a&gt; (Tiene version gratis)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Documentación&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Es importante siempre documentar el proceso, desde &lt;a href="https://gamedevbeginner.com/how-to-write-a-game-design-document-with-examples/" rel="noopener noreferrer"&gt;nuestro GDD&lt;/a&gt; hasta el postmortem. En esta &lt;a href="https://gamescrye.com/resources/game-design-documents/" rel="noopener noreferrer"&gt;lista&lt;/a&gt; hay varios GDD de juegos AAA que sirven de ejemplo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dundoc.com/" rel="noopener noreferrer"&gt;Dundoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chatgpt.com/g/g-ITsZga7Ed-game-design-document-gdd-maker" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://milanote.com/guide/game-design-document" rel="noopener noreferrer"&gt;Milanote&lt;/a&gt; (Esta es una plataforma completa)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seguramente muchas buenas herramientas se me quedan por fuera de este listado, sientase libre de aportar mas que usted conozca. &lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>videogames</category>
      <category>indie</category>
    </item>
    <item>
      <title>Motivation, the neglected superpower.</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Fri, 19 Apr 2024 17:05:20 +0000</pubDate>
      <link>https://dev.to/gara501/motivation-the-neglected-superpower-2m4g</link>
      <guid>https://dev.to/gara501/motivation-the-neglected-superpower-2m4g</guid>
      <description>&lt;p&gt;I have many years working in the tech world, as a programmer, analyst, hardware, etc, and my last 20 years as a software developer. So many hours in front of a screen that I lost track of how many weekends I spent reading documentation or just writing code for fun, is my decision, and I don't have regrets about it. But sometimes is hard to keep the energy up, and maintain the mindset, sometimes we just need a break from everything and organize my mind mess, I started to study when we didn't have social networks, using tech books and meeting with other people interested in the same things. &lt;/p&gt;

&lt;p&gt;I was full of expectations about the future, young, and energized, but maintaining that mindset through the years is not an easy job, I felt burned a couple of times due to some projects, 35 hours days, and no weekends for months, I thought I could manage this level forever, I was wrong, my body started to feel bad, to many hours seated destroyed my back, I use glasses now too and yes, overweight and bad habits (yeyyy pizza nights overtime) was killing me.&lt;/p&gt;

&lt;p&gt;All these variables were affecting me in so many ways, I started to lose motivation to learn, to do my job, spend too much time using social networks, sleep badly, consume innutritious food, and another important factor, I'm not in my 20s.&lt;/p&gt;

&lt;p&gt;This lack of motivation and energy forced me to make a change, I started to learn a little bit about neuroscience, habits, and how the brain works. &lt;br&gt;
This is the core of everything, how your mind is affected by your behavior, how a simple action day after day starts to build how you react and think, and this affects every single aspect of your life, not only in your job, this affects all your life layers.&lt;/p&gt;

&lt;p&gt;But let's talk about motivation, currently is too diminished by gurus who say: "Motivation is not important, is temporary, what you need is discipline". &lt;/p&gt;

&lt;p&gt;Motivation by definition: Motivation refers to the psychological forces that drive and direct our behavior toward achieving a particular goal or outcome. This force can be intrinsic or extrinsic, intrinsic is how you feel about the goal, and extrinsic is what you will win with the goal (recognition, fame, etc). Is a fundamental skill to interact with the world, all animals share the motivation to obtain their basic needs, including food, water, sex, and social interaction.&lt;/p&gt;

&lt;p&gt;Motivation is directly related to brain functionality and can be affected by two different frames, pathologies like schizophrenia and affective disorders and pathologic behavior problems like addictions or affective disorders.&lt;/p&gt;

&lt;p&gt;Now you have a better idea about my point. To be motivated you need to accomplish a couple of points, and these points are based on how motivation works in the brain. &lt;br&gt;
How the brain interprets motivation could be defined as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Costs: How much effort will you need to finish the task? This includes time, pain, discomfort, lost opportunities, etc.&lt;/li&gt;
&lt;li&gt;Benefits: What will do I win with this?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In between of these you will find:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Physiological state: Deprivation, stress, health.&lt;/li&gt;
&lt;li&gt;Environment: availability of goal, response opportunity.&lt;/li&gt;
&lt;li&gt;Past history: Experience of goals, responses, and stimuli.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In terms of have a good state to be motivated, we need to have in mind these points:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Respect your body, yes, go to the gym, park, or in your home, but you need to spend at least 1 hour a day doing some exercise (strength exercise is highly recommended).
Check &lt;a href="https://www.muscleandstrength.com/workout-routines"&gt;these free workouts&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Eat better; food is your brain's fuel, and if you want a healthy brain, you need to eat healthy food. You can have a couple of &lt;a href="https://www.helpguide.org/articles/healthy-eating/healthy-eating.htm"&gt;ideas here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sleep well, this is one of the most important points to having a healthy brain. &lt;a href="https://gmb.io/sleep/?utm_campaign=16382884749&amp;amp;utm_source=x&amp;amp;utm_medium=cpc&amp;amp;utm_content&amp;amp;utm_term&amp;amp;seg_aprod&amp;amp;ad_id&amp;amp;gad_source=1&amp;amp;gclid=CjwKCAjwrIixBhBbEiwACEqDJXCRJBg7Mkwxk3k3oXOiVXOynnMAErXsm3LTH5IzhCobVl2mTyxyphoCEQkQAvD_BwE"&gt;How to improve your sleep Habits&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Define your goals, and be concise, I know sometimes it is super boring to be structured, but this will give you a path to track your improvements. &lt;a href="https://www.atlassian.com/blog/productivity/how-to-write-smart-goals"&gt;SMART methodology is great for this&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Define your reasons for doing the things you want to do. Could be for fun or something to improve your career, but you need to be clear about why are you doing that task, this is directly related to intrinsic/extrinsic motivation and is a key point to maintaining energy.&lt;/li&gt;
&lt;li&gt;Don't punish yourself. You are a human, embrace the failure, learn, and start again with more knowledge. The problem is not to fail, is to punish yourself so badly, that it destroys your self-confidence. Check this article about &lt;a href="https://www.verywellmind.com/imposter-syndrome-and-social-anxiety-disorder-4156469"&gt;imposter syndrome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Develop critical thinking. Critical thinking is the ability to evaluate facts and information, remain objective, and make a sound decision about how to move forward. This is a way to develop good emotional intelligence, this gives you the capacity to identify if your goal makes sense.&lt;/li&gt;
&lt;li&gt;Regulate time using social networks, porn, video games, and all the sources of dopamine, excessive dopamine segregation affects directly and hardly how motivation works in your brain. Check how &lt;a href="https://www.verywellmind.com/what-is-dopamine-5185621"&gt;dopamine works in the brain&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Motivation is not only the result of an internal voice that says: "go, you can do it", or consuming a lot of self-help books or videos, is how your brain works based on your beliefs, your habits, your knowledge, and your ideas, you can build a strong mind but you need to care your body too, everything is interconnected.&lt;/p&gt;

</description>
      <category>health</category>
      <category>programming</category>
      <category>habits</category>
    </item>
    <item>
      <title>Creando una máquina de Estados Finito en Godot</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Sun, 12 Nov 2023 04:16:34 +0000</pubDate>
      <link>https://dev.to/gara501/creando-una-maquina-de-estados-finito-en-godot-1e7o</link>
      <guid>https://dev.to/gara501/creando-una-maquina-de-estados-finito-en-godot-1e7o</guid>
      <description>&lt;p&gt;Dentro de las multiples técnicas para desarrollar la lógica de un personaje y la interacción entre las diferentes acciones que realiza en nuestro juego, encontramos un patrón muy interesante y es el de  las maquinas de estado finito. Pero primero definamos que es una maquina de estádo finito.&lt;/p&gt;

&lt;h2&gt;
  
  
  Máquinas de estádo Finito
&lt;/h2&gt;

&lt;p&gt;Las máquinas de estádo finito también llamado Automata finito, es una abstracción computacional que describe el comportamiento de un sistema reactivo mediante un número determinado de Estados y un número determinado de Transiciones entre dicho Estados.&lt;/p&gt;

&lt;p&gt;Las Transiciones de un estado a otro se generan en respuesta a eventos de entrada externos e internos; a su vez estas transiciones y/o subsecuentes estados pueden generar otros eventos de salida. Esta dependencia de las acciones (respuesta) del sistema a los eventos de entrada hace que las Máquinas de Estádo Finito (MEF) sean una herramienta adecuada para el diseño de Sistemas Reactivos y la Programación Conducida por Eventos (Event Driven Programming), cual es el caso de la mayoría de los sistemas embebidos basados en microcontroladores o microprocesadores.&lt;/p&gt;

&lt;p&gt;En nuestro caso especifico, aplicamos este patrón en el desarrollo de videojuegos, para definir las diferentes acciones (y animaciones) de un personaje.&lt;/p&gt;

&lt;p&gt;Pero para entender mejor este concepto, definamos un personaje en Godot y definamos también 3 acciones básicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Idle: Es la acción estática de nuestro personaje, va a tener una animación de "respirar".&lt;/li&gt;
&lt;li&gt;Move: Es la acción de mover nuestro personaje, y la animación va a corresponder a una serie de frames que simulan el efecto de correr.&lt;/li&gt;
&lt;li&gt;Jump: Acción de saltar, nuestra animación va a constar de 2 o mas frames que simulan la acción de salto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Definiendo el Proyecto
&lt;/h2&gt;

&lt;p&gt;Primero, vamos a descargar una serie de assets gratuitos para poder hacer nuestra práctica, los pueden &lt;a href="https://pixelfrog-assets.itch.io/pixel-adventure-1"&gt;encontrar acá&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Luego vamos a crear un nuevo proyecto, y en la ventana de nodo, vamos a agregar un nodo de tipo character body 2D.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Despues adicionamos tres subnodos mas: 

&lt;ul&gt;
&lt;li&gt;Sprite2D, el cual va a contener nuestros sprites.&lt;/li&gt;
&lt;li&gt;AnimationPlayer: El cual va a contener nuestras animaciones.&lt;/li&gt;
&lt;li&gt;CollisionShape2D: El que va a definir nuestro marco de colisión.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Luego creamos una carpeta Assets en la raíz del proyecto y arrastramos todos los archivos que hemos descargado.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;El siguiente paso es renombrar nuestro nodo principal por "Player" y vamos a adicionar un nuevo script. &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Ahora, creamos un nuevo nodo (no el 2D, el que viene solito) para definir nuestra máquina de estados y lo renombramos como "state machine"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tX8Sb2th--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qe6xbiwm2hhj17l58tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tX8Sb2th--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1qe6xbiwm2hhj17l58tv.png" alt="maquina de estados" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionamos los estádos como nodos hijo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XyMo_Soo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qp842p4qjhk0zgt3xfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XyMo_Soo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qp842p4qjhk0zgt3xfd.png" alt="nodos hijo" width="777" height="722"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Procedemos a crear un script genéral, es decir, este script no va a depender de un nodo, lo cual nos va a permitir rehusarlo si así lo requerimos.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;ul&gt;
&lt;li&gt;En este archivo lo que haremos será crear una clase padre de la cual los estados independientes van a heredar su funcionalidad, en las funciones que vamos a definir, vamos a recibir los llamados a las funciones nativas del &lt;a href="https://docs.godotengine.org/en/stable/classes/class_node.html"&gt;ciclo de vida de Godot&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Ahora vamos a crear una nueva clase llamada StateMachine, hay que recordar que al usar la definición class_name podremos referenciar nuestras clases desde otras clases.
En esta clase vamos a tener un poco mas de complejidad, lo primero es definir un Signal que se llama changeState, aca puedes ver que es un &lt;a href="https://docs.godotengine.org/en/stable/classes/class_signal.html#:~:text=Signal%20is%20a%20built%2Din,without%20directly%20referencing%20one%20another."&gt;Signal en Godot&lt;/a&gt; Este Signal nos va a permitir escuchar el cambio de estádo.
Luego definimos una variable initialState de tipo NodePath(), esto  lo definimos usando @export lo que en Godot significa que podemos anclar archivos o elementos desde el editor, es lo mismo que hacemos en Unity al exponer una variable en el editor, esta variable va a estar ligada a los estados que ya definimos en nuestros nodos.
Luego, creamos una variable state de tipo State (recuerden la clase que habiamos creado previamente) y va a recibir nuestra variable initialState, la cual contiene el nodo (donde estan definidos los estádos en el editor).&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Hasta acá vamos con la primera parte del tutorial, se que es un tema un poco denso especialmente si somos novatos, pero es cuestión de analizar y replicar hasta poder interiorizar. &lt;/p&gt;

&lt;p&gt;En el siguiente post vamos a sobreescribir las funciones que necesitamos en el StateMachine, y también, las funciones de cada estádo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Godot Juorney</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Fri, 10 Nov 2023 03:44:35 +0000</pubDate>
      <link>https://dev.to/gara501/godot-juorney-318h</link>
      <guid>https://dev.to/gara501/godot-juorney-318h</guid>
      <description>&lt;p&gt;En el mundo del game development hay bastantes herramientas hoy en día, y si hablamos de herramientas, tenemos que diferenciar entre 2 grandes grupos: las librerias y los game engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Librerias&lt;/strong&gt;&lt;br&gt;
Son una serie de funciones que nos permiten acelerar el proceso de desarrollo, dentro de este contexto podría hablar de PhaserJS que es una libreria de JavaScript para desarrollar juegos, o incluso React y React Fiber, que es una abstracción de ThreeJS para React, en python tendríamos pygame, cocos2d, y así podría nombrar infinidad de librerias en diferentes lenguajes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Game Engines&lt;/strong&gt;&lt;br&gt;
Es el software especializado para crear juegos, podría decirse que es un todo en uno, donde encontramos un editor y multiples funcionalidades para llevar a cabo nuestro cometido, dentro de este marco tenemos a Unity, Unreal Engine, Construct, Defold, Godot, y &lt;a href="https://en.wikipedia.org/wiki/List_of_game_engines"&gt;otros cuantos más&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Godot&lt;/strong&gt;&lt;br&gt;
Ahora, especificamente esta serie de posts va a ser orientada al desarrollo con Godot, escogí Godot por su facilidad, versatilidad y por que es open source, y su gran mejora desde la version 4.0 y después de la polemica que se &lt;a href="https://www.vidaextra.com/industria/siento-unity-se-disculpa-desarrolladores-modifica-su-polemica-tarifa-usar-motor-grafico"&gt;armó con Unity&lt;/a&gt;, en general lo que buscaba era un entorno fácil de entender y que fuera agradable de programar, y sin duda fue algo que encontré en Godot y su lenguaje de Scripting GDScript (muy similar a Python).&lt;/p&gt;

&lt;p&gt;Afortunadamente el panorama de Godot está creciendo bastante y ya se encuentran tutoriales y cursos realmente buenos sobre este gran engine, en mi caso pienso subir tutoriales sobre temas especificos y trataré de ir referenciando buenos videos sobre las bases del editor.&lt;/p&gt;

&lt;p&gt;Los siguientes links son una lista de referencia para iniciar con las bases de este engine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=itKLmCwGeNs&amp;amp;list=PLJ690cxlZTgL4i3sjTPRQTyrJ5TTkYJ2_&amp;amp;ab_channel=GodotTutorials"&gt;GDScript, curso básico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=6YNKi3hcS5U&amp;amp;ab_channel=GameDevArtisan"&gt;Godot bases y fundamentos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.godotengine.org/en/stable/"&gt;Documentación oficial de Godot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eso si, todo está en inglés (sorry not sorry).&lt;/p&gt;

&lt;p&gt;En mi siguiente post, vamos a iniciar con algo muy básico, empezando con desarrollo 2D, vamos a crear un personaje principal y una maquina de estados, la idea es aprender desde 0 como desarrollar buen código, organizado y modular.&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>La práctica hace al programador</title>
      <dc:creator>Andres Ramirez</dc:creator>
      <pubDate>Sun, 11 Sep 2022 01:22:56 +0000</pubDate>
      <link>https://dev.to/gara501/la-practica-hace-al-programador-187o</link>
      <guid>https://dev.to/gara501/la-practica-hace-al-programador-187o</guid>
      <description>&lt;h2&gt;
  
  
  Hacer por hacer
&lt;/h2&gt;

&lt;p&gt;Uno de los principales problemas cuando empezamos a programar, es saber aplicar los nuevos conocimientos adquiridos después de leer un libro o hacer un curso, a veces las ideas no fluyen y terminamos encajonados en el marco de lo aprendido.&lt;br&gt;
En twitter y otras redes he visto incontables hilos de recursos para realizar proyectos, debo decir hay unos bastante interesantes (mas adelante pondré varios recursos), pero en ese punto es donde comencé a ver un problema y es el de realizar proyectos por que si, sin un objetivo claro, debo decir que cualquier práctica que hagamos nos va a servir a largo plazo, pero a veces el embarcarnos en proyectos al azar terminaremos perdiendo tiempo, lo veo similar al problema de la "cursitis", es decir, acumular cursos sin hacer proyectos donde se implemente y se extienda el conocimiento adquirido.&lt;br&gt;
Hay que recordar que la forma en la que el cerebro aprende se fundamenta en 3 partes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Asimilación del tema, es decir, pasar de lo abstracto a lo entendible, para esto usamos comparaciones y similes con acciones o elementos que ya entendamos previamente.&lt;/li&gt;
&lt;li&gt;Conocimiento, en este punto ya entendemos la idea principal pero aún no somos capaces de aplicarla en otros contextos (acá es donde se quedan los que sufren de "cursitis").&lt;/li&gt;
&lt;li&gt;Entendimiento, en este punto ya estamos en capacidad de aplicar lo aprendido y extenderlo a nuevos conceptos, acá el cerebro ya domina el tema y puede crear nuevas vertientes de conocimiento.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Organización
&lt;/h3&gt;

&lt;p&gt;Para prevenir ese problema, lo que podemos hacer es tener un sistema interno, es decir, ordenar nuestras ideas, para eso me gusta mucho usar checklists, ya que me permiten aterrizar las ideas y darles un "paso a paso" que puedo ir realizando sin que nada se me pase por alto.&lt;br&gt;
Este checklist será el resultado del análisis del proyecto y que quiero realizar, pero antes del checklist, debo definir el objetivo, vamos a ver un ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objetivo:&lt;/strong&gt; Aprender a estructurar una página estática de forma semántica y agregar la parte visual por medio de CSS definiendo variables para los colores y las estructuras.&lt;br&gt;
&lt;strong&gt;Proyecto:&lt;/strong&gt; Clonación de una Landing Page existente&lt;br&gt;
&lt;strong&gt;Herramientas:&lt;/strong&gt; Visual Studio Code, Live Server, HTML y CSS&lt;br&gt;
&lt;strong&gt;Librerias:&lt;/strong&gt; Ninguna.&lt;br&gt;
&lt;strong&gt;Tiempo:&lt;/strong&gt; 1 día&lt;br&gt;
&lt;strong&gt;Fecha de Inicio:&lt;/strong&gt; 20/09/2022&lt;br&gt;
&lt;strong&gt;Referencia:&lt;/strong&gt; &lt;a href="https://www.frontendmentor.io/challenges/intro-section-with-dropdown-navigation-ryaPetHE5"&gt;Front End Mentor&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Este es un ejemplo de la definición básica del proyecto que queremos realizar, vamos a prácticar una definición semántica del HTML y la implementación del código CSS, el siguiente paso sería la definición del CheckList&lt;/p&gt;

&lt;h3&gt;
  
  
  Definiendo el CheckList
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crear el proyecto en github&lt;/li&gt;
&lt;li&gt;Descargar la carpeta base del proyecto localmente&lt;/li&gt;
&lt;li&gt;Crear el archivo index.html y styles.css&lt;/li&gt;
&lt;li&gt;Crear el markup base de forma semántica de la pagina HTML&lt;/li&gt;
&lt;li&gt;Probar live server&lt;/li&gt;
&lt;li&gt;Crear los elementos internos del markup&lt;/li&gt;
&lt;li&gt;Adicionar el &lt;a href="https://elad2412.github.io/the-new-css-reset/"&gt;código reset&lt;/a&gt; en el CSS &lt;/li&gt;
&lt;li&gt;Adicionar las variables CSS de los colores y otros valores.&lt;/li&gt;
&lt;li&gt;Revisar el proyecto localmente&lt;/li&gt;
&lt;li&gt;Crear el sitio en github pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este sería un ejemplo de checkList, obviamente puede ser mas detallado y mejor aún, incluir los comandos necesarios en cada paso si se necesita (por ejemplo si necesitamos instalar librerias), el tener este "paso a paso" nos va a permitir también tener una especie de memoria para recordar como hicimos el proyecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  No dispares con escopeta si necesitas un rifle
&lt;/h2&gt;

&lt;p&gt;Sentarnos a definir que queremos practicar o aprender, con tiempos claros y un objetivo especifico, permitirá que aprovechemos mejor nuestro tiempo, adicionalmente tendremos una especie de documentación del proceso y una bitacora, a medida que los temas se hacen mas complejos, se incluyan mas librerias, herramientas, conceptos, etc, se hace mas necesario tener un documento claro donde podamos acudir si algo se nos olvida a futuro, este documento sería la definición y el checkList.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;p&gt;Si lo que se quiere es realizar practicas en desarrollo web, les dejo algunos recursos e ideas interesantes, las cuales pueden aplicar para practicar los multiples temas que incluye esta disciplina.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.frontendmentor.io/"&gt;Front End Mentor&lt;/a&gt; aunque es de pago, tiene algunos proyectos grátis que se pueden realizar, me gusta por que es guiado y tiene bastantes opciones.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dribbble.com/"&gt;Dribble&lt;/a&gt; Sin duda de mis preferidas, hay miles de ejemplos y conceptos de diseños web y aplicaciones moviles que podrían ser muy interesantes de llevar a cabo.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://codepen.io/challenges/"&gt;Codepen Challenges&lt;/a&gt; Codepen tiene una sección con retos interesantes para llevar a cabo, adicionalmente la ventaja de no tener que instalar nada local.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dailyui.co/"&gt;Daily UI&lt;/a&gt; Te suscribes y te llega un reto al correo. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://codier.io/"&gt;Codier&lt;/a&gt; Otra página con retos interesantes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Ideas para proyectos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sistema POS para restaurantes&lt;/li&gt;
&lt;li&gt;Fitness APP&lt;/li&gt;
&lt;li&gt;Food planer APP&lt;/li&gt;
&lt;li&gt;Language Learning APP&lt;/li&gt;
&lt;li&gt;Criminal Alert (alertar por GPS si se está en una zona donde hayan sido reportados muchos robos)&lt;/li&gt;
&lt;li&gt;Personal Finance APP&lt;/li&gt;
&lt;li&gt;Supermarket Calculator APP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como conclusión, la práctica hace al maestro, pero la práctica bien orientada te llevará a la maestría sin tanto sufrimiento.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
