<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: QuinnWilton</title><link>https://news.ycombinator.com/user?id=QuinnWilton</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Apr 2026 21:10:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=QuinnWilton" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by QuinnWilton in "Cloudflare's abuse policies and approach"]]></title><description><![CDATA[
<p>It's difficult to take comments like this in good faith when the Github profile linked on your account prominently features your signature on a letter calling for Richard Stallman to be reinstated to the FSF after his resignation, following his comments defending sex with minors and child pornography.</p>
]]></description><pubDate>Wed, 31 Aug 2022 19:39:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=32667264</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=32667264</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32667264</guid></item><item><title><![CDATA[New comment by QuinnWilton in "The Power of Prolog"]]></title><description><![CDATA[
<p>To an extent, you get this with Datalog, which is an easily embeddable subset of pure Prolog.<p>I've been spending a ton of time with the language and its implementation through my day job, and I recently spoke about its use as a DSL for embedded knowledge bases: <a href="https://www.youtube.com/watch?v=lYLkaOq7WbU" rel="nofollow">https://www.youtube.com/watch?v=lYLkaOq7WbU</a></p>
]]></description><pubDate>Mon, 06 Jun 2022 19:00:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=31644376</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=31644376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31644376</guid></item><item><title><![CDATA[New comment by QuinnWilton in "The Power of Prolog"]]></title><description><![CDATA[
<p>> I wonder if it's fair to consider it constraint-based programming rather than just logic programming<p>Prolog III is considered the origin of constraint logic programming: <a href="http://www.prolog-heritage.org/en/ph30.html" rel="nofollow">http://www.prolog-heritage.org/en/ph30.html</a></p>
]]></description><pubDate>Mon, 06 Jun 2022 17:29:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=31643253</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=31643253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31643253</guid></item><item><title><![CDATA[An Introduction to Session Types]]></title><description><![CDATA[
<p>Article URL: <a href="https://wen.works/posts/2020-12-17-an-introduction-to-session-types.html">https://wen.works/posts/2020-12-17-an-introduction-to-session-types.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=28875263">https://news.ycombinator.com/item?id=28875263</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 15 Oct 2021 07:23:31 +0000</pubDate><link>https://wen.works/posts/2020-12-17-an-introduction-to-session-types.html</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28875263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28875263</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Libraries can start processes too"]]></title><description><![CDATA[
<p>This has historically been fairly common among a lot of the early Elixir libraries, and I'd imagine that's a byproduct of many of the early adopters coming from the Ruby ecosystem, and not having prior experience with the patterns used in Erlang. I think some of the early confusion surrounding how application config should be used also led to some misguided decisions early on.<p>Fortunately it's something that I've seen improve over time, but it's a pain-point I've run into with a lot of dependencies, so I try to call it out when I see it.</p>
]]></description><pubDate>Thu, 05 Aug 2021 22:32:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=28080910</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28080910</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28080910</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Libraries can start processes too"]]></title><description><![CDATA[
<p>Yes, that's mostly it!<p>A lot of what I'm talking about has to do with configuration, but reuse is another big element. Your example has no configuration, and so is good in that regard, however your example is not reusable, in the sense that it's only possible for a single counter to exist.<p>I realize this is a contrived example, because you were trying to keep things simple, but if I needed two distinct atomic counters in my app, then I wouldn't be able to use Ergo, as it's currently implemented, because the application only starts a single counter, and doesn't provide any capabilities for starting additional counters.<p>You could change Ergo to get around this, possibly by instead running a dynamic supervisor that can start named counters under it, using something like `Ergo.create_counter/1`, but this would only address this specific use case.<p>To go back to my last comment, if you instead exposed, for example, a `__using__` macro that modules could use to define new counters, then callers would be able to integrate as many counters as they needed, whenever or however into their supervision tree as they required.<p>This ties back to the testing point too: if the process is a singleton, managed by the application, then you can only run one test against that process at a time in order to isolate the state for this tests, and you need to ensure you properly clean up that state between tests. Instead though, if the library allows you to start the processes yourself, then each test can use `start_supervised!` to start it's own isolated copy of the process, which will be linked to the test's process, and automatically cleaned up once the test finishes.</p>
]]></description><pubDate>Thu, 05 Aug 2021 16:35:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=28076044</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28076044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28076044</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Libraries can start processes too"]]></title><description><![CDATA[
<p>Problematic is probably too strong of a term, and I think I'd use the word inflexible instead.<p>I want to be clear though: my issue isn't with applications -- the functionality you're talking about is powerful and useful -- it's purely with the tendency of starting a static and global supervision tree as part of a dependency: see some of the other comments in this thread for some neat examples of how applications like ssh and pg2 handle supervision.<p>When libraries are written like this, they usually start everything up automatically, and pull from their application environment in order to configure everything. This means that this configuration is global and shared amongst all consumers of the library.<p>Imagine an HTTP client, for example, that provides a config key for setting the default timeout. This key would be shared among all callers, and so if multiple libraries depended on this client, their configurations would override each other.<p>Fortunately, Elixir now recommends against libraries setting app config, so this problem is partially mitigated, but it's still a concern within your app: if I'm calling two different services, I want to use different timeouts for each, based on their SLA, so having a global timeout isn't helpful.<p>Instead, in this situation, I'd prefer something like what Finch provides, where I'm able to start different HTTP pools within my supervision tree, for different use-cases, and each can be configured independently: <a href="https://github.com/keathley/finch#usage" rel="nofollow">https://github.com/keathley/finch#usage</a><p>Another approach would be to do something like what ssh does, and have the Finch application start a pool supervisor automatically, but then provide functions for creating new pools against that supervisor, and linking or monitoring them from the caller.<p>There's a few other techniques you can use too, with different tradeoffs and benefits: like Ecto's approach of requiring that you define your own repo and add that to your tree. Chris Keathley describes some of those ideas here: <a href="https://keathley.io/blog/reusable-libraries.html" rel="nofollow">https://keathley.io/blog/reusable-libraries.html</a><p>Global trees like this are also harder to test, especially if they rely on hardcoded unique names, and usually restrict you to synchronous tests, since you can't duplicate the tree for every test and run them independently of each other.<p>Again though, I want to stress that running processes in the library's application is not my problem: it's just not having any control over when or how those processes are started.<p>I'm just responding on my phone, and I need to run for a few hours, but feel free to ask for more info or reach out. I'm always happy to talk about this stuff! I enjoyed your article, and I apologize if my initial comment came across as an attack on your core points.</p>
]]></description><pubDate>Tue, 03 Aug 2021 15:52:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=28050708</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28050708</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28050708</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Libraries can start processes too"]]></title><description><![CDATA[
<p>Yes! This is a great approach, and I'd be happy to see more examples like this in the wild. This is similar to the same way Phoenix PubSub works, with the PubSub application starting a pg scope as part of its supervision tree, that client PubSub servers can join if configured to use the pg adapter.<p>I was a little bit flippant in my initial comment, but my main criticism was of libraries that don't support any sort of hooks like this into their supervision strategy, and instead rely entirely on a global and static supervision tree, usually configured using app config.</p>
]]></description><pubDate>Tue, 03 Aug 2021 00:12:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=28044332</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28044332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28044332</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Libraries can start processes too"]]></title><description><![CDATA[
<p>Agreed. I also wish fewer libraries started their own supervision tree, and instead gave you a child spec to drop into your supervision tree. There's definitely use-cases where shipping libraries as an application makes sense, but oftentimes that sort of design causes problems for me, because it means not being able to start multiple copies of the dependency with different configurations.<p>I think Phoenix PubSub is a perfect example of how libraries should be structured, in that you just need to drop the module + options into your supervision tree, and you have the freedom of starting multiple independent copies of the tree, in different contexts, and with their own configurations: <a href="https://hexdocs.pm/phoenix_pubsub/Phoenix.PubSub.html#module-getting-started" rel="nofollow">https://hexdocs.pm/phoenix_pubsub/Phoenix.PubSub.html#module...</a></p>
]]></description><pubDate>Mon, 02 Aug 2021 22:33:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=28043523</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28043523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28043523</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Blizzard Recruiters Asked Hacker If She ‘Liked Being Penetrated’ at Job Fair"]]></title><description><![CDATA[
<p>I don't think this is a fair argument. Sure, the shirt probably isn't appropriate for a business casual environment, but that doesn't change the fact that this behaviour is sexual harassment: made worse by the fact that the recruiters are acting from a position of power.<p>It's also worth pointing out that these events occurred at Black Hat, in Las Vegas: what passes as acceptable business attire there is not the same as what would fly in an office, and I guarantee there were plenty of people wearing far more risqué shirts without facing any harassment.<p>It's easy to try to pin some responsibility on the woman here, but that ignores the fact that this sort of language and culture is extremely common at Black Hat and DEFCON, and a shirt like she was wearing would not have been out of place at the conference. Hell, I wouldn't be surprised if she won the shirt at the conference.<p>From the year before, here [0] is a sign from the vendor area at Black Hat, featuring an underwear clad model with the caption: "You know you're not the first... but do you really care?"<p>Similarly, to this day, DEFCON, held one week after Black Hat, and likely the largest security conference in the world, still holds a "Hacker Jeopardy" competition, featuring strippers who remove their clothing as contestants answer questions correctly.<p>I only say all of this because I think a lot of context is being lost in this article, by people who haven't been to these conferences: the women's shirt wouldn't have been what singled her out here, her gender was, and for the recruiters to harass her for that is unacceptable.<p>[0] <a href="https://twitter.com/secitup/status/497140864708116481" rel="nofollow">https://twitter.com/secitup/status/497140864708116481</a></p>
]]></description><pubDate>Fri, 30 Jul 2021 21:46:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=28012772</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=28012772</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28012772</guid></item><item><title><![CDATA[New comment by QuinnWilton in "The Banning of Joyce's Ulysses"]]></title><description><![CDATA[
<p>Finnegan's Wake absolutely exists to be read, or even sung, out loud. If you've never gotten the appeal, just try listening to the start of an audiobook version. There's a Youtube series that covers the first few chapters that I adore: <a href="https://www.youtube.com/watch?v=6HgCjtd2iPU" rel="nofollow">https://www.youtube.com/watch?v=6HgCjtd2iPU</a></p>
]]></description><pubDate>Thu, 24 Jun 2021 20:37:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=27623433</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27623433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27623433</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Please commit more blatant academic fraud"]]></title><description><![CDATA[
<p>I think an obvious solution would be to exclude anyone who is incapable of managing the bare minimum level of professionalism that's required in a workplace.<p>If someone is incapable of managing their feelings in a workplace then maybe they don't belong in one, and their colleagues should not be the ones who are punished for that.<p>I don't expect you to agree with me here.</p>
]]></description><pubDate>Mon, 31 May 2021 17:40:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=27346451</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27346451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27346451</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Please commit more blatant academic fraud"]]></title><description><![CDATA[
<p>Plenty of us have absolutely no problem working in same-sex environments, and plenty of straight people have no issues working in coed environments.<p>This is very clearly a case of the professor being unprofessional and exploitative of his position of power.</p>
]]></description><pubDate>Sun, 30 May 2021 17:29:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=27334871</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27334871</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27334871</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Please commit more blatant academic fraud"]]></title><description><![CDATA[
<p>Where do non-straight people fit into this "solution"?</p>
]]></description><pubDate>Sun, 30 May 2021 17:12:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=27334721</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27334721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27334721</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Erlang/OTP 24 highlights"]]></title><description><![CDATA[
<p>For what it's worth, I spoke last year about using Gleam to develop a type-safe core for a LiveView application: <a href="https://www.youtube.com/watch?v=UCIcJBM_YDw" rel="nofollow">https://www.youtube.com/watch?v=UCIcJBM_YDw</a><p>I think that what you're looking for is already possible today, and that things only get easier over time.</p>
]]></description><pubDate>Wed, 12 May 2021 21:07:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=27135157</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27135157</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27135157</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Back in 1993, I was taking a number theory class"]]></title><description><![CDATA[
<p>Oh and it wasn't. That was the least of the school's problems though.<p>They also used a surveillance system called LanSchool, which sent out all of its commands entirely unencrypted and unauthenticated, so people would spoof the remote takeover command and steal exams from teachers' accounts. It ended up being a whole thing my senior year.</p>
]]></description><pubDate>Mon, 03 May 2021 22:44:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=27031837</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27031837</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27031837</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Back in 1993, I was taking a number theory class"]]></title><description><![CDATA[
<p>My highschool physically removed the right mouse button from the mice, because we were right clicking to make text files that we'd rename as batch files to get a command prompt open.<p>Some people would just bring their own mouse in to get past the defences.</p>
]]></description><pubDate>Mon, 03 May 2021 22:32:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=27031719</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=27031719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27031719</guid></item><item><title><![CDATA[A Child’s Garden of Inter-Service Authentication Schemes]]></title><description><![CDATA[
<p>Article URL: <a href="https://latacora.micro.blog/a-childs-garden/">https://latacora.micro.blog/a-childs-garden/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=26972209">https://news.ycombinator.com/item?id=26972209</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 28 Apr 2021 18:01:43 +0000</pubDate><link>https://latacora.micro.blog/a-childs-garden/</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=26972209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26972209</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Algorithm Agility?"]]></title><description><![CDATA[
<p>This is a really tough question to answer, because the answer depends on what you're using JWT for. JWT crams as much functionality into the format as possible, and most of that functionality isn't needed for most use cases. This means that offering an alternative requires knowing some context about what you need out of JWT in the first place.<p>That being said, for most purposes, you can do worse than using either mutual TLS or Macaroons [0]. As always with cryptography though, the devil is in the details, so for a more thorough discussion, check out @tptacek's "A Child's Garden of Inter-Service Authentication Schemes" [1]. It's one of my favourite treatments of the topic, and discusses the tradeoffs of a few different techniques for different use-cases.<p>[0] <a href="https://en.wikipedia.org/wiki/Macaroons_(computer_science)" rel="nofollow">https://en.wikipedia.org/wiki/Macaroons_(computer_science)</a><p>[1] <a href="https://latacora.micro.blog/a-childs-garden/" rel="nofollow">https://latacora.micro.blog/a-childs-garden/</a></p>
]]></description><pubDate>Wed, 28 Apr 2021 18:01:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=26972206</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=26972206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26972206</guid></item><item><title><![CDATA[New comment by QuinnWilton in "Algorithm Agility?"]]></title><description><![CDATA[
<p>And all of this is to say nothing of the frankly embarrassing problems that have plagued JWT as a result of algorithm agility (alg=none). Removing agility from JWT wouldn't make it a good specification, but it would certainly make it a better specification.</p>
]]></description><pubDate>Tue, 27 Apr 2021 23:19:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=26963282</link><dc:creator>QuinnWilton</dc:creator><comments>https://news.ycombinator.com/item?id=26963282</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26963282</guid></item></channel></rss>