<?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>Forem: Alberto Delgado</title>
    <description>The latest articles on Forem by Alberto Delgado (@turutupa).</description>
    <link>https://forem.com/turutupa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F449682%2F2f9535db-988b-4f57-8d14-ec6fedac79f5.jpeg</url>
      <title>Forem: Alberto Delgado</title>
      <link>https://forem.com/turutupa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/turutupa"/>
    <language>en</language>
    <item>
      <title>Yames - Yet Another Metronome Everyone Skips</title>
      <dc:creator>Alberto Delgado</dc:creator>
      <pubDate>Mon, 04 May 2026 21:23:38 +0000</pubDate>
      <link>https://forem.com/turutupa/yames-yet-another-metronome-everyone-skips-5f49</link>
      <guid>https://forem.com/turutupa/yames-yet-another-metronome-everyone-skips-5f49</guid>
      <description>&lt;p&gt;I'm a software engineer and musician, and I got tired of every metronome app out there feeling like it was designed in 2005. So I built my own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://turutupa.github.io/yames/?utm_source=devto&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;Yames&lt;/a&gt;&lt;/strong&gt; (Yet Another Metronome Everyone Skips) is a free, open-source desktop metronome built with Rust and Tauri. Sub-millisecond timing precision, 10+ handcrafted themes, and it's designed to get out of your way so you can focus on practice.&lt;/p&gt;

&lt;p&gt;I'm looking for developers and musicians to help test it and give feedback. It's cross-platform (macOS, Windows, Linux) and takes 10 seconds to install.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it different?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Precision that matters
&lt;/h3&gt;

&lt;p&gt;Built on Rust's &lt;code&gt;rodio&lt;/code&gt; audio engine — no drift, no jitter, no Electron. The timing is rock solid even at high tempos with complex subdivisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed Drill
&lt;/h3&gt;

&lt;p&gt;Set a start BPM, end BPM, and bars per step. Hit play and the metronome auto-ramps for you. No more fiddling with the tempo dial mid-practice.&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%2Fb3rqyojnqipqitp5lq2m.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%2Fb3rqyojnqipqitp5lq2m.png" alt="Speed Drill mode" width="800" height="653"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Zen Mode
&lt;/h3&gt;

&lt;p&gt;Press &lt;code&gt;Z&lt;/code&gt; and everything disappears. Fullscreen immersive visuals that pulse with the beat — particles, waves, cosmos. No UI, no distractions. Just rhythm.&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%2Fmh03b2buag9hjai8hora.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%2Fmh03b2buag9hjai8hora.png" alt="Zen mode — Cosmos" width="800" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Floating Widget
&lt;/h3&gt;

&lt;p&gt;A tiny always-on-top mini-player that sits over your DAW, sheet music, or tabs. Toggle it with &lt;code&gt;W&lt;/code&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%2Fz3okt149cxgsui2si0z1.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%2Fz3okt149cxgsui2si0z1.png" alt="Floating widgets" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Keyboard-Driven
&lt;/h3&gt;

&lt;p&gt;Everything is a hotkey. Global shortcuts work even when Yames isn't focused.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Space&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Play / Stop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;BPM ±5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Zen mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fullscreen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Floating widget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;⌘1&lt;/code&gt; / &lt;code&gt;⌘2&lt;/code&gt; / &lt;code&gt;⌘3&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Switch tabs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  10+ Themes
&lt;/h3&gt;

&lt;p&gt;Dark, light, vibrant, minimal. Pick what fits your vibe.&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%2Fguemt6yh9xvk19ii773m.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%2Fguemt6yh9xvk19ii773m.png" alt="Themes" width="800" height="644"&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%2Fdlupmwej0mrce2mvkz76.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%2Fdlupmwej0mrce2mvkz76.png" alt="Themes" width="800" height="726"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;macOS (Homebrew):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; turutupa/tap/yames
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows / Linux / Direct download:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/turutupa/yames/releases/latest" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt; — .AppImage, .deb, .dmg, .exe&lt;/p&gt;

&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;p&gt;Rust · Tauri v2 · React · TypeScript · rodio&lt;/p&gt;

&lt;p&gt;The entire codebase is ~10,600 lines. It's lean by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  I need your help
&lt;/h2&gt;

&lt;p&gt;This is a solo project about a week old. I'd love feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timing accuracy&lt;/strong&gt; — does it feel tight? Any drift at high BPMs?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed Drill&lt;/strong&gt; — is the auto-ramp useful for your practice?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Themes&lt;/strong&gt; — what looks good, what doesn't?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing features&lt;/strong&gt; — what would make this your daily driver?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bugs&lt;/strong&gt; — break it, tell me&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a musician who codes (or a coder who plays), you're exactly who I built this for.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/turutupa/yames?utm_source=devto&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; · 🌐 &lt;strong&gt;&lt;a href="https://turutupa.github.io/yames/?utm_source=devto&amp;amp;utm_medium=blog" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/strong&gt; · 📥 &lt;strong&gt;&lt;a href="https://github.com/turutupa/yames/releases/latest" rel="noopener noreferrer"&gt;Download&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading. Happy practicing.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>rust</category>
      <category>showdev</category>
      <category>music</category>
    </item>
    <item>
      <title>GitKarma: Review to Earn. Spend to Merge.</title>
      <dc:creator>Alberto Delgado</dc:creator>
      <pubDate>Tue, 04 Nov 2025 18:49:15 +0000</pubDate>
      <link>https://forem.com/turutupa/gitkarma-review-to-earn-spend-to-merge-453i</link>
      <guid>https://forem.com/turutupa/gitkarma-review-to-earn-spend-to-merge-453i</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Code reviews are slow and require constant chasing. GitKarma, a GitHub App fixes this: reviewers earn karma for quality reviews; authors must spend karma to get their PR merged. This creates a balanced economy where reviews actually happen, and critical work gets prioritized fairly. Visit &lt;a href="https://gitkarma.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;gitkarma.dev&lt;/strong&gt;&lt;/a&gt; to try it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem — unglamorous, universal, and ridiculously costly
&lt;/h2&gt;

&lt;p&gt;Every engineering team knows this scene: a developer opens a PR at 9:03am, goes for coffee, and returns at 11:18am to find the PR still waiting. Days pass. Context is lost. Rollbacks happen. Momentum dies.&lt;/p&gt;

&lt;p&gt;We treat code review like honorary volunteer work. It’s something good teammates &lt;em&gt;should&lt;/em&gt; do, but it’s also the first thing to slip when calendars get tight or managers move on. That cost is subtle — missed deadlines, overloaded engineers, and increased risk — but it compounds faster than you think.&lt;/p&gt;

&lt;p&gt;Slow reviews are a productivity tax. We pay it with wasted cycles, frustrated developers, and shipped bugs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Meet GitKarma — make reviews fair, fast, and final
&lt;/h2&gt;

&lt;p&gt;GitKarma flips the script. Instead of relying on goodwill, chasing down developers, or leaving everyone to fend for themselves, it creates a transparent system for review labor inside your team.&lt;/p&gt;

&lt;p&gt;The rules are simple and human-friendly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review to Earn:&lt;/strong&gt; Developers earn karma points for reviewing PRs. The more you review, the more you earn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend to Merge:&lt;/strong&gt; Authors must spend karma to pass the GitKarma check and merge their PR. No karma? No merge. If you run out, you review someone else's PR to earn more. This isn't optional — it's the gate that makes the system work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Visibility Dashboard:&lt;/strong&gt; GitKarma provides a comprehensive dashboard showing PR status, time to merge, review activity, and karma distribution across your team. No more guessing where bottlenecks are — the data is right there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoreboard &amp;gt; Politics:&lt;/strong&gt; Karma is visible. Who consistently reviews thoroughly? Who hoards approvals? The data is there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin guardrails:&lt;/strong&gt; When a hotfix needs to ship or production is down, admins can bypass the karma check entirely — no waiting, no blockers. GitKarma enforces process when it matters and gets out of the way when urgency demands it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounties!&lt;/strong&gt; Need a critical PR reviewed &lt;em&gt;fast&lt;/em&gt;? Wrestling with a gnarly refactor that deserves extra recognition? Or just want to spice things up? Admins can add a bounty with &lt;code&gt;gk add bounty &amp;lt;karma points&amp;gt;&lt;/code&gt; (e.g., &lt;code&gt;gk add bounty 50&lt;/code&gt;) to offer bonus karma to reviewers. Use it to fast-track urgent work, reward heroic reviews of complex PRs, or simply add a little competitive fun to your workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: reviews happen consistently, critical work moves forward, and contribution is measured fairly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real scenario: Ship faster, not harder
&lt;/h2&gt;

&lt;p&gt;Here's how it works in practice:&lt;/p&gt;

&lt;p&gt;Sarah opens a refactoring PR on Monday morning. She has 100 karma points. Her PR costs 100 karma to merge. Two teammates review it Tuesday afternoon — they each earn 50 karma. Sarah spends her 100 karma, merges the PR, and ships by Wednesday.&lt;/p&gt;

&lt;p&gt;Next week, Sarah's karma is low (25 points). She needs to merge another PR (100 karma cost). She reviews two PRs from teammates — earns 100 karma — then merges her own. The cycle continues. Reviews happen. Work moves.&lt;/p&gt;

&lt;p&gt;No chasing. No guilt trips. Just a system that runs itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built for real teams
&lt;/h2&gt;

&lt;p&gt;GitKarma is designed to work with how teams actually operate, not against them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full configurability:&lt;/strong&gt; All settings — karma earned per review, karma cost to merge, and more — can be configured by admins to match your team's needs and priorities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate urgency incentives:&lt;/strong&gt; Set bonus karma for timely reviews — for example, award extra points for reviews completed within the first 24 hours of a PR being opened.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Karma is a signal, not a decree:&lt;/strong&gt; Team leads still exercise judgment. GitKarma informs decisions; it doesn't replace human oversight.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to get started — 60 seconds, zero config
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitKarma is completely free.&lt;/strong&gt; Install it once, and it works immediately with battle-tested defaults. No credit card. No trial period. Just install and go.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://github.com/apps/gitkarma-dev" rel="noopener noreferrer"&gt;&lt;strong&gt;gitkarma.dev&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click "Install" and select your repositories&lt;/li&gt;
&lt;li&gt;Open a PR — GitKarma is now enforcing fair reviews&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;That's it.&lt;/strong&gt; Your team starts earning and spending karma immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to customize?&lt;/strong&gt; Fine-tune settings at &lt;a href="https://gitkarma.dev/admin" rel="noopener noreferrer"&gt;&lt;strong&gt;gitkarma.dev/admin&lt;/strong&gt;&lt;/a&gt; (login required). Adjust karma costs, earning rates, and bonus timers to match your team's workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended:&lt;/strong&gt; Run a pilot with one team for 2–4 sprints. Watch velocity improve. Adjust rules based on real usage. Scale to other teams when you're ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mission
&lt;/h2&gt;

&lt;p&gt;We want fewer stalled PRs, fewer burnouts, and fewer cliff-hanger mornings waiting for feedback. That’s not marketing fluff — that’s the product. GitKarma’s mission is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make review labor visible. Reward the people who do it well. Restore velocity without sacrificing quality.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No drama. No moralizing. Just a system that respects time and improves outcomes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stop waiting. Start shipping.
&lt;/h2&gt;

&lt;p&gt;Your PRs shouldn't rot in review limbo. Your best reviewers shouldn't burn out covering for everyone else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install GitKarma in 60 seconds at &lt;a href="https://gitkarma.dev" rel="noopener noreferrer"&gt;gitkarma.dev&lt;/a&gt;&lt;/strong&gt; — no configuration needed, completely free. Fix your review bottleneck today.&lt;/p&gt;

&lt;p&gt;Try a pilot. Enforce the rules. Watch your velocity improve.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>github</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Cosmo: A Graph Visualizer That Lives in Your Terminal</title>
      <dc:creator>Alberto Delgado</dc:creator>
      <pubDate>Fri, 17 Oct 2025 05:43:48 +0000</pubDate>
      <link>https://forem.com/turutupa/meet-cosmo-a-graph-visualizer-that-lives-in-your-terminal-1p5o</link>
      <guid>https://forem.com/turutupa/meet-cosmo-a-graph-visualizer-that-lives-in-your-terminal-1p5o</guid>
      <description>&lt;p&gt;Visualize and explore complex data structures — right from your terminal. &lt;strong&gt;Cosmo&lt;/strong&gt; is a fast, interactive graph visualizer that makes graphs and trees easy to understand, beautifully arranged, and fully explorable without ever leaving your command line.&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%2Fednqbo5lyh73zxnqkqzw.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%2Fednqbo5lyh73zxnqkqzw.png" alt="COSMO PREVIEW" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Build Cosmo?
&lt;/h2&gt;

&lt;p&gt;When working with complex data structures — trees, dependency maps, object graphs — it’s too easy to get lost. Most visualizers need a GUI, a canvas, or complex positioning logic. But what if all that could just &lt;em&gt;appear&lt;/em&gt; in your terminal?&lt;/p&gt;

&lt;p&gt;That’s what Cosmo does. You feed it nodes and edges — and it automatically computes a clear, readable layout.&lt;/p&gt;

&lt;p&gt;No coordinates. No configuration. Just render and explore.&lt;/p&gt;

&lt;p&gt;Pan or search across your data. Every interaction is optimized for terminal fluidity — it feels like a minimal, responsive GUI built on ASCII art.&lt;/p&gt;




&lt;h2&gt;
  
  
  Render Graphs Programmatically
&lt;/h2&gt;

&lt;p&gt;Cosmo works seamlessly as part of your workflow. Pass your data structures directly from code and see them come to life:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;cosmo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cosmo-flow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Child&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Leaf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1-2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2-3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;cosmo&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;edges&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No need to predefine coordinates or specify layout rules — Cosmo handles positioning automatically, ensuring a clean, balanced visual every time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Graphs from Files
&lt;/h2&gt;

&lt;p&gt;Cosmo can also visualize graphs from JSON or YAML files with zero setup. Just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cosmo &lt;span class="nt"&gt;--file&lt;/span&gt; path/to/graph.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, Cosmo has a built-in file explorer lets you browse and search your filesystem for graph files — so you can open and switch files without leaving the terminal.&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%2Fh0g9vrlgyomfsg46c0f9.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%2Fh0g9vrlgyomfsg46c0f9.png" alt="Preview" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore, Search, Navigate
&lt;/h2&gt;

&lt;p&gt;Once running, navigation is effortless:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pan:&lt;/strong&gt; Use arrow keys or &lt;code&gt;h&lt;/code&gt;, &lt;code&gt;j&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;l&lt;/code&gt; for navigation. Hold &lt;code&gt;Shift&lt;/code&gt; while using these keys to pan faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search:&lt;/strong&gt; Press &lt;code&gt;/&lt;/code&gt; to find nodes by ID or value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Menu:&lt;/strong&gt; Access themes, keybindings, and commands with &lt;code&gt;Space&lt;/code&gt; or &lt;code&gt;Escape&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With built-in color themes like &lt;code&gt;aura&lt;/code&gt;, &lt;code&gt;dracula&lt;/code&gt;, &lt;code&gt;atom&lt;/code&gt;, and &lt;code&gt;catppuccin&lt;/code&gt;, you can adapt the visualization to your preferred terminal look.&lt;/p&gt;




&lt;h2&gt;
  
  
  Behind the Scenes
&lt;/h2&gt;

&lt;p&gt;Cosmo uses a modern rendering layer built on &lt;a href="https://github.com/infely/react-curse" rel="noopener noreferrer"&gt;&lt;code&gt;react-curse&lt;/code&gt;&lt;/a&gt;, enabling smooth interactivity in a purely terminal environment. This makes it fast enough to handle large data sets while maintaining clarity and aesthetics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Upcoming features include:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Better edge paths&lt;/li&gt;
&lt;li&gt;In-place editing and edge rewiring.&lt;/li&gt;
&lt;li&gt;Live reload support.&lt;/li&gt;
&lt;li&gt;Layout customization.&lt;/li&gt;
&lt;li&gt;Export to SVG/PNG.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why You’ll Love It
&lt;/h2&gt;

&lt;p&gt;If you’ve ever wanted to &lt;strong&gt;see your data structures instead of imagining them&lt;/strong&gt;, Cosmo gives you that instant clarity — directly in your terminal session. It’s simple, elegant, and fits naturally into any developer workflow.&lt;/p&gt;

&lt;p&gt;Explore the full project on GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/turutupa/cosmo" rel="noopener noreferrer"&gt;https://github.com/turutupa/cosmo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cli</category>
      <category>visualization</category>
      <category>tooling</category>
      <category>terminal</category>
    </item>
    <item>
      <title>The spotify playlist you'll ever need</title>
      <dc:creator>Alberto Delgado</dc:creator>
      <pubDate>Tue, 13 Oct 2020 13:12:27 +0000</pubDate>
      <link>https://forem.com/turutupa/the-spotify-playlist-you-ll-ever-need-48n9</link>
      <guid>https://forem.com/turutupa/the-spotify-playlist-you-ll-ever-need-48n9</guid>
      <description>&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%2Fi%2Flz2o7xpe5gt1xtnnwvzb.jpg" 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%2Fi%2Flz2o7xpe5gt1xtnnwvzb.jpg" alt="Alt Text" width="770" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created this playlist for long hours of coding trying to avoid distracting lyrics for higher concentration. I've been sharing the playlist and everyone seems to love it, so I thought I'd share it with my favorite community :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sales pitch:&lt;/strong&gt;&lt;br&gt;
Ideal for assiduous coding or tasks demanding ceaseless concentration. You'll see yourself effortlessly fall into a deep state of maximum efficiency and skyrocketing productivity.&lt;/p&gt;

&lt;p&gt;Without further ado, please enjoy &lt;a href="https://open.spotify.com/playlist/5gxQooWRUa8XzIWZIkJvsZ?si=5vM89h6oQ9OB_Xhz5CN_NA" rel="noopener noreferrer"&gt;This is Albertronik!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to support me. &lt;br&gt;
&lt;a href="https://www.buymeacoffee.com/turutupa" rel="noopener noreferrer"&gt;Buy me a beer&lt;/a&gt;! :)&lt;/p&gt;

</description>
      <category>music</category>
      <category>coding</category>
      <category>spotify</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Does anyone know any OOP books/sites for Javascript?</title>
      <dc:creator>Alberto Delgado</dc:creator>
      <pubDate>Sun, 09 Aug 2020 16:33:02 +0000</pubDate>
      <link>https://forem.com/turutupa/does-anyone-know-any-oop-books-sites-for-javascript-1f7l</link>
      <guid>https://forem.com/turutupa/does-anyone-know-any-oop-books-sites-for-javascript-1f7l</guid>
      <description>&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%2Fi%2Fga3m4yuj6lxs7kq09vhu.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%2Fi%2Fga3m4yuj6lxs7kq09vhu.png" alt="Alt Text" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Does anyone know any good object oriented programming books or sites for Javascript? &lt;/p&gt;

&lt;p&gt;I got myself to learn a lot about functional programming with the following book: &lt;a href="https://mostly-adequate.gitbooks.io/mostly-adequate-guide/content/" rel="noopener noreferrer"&gt;https://mostly-adequate.gitbooks.io/mostly-adequate-guide/content/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A masterpiece in my opinion. I LOVED it so much! And was wondering if anyone happens to know about a similar book for OOP?&lt;/p&gt;

&lt;p&gt;Thank you very much in advance!!&lt;/p&gt;

</description>
      <category>oop</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
