<?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: ZedTuX</title>
    <description>The latest articles on Forem by ZedTuX (@zedtux).</description>
    <link>https://forem.com/zedtux</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%2F182825%2Fc820e2d2-f289-426b-87bd-5491abe97d21.png</url>
      <title>Forem: ZedTuX</title>
      <link>https://forem.com/zedtux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zedtux"/>
    <language>en</language>
    <item>
      <title>Managing data update and cleanup from a local-first app</title>
      <dc:creator>ZedTuX</dc:creator>
      <pubDate>Wed, 11 Mar 2026 17:14:40 +0000</pubDate>
      <link>https://forem.com/zedtux/managing-data-update-and-cleanup-from-a-local-first-app-4bib</link>
      <guid>https://forem.com/zedtux/managing-data-update-and-cleanup-from-a-local-first-app-4bib</guid>
      <description>&lt;p&gt;While developing &lt;a href="https://sanouva.gitlab.io/beacon-app/" rel="noopener noreferrer"&gt;Beacon&lt;/a&gt; I had to face this data cleanup challenge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When an issue/MR is closed/merged, Beacon should not show it to the dev anymore since Beacon shows ongoing work, but removing would surprise the user and gives a bad experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  First, how is managed new data?
&lt;/h2&gt;

&lt;p&gt;You got assigned to an issue, and you pushed the sync button. As soon as the sync is over, the UI is refreshed and shows your new issue with a blue left border to highlight it:&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%2Frr3ge4nk9231qji3rioc.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%2Frr3ge4nk9231qji3rioc.png" alt="Newly imported issue in Beacon" width="800" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Second, how is managed data update?
&lt;/h2&gt;

&lt;p&gt;Now this issue got some new comments, labels and assignee have changed and you synchronized in Beacon.&lt;/p&gt;

&lt;p&gt;Here we need a different way to highlight that issue, a more discrete one that just tell to the user there are updates, but potentially not urgent to check now.&lt;/p&gt;

&lt;p&gt;I did this by adding a dot on the left of issue/MR title styled like a little blueish LED light which is "ON" when there are updates, or "OFF":&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%2F479n9xt6rrnnov88dc37.gif" 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%2F479n9xt6rrnnov88dc37.gif" alt="Updated issue in Beacon" width="610" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  And now, closed/merged issues/MRs
&lt;/h2&gt;

&lt;p&gt;Beacon shows them dimmed for 7 days, at the bottom of the panel with the reason for being here (unassigned, merged, closed and so on).&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%2Fksllw63mt3w2yt4khzlm.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%2Fksllw63mt3w2yt4khzlm.png" alt="Unassigned issue in Beacon" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But now let's say you have plenty of issues or MRs, how to get notified that you have those items at the bottom of the list?&lt;/p&gt;

&lt;p&gt;I opted for a clickable discrete banner at the bottom of the list that scrolls to the beginning of the to-be-deleted-items section:&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%2Fzakhkykyzmshn72cxk8y.gif" 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%2Fzakhkykyzmshn72cxk8y.gif" alt="Scrolling to items to be deleted in Beacon" width="548" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What do you think?
&lt;/h2&gt;

&lt;p&gt;I'm satisfied the way it works, but I need feedback from you!&lt;/p&gt;

&lt;p&gt;If you see a better way to handle data update/removal on local-first app I would be more than happy to hear from you.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>devjournal</category>
      <category>ui</category>
    </item>
    <item>
      <title>Beacon Devlog #1 — Week of March 9, 2026</title>
      <dc:creator>ZedTuX</dc:creator>
      <pubDate>Wed, 11 Mar 2026 11:52:12 +0000</pubDate>
      <link>https://forem.com/zedtux/devlog-1-week-of-march-9-2026-3oip</link>
      <guid>https://forem.com/zedtux/devlog-1-week-of-march-9-2026-3oip</guid>
      <description>&lt;p&gt;It's now 2 weeks I'm developing Beacon, the MVP is done and I'm on my way to v1. In this post I'd like to share with you the biggests surfacing features you could like!&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard panel fullscreen&lt;/strong&gt; — Panels on the dashboard now have a double arrow icon, in its top right, which allows you to maximize it to the dashboard space. You can also use it via keyboard shortcuts, using CMD+ then CMD+Enter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified filter dropdown&lt;/strong&gt; — The 3 dropdown fitlers have been merged into a single one, with 3 columns checkboxes, and showing current filter. This saves space a lot, and make it clearer.


&lt;iframe class="tweet-embed" id="tweet-2029096928349241469-331" src="https://platform.twitter.com/embed/Tweet.html?id=2029096928349241469"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2029096928349241469-331');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2029096928349241469&amp;amp;theme=dark"
  }





&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active Error items desgin review&lt;/strong&gt; — Each information and style of active errors have been reviewed


&lt;iframe class="tweet-embed" id="tweet-2029307421072507111-293" src="https://platform.twitter.com/embed/Tweet.html?id=2029307421072507111"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2029307421072507111-293');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2029307421072507111&amp;amp;theme=dark"
  }





&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error detail modal desgin review&lt;/strong&gt; — Each sections of this modal have been reviewed in order to make it easier to read and more practicle (like stack trace cliclable lines to open in yout IDE)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Installers building CI&lt;/strong&gt; — The Beacon CI pipeline now builds automatically all the installers for Windows/Linux/macOS (ARM/Intel) and update the Beacon website.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notifications&lt;/strong&gt; — Icon and texts from MVP are useless, I'm improving them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My Issues and My MRs panel review&lt;/strong&gt; — Like for active errors, I'm reviewing the information and design&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devtool</category>
      <category>showdev</category>
      <category>startup</category>
      <category>coding</category>
    </item>
    <item>
      <title>Why I'm Building a Local-First Developer Cockpit</title>
      <dc:creator>ZedTuX</dc:creator>
      <pubDate>Fri, 06 Mar 2026 20:52:08 +0000</pubDate>
      <link>https://forem.com/zedtux/why-im-building-a-local-first-developer-cockpit-2b7k</link>
      <guid>https://forem.com/zedtux/why-im-building-a-local-first-developer-cockpit-2b7k</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%2Fuploads%2Farticles%2Fakl82y4z1eazcera6bz6.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%2Fakl82y4z1eazcera6bz6.png" title="This blog article show case the v0.13.1 built on the 6th of Feb 2026." alt="Dashboard view" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I changed of company, I joined a team of four members that use emails and a dedicated Slack channel to share local dev errors to the whole team so that more experienced devs can have a look (in parralel with they work) and give hints to fix that error.&lt;/p&gt;

&lt;p&gt;The idea sounds reasonable: share errors with everyone, someone could help to fix them.&lt;/p&gt;

&lt;p&gt;Here's what actually happens.&lt;/p&gt;

&lt;p&gt;The error emails were piling up, mixing with preprod and prod exception fired seventeen times because many users (or one user hitting many times that buggy button) hit the same page before anyone noticed. Production noise mixes with preprod noise. And on top of it all: MR notifications, CI alerts, calendar invites, Slack threads about train issues.&lt;/p&gt;

&lt;p&gt;So I did a rational thing — I stop reading. The channel that was supposed to surface problems becomes part of the background noise.&lt;/p&gt;

&lt;p&gt;I've seen this pattern on teams of 5, when I was seating in the same room, now the team grown to 10 members, I moved and I'm full-remote, and those local error emails and slack channel are even more useless than before from my point of view since I can't easily help being remote.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Sentry thought
&lt;/h2&gt;

&lt;p&gt;I used Sentry a few years ago and loved it. Errors grouped by fingerprint, proper stack traces, occurrence counts — the basics, done right. But Sentry is a cloud service. Your stack traces, your user data, your environment variables — all shipped to someone else's servers.&lt;/p&gt;

&lt;p&gt;For my side projects and my day job, I kept thinking: &lt;strong&gt;what if I had Sentry, but local?&lt;/strong&gt; A tiny server on localhost that catches errors from my apps, groups them, and shows me a clean dashboard. No cloud. No account. No data leaving my machine.&lt;/p&gt;

&lt;p&gt;That was the seed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I kept pulling the thread
&lt;/h2&gt;

&lt;p&gt;As a senior dev who also wears the ops hat — Terraform, AWS, CI pipelines, framework upgrades — my day is a constant juggle. I write code, push it, then switch to GitLab to check if the pipeline passed. Then I switch again to my mails to check if my MR got reviewed and back to my work.&lt;/p&gt;

&lt;p&gt;Each of those context switches are small, but I always have it come back on "What was I doing?", "What was the next thing I should do?" instead of just &lt;em&gt;building things&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So the idea expanded: what if the same app that catches my errors could also show me my open merge requests, pipelines, and my assigned issues? All in one place, updating in the background, without me having to leave my editor?&lt;/p&gt;

&lt;p&gt;And then came to my mind our Tuesday weekly meeting. You know the one — everyone goes around the table and says what they did last week. And every time, I'm sitting there 10 minutes before the meeting thinking: &lt;em&gt;what did I actually do?&lt;/em&gt; I've created some MRs, I fixed that and this bugs, I closed those issues. But I can't remember in details of all them. So I open GitLab, scroll through my activity, summarize it together quickly, and give a half-confident summary, with some "Ah, and I forgot that I did ...", no looking pro really.&lt;/p&gt;

&lt;p&gt;But wait — if the app already knows my merged MRs, my closed issues, and my resolved errors... it can just &lt;em&gt;generate&lt;/em&gt; that report for me. One click and explain each points I see from my report during the meeting. Done.\&lt;br&gt;
&lt;em&gt;And later, thanks to AI, generate a 2 minutes description of all my work, I could even copy/past in Slack as an async report to my boss.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No browser tabs, no notifications, a &lt;strong&gt;desktop app&lt;/strong&gt; that is available when I need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beacon
&lt;/h2&gt;

&lt;p&gt;That's what I built. Beacon is a desktop app (Tauri + React + Rust) that unifies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error tracking&lt;/strong&gt; — a Sentry-compatible server on localhost:9000. Point your Sentry SDK at it, and errors show up instantly, grouped and searchable. Works with JavaScript, Ruby, and Python today. Adding more languages is almost nothing, but I prioritized the one I use everyday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge requests &amp;amp; pull requests&lt;/strong&gt; — syncs from GitLab and GitHub via OAuth for simplicity. See what's open, who's reviewing, how old it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI pipelines&lt;/strong&gt; — pipeline status per MR, with job-level detail. No more switching to GitLab to check if the build passed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issues&lt;/strong&gt; — your assigned issues, just here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly reports&lt;/strong&gt; — all the important information for your weekly meetings in a single place, with a markdown copy button. Copy/paste into Slack if needed!&lt;/li&gt;
&lt;/ul&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%2Fqcm2ryuq4s7poa0j4fzg.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%2Fqcm2ryuq4s7poa0j4fzg.png" title="The Beacon dashboard — MRs, pipelines, issues, and errors in one view." alt="Beacon full dashboard" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything is stored in a local SQLite database. Beacon only &lt;em&gt;reads&lt;/em&gt; from GitLab/GitHub — it never writes back (no conflicts management). It works offline (thinking of my colleages working in the train). There's no telemetry, no cloud, no account to create on someone else's platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it feels like
&lt;/h2&gt;

&lt;p&gt;I've been dogfooding Beacon for two weeks now, and the thing that surprised me most is the &lt;strong&gt;error notifications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Being notified &lt;em&gt;the second&lt;/em&gt; a Ruby exception fires or a JavaScript error occurs in my app — without having a &lt;code&gt;tail -f&lt;/code&gt; on the logs or a web browser console open — is satisfying. It's the kind of thing that makes you feel in control instead of chasing for errors.&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%2Fg3regpsbr3ewwd3js0wy.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%2Fg3regpsbr3ewwd3js0wy.png" title="Errors grouped by fingerprint, with stack traces and occurrence counts." alt="Error detail panel" width="800" height="717"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And looking at my MRs panel to see a pipeline just passed, without opening a browser? That's time I get to stay in my work.&lt;/p&gt;

&lt;p&gt;And when Tuesday's meeting comes around, I just open the weekly report, and it's all there — MRs merged, issues closed, errors resolved. No more scrolling in GitLab activity.\&lt;br&gt;
Went in holidays for two weeks? Change the report window size to 3 weeks and you'll find your work from the week before your holidays.&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%2F66uha3x43lgzowoj5ig9.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%2F66uha3x43lgzowoj5ig9.png" title="One-click weekly report — copy to clipboard, paste in Slack." alt="Weekly report" width="800" height="741"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We are devs!
&lt;/h2&gt;

&lt;p&gt;While developing and dogfooding it, naturally keyboard shortcuts implementation came to my mind, and editable layout too!&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%2Fq108cnbw0gak70u7z9c0.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%2Fq108cnbw0gak70u7z9c0.png" title="Beacon shortcuts — Focus panel, toggle fullscreen, open weekly report, and more." alt="We love keyboard shortcuts!" width="800" height="838"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your issues are on an unsupported platform, "My Assigned Issues" remain empty, but take space on the Beacon dashboard? Then remove it!&lt;/p&gt;

&lt;p&gt;You'd like "Active Errors" to take more space, and pipelines a lot less? Just resize columns, and here you are: Beacon dashboard as you want it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;If you're a developer who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't want to chase for errors&lt;/li&gt;
&lt;li&gt;Wants to keep data out of the cloud&lt;/li&gt;
&lt;li&gt;Juggles MRs, pipelines, and issues across tabs&lt;/li&gt;
&lt;li&gt;Values privacy and local-first tools&lt;/li&gt;
&lt;li&gt;Don't have much space on the screen&lt;/li&gt;
&lt;/ul&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%2Fsyu7bjkn5uvqzccutykq.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%2Fsyu7bjkn5uvqzccutykq.png" title="Beacon can be really tiny and still fits!" alt="Beacon when it is really tiny!" width="800" height="876"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then Beacon might be what you've been looking for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The MVP is done, and I'm now working on v1 with more features (Clickanle stack traces, pipeline job details, Issues detail view, GitHub Actions support).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm looking for early testers.&lt;/strong&gt; If you want to try Beacon:&lt;/p&gt;

&lt;p&gt;👉 Visit &lt;a href="https://sanouva.gitlab.io/beacon-app/" rel="noopener noreferrer"&gt;the Beacon website&lt;/a&gt; and subscribe to request access. Just let me know your platform (macOS, Windows, or Linux) and I'll send you an installer.&lt;/p&gt;

&lt;p&gt;You can also follow the project on &lt;a href="https://x.com/Beacon_local" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt; for updates.&lt;/p&gt;

&lt;p&gt;I'd love your feedback — what works, what's missing, what you'd use daily. This is a tool built by a developer for developers, and your input shapes what comes next.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>startup</category>
      <category>rust</category>
    </item>
    <item>
      <title>Stream command output from a Chef recipe</title>
      <dc:creator>ZedTuX</dc:creator>
      <pubDate>Mon, 29 Jul 2019 13:40:49 +0000</pubDate>
      <link>https://forem.com/zedtux/stream-command-output-from-a-chef-recipe-52m1</link>
      <guid>https://forem.com/zedtux/stream-command-output-from-a-chef-recipe-52m1</guid>
      <description>&lt;p&gt;In this article I will show you how to see, in real-time, a command output from a Chef recipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executing a command, the chef way
&lt;/h2&gt;

&lt;p&gt;As a command example, as I'm working with it right now, let's take the Kubernetes installation tool: &lt;a href="https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/"&gt;kubeadm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This app tells you what he is doing in its output.&lt;/p&gt;

&lt;p&gt;I first did this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;While this runs the command successfully, all the command's output is invisible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* execute[kubeadm init] action run
           - execute     kubeadm init     --token=vfopfv.fgum14jkv3ldssu8     --pod-network-cidr=10.244.0.0/16     --service-cidr=10.96.0.0/12     --service-dns-domain=cluster.local     --apiserver-advertise-address=172.28.128.200

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Executing a command, the Ruby way
&lt;/h2&gt;

&lt;p&gt;Let's now make this real-time :&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Now you get the command output in real time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         * ruby_block[kubeadm init] action run[init] Using Kubernetes version: v1.15.1
       [preflight] Running pre-flight checks
       [preflight] Pulling images required for setting up a Kubernetes cluster
       [preflight] This might take a minute or two, depending on the speed of your internet connection
       ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🎉&lt;/p&gt;

</description>
      <category>chef</category>
    </item>
    <item>
      <title>Run your Rails migrations from the web browser</title>
      <dc:creator>ZedTuX</dc:creator>
      <pubDate>Mon, 22 Jul 2019 13:58:15 +0000</pubDate>
      <link>https://forem.com/zedtux/run-your-rails-migrations-from-the-web-browser-4mod</link>
      <guid>https://forem.com/zedtux/run-your-rails-migrations-from-the-web-browser-4mod</guid>
      <description>&lt;p&gt;Something that is painful to me with Rails is when doing a &lt;code&gt;git pull&lt;/code&gt; on a branch with new migration scripts, and getting this error page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fygsalkucfancqm0qnt4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fygsalkucfancqm0qnt4t.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is nice, you know there are migration scripts to be executed, you even have the command to be executed in order to &lt;em&gt;solve&lt;/em&gt; the issue ... but that's all.&lt;/p&gt;

&lt;p&gt;You have to open your terminal, go to the project's folder, run that command (or adapt it to Docker if you're using Docker), it will load the environment (so taking few seconds) then, finally, run the migration scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the ActiveRecord Migration UI gem
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="http://pharmony.lu/" rel="noopener noreferrer"&gt;Pharmony&lt;/a&gt; we took the time to fix it so that now, all of that is now from the past! Look at that:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbmdzqm15i0jqyyus3z2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbmdzqm15i0jqyyus3z2l.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You just get a nice page, with the list of pending migration scripts, and a simple "Migrate now!" button.&lt;/p&gt;

&lt;p&gt;As the environment is already loaded, as you're in a Rails app, you don't wast time and just immediately migrate your database! 👌&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;You just have to add the gem to your &lt;code&gt;Gemfile&lt;/code&gt; from your Rails app, run the &lt;code&gt;bundle&lt;/code&gt; command and restart your server.&lt;/p&gt;

&lt;p&gt;Next time you got pending migration scripts, this page will show up and you'll know what you have to do! 😎&lt;/p&gt;

&lt;h3&gt;
  
  
  One more thing
&lt;/h3&gt;

&lt;p&gt;This gem will be enriched with many more features but you already have a &lt;del&gt;buggy&lt;/del&gt; log view after the scripts ran:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Foz29hr9bsrixwelginx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Foz29hr9bsrixwelginx7.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking the migrated script shows the logs of that migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is the source code?
&lt;/h2&gt;

&lt;p&gt;The gem is open source, under MIT licence, hosted on our Gitlab group: &lt;a href="https://gitlab.com/pharmony/active_record_migration_ui" rel="noopener noreferrer"&gt;https://gitlab.com/pharmony/active_record_migration_ui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please feel free to contribute and report issues!&lt;/p&gt;

&lt;p&gt;Help us to make it visible to the world by upvoting on &lt;a href="https://www.producthunt.com/posts/activerecord-migration-ui" rel="noopener noreferrer"&gt;ProductHunt.com&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>rails</category>
      <category>activerecord</category>
    </item>
  </channel>
</rss>
