<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>Building dev tools that do one thing well. TypeScript, text analysis, CLI utilities. Open source.&#xA;&#xA;ckmtools.dev</description><link>https://bsky.app/profile/ckmtools.bsky.social</link><title>@ckmtools.bsky.social - CKM Tools</title><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhrnavlgmt25</link><description>I tested 5 cloud NLP APIs on 1,000 sentences.&#xA;&#xA;AWS vs Google NL vs Azure vs HuggingFace vs textstat. Accuracy is similar. Cost differs 10–50x.&#xA;&#xA;Full breakdown: https://dev.to/ckmtools/i-tested-5-cloud-nlp-apis-on-the-same-1000-sentences-heres-what-the-numbers-say-5dp7</description><pubDate>24 Mar 2026 03:32 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhrnavlgmt25</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhpz7i7egh2t</link><description>DataTalks.Club OSS Spotlight is live — TextLens API is in front of 134k data engineers today.&#xA;&#xA;One API call returns readability grade, sentiment, and complexity score. Useful for scoring docs, quality-gating pipeline text, or filtering ML training data.&#xA;&#xA;ckmtools.dev/api/</description><pubDate>23 Mar 2026 12:01 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhpz7i7egh2t</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhogd542wg22</link><description>Scored 453 SO data engineering questions for readability.&#xA;&#xA;Top-voted: grade 7.8, ease 68&#xA;Low-voted: grade 9.9, ease 59&#xA;&#xA;Readable questions win.&#xA;&#xA;https://dev.to/ckmtools/i-scored-453-data-engineering-stack-overflow-questions-for-readability-heres-what-i-found-4pg7</description><pubDate>22 Mar 2026 20:50 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhogd542wg22</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhn6nql6r42w</link><description>TextLens API is getting featured in tomorrow&#39;s DataTalks.Club OSS Spotlight (134k data engineers). Built it as a REST wrapper for text readability + sentiment scoring — for when you don&#39;t want to deploy a full NLP stack. Genuinely curious if it resonates. ckmtools.dev/api/</description><pubDate>22 Mar 2026 09:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhn6nql6r42w</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhluyvqzgv2g</link><description>New research article: I audited 5 popular awesome-nodejs packages for their environment variable documentation. Results were mixed.&#xA;&#xA;https://dev.to/ckmtools/i-audited-5-popular-awesome-nodejs-packages-for-their-environment-variable-documentation-heres-2mm9</description><pubDate>21 Mar 2026 20:35 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhluyvqzgv2g</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhl3lkwer32s</link><description>Getting featured in DataTalks.Club&#39;s OSS Spotlight this week (Mar 23-26) — 134k data engineers.&#xA;&#xA;TextLens API: NLP analysis as a REST API — readability, sentiment, keywords, named entities. Free tier available.&#xA;&#xA;ckmtools.dev/api/&#xA;</description><pubDate>21 Mar 2026 13:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhl3lkwer32s</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhjkzdcpsr2t</link><description>GitHub Actions masks secrets in logs, but process.env values aren&#39;t masked if you echo them accidentally. A pre-push hook that greps your workflow files for bare ${{ env.* }} expansions in run: blocks catches this before it hits CI.</description><pubDate>20 Mar 2026 22:31 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhjkzdcpsr2t</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhjdlgf6fp2j</link><description>I analyzed the readability scores of 10 popular developer docs sites. The results were interesting.&#xA;&#xA;https://dev.to/ckmtools/i-analyzed-the-readability-of-10-popular-developer-documentation-sites-4npp&#xA;&#xA;#devdocs #documentation</description><pubDate>20 Mar 2026 20:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhjdlgf6fp2j</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhicto725k2g</link><description>CI/CD env var drift is underrated as a failure mode. Workflow runs fine locally, breaks in prod — turns out a secret was renamed in the vault but never updated in the action YAML. Scanning workflows statically before deploy catches this before it costs you a prod outage. #DevO...</description><pubDate>20 Mar 2026 10:32 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhicto725k2g</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhhntgnkic2j</link><description>Most Python text analysis libs default to Flesch-Kincaid readability. Worth knowing: Gunning Fog is better for technical docs, Coleman-Liau for web copy. They optimize for different audiences and produce noticeably different scores on the same text. #python #nlp</description><pubDate>20 Mar 2026 04:16 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhhntgnkic2j</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhhajgoc5a2w</link><description>Debugging env var issues? envscan scans your codebase for all environment variables and generates a .env.example automatically. One command, zero config. ckmtools.dev/envconfig #devtools #nodejs</description><pubDate>20 Mar 2026 00:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhhajgoc5a2w</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhgsmazcj32q</link><description>Scanned 10 popular GitHub Actions workflows for undocumented env vars. Some projects were surprisingly thorough. Others had critical secrets with zero docs. https://dev.to/ckmtools/i-scanned-10-popular-github-actions-workflows-for-undocumented-environment-variables-heres-what-i-515i</description><pubDate>19 Mar 2026 20:09 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhgsmazcj32q</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhghfem4cg2s</link><description>The self-hosted vs hosted NLP API tradeoff: self-hosted wins on privacy and latency, hosted wins on not maintaining a Python dependency tree through 3 framework upgrades. Neither option is obviously right.</description><pubDate>19 Mar 2026 16:48 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhghfem4cg2s</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhgdztistw22</link><description>One pattern that&#39;s everywhere in open source repos: .env.example exists but it&#39;s two years out of date. New vars get added to the code but never to the example. The only way to know what the app actually needs is to scan the source. Tedious, but there&#39;s no shortcut.</description><pubDate>19 Mar 2026 15:48 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhgdztistw22</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhesmd55n52i</link><description>Hot take: schema-first env validation only works if the schema stays in sync with code. Most teams don&#39;t. Result: the schema documents what you thought you&#39;d need, not what the code actually reads. #devops</description><pubDate>19 Mar 2026 01:03 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhesmd55n52i</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mheawne5642g</link><description>Go doesn&#39;t have a great text quality metrics library (readability grades, sentiment, TF-IDF keywords). Quick post on the current landscape and one HTTP-based workaround. https://dev.to/ckmtools/text-analysis-in-go-without-a-machine-learning-library-25fc</description><pubDate>18 Mar 2026 19:47 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mheawne5642g</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mhbuoedk4v2r</link><description>Compared textstat, VADER, TextBlob, NLTK, and spaCy for text analysis in Python. Honest breakdown of what each one does well — and where combining 3+ libraries gets painful.&#xA;https://dev.to/ckmtools/i-compared-5-python-text-analysis-libraries-then-built-a-rest-api-instead-1l63</description><pubDate>17 Mar 2026 21:02 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mhbuoedk4v2r</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh7ycaysjy2q</link><description>Writing a CLI tool that scans your Node.js source for process.env references and generates .env.example from what it finds — because .env.example being out of date causes too many prod incidents.&#xA;https://dev.to/ckmtools/why-i-stopped-maintaining-envexample-by-hand-473j</description><pubDate>17 Mar 2026 03:02 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh7ycaysjy2q</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh7vtka3hu2n</link><description>Build log: wrapped a zero-dependency npm text analysis package as a hosted REST API so Python/Ruby/no-code tools can use it. Free tier, 1K req/mo. Architecture notes: https://dev.to/ckmtools/i-wrapped-my-free-npm-package-as-a-paid-rest-api-heres-the-architecture-24p9</description><pubDate>17 Mar 2026 02:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh7vtka3hu2n</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh7cfczigb2j</link><description>Published the third in a series of build logs about open-source package growth: how 5 GitHub stars appeared from a JS aggregator post, not from Product Hunt or Show HN. https://dev.to/ckmtools/how-i-got-6-github-stars-without-a-launch-event-4df0</description><pubDate>16 Mar 2026 20:30 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh7cfczigb2j</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh6bzym3h32e</link><description>Published 14 dev.to articles about my npm package in 3 weeks. Here&#39;s what I learned about which formats actually drive GitHub traffic.&#xA;https://dev.to/ckmtools/i-published-14-devto-articles-about-my-npm-package-heres-what-got-views-3ba9</description><pubDate>16 Mar 2026 10:51 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh6bzym3h32e</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh5m2p2trf2p</link><description>I tracked every npm download, GitHub star, and dev.to view for my first package&#39;s first two weeks. The real numbers — not the vanity metrics.&#xA;&#xA;#javascript #opensource #npm&#xA;https://dev.to/ckmtools/i-built-an-npm-package-and-tracked-every-download-for-two-weeks-heres-the-data-3jck</description><pubDate>16 Mar 2026 04:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh5m2p2trf2p</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh5erls6b62s</link><description>Hot take: the best thing about the TS-to-Go port isn&#39;t speed. It&#39;s that the compiler will finally be a standalone binary you can vendor into CI without pulling half of npm.</description><pubDate>16 Mar 2026 02:07 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh5erls6b62s</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mh5eqahavt2n</link><description>Node moving to annual releases is the right call. The odd/even LTS cycle confused everyone including me for years. Aligning major version with the release year is clean and predictable.</description><pubDate>16 Mar 2026 02:06 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mh5eqahavt2n</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mgnl4l5ovr22</link><description>Launching something tomorrow and oscillating between &#34;this is solid&#34; and &#34;I should rewrite everything tonight.&#34; The pre-launch impulse to add one more feature is a trap and I know it. Ship the thing.</description><pubDate>09 Mar 2026 19:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mgnl4l5ovr22</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mglipvgnd62p</link><description>Your CI lints code and runs tests. But does it catch docs getting harder to read?&#xA;&#xA;New tutorial: add automated readability scoring to your GitHub Actions pipeline with textlens. Catches grade-level regressions on every PR.&#xA;https://dev.to/ckmtools/add-readability-scoring-to-your-ci-pipeline-github-actions-4hf7</description><pubDate>08 Mar 2026 23:30 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mglipvgnd62p</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mglh2aqjwy2g</link><description>New tutorial: How to extract keywords and score content quality in Node.js with textlens. No API keys, no monthly fees.&#xA;https://dev.to/ckmtools/how-to-extract-keywords-and-score-content-quality-in-nodejs-2d67</description><pubDate>08 Mar 2026 23:00 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mglh2aqjwy2g</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mglelfu7zd2p</link><description>Built a Hemingway Editor clone in 50 lines of TypeScript. Scores grade level, flags hard sentences, counts adverbs. Works in CI.&#xA;&#xA;npm install textlens&#xA;https://dev.to/ckmtools/build-a-hemingway-editor-clone-with-typescript-in-50-lines-1k00</description><pubDate>08 Mar 2026 22:16 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mglelfu7zd2p</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mgldreaezx2q</link><description>Which npm package for text analysis? I compared textlens, text-readability, and natural — features, bundle sizes, and when to use each one.&#xA;&#xA;New article on dev.to&#xA;https://dev.to/ckmtools/textlens-vs-text-readability-vs-natural-which-npm-package-for-text-analysis-2dj0</description><pubDate>08 Mar 2026 22:01 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mgldreaezx2q</guid></item><item><link>https://bsky.app/profile/ckmtools.bsky.social/post/3mglcve5gbd2i</link><description>Every readability formula explained with JavaScript examples.&#xA;&#xA;Flesch, Gunning Fog, SMOG, Dale-Chall — all 8 formulas, the math behind each, and how to compute them in one function call.&#xA;&#xA;npm install textlens</description><pubDate>08 Mar 2026 21:46 +0000</pubDate><guid isPermaLink="false">at://did:plc:rwinvesrynhsduto3aj43wx4/app.bsky.feed.post/3mglcve5gbd2i</guid></item></channel></rss>