<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: harryposner</title><link>https://news.ycombinator.com/user?id=harryposner</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 30 Aug 2026 08:48:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=harryposner" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by harryposner in "Tether: iMessage, SMS, etc. on Linux"]]></title><description><![CDATA[
<p>The linked blueferry doc is excellent.  Back in 2020, inspired by a comment on HN, I looked into writing a proxy to send and receive iMessages on Linux through an iPhone connected with Bluetooth Message Access Profile (MAP).  I was able to send and receive messages, but I ran into the problem mentioned in the doc in the "Group metadata side channel" section: the bMessages in the inbox included the message originator, but didn't include the recipients, even though the MAP standard says that it "shall" be included (see page 22).  I didn't know about ANCS, so it didn't occur to me to use that channel, and without any way to tell what context a message was sent in, I couldn't do threading, so I decided it wasn't worth pursuing.<p>The group messages were the biggest problem, and that's what made me give up, but there were some other issues:<p>- Shared links showed up as "Website: Short description (example.com)" and didn't include the URL<p>- Images weren't shown at all<p>I might take a look and see how blueferry handled those limitations.<p>[blueferry doc] <a href="https://github.com/erikwb/blueferry/blob/main/PROTOCOL.md" rel="nofollow">https://github.com/erikwb/blueferry/blob/main/PROTOCOL.md</a><p>[inspiration] <a href="https://news.ycombinator.com/item?id=23411520#23413394">https://news.ycombinator.com/item?id=23411520#23413394</a><p>[Bluetooth MAP standard] <a href="https://www.bluetooth.com/specifications/specs/message-access-profile-1-4-2/" rel="nofollow">https://www.bluetooth.com/specifications/specs/message-acces...</a></p>
]]></description><pubDate>Sat, 29 Aug 2026 19:01:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=49492374</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=49492374</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49492374</guid></item><item><title><![CDATA[New comment by harryposner in "Lisp's Influence on Ruby"]]></title><description><![CDATA[
<p>Clojure has two options:<p>The version with a threading macro, will create a lazy-sequence for each step in the pipeline.  It will not instantiate the entire list, so it's O(1) memory overhead in terms of peak memory, but it churns O(N) extra garbage.<p><pre><code>    (->> things
         (map model/find-thing)
         (filter some?))
</code></pre>
And the version with transducers, which will not create any intermediate sequences:<p><pre><code>    (sequence (comp (map model/find-thing)
                    (filter some?))
              things)
</code></pre>
It looks like there's a Common Lisp transducers library, but I have no idea how widely it's used.<p><a href="https://github.com/fosskers/transducers" rel="nofollow">https://github.com/fosskers/transducers</a></p>
]]></description><pubDate>Sun, 14 Jun 2026 21:38:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48533060</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=48533060</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48533060</guid></item><item><title><![CDATA[New comment by harryposner in "What Does "With Continuation" Mean? (2020)"]]></title><description><![CDATA[
<p>> This would imply that you can jump into the same stack frame multiple times, or do other weird things.<p>Yep— this is how you can implement the `amb` operator with call/cc: <a href="https://ds26gte.github.io/tyscheme/index-Z-H-16.html" rel="nofollow">https://ds26gte.github.io/tyscheme/index-Z-H-16.html</a></p>
]]></description><pubDate>Fri, 09 Feb 2024 15:55:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=39316088</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=39316088</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39316088</guid></item><item><title><![CDATA[New comment by harryposner in "What Does "With Continuation" Mean? (2020)"]]></title><description><![CDATA[
<p>So the particular example here isn’t too different from exceptions.  You’re unwinding the stack up to a predefined point— here, the callsite of foo, where with exceptions it would be up to the surrounding try/catch.  Scala actually implements non-local returns (the only practical use I’ve had for call/cc) using exceptions: <a href="https://tpolecat.github.io/2014/05/09/return.html" rel="nofollow">https://tpolecat.github.io/2014/05/09/return.html</a></p>
]]></description><pubDate>Fri, 09 Feb 2024 15:51:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=39316024</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=39316024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39316024</guid></item><item><title><![CDATA[New comment by harryposner in "Airlines are a lot like central banks (2020)"]]></title><description><![CDATA[
<p>You joke, and yet [Lucas 1988] uses an amusement park as a toy model to demonstrate how monetary shocks can affect real economic activity. The key difference between this and Chuck E. Cheese, though, is that Chuck E. Cheese is the only merchant that accepts their tokens for any sort of payment.<p>[Lucas 1988] <a href="https://home.uchicago.edu/~vlima/courses/econ203/fall01/Lucas_wedo.pdf" rel="nofollow noreferrer">https://home.uchicago.edu/~vlima/courses/econ203/fall01/Luca...</a></p>
]]></description><pubDate>Mon, 31 Jul 2023 18:50:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=36947144</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=36947144</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36947144</guid></item><item><title><![CDATA[New comment by harryposner in "Inflation is falling much faster than most people know"]]></title><description><![CDATA[
<p>They do not exclude gas prices.  The Consumer Price Index, which is what most people pay attention to and to which this article refers, currently weights gasoline at 3.7% of the basket of goods it tracks.<p><a href="https://www.bls.gov/cpi/tables/relative-importance/2021.htm" rel="nofollow">https://www.bls.gov/cpi/tables/relative-importance/2021.htm</a></p>
]]></description><pubDate>Sat, 24 Dec 2022 19:28:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=34120244</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=34120244</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34120244</guid></item><item><title><![CDATA[New comment by harryposner in "Helix: A Neovim inspired editor, written in Rust"]]></title><description><![CDATA[
<p>> But I haven't had a need to add any kind of plugin, and it's easy enough to fork a shell for an external process if needed.<p>For me, coming from writing Clojure with Neovim + vim-sexp + vim-fireplace, I would need Paredit and REPL integration.<p>Paredit is doable with Treesitter, and I'm actually really excited about Helix's Treesitter integration--- every time I write a non-Lisp language, I miss structural editing, so it'll be nice for other languages catch up to Lisp on that front.  It doesn't really look like it's quite there yet, though.  The built-operations that use Treesitter are spare [0], and while you could implement operations like promote, slurp, and barf with them, you'd have to clobber some register.  I don't see at all how you could implement splice  without an actual language, since you would need a way to select all siblings of the current node.<p>REPL integration absolutely needs a plugin language.  Unlike the LSP, there isn't a standard protocol for communicating with a REPL, so each language requires its own REPL client.  Unless they want to ship a REPL client for every language under the sun, they'll have to provide some way for users to implement their own clients.  That said, every time I look at Conjure, they've added REPL clients for more and more languages [1], so maybe it is feasible to have it built into the editor.<p>[0] <a href="https://docs.helix-editor.com/keymap.html" rel="nofollow">https://docs.helix-editor.com/keymap.html</a><p>[1] <a href="https://github.com/Olical/conjure/" rel="nofollow">https://github.com/Olical/conjure/</a></p>
]]></description><pubDate>Mon, 10 Oct 2022 15:41:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=33152812</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=33152812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33152812</guid></item><item><title><![CDATA[New comment by harryposner in "Show HN: Lisp with GC in 436 Bytes"]]></title><description><![CDATA[
<p>From the beginning of SICP [0]:<p>> A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas. Every powerful language has three mechanisms for accomplishing this:<p>> * primitive expressions, which represent the simplest entities the language is concerned with,<p>> * means of combination, by which compound elements are built from simpler ones, and<p>> * means of abstraction, by which compound elements can be named and manipulated as units.<p>Brainfuck is missing any sort of means of abstraction.  The primitives are instructions, and the only means of combination is writing instructions in sequence, but there's no way in the language to refer to any sequence of instructions --- no functions, no subroutines, not even labels.  This makes it utterly useless as a way to organize your thoughts on how to compute something.<p>[0] <a href="http://sarabander.github.io/sicp/html/1_002e1.xhtml#g_t1_002e1" rel="nofollow">http://sarabander.github.io/sicp/html/1_002e1.xhtml#g_t1_002...</a></p>
]]></description><pubDate>Tue, 21 Dec 2021 04:56:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=29634046</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=29634046</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29634046</guid></item><item><title><![CDATA[New comment by harryposner in "The Recurse of Factorial"]]></title><description><![CDATA[
<p>I’m not familiar with Erlang, but unless it has some really funky syntactic sugar, the Erlang examples aren’t tail-recursive. In all three, the continuation of the recursive call is the multiplication operation and not the conditional.</p>
]]></description><pubDate>Wed, 08 Sep 2021 15:58:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=28458963</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=28458963</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28458963</guid></item><item><title><![CDATA[New comment by harryposner in "Writing Small CLI Programs in Common Lisp"]]></title><description><![CDATA[
<p><p><pre><code>  user=> (rest '(3 . 4))
  (. 4)

  user=> (second '(3 . 4))
  .

  user=> (nth '(3 . 4) 2)
  4</code></pre></p>
]]></description><pubDate>Thu, 18 Mar 2021 14:35:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=26503131</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=26503131</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26503131</guid></item><item><title><![CDATA[New comment by harryposner in "The auction that set off the race for AI supremacy"]]></title><description><![CDATA[
<p>An ascending price auction is strategically different from a second price auction when the bidders each have a noisy estimate of some underlying true value.  With a second price auction, the only information you can incorporate into your bid is your own signal.  With an ascending price auction, you can look at the prices at which the other bidders drop out (except the second highest bidder) and incorporate that information into the price at which you're willing to drop out.  This also means that an ascending price auction raises more revenue than a second price auction, by the linkage principle.<p><a href="https://en.wikipedia.org/wiki/Linkage_principle" rel="nofollow">https://en.wikipedia.org/wiki/Linkage_principle</a></p>
]]></description><pubDate>Wed, 17 Mar 2021 02:02:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=26485647</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=26485647</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26485647</guid></item><item><title><![CDATA[New comment by harryposner in "Why did I leave Google or, why did I stay so long?"]]></title><description><![CDATA[
<p>I didn’t read it as firing old people, but rather firing people for the plain old reason that they’re not doing a good job.</p>
]]></description><pubDate>Wed, 17 Feb 2021 16:23:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=26168140</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=26168140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26168140</guid></item><item><title><![CDATA[New comment by harryposner in "The neural network of the Stockfish chess engine"]]></title><description><![CDATA[
<p>> there's no, say, "fivefold repetition" draw that could be enforced despite the players' will<p>There is exactly such a rule. See the FIDE Laws of Chess [0], rule 9.6.1.<p>[0] <a href="https://handbook.fide.com/chapter/E012018" rel="nofollow">https://handbook.fide.com/chapter/E012018</a></p>
]]></description><pubDate>Wed, 13 Jan 2021 16:27:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=25764192</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=25764192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25764192</guid></item><item><title><![CDATA[New comment by harryposner in "R adds native pipe and lambda syntax"]]></title><description><![CDATA[
<p>Pandas does have the .pipe() method [0], which allows you to put an arbitrary callable in a method chain, but it is a bit more cumbersome than in R.<p>[0] <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pipe.html" rel="nofollow">https://pandas.pydata.org/pandas-docs/stable/reference/api/p...</a></p>
]]></description><pubDate>Sun, 06 Dec 2020 04:14:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=25320973</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=25320973</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25320973</guid></item><item><title><![CDATA[New comment by harryposner in "Chess tactics explained"]]></title><description><![CDATA[
<p>Lichess’s cheat detection is open source (like everything else on the site) [0]. The training dataset isn’t public, though, and it’s practically undocumented. If you look in the `modules/game` directory, though, you’ll get an idea of what sort of data that goes into the model.  Besides the engine analyses, it also looks at the time spent on each move (the `Emt` type is short for elapsed move time).<p>[0] <a href="https://github.com/clarkerubber/irwin" rel="nofollow">https://github.com/clarkerubber/irwin</a></p>
]]></description><pubDate>Mon, 30 Nov 2020 15:31:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=25254760</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=25254760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25254760</guid></item><item><title><![CDATA[New comment by harryposner in "The Nobel Prize in Physics 2020"]]></title><description><![CDATA[
<p>A Nobel Prize is about a million dollars cash.</p>
]]></description><pubDate>Tue, 06 Oct 2020 14:20:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=24697894</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=24697894</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24697894</guid></item><item><title><![CDATA[New comment by harryposner in "Ideas That Changed My Life"]]></title><description><![CDATA[
<p>My favorite part of the paper that used field experiments to demonstrate that rice in Hunan is a Giffen good for the poorest consumers [0] is the cheeky inclusion of this quote from George Stigler:<p>> Perhaps as persuasive a proof [of the “Law of Demand”] as is readily summarized is this: if an economist were to demonstrate its failure in a particular market at a particular time, he would be assured of immortality, professionally speaking, and rapid promotion while still alive. Since most economists would not dislike either reward, we may assume that the total absence of exceptions is not from lack of trying to find them.<p>[0] <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2964162/" rel="nofollow">https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2964162/</a></p>
]]></description><pubDate>Mon, 08 Jun 2020 01:49:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=23452803</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=23452803</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23452803</guid></item><item><title><![CDATA[New comment by harryposner in "Lisp Programming in Vim with Slimv or Vlime"]]></title><description><![CDATA[
<p>A slight correction: C-x C-e and fc open $EDITOR, which is vim by default on most machines.  You can change it to anything, though.</p>
]]></description><pubDate>Sun, 08 Dec 2019 16:04:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=21736531</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=21736531</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21736531</guid></item><item><title><![CDATA[New comment by harryposner in "An Antique Toaster That's Better Than Today’s [video]"]]></title><description><![CDATA[
<p>I don't think he's right that you could implement a bagel mode on that toaster by just running the center heating element.  Both heating elements are necessary for the toaster to function (which he mentions!).  You need to run the center element to drive the bread lifter, but you also need to run the outer element to heat the side of the bread facing the bimetallic strip.  You can't put the bimetallic strip on the center side of the bread, since it needs direct exposure to the heat radiating off the bread, and the coiled center heating element would get in the way.</p>
]]></description><pubDate>Sat, 05 Oct 2019 15:19:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=21165990</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=21165990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21165990</guid></item><item><title><![CDATA[New comment by harryposner in "The Shield of Achilles (1952)"]]></title><description><![CDATA[
<p>For comparison, the relevant excerpt from the Iliad (Fagles translation): <a href="https://home.ubalt.edu/ntygfit/ai_01_pursuing_fame/ai_01_tell/iliad_18_fagles483.htm" rel="nofollow">https://home.ubalt.edu/ntygfit/ai_01_pursuing_fame/ai_01_tel...</a></p>
]]></description><pubDate>Sat, 25 May 2019 14:55:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=20009389</link><dc:creator>harryposner</dc:creator><comments>https://news.ycombinator.com/item?id=20009389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20009389</guid></item></channel></rss>