<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: dhamidi</title><link>https://news.ycombinator.com/user?id=dhamidi</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 01 May 2026 08:29:14 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=dhamidi" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by dhamidi in "Three constraints before I build anything"]]></title><description><![CDATA[
<p>I know it's in vogue to bash Bash but I feel that criticism is unfair.<p>Shell scripting is a victim of its own success: it is _so easy_ to get started that most users get value out of knowing the first one percent and never bother to actually learn the rest.<p>There aren't many who have read the Bash manual, or know what zsh can do that Bash cannot, etc.<p>"Shell scripting is a hot, slow mess" is the same hot slow mess that you get wherever the barrier to entry is extremely low (e.g. early PHP, early JavaScript/frontend development, game development with a game engine where you can just click around in the editor, etc).</p>
]]></description><pubDate>Mon, 27 Apr 2026 10:38:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47919863</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=47919863</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47919863</guid></item><item><title><![CDATA[New comment by dhamidi in "Show HN: HyTags – HTML as a Programming Language"]]></title><description><![CDATA[
<p>Maybe useful inspiration from TCL: there are many commands that define new variables, which makes modeling the stack unnecessary.<p>For example:<p><pre><code>  lappend responses [dict status 200 body ...]
</code></pre>
Appends a new dict to the list held in the variable responses, creating the variable if necessary.<p>I can see that being an attribute:<p><pre><code>  <request-send url="..." as="greeting" />
  <response-text response="greeting" as="text" />
  <selection-set-text text="text" /></code></pre></p>
]]></description><pubDate>Wed, 14 Jan 2026 19:55:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46621980</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=46621980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46621980</guid></item><item><title><![CDATA[New comment by dhamidi in "Ask HN: What are you working on? (January 2026)"]]></title><description><![CDATA[
<p>Feather, a fresh implementation of TCL: <a href="https://www.feather-lang.dev" rel="nofollow">https://www.feather-lang.dev</a><p>Command languages are underrated, and being able to add a Bash-like REPL for agents and users alike is something I want to see more of.<p>Feather solves the "rest of the Owl" problem: agents/users get loops, conditionals, online help for free from Feather, as the embedder you only need to add application-specific commands.<p>Feather itself has no GC (uses the host's), no own data structures (uses the host's, e.g. JavaScript arrays for lists in the js version), and no I/O.<p>The core is implemented in stdlib-less C</p>
]]></description><pubDate>Mon, 12 Jan 2026 15:58:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46590166</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=46590166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46590166</guid></item><item><title><![CDATA[New comment by dhamidi in "Show HN: Feather – a fresh Tcl reimplementation (WASM, Go)"]]></title><description><![CDATA[
<p>Thank you!<p>> Are you doing a mostly one-to-one port, or something more novel?<p>Step 1 is a one-to-one port of all the non-I/O, non-OO stuff.  I've got it down to a single skill for Opus 4.5 and now it's just a matter of turning the crank and keeping an eye on it.<p>Step 2: add more functionality for interactive use for humans/agents. Things like defining the syntax of commands, a completion engine, a help system.  Essentially all the things you'd expect from a modern shell experience, but with a bring-your-own-UI approach.<p>> but man is reference counting a pain in the neck or what.<p>Maybe this is a bit more novel: since the only use case is embedding, and the host language already has dicts, lists, and other data structures, I'm just leveraging those.  In the Go version of Feather, dicts are Go maps; in the JavaScript version they are backed by lists of pairs (to preserve insertion order)</p>
]]></description><pubDate>Fri, 02 Jan 2026 08:51:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46462791</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=46462791</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46462791</guid></item><item><title><![CDATA[Show HN: Feather – a fresh Tcl reimplementation (WASM, Go)]]></title><description><![CDATA[
<p>Hey HN!<p>First time showing something here, but I've been furiously working over the holidays on Feather, a from scratch reimplementation of TCL designed for embedding in modern applications.<p>It's starting out as a faithful reimplementation of TCL <i>without</i> I/O, OOP features, or coroutines.<p>TCL has a special place in my heart because the syntax is so elegant for interactive use, and defining domain specific languages.<p>My motiviation is twofold: faster feedback loops for AI, and moldable software for users.<p>It turns out giving AI agents access to the runtime state of your program makes for really fast feedback loops, but embedding existing options in a world where shipping binaries for each platform is commonplace is tricky.<p>Embedding the real TCL is tricky because it comes with its own event loop (in 2025 you alreay have one), a GUI framework (you have a web framework already, or develop on mobile), and has access to the filesystem (don't forget to delete all commands with file system access!).<p>Feather just doesn't ship with those - expose only what you need from your application.<p>A WASM build comes out of the box and clocks in at ~120kb plus 70kb for connecting it to the browser or node.js.<p>And if embedding becomes easy, you can put a REPL everywhere: in mobile apps, in desktop software, as a control plane into web servers.<p>I want to imagine a world where all software is scriptable just like Emacs and nvim, with agents doing the actual work.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46401944">https://news.ycombinator.com/item?id=46401944</a></p>
<p>Points: 31</p>
<p># Comments: 5</p>
]]></description><pubDate>Sat, 27 Dec 2025 14:06:37 +0000</pubDate><link>https://www.feather-lang.dev</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=46401944</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46401944</guid></item><item><title><![CDATA[New comment by dhamidi in "Show HN: Phrasing.app – learn and maintain multiple languages"]]></title><description><![CDATA[
<p>Not affiliated, just have been following development closely: Phrasing leverages <i>existing content</i>, e.g. subtitles from your favorite shows.<p>The quality depends on the source material you choose to give it.</p>
]]></description><pubDate>Fri, 07 Nov 2025 12:59:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=45845882</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=45845882</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45845882</guid></item><item><title><![CDATA[New comment by dhamidi in "Wacl – A Tcl Distribution for WebAssembly"]]></title><description><![CDATA[
<p>This is great, I was literally looking for something like this yesterday to embed TCL into a Go application without needing CGo</p>
]]></description><pubDate>Wed, 29 Oct 2025 06:40:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45743395</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=45743395</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45743395</guid></item><item><title><![CDATA[New comment by dhamidi in "Claude Skills"]]></title><description><![CDATA[
<p>That's already the case with <a href="https://docs.claude.com/en/docs/claude-code/plugins" rel="nofollow">https://docs.claude.com/en/docs/claude-code/plugins</a></p>
]]></description><pubDate>Fri, 17 Oct 2025 06:19:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45613801</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=45613801</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45613801</guid></item><item><title><![CDATA[New comment by dhamidi in "Bash Strict Mode (2014)"]]></title><description><![CDATA[
<p>The `source` builtin searches through all directories on PATH, not quite a library system, but useable with a bit of discipline in the to-be-sourced shellscripts.</p>
]]></description><pubDate>Mon, 25 Aug 2025 04:15:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=45010139</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=45010139</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45010139</guid></item><item><title><![CDATA[Show HN: A scriptable text editor for LLMs]]></title><description><![CDATA[
<p>Built this out of curiosity to see whether LLMs get better a editing if they express edits as a series of operations instead of a diff.<p>I don't have my answers yet, but actually building a PoC was the first step.<p>Claude seems to be happy to use the tool and write fake elisp just fine.<p>Think of it as sed without the `s`, and a tiny bit of Emacs instead.<p>What I'm looking for: fellow experimenters to get feedback and maybe develop the idea further.<p>The implementation is intentionally naïve.<p>Have fun!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44198747">https://news.ycombinator.com/item?id=44198747</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 06 Jun 2025 08:05:37 +0000</pubDate><link>https://github.com/dhamidi/texted</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=44198747</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44198747</guid></item><item><title><![CDATA[New comment by dhamidi in "Ask HN: What are you working on? (May 2025)"]]></title><description><![CDATA[
<p>More tools / toys / sandboxes to play with.<p>Growing a coding agent as a "game": <a href="https://github.com/dhamidi/smolcode">https://github.com/dhamidi/smolcode</a>.  Started with <a href="https://ampcode.com/how-to-build-an-agent" rel="nofollow">https://ampcode.com/how-to-build-an-agent</a> and then asked the agent to modify itself.  It's so much fun and hard to stop!<p>Since coding is cheap now, I'm building a web framework for myself, using reasonable defaults: <i>built around the transaction log</i>, <i>single binary deploys</i>, <i>sqlite3 for everything</i>, <i>runtime introspection tools to make ops easier</i>.<p>I want the framework to "compile itself out of the project", so that projects don't have devtime dependencies and can be easily edited by Cursor et al.  It should still stick around in the form of a high-level CLI that an AI agent can leverage to fulfill common tasks (e.g. add a new UI component, query, command, etc).</p>
]]></description><pubDate>Mon, 26 May 2025 08:58:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=44095422</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=44095422</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44095422</guid></item><item><title><![CDATA[New comment by dhamidi in "Ask HN: Who is hiring? (May 2025)"]]></title><description><![CDATA[
<p>Modash.io | Senior Product Engineer | Remote (EU) | Full-time<p>Modash is an end-to-end influencer marketing platform for Shopify stores.<p>We help every creator earn a living.<p>Headquartered in Tallinn, Estonia, with engineering distributed across Europe.<p>60 person team, raised $12M in Series A funding, ARR growing 2x YoY.<p>We're on the hunt for Senior Product Engineers who love working with AWS, Vue, NodeJS, Typescript and a passion for product: you are eager to talk to customers and anticipate <i>their</i> needs.<p>If you're all about remote work, and can't wait to make a real impact, we'd love to chat!<p><i>Interview Process</i><p>Option A: <a href="https://www.modash.io/blog/engineering-interviews-at-modash" rel="nofollow">https://www.modash.io/blog/engineering-interviews-at-modash</a><p>Use <a href="https://apply.workable.com/modash/j/C1507B65C3/" rel="nofollow">https://apply.workable.com/modash/j/C1507B65C3/</a> to apply<p>Option B: showcase your project!<p><pre><code>  - It's live somewhere,
  - It has users
  - You built it yourself/you are the main contributor
</code></pre>
send us two videos about your project and we'll get back to you<p>Use this link <a href="https://forms.gle/K4GcyxT1zbmHGdsRA" rel="nofollow">https://forms.gle/K4GcyxT1zbmHGdsRA</a> to apply.</p>
]]></description><pubDate>Sun, 04 May 2025 21:27:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43889732</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=43889732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43889732</guid></item><item><title><![CDATA[New comment by dhamidi in "Swede dreams: How Sweden is embracing its sleepy side"]]></title><description><![CDATA[
<p>So cool to see this here!<p>I bought a house in Nyland [1] a few years ago and now I'm turning it into a place to retreat to for focus time / being close to nature.<p>If someone is interested in sharing the space over a longer period of time (as I'm not living in Sweden), hit me up (email on my profile)<p>[1] <a href="https://maps.app.goo.gl/Ww1GHL5rFXdkcdHfA" rel="nofollow">https://maps.app.goo.gl/Ww1GHL5rFXdkcdHfA</a></p>
]]></description><pubDate>Tue, 28 Jan 2025 10:55:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=42850977</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=42850977</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42850977</guid></item><item><title><![CDATA[New comment by dhamidi in "Web apps built with Ruby on Rails"]]></title><description><![CDATA[
<p>It's not much different than with Postgres:<p><pre><code>    ssh your-server sqlite3 /tmp/path/to/your/db.sqlite3
</code></pre>
Or if you're using Kamal, then the choice of database is completely transparent:<p><pre><code>    kamal app exec -i --reuse bin/rails console</code></pre></p>
]]></description><pubDate>Fri, 10 Jan 2025 16:54:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=42657380</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=42657380</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42657380</guid></item><item><title><![CDATA[New comment by dhamidi in "Ask HN: Who is hiring? (October 2024)"]]></title><description><![CDATA[
<p>I had the pleasure of meeting Ben  in real life and watch him work — he's just really good at what he does, and his experience with ClojureScript is deep and wide.<p>One thing that sets him apart from myself and other engineers I've seen is *speed*: while I'm still thinking about a problem, Ben has implemented multiple prototypes, learned more about the problem and picked the best solution.</p>
]]></description><pubDate>Wed, 02 Oct 2024 17:07:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=41722765</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=41722765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41722765</guid></item><item><title><![CDATA[New comment by dhamidi in "CLI: Improved"]]></title><description><![CDATA[
<p>Actually plain less works quite well when using filters:<p><pre><code>  #!/bin/bash
  # ~/.lessfilter
  case $1 in
    *.md) view-md $1;;
    *.json) jq -C . $1;;
    *) pygmentize $1;;
  esac
</code></pre>
Where view-md is just a thin wrapper around tty-markdown[1]:<p><pre><code>  #!/usr/bin/env ruby
  
  require 'tty-markdown'
  
  puts TTY::Markdown.parse(ARGF.read, colors: 256)

</code></pre>
[1]: <a href="https://github.com/piotrmurach/tty-markdown" rel="nofollow">https://github.com/piotrmurach/tty-markdown</a></p>
]]></description><pubDate>Fri, 31 Aug 2018 09:24:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=17884111</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=17884111</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17884111</guid></item><item><title><![CDATA[New comment by dhamidi in "CLI: Improved"]]></title><description><![CDATA[
<p>Is anybody here aware of any TUI/CLI tools that bring UX patterns/ideas from other programs to the terminal?<p>Examples:<p>- bash/zsh/fish bring suggestions/autocompletion<p>- fzf brings fuzzily-matching selections to the terminal,<p>- <a href="https://github.com/ericfreese/rat" rel="nofollow">https://github.com/ericfreese/rat</a> brings the idea of "widgets" or "layouts",<p>- <a href="https://github.com/mrnugget/fzz" rel="nofollow">https://github.com/mrnugget/fzz</a> brings "preview as you type"<p>I'm looking for more patterns like that, mainly to explore how to make them work in the terminal and see whether that actually has an impact on everyday actions people perform in the terminal many times per day.<p>The goal is not to save time, but to reduce mental friction.</p>
]]></description><pubDate>Fri, 31 Aug 2018 06:43:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=17883439</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=17883439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17883439</guid></item><item><title><![CDATA[New comment by dhamidi in "Show HN: Leader – VIM's leader key for your terminal"]]></title><description><![CDATA[
<p>>  It is not a good idea to use the backslash as the trigger key since it is the traditional line continuation and escape character on UNIX.<p>Well it is also the default key binding for VIM's leader key and placed on the home row on US keyboards which makes it really accessible.<p>What is not shown in the demo screencast is that leader detects whether the cursor is inside a quoted string and in that case doesn't present a menu but tells the shell to insert a literal backspace at the current cursor position.<p>For continuing lines on an interactive shell the user would have to press Ctrl+V followed by a backslash to insert a literal backslash.  In my experience this is rarely necessary in an interactive terminal so the extra utility gained by having leader on the home row outweighs the extra key press necessary for continuing a line.<p>> Furthermore it is not a good idea to replace the command line with a menu since that limits what is possible in UNIX.<p>That is true.  Leader is not _replacing_ the command line, the command line still works as usual, the only difference is that you can launch a menu by typing backslash to quickly run a command.</p>
]]></description><pubDate>Mon, 20 Aug 2018 09:03:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=17798544</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=17798544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17798544</guid></item><item><title><![CDATA[Show HN: Leader – VIM's leader key for your terminal]]></title><description><![CDATA[
<p>Article URL: <a href="https://dhamidi.github.io/leader/">https://dhamidi.github.io/leader/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=17797872">https://news.ycombinator.com/item?id=17797872</a></p>
<p>Points: 5</p>
<p># Comments: 2</p>
]]></description><pubDate>Mon, 20 Aug 2018 05:21:01 +0000</pubDate><link>https://dhamidi.github.io/leader/</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=17797872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17797872</guid></item><item><title><![CDATA[New comment by dhamidi in "GNU Coreutils Gotchas"]]></title><description><![CDATA[
<p>Why should basename accepts its argument on stdin?  It doesn't act as a filter, processing a stream of data, but rather as a plain function.</p>
]]></description><pubDate>Mon, 30 Nov 2015 13:42:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=10649284</link><dc:creator>dhamidi</dc:creator><comments>https://news.ycombinator.com/item?id=10649284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=10649284</guid></item></channel></rss>