<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: jonnytran</title><link>https://news.ycombinator.com/user?id=jonnytran</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 03 May 2026 19:10:07 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jonnytran" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jonnytran in "Dotcl: Common Lisp Implementation on .NET"]]></title><description><![CDATA[
<p>Have you tried Clojure?</p>
]]></description><pubDate>Sat, 02 May 2026 18:48:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47989224</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=47989224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47989224</guid></item><item><title><![CDATA[New comment by jonnytran in "Typepad is shutting down"]]></title><description><![CDATA[
<p>Somebody save Kathy Sierra’s blog! <a href="https://headrush.typepad.com/" rel="nofollow">https://headrush.typepad.com/</a> I’ll try to archive it. I love her work. But even if I save it, it should live on somewhere else.</p>
]]></description><pubDate>Thu, 28 Aug 2025 02:24:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45047636</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=45047636</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45047636</guid></item><item><title><![CDATA[New comment by jonnytran in "Bill Atkinson has died"]]></title><description><![CDATA[
<p>Have you seen Scrappy? It’s still early, but it’s the most interesting thing I’ve seen in a while.<p><a href="https://pontus.granstrom.me/scrappy/" rel="nofollow">https://pontus.granstrom.me/scrappy/</a></p>
]]></description><pubDate>Sun, 08 Jun 2025 15:49:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=44217690</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=44217690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44217690</guid></item><item><title><![CDATA[New comment by jonnytran in "The Reddits"]]></title><description><![CDATA[
<p>Pinboard was a clone with a different business model: users actually paid for it.<p>Fast forward, and delicious died, only to be acquired by — you guessed it — Pinboard [1]. Because Pinboard was actually serving its paying customers, it just kept trucking along.<p>[1]: <a href="https://blog.pinboard.in/2017/06/pinboard_acquires_delicious/" rel="nofollow">https://blog.pinboard.in/2017/06/pinboard_acquires_delicious...</a></p>
]]></description><pubDate>Fri, 22 Mar 2024 04:27:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=39787475</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=39787475</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39787475</guid></item><item><title><![CDATA[New comment by jonnytran in "Microsoft seeks Rust developers to rewrite core C# code"]]></title><description><![CDATA[
<p>Yes, I did this at my startup. Fast forward a few years, and now the company has more Rust code than Python, and the majority of the company's IP is in Rust.<p>I suggest beginning with small, one-off things that don't have much impact. People, even developers, tend to shy away from things that aren't familiar. By introducing Rust in a small, low-risk way, it helps people get familiar with it. They get to build familiarity with building Rust projects, navigating the project structure, and reading docs. I submit pull requests that get people to read Rust code, even if it's just to say "looks good". Their familiarity builds slowly over time, meaning they'll be less triggered by seeing Rust in a larger, more impactful project down the road.<p>How do you boil a software developer? Slowly.<p>If they give Rust a chance and your team has a champion to guide them, they'll see its merits. I think a lot of people come to Rust for the performance, but that's not why they stay.</p>
]]></description><pubDate>Sat, 03 Feb 2024 18:45:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=39243386</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=39243386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39243386</guid></item><item><title><![CDATA[New comment by jonnytran in "Microsoft seeks Rust developers to rewrite core C# code"]]></title><description><![CDATA[
<p>Yeah, this is just baffling. A team can be so averse to learning new tools, good ones too, that they would rather dump their time into rewriting. Instead of getting paid to level up their skills, they'd rather block forward movement of the company's goals to maintain the status quo.</p>
]]></description><pubDate>Sat, 03 Feb 2024 18:27:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=39243213</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=39243213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39243213</guid></item><item><title><![CDATA[New comment by jonnytran in "Apple Vision Pro available for pre-order"]]></title><description><![CDATA[
<p>How long ago was that?</p>
]]></description><pubDate>Fri, 19 Jan 2024 14:35:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=39055918</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=39055918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39055918</guid></item><item><title><![CDATA[New comment by jonnytran in "The Book of Shaders (2015)"]]></title><description><![CDATA[
<p>Better resources, like what? Please share links.</p>
]]></description><pubDate>Tue, 09 Jan 2024 22:30:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=38933196</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=38933196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38933196</guid></item><item><title><![CDATA[New comment by jonnytran in "The Case for Memory Safe Roadmaps"]]></title><description><![CDATA[
<p>The same author has a post from 2022 [1].<p>> Is it possible to achieve arbitrary code execution on any Go version, even with PIE, and with no package import at all, just builtins? Yes!<p>Whether it's capture the flag is irrelevant, IMO, because anything that's allowed by the compiler will emerge given enough complexity.<p>1: <a href="https://blog.stalkr.net/2022/01/universal-go-exploit-using-data-races.html" rel="nofollow noreferrer">https://blog.stalkr.net/2022/01/universal-go-exploit-using-d...</a></p>
]]></description><pubDate>Tue, 12 Dec 2023 15:36:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=38613526</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=38613526</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38613526</guid></item><item><title><![CDATA[New comment by jonnytran in "The Case for Memory Safe Roadmaps"]]></title><description><![CDATA[
<p>It's unfortunate that there's no mention that not all these languages are equally safe.<p>Go isn't memory safe when using goroutines. See: Golang data races to break memory safety: <a href="https://blog.stalkr.net/2015/04/golang-data-races-to-break-memory-safety.html" rel="nofollow noreferrer">https://blog.stalkr.net/2015/04/golang-data-races-to-break-m...</a></p>
]]></description><pubDate>Tue, 12 Dec 2023 14:45:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=38612772</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=38612772</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38612772</guid></item><item><title><![CDATA[New comment by jonnytran in "SimCity 4 was released 20 years ago"]]></title><description><![CDATA[
<p>Hollow Knight</p>
]]></description><pubDate>Wed, 24 May 2023 14:37:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=36058750</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=36058750</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36058750</guid></item><item><title><![CDATA[New comment by jonnytran in "Ruby 3.2.0 is from another dimension"]]></title><description><![CDATA[
<p>Don't forget all the variations on how to use the format() method.<p><pre><code>    # In order
    'Hello, {}!'.format(who)
    
    # Numbered
    'Hello, {0}!'.format(who)

    # Named
    'Hello, {name}!'.format(name = who)</code></pre></p>
]]></description><pubDate>Wed, 04 Jan 2023 19:29:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=34250205</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=34250205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34250205</guid></item><item><title><![CDATA[New comment by jonnytran in "Ruby 3.2.0 is from another dimension"]]></title><description><![CDATA[
<p>> Ruby not having first-class functions<p>This is simply false.  Ruby has first-class functions.<p>Not only that, it has blocks, which few other languages have.  Ruby optimizes for the common use-case of a method that takes a single callback/piece of code, and I miss it in most other languages, including Python.<p>In Python, the "with" statement is super special.  But in Ruby, it's just a method that takes a block.  And any method can take a block, not just one per class.<p><a href="https://yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/" rel="nofollow">https://yehudakatz.com/2010/02/07/the-building-blocks-of-rub...</a></p>
]]></description><pubDate>Wed, 04 Jan 2023 19:28:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=34250194</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=34250194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34250194</guid></item><item><title><![CDATA[New comment by jonnytran in "Open source sustainment and the future of Gitea"]]></title><description><![CDATA[
<p>I currently work for a company where one of my co-workers is a maintainer of the official Gitea repo.<p>There was no mention of this anywhere prior to the blog post, including in private Discord channels.  It has _not_ been public knowledge for a while.<p>What you said is false.  I suspect that is why you're getting downvoted.</p>
]]></description><pubDate>Wed, 26 Oct 2022 19:27:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=33348193</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=33348193</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33348193</guid></item><item><title><![CDATA[New comment by jonnytran in "Git In Two Minutes (updated after 8 years)"]]></title><description><![CDATA[
<p>Git isn't designed for "noobs trying to pick up coding just to experiment".  It also isn't really designed for solo developers as the OP is about.<p>Git is designed for collaboration.  Git's UI is absolutely unintuitive, especially coming from other version control software.  But that's irrelevant.  Everyone wants to use it because of the network effect.<p>In terms of _why_ the UI is unintuitive, I believe it's because it intentionally exposes its internal representation.  Unlike its predecessors like subversion, Git has infinite flexibility in terms of the workflow that teams of people can adopt.  But the flexibility comes at the cost of learning how to use a distributed graph of commits.<p>Personally, I never learned git by reading recipes of commands, like the OP.  I only really grokked it by understanding how it works internally.  This article helped me:<p>Git for Computer Scientists
<a href="https://eagain.net/articles/git-for-computer-scientists/" rel="nofollow">https://eagain.net/articles/git-for-computer-scientists/</a></p>
]]></description><pubDate>Sat, 06 Aug 2022 21:19:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=32371670</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32371670</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32371670</guid></item><item><title><![CDATA[New comment by jonnytran in "Ask HN: YouTube Channels for the Intellectually Curious"]]></title><description><![CDATA[
<p>I know you're asking about Computerphile, but this video explains how one of the Numberphile videos is wrong: <a href="https://www.youtube.com/watch?v=YuIIjLr6vUA" rel="nofollow">https://www.youtube.com/watch?v=YuIIjLr6vUA</a></p>
]]></description><pubDate>Mon, 25 Jul 2022 07:08:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=32221388</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32221388</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32221388</guid></item><item><title><![CDATA[New comment by jonnytran in "To Ruby from Python"]]></title><description><![CDATA[
<p>When I was new to Ruby and hadn't learned the available tools yet, I had similar problems because I brought practices from other languages that didn't work.<p>Typically, what you're describing is solved, in different ways depending on your setup.  I literally never think about the issue you're describing when using Ruby.<p>- With Rails/ActiveSupport in development mode: Module B is autoloaded lazily when C refers to it.<p>- With Rails/ActiveSupport in production mode: All modules are eagerly loaded at startup.<p>- Plain Ruby: There's a few ways, but most gems simply have a file at the top level that eagerly requires all files when the gem is required.  Same with an app.<p>If startup time becomes an issue, you can configure the autoloading at the top level, and the appropriate file will be required lazily when it's referred to.  But at that point, just use ActiveSupport.</p>
]]></description><pubDate>Sat, 23 Jul 2022 23:21:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=32208561</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32208561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32208561</guid></item><item><title><![CDATA[New comment by jonnytran in "To Ruby from Python"]]></title><description><![CDATA[
<p>This is simply false.  Ruby modules are first class.  They're objects that you can pass around like any other object.  You can put them in a local variable.  You can define methods on them.  You can do metaprogramming using them.  You can build classes by mixing modules together.  You can create modules (and classes) at runtime.  Many things that need to be built-in in other languages are just a library in Ruby.<p>Files and modules in Ruby are two distinct things.  While Python makes files one-to-one with modules, Ruby allows you to define as many modules as you like in a file, zero or more.<p>It's true that if you define a constant at the top-level of a file, it uses the global namespace.<p>By convention, if you have a file named `foo.rb`, you'd write:<p><pre><code>    module Foo
      # Code here
    end
</code></pre>
and it's equivalent to what's done in Python.  But it also has all the other features.</p>
]]></description><pubDate>Sun, 17 Jul 2022 00:12:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=32123133</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32123133</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32123133</guid></item><item><title><![CDATA[New comment by jonnytran in "To Ruby from Python"]]></title><description><![CDATA[
<p>The only thing I disliked more than moving from Ruby to Python was moving to Go.  All the things I love about Ruby are the antithesis of Go.</p>
]]></description><pubDate>Sat, 16 Jul 2022 16:18:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=32119471</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32119471</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32119471</guid></item><item><title><![CDATA[New comment by jonnytran in "To Ruby from Python"]]></title><description><![CDATA[
<p>IMO, Ruby optimizes for reading.  You simply cannot write concise code in Python  as in Ruby.  One reason (of many) is because of all the import statements required in Python.  In Ruby, there is often only a single require statement, or maybe none at all, at the top of a file.<p>The difference is convention over configuration.  In Ruby, if you know the convention, then you know exactly where everything is defined without needing to read it.  In Python, you must read all those import statements to know where something is coming from, not to mention write them in the first place.<p>And if you really need to know where something is defined, you simply ask it.<p><pre><code>    puts obj.method(:foo).source_location
</code></pre>
So IMO, Ruby optimizes for both reading and writing.</p>
]]></description><pubDate>Sat, 16 Jul 2022 15:37:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=32119133</link><dc:creator>jonnytran</dc:creator><comments>https://news.ycombinator.com/item?id=32119133</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32119133</guid></item></channel></rss>