<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: dmitriid</title><link>https://news.ycombinator.com/user?id=dmitriid</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 07 Apr 2026 07:44:33 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=dmitriid" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by dmitriid in "There Were Half As Many Affordable Homes For Sale In 2022 As There Were In 2021"]]></title><description><![CDATA[
<p>> Why anyone would value an older building over a new one, I have no idea, as it's entirely irrational<p>Because new buildings these days are invariably the same boring gray dull shit that robs any place of its identity?</p>
]]></description><pubDate>Mon, 06 Mar 2023 09:51:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=35039226</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35039226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35039226</guid></item><item><title><![CDATA[New comment by dmitriid in "What Are Signals?"]]></title><description><![CDATA[
<p>> Compare that to the global state everywhere of signals/reactive/observables-based approaches like MobX or RxJS.<p>What are you on about? Redux is <i>literally</i> about global state everywhere. But with three to four layers of abstractions between.<p>You define your state globally. Then use hooks to fetch data from that global state, and then "dispatch" aka call actions on that global state. If something else somewhere else updates data in that global state your component will be affected if it uses that data.<p>But it also requires you to write an insane amount of useless stuff like "define your store, then reducers, then slices, then god knows what" to arrive at almost the same code:<p><pre><code>   // redux

   import { useSelector, useDispatch } from 'react-redux'
   import { decrement, increment } from './counterSlice'

   export function Counter() {
     // note how we reach into magical global state that useSelector knows about
     const count = useSelector((state: RootState) => state.counter.value)
     const dispatch = useDispatch()

     return <>
        <button onClick={() => dispatch(increment())}>Increment</button>
        <span>{count}</span>
        <button onClick={() => dispatch(decrement())}>Decrement</button>
     </>;
   }


   // solid

   // state is immutable. It's also not magical, you explicitly refrence and import it
   //
   // increment and decrement would use a `set` function to update the store to required value
   // see https://www.solidjs.com/docs/latest/api#createstore
   // and https://www.solidjs.com/docs/latest/api#updating-stores
   //
   import { state, increment, decrement } from './counter-store';

   export function Counter() {
     return <>
        <button onClick={() => increment()}>Increment</button>
        <span>{state.count}</span>
        <button onClick={() => decrement()}>Decrement</button>
     </>;
   }</code></pre></p>
]]></description><pubDate>Mon, 06 Mar 2023 09:14:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=35039029</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35039029</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35039029</guid></item><item><title><![CDATA[New comment by dmitriid in "What Are Signals?"]]></title><description><![CDATA[
<p>useEffect, useContext, and usSyncExternalStore are no longer about "local only".<p>And you never use only local state. You advocate for Redux in a different comment which is literally a global state where you <i>are</i> going to have something suddenly change somewhere from the point of view of a component.</p>
]]></description><pubDate>Mon, 06 Mar 2023 09:10:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=35039005</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35039005</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35039005</guid></item><item><title><![CDATA[New comment by dmitriid in "ChatGPT broke the EU plan to regulate AI"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=35038100" rel="nofollow">https://news.ycombinator.com/item?id=35038100</a></p>
]]></description><pubDate>Mon, 06 Mar 2023 06:30:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=35038105</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35038105</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35038105</guid></item><item><title><![CDATA[New comment by dmitriid in "ChatGPT broke the EU plan to regulate AI"]]></title><description><![CDATA[
<p>> Czechia is a European country you want to look at for an example that you can have gun laws that allow civilians to own handguns and carry them for defensive purposes without problems.<p>Let's see:<p>--- start quote ---<p>A gun in the Czech Republic is available to anybody subject to acquiring a firearms license. Gun licenses may be obtained in a way similar to a driving license – by passing a gun proficiency exam, medical examination and having a clean criminal record.<p>the issuing authority (police) firearm owners' database is connected to information needed for a background check and red flags any incidents that may lead to loss of license requirements. Similarly, health clearance by the general practitioner is needed for periodical renewal of license (every ten years).<p>* also very specific restrictions depending on license *<p>Obtaining the license requires passing a theoretical and practical exam.<p><a href="https://en.wikipedia.org/wiki/Gun_law_in_the_Czech_Republic" rel="nofollow">https://en.wikipedia.org/wiki/Gun_law_in_the_Czech_Republic</a><p>--- end quote ---<p>Oh look, already more strict than many states in the US (and some states are busy removing any restrictions).</p>
]]></description><pubDate>Mon, 06 Mar 2023 06:22:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=35038065</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35038065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35038065</guid></item><item><title><![CDATA[New comment by dmitriid in "ChatGPT broke the EU plan to regulate AI"]]></title><description><![CDATA[
<p>And yet all of these issues, when they come up, are invariably happening in the "land of the free", not in the "totalitarian state dystopia of the EU and neighboring countries".</p>
]]></description><pubDate>Mon, 06 Mar 2023 06:13:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=35038017</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35038017</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35038017</guid></item><item><title><![CDATA[New comment by dmitriid in "Activity Pub vs. Web Frameworks"]]></title><description><![CDATA[
<p>If no one is paying, content on IPFS <i>will</i> disappear, and very soon.</p>
]]></description><pubDate>Mon, 06 Mar 2023 06:02:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=35037958</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35037958</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35037958</guid></item><item><title><![CDATA[New comment by dmitriid in "2022 letter on life in China"]]></title><description><![CDATA[
<p><a href="https://news.ycombinator.com/item?id=35029186" rel="nofollow">https://news.ycombinator.com/item?id=35029186</a></p>
]]></description><pubDate>Sun, 05 Mar 2023 12:53:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=35029196</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35029196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35029196</guid></item><item><title><![CDATA[New comment by dmitriid in "2022 letter on life in China"]]></title><description><![CDATA[
<p>It's both, really.<p>Let's say you're a teacher with known dissident tendencies. Boom. Suddenly the only place you can get work is one of these remote regions with lax control. Yes there is less government there, and you can even start a book club or something to read and discuss banned literature, and no one will bother you.<p>But try and get out because you're tired of rural life... and no place in the "mainland" will acept you. Or will only offer you menial jobs and unskilled labor.<p>This was a very widely and well-used tactic in the USSR. Can't see why China (or any other authoritatian state) wouldn't do the same. <i>Especially</i> China with their current state of surveillance tech.</p>
]]></description><pubDate>Sun, 05 Mar 2023 12:52:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=35029186</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35029186</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35029186</guid></item><item><title><![CDATA[New comment by dmitriid in "What Are Signals?"]]></title><description><![CDATA[
<p>> What I like about Redux is that it takes the immutable functional approach<p>Strange that you don't like spaghetti, but then praise Redux that is spaghetti exemplified: dozens of functions, and wrappers, and hooks eerywhere. Trying to trace how a value gets changed through the three-four layers of wrappers is like pulling teeth through the anus.<p>And looking at the current reincarnation of this abomination, it is marginally less spaghetti, and converging on the same signals code that everyone is converging on.</p>
]]></description><pubDate>Sun, 05 Mar 2023 09:20:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=35028095</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35028095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35028095</guid></item><item><title><![CDATA[New comment by dmitriid in "What Are Signals?"]]></title><description><![CDATA[
<p>A series of articles from the author of Solid discussing all those tweets, and more, including the history of signals and their vurrent state.<p>- The Evolution of Signals in JavaScript, <a href="https://dev.to/this-is-learning/the-evolution-of-signals-in-javascript-8ob" rel="nofollow">https://dev.to/this-is-learning/the-evolution-of-signals-in-...</a><p>- React vs Signals: 10 Years Later, <a href="https://dev.to/this-is-learning/react-vs-signals-10-years-later-3k71" rel="nofollow">https://dev.to/this-is-learning/react-vs-signals-10-years-la...</a><p>- Making the Case for Signals in JavaScript , <a href="https://dev.to/this-is-learning/making-the-case-for-signals-in-javascript-4c7i" rel="nofollow">https://dev.to/this-is-learning/making-the-case-for-signals-...</a><p>Those two code examples are different because that's the tradeoff that Solid made. It allows Solid to track changes in a uniform way even if the data isn't inside a component. Because in Solid components are just a way to organize code, not a unit of rendering (like in React).<p>And on top of that if you think that React still somehow has unidirectional data flow, it doesn't. Hooks make it anything but unidirectional. And not that different from signals: <a href="https://res.cloudinary.com/practicaldev/image/fetch/s--upMC6-2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a59u9jeant6nu5y20yd9.png" rel="nofollow">https://res.cloudinary.com/practicaldev/image/fetch/s--upMC6...</a> But often less predictable.<p>See also The Cost of Consistency in UI Frameworks, <a href="https://dev.to/this-is-learning/the-cost-of-consistency-in-ui-frameworks-4agi" rel="nofollow">https://dev.to/this-is-learning/the-cost-of-consistency-in-u...</a> which is slightly related to this.</p>
]]></description><pubDate>Sun, 05 Mar 2023 09:14:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=35028073</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35028073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35028073</guid></item><item><title><![CDATA[New comment by dmitriid in "“Here's the number I used to win the lottery“ –Entrepreneurs giving advice"]]></title><description><![CDATA[
<p>The number of people who can attribute their exceptionalism to genetics is minuscule compared to people who are just wealthy and connected.<p>Even those that you assume "just have it" most likely just have enough means and connections to try and fail and eventually succeed than most of us.</p>
]]></description><pubDate>Sat, 04 Mar 2023 22:02:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=35024889</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35024889</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35024889</guid></item><item><title><![CDATA[New comment by dmitriid in "“Here's the number I used to win the lottery“ –Entrepreneurs giving advice"]]></title><description><![CDATA[
<p>That <i>anyone</i> at the very least needs access to a smartphone, powerful-enough computer, and internet.<p>18% of households in the US say they can't afford home internet service: <a href="https://ntia.gov/blog/2022/switched-why-are-one-five-us-households-not-online" rel="nofollow">https://ntia.gov/blog/2022/switched-why-are-one-five-us-hous...</a></p>
]]></description><pubDate>Sat, 04 Mar 2023 21:59:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=35024871</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35024871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35024871</guid></item><item><title><![CDATA[New comment by dmitriid in "“Here's the number I used to win the lottery“ –Entrepreneurs giving advice"]]></title><description><![CDATA[
<p>Having disposable income and connections means much much more than genetics.<p>This comment has the relevant quote: <a href="https://news.ycombinator.com/item?id=35024721" rel="nofollow">https://news.ycombinator.com/item?id=35024721</a></p>
]]></description><pubDate>Sat, 04 Mar 2023 21:56:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=35024841</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35024841</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35024841</guid></item><item><title><![CDATA[New comment by dmitriid in "2022 letter on life in China"]]></title><description><![CDATA[
<p>If there's a seemingly "free region" that everyone knows about and deflects to, you can be 100% sure that the state knows about it, knows everyone who "deflected" there, and keeps tabs on everyone.<p>A smart authoritarian government will have these "free" zones as a pressure release valve:<p>- Most active dissidents jailed<p>- Active dissidents allowed to flee the country<p>- Somewhat active ones allowed to "flee the regime to the free-thinking zones far from government control"</p>
]]></description><pubDate>Sat, 04 Mar 2023 19:32:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=35023743</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35023743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35023743</guid></item><item><title><![CDATA[New comment by dmitriid in "The Tunguska Mystery 100 Years Later (2008)"]]></title><description><![CDATA[
<p>I absolutely love this theory. Now I definitely need to re-watch the movie</p>
]]></description><pubDate>Sat, 04 Mar 2023 19:21:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=35023638</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35023638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35023638</guid></item><item><title><![CDATA[New comment by dmitriid in "The Tunguska Mystery 100 Years Later (2008)"]]></title><description><![CDATA[
<p>Have you not seen the documentary "Prestige"?!<p>/s</p>
]]></description><pubDate>Sat, 04 Mar 2023 17:58:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=35022893</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35022893</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35022893</guid></item><item><title><![CDATA[New comment by dmitriid in "Phoenix Dev Blog – Streams"]]></title><description><![CDATA[
<p>Liveview solves the "write a fully dynamic and interactive application with next to zero Javascript that you need to write by hand" or, if you will, "server-driven UI apps".<p>And it's hard to overstate, but to also properly explain, how important this is and how it feels like magic when you do it. Because it lets you tap into everything Elixr (and Erlang VM) have to offer on the backend without ever having to think of "how the hell do I bring all that to the client".<p>My use-cases are: a big chunk of data is being processed, and while its being processed regular updates are sent over PubSub. Most actions a user initiates are long-ish-running and their updates are also sent over PubSub. Things that <i>other</i> users are doing are sent over PubSub and possibly need to be reflected in the UI.<p>In "traditional" JS-on-the-client-whatever-on-the-server model you have a plethora of questions of how to get that to UI: which endpoints to query, which updates to send over the wire, the formats, the frequence, authorisation, auth...<p>With LiveView your "client" is an Elixir view living on the server which just updates the view based on those PubSubs (or timers, or Kafka streams, or user-initiated actions, or...) and LiveView takes care of upating the DOM/HTML in the browser.<p>"Build a real-time Twitter clone in 15 minutes with LiveView and Phoenix 1.5" will give a good overview of this: <a href="https://www.youtube.com/watch?v=MZvmYaFkNJI">https://www.youtube.com/watch?v=MZvmYaFkNJI</a><p>[1] Built-in in Phoenix, <a href="https://hexdocs.pm/phoenix_pubsub/Phoenix.PubSub.html" rel="nofollow">https://hexdocs.pm/phoenix_pubsub/Phoenix.PubSub.html</a></p>
]]></description><pubDate>Sat, 04 Mar 2023 16:52:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=35022255</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35022255</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35022255</guid></item><item><title><![CDATA[New comment by dmitriid in "Could we make the web more immersive using a simple optical illusion?"]]></title><description><![CDATA[
<p>> Designers tend to love the Vignelli map, but everyone in the city hated it<p>Those designers were/are more illustrators than designers [1]. Design is, or at least should be, as much about the <i>function</i> of an object as about it's looks. A design that hinders functionality isn't a good design.<p>[1] I call the modern breed of such designers "Dribbble-driven"</p>
]]></description><pubDate>Sat, 04 Mar 2023 15:06:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=35021277</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35021277</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35021277</guid></item><item><title><![CDATA[New comment by dmitriid in "GraphQL vs. REST APIs: a complete guide"]]></title><description><![CDATA[
<p>> It's not possible to build GQL query footguns.<p>GQL literally allows unbounded queries.<p>All the "tooling" around like "field complexity", "data loaders" and other hacks are literally that: hacks and workarounds, and they are not even consistently, evenly or even efficiently implemented among the various GQL libraries and frameworks.<p>> it automatically comes with documentation for your API<p>Unless it's specified in code, and to create <i>actual</i> documentation you have to run a server, connect to it with a tool, and dump it (can't remember which lib did that, was it in Java or in Go).<p>> you think that using GQL automatically comes with the infrastructure I described.<p>This: GQL doesn't come with infra. And for every thing that REST aready has and for every issue that GQL has, and REST doesn't, you need to add more and more infrastructure and "rich ecosystem":<p>- Caching is literally built-in in HTTP. GraphQL's default method is POST, so to "solve" caching frameworks like Apollo have to act as middlemen unpacking every incoming request and every outgoing response looking for certain fields to figure out what to cache. Of course, this isn't available in other libs and framewroks<p>- Unbounded queries are literally not an issue in REST (unless you build something weird). In GraphQL you need to "specify field complexity" <i>if</i> you framework allows that<p>- Your REST endpoints know what exactly is requested, and can have specific hyperoptimised queries for that specific thing. GraphQL is ad-hoc by nature, any query is potentially n+1, so you have the workarounds with dataloaders which by definition cannot be optimised unless your specific framewrok gives additional insights into what's being requested.<p>Literally everything around GraphQL is "nothing works well, and if you're lucky, a particular graphql implementation for your programming language will have some solutions for some of the problems".<p>How do I know?<p>I built a service prototype for an internal tool in 5 different languages with 6 different libs:<p>- Typescript, Apollo<p>- Java, graphql-java<p>- C#, graphql-dotnet<p>- go, glgen and graphql-gp<p>- Elixir, absinthe<p>GraphQL sucks ass for everyting and everybody except client developers who couldn't care less how it looks on the backend</p>
]]></description><pubDate>Sat, 04 Mar 2023 12:16:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=35020285</link><dc:creator>dmitriid</dc:creator><comments>https://news.ycombinator.com/item?id=35020285</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35020285</guid></item></channel></rss>