<?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: DontItYourSelf</title>
    <description>The latest articles on DEV Community by DontItYourSelf (@dontityourself).</description>
    <link>https://dev.to/dontityourself</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%2F4016880%2Fc0cd12ec-bd79-4a90-8fd1-46b815facf8f.png</url>
      <title>DEV Community: DontItYourSelf</title>
      <link>https://dev.to/dontityourself</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dontityourself"/>
    <language>en</language>
    <item>
      <title>Your crontab is a wall of text, so I made it a picture</title>
      <dc:creator>DontItYourSelf</dc:creator>
      <pubDate>Fri, 10 Jul 2026 00:31:19 +0000</pubDate>
      <link>https://dev.to/dontityourself/your-crontab-is-a-wall-of-text-so-i-made-it-a-picture-34lo</link>
      <guid>https://dev.to/dontityourself/your-crontab-is-a-wall-of-text-so-i-made-it-a-picture-34lo</guid>
      <description>&lt;p&gt;Every server I've ever touched has ended up with a crontab, and every crontab eventually becomes a wall of expressions. &lt;code&gt;crontab -l&lt;/code&gt; tells you &lt;em&gt;what&lt;/em&gt; is scheduled — but not when things actually happen. For that, you're expanding five fields per line in your head and overlaying the results.&lt;/p&gt;

&lt;p&gt;That works up to maybe five entries. Then one day I noticed my database backup and my log rotation had quietly piled up in the same 2 a.m. window. Nothing was broken, but it was exactly the kind of thing a picture would have shown me in one glance.&lt;/p&gt;

&lt;p&gt;Cron syntax is both the problem and the charm here: steps like &lt;code&gt;*/5&lt;/code&gt;, ranges, lists, month/weekday names, &lt;code&gt;@daily&lt;/code&gt; aliases — huge expressiveness packed into five tiny fields, which is precisely why the combined behavior of ten lines fits in nobody's head. I didn't want an explainer for one expression. I wanted the whole crontab laid out on a time axis. I couldn't find quite that, so I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crontab in, picture out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cron Timeline&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://u-tool.xt3362.com/en/it-developer/cron-timeline/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=cron-timeline-launch" rel="noopener noreferrer"&gt;https://u-tool.xt3362.com/en/it-developer/cron-timeline/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=cron-timeline-launch&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%2F4hv9qwqxffvbphin76qs.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%2F4hv9qwqxffvbphin76qs.png" alt="Five crontab entries expanded onto a 24-hour timeline — db-backup and log-rotate stacking up in the 2 a.m. window" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usage is what you'd expect:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste your crontab (raw &lt;code&gt;crontab -l&lt;/code&gt; output works — comments and &lt;code&gt;PATH=&lt;/code&gt; lines are skipped)&lt;/li&gt;
&lt;li&gt;Pick a view (timeline / calendar / Gantt) and a range (24 hours / 7 days / 30 days), plus a start date&lt;/li&gt;
&lt;li&gt;Read the picture. A collapsible entry list shows each expression with an auto-generated plain-English description&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's also an expression builder for composing new jobs — more on that below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design decision I care about: giving up on the scatter plot at 1,000 points
&lt;/h2&gt;

&lt;p&gt;The naive timeline is a scatter chart: one execution = one SVG circle. For a 24-hour window that's fine — even a five-minute health check is only 288 dots.&lt;/p&gt;

&lt;p&gt;Widen the range to 7 days, though, and the crontab above becomes ~2,000 dots. Mix in an every-minute job and you're past 10,000. Ten thousand SVG nodes in the DOM makes a browser very visibly unhappy.&lt;/p&gt;

&lt;p&gt;So past 1,000 points, the chart switches automatically to a density grid: time buckets × one row per job, with cell opacity encoding how many executions land in each bucket. Buckets are hourly for the 24-hour and 7-day ranges, daily for 30 days.&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%2F82b050fjv06yucc4e9ar.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%2F82b050fjv06yucc4e9ar.png" alt="The same crontab switched to a 7-day range — 2,063 executions, automatically rendered as a density grid" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I considered collapsing everything into a stacked bar chart instead, and rejected it. The entire point of a timeline is that it reads as "row = job, x = time"; stack the bars and you lose &lt;em&gt;which job runs when&lt;/em&gt; — the one question the tool exists to answer. The rendering changes, the mental model doesn't. (If you do want aggregate totals per time slot, that exists separately as the Gantt view.)&lt;/p&gt;

&lt;p&gt;There's a hard ceiling too: schedule computation stops at 50,000 points and shows a warning. An every-minute job over 30 days is 43,200 points, so it's a limit you can actually hit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faithful cron semantics&lt;/strong&gt;: restrict both day-of-month &lt;em&gt;and&lt;/em&gt; day-of-week and cron fires when &lt;em&gt;either&lt;/em&gt; matches — the classic OR rule that surprises everyone once. The visualization reproduces it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/reboot"&gt;@reboot&lt;/a&gt;&lt;/strong&gt; has no position on a time axis, so it's skipped — but counted and reported, never silently dropped&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expression builder&lt;/strong&gt;: pick presets per field and you get the generated expression, a plain-English description, and the next five run times. Weekday-only schedules correctly skip the weekend&lt;/li&gt;
&lt;li&gt;It's part of a small static &lt;strong&gt;Astro&lt;/strong&gt; site, each tool a client-side &lt;strong&gt;React&lt;/strong&gt; island. No backend — your crontab never leaves the browser&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgqmzgpk5t0bmt0z6u2c8.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%2Fgqmzgpk5t0bmt0z6u2c8.png" alt="The expression builder composing 0 9 * * 1-5, with the next five executions skipping the weekend" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When to reach for it
&lt;/h2&gt;

&lt;p&gt;If your crontab has grown past the point where you can hold it in your head, paste it in before you add the next job — the empty time slots are suddenly obvious.&lt;/p&gt;

&lt;p&gt;Feedback and feature ideas are very welcome in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of a small collection of free browser tools I'm building: &lt;a href="https://u-tool.xt3362.com/en/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=cron-timeline-launch" rel="noopener noreferrer"&gt;Utilities Web&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>I built a calculator + timer for the 4:6 coffee brewing method</title>
      <dc:creator>DontItYourSelf</dc:creator>
      <pubDate>Mon, 06 Jul 2026 02:27:40 +0000</pubDate>
      <link>https://dev.to/dontityourself/i-built-a-calculator-timer-for-the-46-coffee-brewing-method-2l9p</link>
      <guid>https://dev.to/dontityourself/i-built-a-calculator-timer-for-the-46-coffee-brewing-method-2l9p</guid>
      <description>&lt;p&gt;I brew pour-over coffee most mornings, and for the past year or so I've been using the &lt;strong&gt;4:6 method&lt;/strong&gt; — the brewing technique that Tetsu Kasuya used to win the 2016 World Brewers Cup.&lt;/p&gt;

&lt;p&gt;If you haven't tried it: you split your total water into &lt;strong&gt;40% and 60%&lt;/strong&gt;. The first 40% goes in as two pours and controls the &lt;em&gt;taste&lt;/em&gt; (a bigger first pour skews bright/acidic, a smaller one skews sweet). The remaining 60% controls the &lt;em&gt;strength&lt;/em&gt; — more pours means a stronger cup. Every pour lands on a 45-second interval. It's simple, repeatable, and it genuinely changed how my coffee tastes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: coffee math at 7am
&lt;/h2&gt;

&lt;p&gt;The standard recipe (20g beans, 300g water, five 60g pours) is easy to memorize. But the moment you deviate — 17g of beans left in the bag, or brewing for two people — you're standing there with a kettle in one hand doing arithmetic: &lt;em&gt;17 × 15 = 255g total, 40% of that is 102g split into two pours, and I want it sweeter so the first pour should be smaller than the second…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile your timer is a separate app, and your phone screen just went to sleep.&lt;/p&gt;

&lt;p&gt;There are plenty of articles explaining the 4:6 method. What I couldn't find was a tool that does the calculation &lt;em&gt;and&lt;/em&gt; walks you through the pours in one place. So I built one.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Coffee Extraction Ratio &amp;amp; 4:6 Method Timer&lt;/strong&gt; — free, runs entirely in the browser:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://u-tool.xt3362.com/en/hobby/coffee-ratio/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=coffee-ratio-launch" rel="noopener noreferrer"&gt;https://u-tool.xt3362.com/en/hobby/coffee-ratio/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=coffee-ratio-launch&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%2F1d1bcf36xbfj3jcav1mq.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%2F1d1bcf36xbfj3jcav1mq.png" alt=" " width="780" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enter your bean amount&lt;/strong&gt; (defaults to 20g). Pick a ratio — 1:15 to 1:18 presets or a custom value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose taste and strength.&lt;/strong&gt; Taste (bright / balanced / sweet) adjusts how the first 40% is split between two pours; strength (light / standard / strong) sets whether the last 60% is 1, 2, or 3 pours&lt;/li&gt;
&lt;li&gt;Hit &lt;strong&gt;Start Timer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tool generates the full pouring schedule — per-pour amount, cumulative weight, and timing — and then beeps (and vibrates on mobile) every 45 seconds to cue the next pour. Your scale's cumulative reading just has to match the number on screen. No thinking required mid-brew.&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%2F1uszg7qkbyqzyrfkjrz6.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%2F1uszg7qkbyqzyrfkjrz6.png" alt=" " width="780" height="1688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The default "strong" setting reproduces Kasuya's classic 60g × 5 pours recipe, so that's a good starting point if you're new to the method.&lt;/p&gt;

&lt;h2&gt;
  
  
  The nerdy bits
&lt;/h2&gt;

&lt;p&gt;Since this is DEV, a few implementation notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's part of a small utilities site built with &lt;strong&gt;Astro&lt;/strong&gt; — fully static, with each tool as a client-side &lt;strong&gt;React&lt;/strong&gt; island. No backend, no accounts, nothing you type ever leaves the browser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wake Lock API&lt;/strong&gt; keeps the screen on during the brew. A timer you can't see because your phone went to sleep is useless, and this turned out to be the feature I appreciate most at 7am&lt;/li&gt;
&lt;li&gt;Pour cues use a simple audio beep plus the &lt;strong&gt;Vibration API&lt;/strong&gt; on mobile, so you get the cue even with the sound off&lt;/li&gt;
&lt;li&gt;There's also a reverse mode: enter the water you have and it calculates the beans you need&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you're into pour-over — or you've been meaning to try the 4:6 method — give it a spin. It works best saved to your phone's home screen, set up while the kettle heats.&lt;/p&gt;

&lt;p&gt;Feedback and feature ideas are very welcome in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;It's part of a small collection of free browser tools I'm building: &lt;a href="https://u-tool.xt3362.com/en/?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=coffee-ratio-launch" rel="noopener noreferrer"&gt;Utilities Web&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
