<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: Ruphin</title><link>https://news.ycombinator.com/user?id=Ruphin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 01 Jun 2026 18:40:11 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Ruphin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Ruphin in "Ambigr.am"]]></title><description><![CDATA[
<p>One of my favorite ambigrams is the title logo from an old 1995 PC game classic, Tyrian. It's so subtle I never realised until a few years ago.<p>You can find the logo here, along with the excellent soundtrack: <a href="https://alexanderbrandon.bandcamp.com/album/tyrian-original-soundtrack" rel="nofollow">https://alexanderbrandon.bandcamp.com/album/tyrian-original-...</a></p>
]]></description><pubDate>Sun, 05 Oct 2025 13:36:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=45481375</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45481375</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45481375</guid></item><item><title><![CDATA[New comment by Ruphin in "'Block Everything' protests sweep across France, scores arrested"]]></title><description><![CDATA[
<p>The effective tax rates on high income individuals is likely much less. There is a large correlation between income and wealth, and wealth increase through asset appreciation is largely not taxed, or at best taxed at much more favorable rates than general income tax.<p>Tax on income is not the problem, it's tax on wealth gained through asset value increase.</p>
]]></description><pubDate>Wed, 10 Sep 2025 18:04:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45201494</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45201494</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45201494</guid></item><item><title><![CDATA[New comment by Ruphin in "Taco Bell AI Drive-Thru"]]></title><description><![CDATA[
<p>I am pretty certain that if you are in an org where c-suite shifts reasons for negative results to external sources, they will find a way to do the same in the age of AI.</p>
]]></description><pubDate>Mon, 08 Sep 2025 14:42:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=45168945</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45168945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45168945</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>Nothing in Web Components is forcing you to use ShadowDOM. Lit also allows you to make components without ShadowDOM if you prefer, because there are certainly cases where it can be necessary to do so (like for ARIA reference id-matching). For full single application development, it can feel like it gets in the way a lot, and you can make a good argument to use components without ShadowDOM in those contexts too.<p>All frontend "frameworks" do have some sort of solution to scope CSS to individual components, and without a similar solution, a native component system would not be viable. The implementation has its quirks, but it is a core capability that is necessary for some use cases. For third-party widgets or cross-application components like design systems, the ability to isolate your component from the site it is embedded in is very useful.<p>Think of shadowDOM as the web component alternative to scoped styles in Vue components (as an example). You don't have to use it, but it would be incredibly inconvenient if it wasn't included in the framework.</p>
]]></description><pubDate>Wed, 03 Sep 2025 14:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45116150</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45116150</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45116150</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>Oh nice, I wasn't aware this was even possible.<p>Vue _does_ have some sort of build step, because components use special macros that aren't imported, and the compiler (vite) even complains when you actually import them saying it's not necessary. The build also rewrites your code to some other format that I assume is more optimized because it can do some sort of static analysis.<p>Are these the main reasons for Vue to use a compiler if it's not necessary? Injecting dependencies and rewriting some code to allow better performance while retaining the nice syntax?</p>
]]></description><pubDate>Wed, 03 Sep 2025 14:02:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=45115945</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45115945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45115945</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>Re-implementing Lit from fundamentals is a great way to learn how it works! The core functionality is surprisingly simple, because it mostly relies on platform APIs to do the heavy lifting, like parsing templates.<p>I made this alternative implementation of lit-html to use as a research bed a long time ago  when I was actively contributing to lit: <a href="https://github.com/ruphin/lite-html" rel="nofollow">https://github.com/ruphin/lite-html</a><p>Judging from this thread, many people have their own implementations, which is great to hear. I think there's a lot of value in solutions that are so simple that anyone can reproduce them.</p>
]]></description><pubDate>Wed, 03 Sep 2025 13:54:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45115833</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45115833</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45115833</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>I estimate the vast majority of "web projects" begin with npm installing something of some sort, yes. React is dominating the web development space (judging from the average "popular web stack 2025" search result), and it and a significant portion of the competing platforms start with installing some dependencies with npm (or yarn, or what have you). Especially projects that compete in the same space as Lit.<p>That isn't a criticism of projects that don't use npm, and it doesn't make them less valid, but it makes sense for the documentation to match the average developer's experience.</p>
]]></description><pubDate>Wed, 03 Sep 2025 13:24:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=45115488</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45115488</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45115488</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>Obviously this wouldn't be suitable for (serious) production deployments, but it is a super accessible way to easily get started anywhere.</p>
]]></description><pubDate>Wed, 03 Sep 2025 11:00:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45114337</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45114337</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45114337</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>I guess for most people the standard is to install things from NPM which explains the format of the documentation. If you want to do something completely raw, you can replace 'lit' with something like this:<p><a href="https://unpkg.com/lit@3.3.1/index.js?module" rel="nofollow">https://unpkg.com/lit@3.3.1/index.js?module</a><p>You can even dynamically import that in the a running browser console and use it directly on any webpage.</p>
]]></description><pubDate>Wed, 03 Sep 2025 10:58:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45114323</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45114323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45114323</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>I don't know if there is a particular benefit, it's just different. On the consumer side there is no difference, because they consume Web Components, and that is what both solutions deliver. On the implementation side, I can think of a few differences:<p>Vue is more of a "framework" solution and has more things built-in. You can do the same things with Lit, but the implementation would look different, because you'd lean more on native APIs. A good example of that is the event model, Vue has some event model built in, but with Lit you would use EventTarget.dispatchEvent().<p>Lit is a runtime solution, it doesn't require a build and you can  load your source directly in the browser. Vue on the other hand requires some form of compiler stage to produce something your browser can use. Compilers these days are fast, and Lit is specifically engineered to not have runtime performance overhead, so in practice this difference is rather minor. It is a very fundamental difference, so I think it's worth pointing out.<p>Vue can compile to other targets. If you are only delivering Web Components, this is mostly irrelevant, but in theory a consumer might be able to use the Vue components directly in their Vue project, which might give them a better DX. On the other hand, Lit is specifically designed to produce Web Components, so you'll probably have a bit less friction compares to using Vue, e.g when some Vue concept doesn't compile cleanly to Web Components.<p>Is there a major benefit to choosing one implementation over the other? I don't think so, unless you have a very particular requirement that one of them addresses that the other doesn't. For nearly all cases, it is just a different implementation syntax.<p>In most cases the only relevant metric in deciding between them is what technology your developers are more familiar/comfortable with.</p>
]]></description><pubDate>Wed, 03 Sep 2025 10:46:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=45114258</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45114258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45114258</guid></item><item><title><![CDATA[New comment by Ruphin in "Lit: a library for building fast, lightweight web components"]]></title><description><![CDATA[
<p>Web Components is a pretty niche technology and as such it really appeals to some people, and it doesn't appeal to others, and that's okay. You don't have to like it, it isn't meant to be a good fit for everyone. But for some people it might fit really well with their requirements, and they probably have legitimate reasons for that.<p>If I understand correctly, your criticism is that the people for whom Web Components is a good fit are publicly discussing the reasons why they prefer it over other solutions?</p>
]]></description><pubDate>Wed, 03 Sep 2025 10:25:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=45114141</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=45114141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45114141</guid></item><item><title><![CDATA[New comment by Ruphin in "The Anti-Pattern Game"]]></title><description><![CDATA[
<p>There is a simple intuitive explanation for how an "infinite" game is possible:<p>We can define two different sequences of three characters that start with 0 and end with 1: 001 and 011. Because they each start and end with a different character, we can never create a series of three characters by chaining two of these sequences.<p>Now we can go one step deeper and encode the "001" sequence as 0, and the "011" sequence as 1. We can generate our 001 and 011 pattern again, but with our encoded versions of 0 and 1, giving us these sequences: 001001011 and 001011011. These sequences again have the same characteristics, they start and end with different sub-sequences (001 and 011) so they can be chained without creating a series of three sub-sequences.<p>We can now use these larger sequences and encode these as 0 and 1, and so forth ad infinitum.</p>
]]></description><pubDate>Wed, 13 Aug 2025 13:06:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=44887962</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=44887962</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44887962</guid></item><item><title><![CDATA[New comment by Ruphin in "Mike Lindell's lawyers used AI to write brief–judge finds nearly 30 mistakes"]]></title><description><![CDATA[
<p>That sort of response seems not too different from the classic "let me google that for you". It seems to me that it is a way to express that the answer to the question can be "trivially" obtained yourself by doing research on your own. Alternatively it can be interpreted as "I don't know anything more than Google/ChatGPT does".<p>What annoys me more about this type of response is that I feel there's a less rude way to express the same.</p>
]]></description><pubDate>Sat, 26 Apr 2025 11:56:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=43802803</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=43802803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43802803</guid></item><item><title><![CDATA[New comment by Ruphin in "Utah becomes first US state to ban fluoride in its water"]]></title><description><![CDATA[
<p>This is factually incorrect. Even though in most European countries there is a formal separation of religion and state, there is nothing that "forbids" any political party from having a strong religious affiliation. In fact, in nearly every European country there are major political parties with a strong Christian affiliation. See: <a href="https://en.wikipedia.org/wiki/Christian_democracy" rel="nofollow">https://en.wikipedia.org/wiki/Christian_democracy</a><p>There are even countries which have political parties that are Islamic affiliated.<p>The separation between religion and state refers to two things: the state not being able to enforce any religious aspects on citizens (freedom TO exercise any religion without interference from government), and religious entities not being able to influence or pressure the government outside the electoral process (freedom TO govern without interference from religious entities). Neither of these things prevents a political party founded on religious beliefs to participate in the electoral process.</p>
]]></description><pubDate>Sun, 30 Mar 2025 12:02:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=43523440</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=43523440</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43523440</guid></item><item><title><![CDATA[New comment by Ruphin in "German economy contracts 0.2% in 2024 in second consecutive annual slowdown"]]></title><description><![CDATA[
<p>Are you suggesting that Germany is not "free" to choose to have economic relationships with e.g. Russia because of United States military reasons? Do you think the US military is the primary reason Germany (the people, the government) is reluctant to trade with Russia?</p>
]]></description><pubDate>Wed, 15 Jan 2025 16:52:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=42713454</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=42713454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42713454</guid></item><item><title><![CDATA[New comment by Ruphin in "A16Z 2025 Big Ideas for Crypto"]]></title><description><![CDATA[
<p>It really depends if you can find a (cryptocurrency) exchange that lets you withdraw to a bank account in Costa Rica. If you can find one, you don't even need stablecoins. The way it will work is<p>US Bank -> Deposit USD to US cryptocurrency exchange -> Trade USD for Bitcoin (or some other crypto that has cheap transfers, it doesn't really matter) -> Send Bitcoin from US cryptocurrency exchange to Costa Rica cryptocurrency exchange -> Trade Bitcoin for USD (or local currency) on Costa Rica cryptocurrency exchange -> Withdraw to Costa Rica local bank<p>Theoretically, all of these steps can be done with less than ~$1 in fees. My banks and exchanges let me deposit for free and withdraw any arbitrary amount for 50 cents. Sending any arbitrary amount of cryptocurrency should be cheaper than that. The big question is if an exchange exists that lets you withdraw to Costa Rica banks, and what they charge for that.</p>
]]></description><pubDate>Thu, 05 Dec 2024 17:45:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42330476</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=42330476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42330476</guid></item><item><title><![CDATA[New comment by Ruphin in "Solving Probabilistic Tic-Tac-Toe"]]></title><description><![CDATA[
<p>There is no fundamental difference between Chess and Tic-Tac-Toe other than the computational complexity. It is not feasible to compute all of the game states in Chess, and so we cannot determine (at this time) a single optimal strategy the same way we can for Tic-Tac-Toe. But that does not imply that it doesn't exist. From a pure game theoretical perspective, they are the same category of game.<p>If there are more than 3 strategies, the same argument stands. IF there are multiple "optimal" strategies, AND these strategies create different "optimal" moves on the same board state, the opponent can just play the optimal counter-strategy after you make your move, because your move is enough information to give away your strategy. If your opponent cannot determine your strategy after you make your move, that implies the different strategies have the same "optimal" move.</p>
]]></description><pubDate>Thu, 13 Jun 2024 23:19:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=40675950</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=40675950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40675950</guid></item><item><title><![CDATA[New comment by Ruphin in "Solving Probabilistic Tic-Tac-Toe"]]></title><description><![CDATA[
<p>There is no hidden information and turns are sequentially. This means both players have full access to all information, and that implies there must be a single "best" move. If the board is at a certain state and one player is to play next, the strategy of the opponent is irrelevant for determining the optimal move.<p>Proof:<p>Suppose that it is possible that different strategies exist that outperform each other. Lets consider the case that there are three "optimal" strategies that counter each other, call them Rock Paper and Scissors. Since these are the three "optimal" strategies, both players know the exact move produced by these strategies. The first important part to note is that there is no cost to changing strategy during the game. If an opponent has one fixed strategy, say Rock, the "optimal" strategy is to change your strategy to Paper. Since you have full information on the state of the board, you do not have to guess the strategy of the opponent, because there is no hidden information. Now you could consider the opponent strategy to be hidden information, but this doesn't hold for the following reason: If knowing the opponent strategy would alter your choice of move (by for example changing to Rock that specifically counters his hidden Scissors), the opponent can freely change to Paper after you made your move, because he can see that you changed to Rock before making his next move. If it was impossible for the opponent to tell that you changed your strategy, that implies that each strategy produces the same board state, and that implies the strategies are identical.</p>
]]></description><pubDate>Thu, 13 Jun 2024 21:57:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=40675302</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=40675302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40675302</guid></item><item><title><![CDATA[New comment by Ruphin in "Show HN: Brutalisthackernews.com – A HN reader inspired by brutalist web design"]]></title><description><![CDATA[
<p>Big kudos for building things from scratch. Even though it's not directly applicable in most jobs, the knowledge you have from understanding the entire "stack" helps a lot when using tools and frameworks, because you understand their value and cost.</p>
]]></description><pubDate>Sat, 06 Apr 2024 20:34:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=39955264</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=39955264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39955264</guid></item><item><title><![CDATA[New comment by Ruphin in "A single line of code made a 24-core server slower than a laptop (2021)"]]></title><description><![CDATA[
<p>A tree is a subtype of a graph, but it is not the same as a DAG. A diamond-shaped directed graph (edges A->B, A->C, B->D, C->D) is a DAG, but not a tree.</p>
]]></description><pubDate>Sun, 18 Jun 2023 14:14:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=36380477</link><dc:creator>Ruphin</dc:creator><comments>https://news.ycombinator.com/item?id=36380477</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36380477</guid></item></channel></rss>