<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: ryani</title><link>https://news.ycombinator.com/user?id=ryani</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 13 Jun 2026 17:39:52 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ryani" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ryani in "Federal judge blocks H1B visa $100K fee"]]></title><description><![CDATA[
<p>> I can tell you right now that you would have to pay me far above market rate to get me to move<p>If <i>everyone</i> feels that way, then it's not an above-market rate, it's by definition the market rate.  The market rate for a job might be different at different locations.<p>(Note that I'm not taking a position on whether or not using the H1B program to reduce the market rate here is a good idea)</p>
]]></description><pubDate>Tue, 09 Jun 2026 09:31:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=48458746</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=48458746</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48458746</guid></item><item><title><![CDATA[New comment by ryani in ""We're aware of the DMCA takedown notice of julialang logo by an OF creator""]]></title><description><![CDATA[
<p>What statutory penalty?<p><a href="https://www.copyright.gov/512/" rel="nofollow">https://www.copyright.gov/512/</a><p>Read the requirements for a takedown notice.  The only thing a DMCA notice needs to claim under penalty of perjury is that you are authorized to enforce the copyright that you are claiming.  The report from the copyright office on the linked page states:<p>> Senders of both takedown notices and counter-notices are liable for damages if they make knowing material misrepresentations regarding whether the material to be taken down is infringing, or has been removed or disabled by mistake or misidentification. Courts have appropriately interpreted this provision by requiring actual knowledge or willful blindness of falsity, not merely negligent or unreasonable misrepresentation.<p>"Knowing" does a lot of heavy lifting here.  Courts have determined that someone who uses an automated system to identify infringing content and submits takedown notices against all of that content does not "knowingly" misrepresent anything.<p>Furthermore, even in the case where there is bad faith, there's no statutory penalty, it relies on the targeted party suing and in court proving BOTH bad faith, and damages.<p>The DMCA has no teeth against false claims.</p>
]]></description><pubDate>Wed, 28 Jan 2026 13:19:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46794999</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=46794999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46794999</guid></item><item><title><![CDATA[New comment by ryani in "Every 5x5 Nonogram"]]></title><description><![CDATA[
<p>I want to be able to click-and-drag.  For example, in this row<p><pre><code>    1 2 |x x  |
</code></pre>
if I left click the second cell and drag right it should mark all the blank cells black.<p>Similarly in the inverted case, if I have marked cells and right-click-and-drag next to them it should mark the empty spots I cross over with Xs.<p>Important: this doesn't change the state of any cell that wasn't blank to start out.  You should have to click on a marked cell to clear it (or right click to replace it with an X).   And similarly to above, if you drag, it should change only the cells you touch that match the starting state of your original cell to the new state.</p>
]]></description><pubDate>Sun, 01 Jun 2025 07:44:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=44149284</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=44149284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44149284</guid></item><item><title><![CDATA[New comment by ryani in "Brandon's Semiconductor Simulator"]]></title><description><![CDATA[
<p>This is also available (with an included Flash emulator, so playable on modern machines) in Zach's free retrospective "Zach-like" [1]<p>[1] <a href="https://store.steampowered.com/app/1098840/ZACHLIKE/" rel="nofollow">https://store.steampowered.com/app/1098840/ZACHLIKE/</a></p>
]]></description><pubDate>Sat, 10 May 2025 06:17:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43943574</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=43943574</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43943574</guid></item><item><title><![CDATA[New comment by ryani in "The Demoralization is just Beginning"]]></title><description><![CDATA[
<p>How is "Baumol effect" different from supply and demand for any limited resource?<p>Let's say that some new use for copper is discovered, that drastically increases the demand for copper.  The cost of existing items that use copper is going to go up, even if those items are no more productive than they used to be, because the new items are now in high demand.<p>You can see this effect in real life with GPUs; it's much more expensive to buy a gaming graphics card today than it was a decade ago, because GPUs are in high demand for other applications.<p>So, increasing the productivity of labor in some sector is going to do the same thing supply and demand does to anything else -- the cost of labor goes up, but not as much as the productivity in that sector, and the producers of labor will enjoy higher demand.</p>
]]></description><pubDate>Wed, 05 Mar 2025 08:07:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=43264079</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=43264079</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43264079</guid></item><item><title><![CDATA[New comment by ryani in "Building SimCity: How to put the world in a machine"]]></title><description><![CDATA[
<p>Hi Chaim!  I really enjoyed working with you on Spore.  What have you been up to in the intervening years besides writing this book?</p>
]]></description><pubDate>Sun, 16 Jun 2024 19:04:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=40699276</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=40699276</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40699276</guid></item><item><title><![CDATA[New comment by ryani in "Decker: A reincarnation of HyperCard with 1-bit graphics"]]></title><description><![CDATA[
<p>I think something like Unity or Gamemaker or even Scratch fills that niche now.  They are a bit more game-focused than Hypercard (which was really more of an early iteration on the web), but, I think, capture a similar feeling of empowerment and creativity among nerdy young people as Hypercard did for nerdy young me.</p>
]]></description><pubDate>Wed, 08 May 2024 08:33:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=40295669</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=40295669</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40295669</guid></item><item><title><![CDATA[New comment by ryani in "Insurance companies fill their networks with ‘ghost’ therapists"]]></title><description><![CDATA[
<p>This is such a crazy take.  "Because the waste is so huge, it's impossible to do anything".<p>It's not like any individual reform is going to suddenly end all that waste and put everyone involved out of a job.  Iterative small improvements make a real difference in people's lives, and won't provoke an immediate giant supply-side shock.<p>I don't pretend to have the answers to the question of "what reforms should we do?" but throwing our hands up and saying "nothing!" is not the answer.</p>
]]></description><pubDate>Thu, 05 Oct 2023 04:35:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=37774939</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=37774939</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37774939</guid></item><item><title><![CDATA[New comment by ryani in "Wi Flag (2002)"]]></title><description><![CDATA[
<p>Here's the standard algorithm for this problem<p><pre><code>    function weightedRandom(weight, outcomes){
      var total = sum( weight );
      var roll = Math.random()*total; // value in the range [0,total)
      var seen = 0;
      for(let i=0; i<weight.length; i++) {
        seen += weight[i];
        if(roll<seen)
          return outcomes[i];
      }
    }</code></pre></p>
]]></description><pubDate>Fri, 10 Feb 2023 18:02:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=34743228</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=34743228</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34743228</guid></item><item><title><![CDATA[New comment by ryani in "Cooperation among an anonymous group protected Bitcoin during failures"]]></title><description><![CDATA[
<p>I think there's a difference between "blockchain + PoW" and "blockchain".  Blockchain taken literally is just verification of history via hashing.  It's a form of provenance that is hard to fake.  Even if you are a central authority as to what transactions are being made, you can't rewrite history beyond any point that you've made publicly visible, without losing the trust of people who rely on you as a central authority, as to do so you would need to break the hashing algorithm.</p>
]]></description><pubDate>Sat, 11 Jun 2022 16:28:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=31705720</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=31705720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31705720</guid></item><item><title><![CDATA[New comment by ryani in "A photo on Wikipedia can ruin your life"]]></title><description><![CDATA[
<p>> The adage that teachers still teach, "don't cite Wikipedia" -- [...] what are people supposed to use?<p>Wikipedia cites sources.  Go to those sources, find the ones that best line up with the data you need, and cite them directly.<p>Treat Wikipedia like an aggregator -- you wouldn't cite an HN post, you'd cite the link it pointed at.</p>
]]></description><pubDate>Sat, 06 Nov 2021 18:56:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=29132840</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=29132840</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29132840</guid></item><item><title><![CDATA[New comment by ryani in "The bug which lost more than $600M in various cryptocurrencies a few hours ago"]]></title><description><![CDATA[
<p>If you raise your prices, you drive away legitimate customers but don't drive away fraudsters, since the fraudsters aren't actually paying with real money.  So raising your price <i>increases</i> the percentage of fraud you see, which means you probably need to raise your prices further, which further increases the relative amount of fraud.<p>To counteract this negative feedback loop, assuming the increased prices don't drive away all of your real customers, you can spend the increase on transaction analysis, and turn away customers based on their likelihood of fraud, so you've added inefficiency into the system to help deal with a criminal element, and also likely turned away real sales due to false positives in your analysis.<p>It's no surprise that these types of merchants are looking for a disruptive technology to remove this inefficiency.  Doing so would allow them to charge less and outcompete as well as capture the entire market of people marked as false positives by other merchants.</p>
]]></description><pubDate>Thu, 12 Aug 2021 16:00:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=28157937</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=28157937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28157937</guid></item><item><title><![CDATA[New comment by ryani in "EASTL: An Alternative C++ Standard Library"]]></title><description><![CDATA[
<p>Full disclosure: I used to work at EA and while I was there I contributed a tiny amount of code to EASTL.<p>EASTL provided a bunch of value that the standard STL would not.  The biggest benefit was a unified implementation across all platforms.  Standard library STLs all had their own idiosyncrasies and code that worked on one platform might not compile, or worse, have a bug on another.<p>At the time, EASTL was equal or higher quality than standard implementations.  Performance was better, code quality was better, and it broke from the standard in some key ways that were important for performance, and it had some key upgrades that allowed usage patterns and data structures that the standard STL simply didn't allow:<p>Vectors supported "trivial relocation" before the existence of move constructors.  While move constructors have ameliorated the problem, I argue that feature is still missing from c++.  Please support P1144! <a href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2020/p1144r5.html" rel="nofollow">http://open-std.org/JTC1/SC22/WG21/docs/papers/2020/p1144r5....</a><p>Intrusive containers (in particular, intrusive linked lists in eastl::intrusive_list) embed the container overhead into objects themselves.  This allows non-movable objects to be stored in these lists without requiring an extra pointer dereference on access.  It also lets you convert an object reference into an iterator over the list that contains it.  There are tons of uses for this.  It also allows polymorphic lists (e.g. intrusive_list<BaseClass> that actually holds instances of various subclasses, again without an extra pointer dereference)<p>If you want more information, EASTL's lead programmer Paul Pedriana (rip) goes into detail in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html" rel="nofollow">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n227...</a></p>
]]></description><pubDate>Thu, 05 Aug 2021 07:21:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=28070836</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=28070836</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28070836</guid></item><item><title><![CDATA[New comment by ryani in "The Queen’s Latin or Who Were the Romans, Part II: Citizens and Allies"]]></title><description><![CDATA[
<p>After listening to Mike Duncan's excellent "History of Rome" podcast, one of the repeated themes I noticed is that during periods when the Romans were more racist/classist/etc they had trouble.  Their periods of greatest success were when they let people with the necessary skills and talent rise to the top regardless of their origin.<p>That said, they definitely had problems with failing to culturally assimilate immigrants during the late empire -- when "citizens" of the empire didn't think of themselves as Roman but instead primarily part of some other group.</p>
]]></description><pubDate>Sat, 26 Jun 2021 15:12:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=27642549</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=27642549</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27642549</guid></item><item><title><![CDATA[New comment by ryani in "Nouriel Roubini: Bitcoin is not a hedge against tail risk"]]></title><description><![CDATA[
<p>You're a software developer, so if you really believe that, get to hacking.<p>It's clearly an industry with huge potential if it is economically viable to spend money buying an Argentina's worth of power on it.</p>
]]></description><pubDate>Thu, 11 Feb 2021 17:48:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=26104725</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=26104725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26104725</guid></item><item><title><![CDATA[New comment by ryani in "Police playing music while being filmed, seemingly to trigger copyright filters"]]></title><description><![CDATA[
<p>The "under penalty of perjury" is completely toothless and I don't believe has ever resulted in a judgement against a rightsholder.<p>Here is the exact text from the DMCA from <a href="https://www.aclu.org/other/text-digital-millennium-copyright-act-dmca" rel="nofollow">https://www.aclu.org/other/text-digital-millennium-copyright...</a><p>(vi) A statement that the information in the notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly in-fringed.<p>Note the particular phrasing.  The requirement that the information in the notification be accurate is <i>not</i> under penalty of perjury.  The only thing that is under penalty of perjury is that you can only DMCA claim things that you have copyright to (or are a lawyer representing that entity).<p>And it's worse than that, because you can claim something that is totally unrelated without this penalty as long as  you own the copyright you claim to be enforcing.</p>
]]></description><pubDate>Wed, 10 Feb 2021 16:23:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=26091186</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=26091186</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26091186</guid></item><item><title><![CDATA[New comment by ryani in "Tether price manipulation"]]></title><description><![CDATA[
<p>That page claims it can compress a single transaction down to 12-16 bits.  Unless the vast majority of btc transactions are between the same few wallet addresses, this seems impossible?  Even if you assume that the transaction is an instance of a common known script, you still need from-address, to-address, and amount, all of which are >16 bit quantities and in general are cryptographically random.<p>The only explanation I can think of is that they are relying on a sidechannel to communicate the actual transactions, which makes sense in the miner case (the utxo pool) but not in the general node case.<p>Beyond that, I run a BTC node occasionally and the bottleneck is validating blocks, not downloading them.  Transactions are complicated enough right now that I'm only able to catch up at about 350x real-time (that is, it takes around a full cpu-day to validate a year of blocks/transactions).</p>
]]></description><pubDate>Fri, 08 Jan 2021 17:53:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=25687491</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=25687491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25687491</guid></item><item><title><![CDATA[New comment by ryani in "The Airbnbs"]]></title><description><![CDATA[
<p>From reading his comment the goal of the ad spend isn't to get a lot of visitors, but to get enough visitors that you can measure impact.  So you don't need a big push, just enough that you can check if people want what you are building and compare again later after you make changes.</p>
]]></description><pubDate>Thu, 10 Dec 2020 23:06:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=25380019</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=25380019</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25380019</guid></item><item><title><![CDATA[New comment by ryani in "Futures explained in 200 lines of Rust"]]></title><description><![CDATA[
<p>So the goal of futures is to deal with inversion of control.<p>The code you want to write is something like:<p><pre><code>  fn f( filename ) {
    val someUrl = computeTheUrl();
    val data = await http.get( someUrl );
    val processedData = process(Data);
    await filesystem.writeFile( filename, processedData );
  }
</code></pre>
(I'm marking "potentially blocking" calls with "await" here)<p>But the code you want to <i>run</i> is an event loop:<p><pre><code>  while( program_is_running() ) {
      poll_io()
      poll_network()
      run_ready_tasks()
  }
</code></pre>
So can you do to let you write f()?  You need to invert the control between run_ready_tasks() and f().  And you need to do so in a way that allows f() to both do network io, disk io, and other blocking tasks.<p>You're right that you can use a green thread per task to solve this problem, and "await" is then just a function that switches context to the scheduler.  For various reasons, the Rust community decided that green threads were too heavy of an abstraction, and instead the compiler generates state machines (which are, in some ways, equivalent to green threads if you squint hard enough).<p>> if a future is inert, how can it ever detect that it is ready to make progress and call wake?<p>The future doesn't.  When the future makes a blocking call, it needs to push its waker into some data structure handled by the top level event loop / scheduler.  And then the job of the waker is to understand how to push the task back into the ready queue when whatever was being waited on completes.<p>The complications in Rust's design is due to their goal of making it so those compiler-generated-state-machines can be used by a library runtime -- to not require a particular standard library.</p>
]]></description><pubDate>Fri, 04 Dec 2020 22:37:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=25309237</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=25309237</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25309237</guid></item><item><title><![CDATA[New comment by ryani in "Why is there a normal galaxy sitting at the edge of the Universe?"]]></title><description><![CDATA[
<p>Although there is projective space where it <i>does</i> make sense to say x = infinity (and also that f(0) is defined).  In projective space all of the conic sections (lines, hyperbolas, ellipses, parabolas) are connected loops.</p>
]]></description><pubDate>Thu, 10 Sep 2020 06:40:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=24429548</link><dc:creator>ryani</dc:creator><comments>https://news.ycombinator.com/item?id=24429548</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24429548</guid></item></channel></rss>