<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: spookylukey</title><link>https://news.ycombinator.com/user?id=spookylukey</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 06 Apr 2026 15:35:23 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=spookylukey" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by spookylukey in "Cue Does It All, but Can It Literate?"]]></title><description><![CDATA[
<p>Please, please - just link to the actual "CUE" project. Not everyone has heard of your favourite thing. The first reference to `CUE` should be a hyperlink.<p>For other people: I'm pretty sure the author is talking about <a href="https://cuelang.org/" rel="nofollow">https://cuelang.org/</a></p>
]]></description><pubDate>Fri, 16 Jan 2026 11:11:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=46645249</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=46645249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46645249</guid></item><item><title><![CDATA[New comment by spookylukey in "Ask HN: Could you share your personal blog here?"]]></title><description><![CDATA[
<p><a href="https://lukeplant.me.uk/blog/" rel="nofollow noreferrer">https://lukeplant.me.uk/blog/</a><p>Over 200 posts, spanning nearly 20 years. Mostly on programming, Python, Web development, some personal and Christian stuff.</p>
]]></description><pubDate>Thu, 06 Jul 2023 07:46:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=36612598</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=36612598</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36612598</guid></item><item><title><![CDATA[New comment by spookylukey in "Python's “disappointing” superpowers"]]></title><description><![CDATA[
<p>I did a fairly detailed breakdown regarding the Python library Parsy: <a href="https://lukeplant.me.uk/blog/posts/python-type-hints-parsy-case-study/" rel="nofollow">https://lukeplant.me.uk/blog/posts/python-type-hints-parsy-c...</a><p>This is not to make the general claim "Typing is a hindrance in parsing applications", or anything close. It's saying "the current static type system(s) available in Python would have made this Python library much worse".</p>
]]></description><pubDate>Wed, 01 Feb 2023 22:05:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=34618596</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=34618596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34618596</guid></item><item><title><![CDATA[New comment by spookylukey in "Escape-on-input is a bad idea (2012)"]]></title><description><![CDATA[
<p>Just the other day I added a recent example to that page, from <a href="https://www.wsj.com/articles/internet-mangles-names-accents-web-forms-11664462695" rel="nofollow">https://www.wsj.com/articles/internet-mangles-names-accents-...</a> where it is obvious that databases are storing pre-escaped data.<p>This might be because of really old data and old code that saved it. But changing this decision is very hard, so I imagine many systems that adopted escape-on-input once are stuck with it.</p>
]]></description><pubDate>Thu, 20 Oct 2022 03:29:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=33270510</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=33270510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33270510</guid></item><item><title><![CDATA[New comment by spookylukey in "Programming Fonts"]]></title><description><![CDATA[
<p>This is nice. With variable fonts, some of these fonts now are slightly under-represented - for example "Recursive" is really a large family, the website shows just one extreme point of a large multi-dimensional space.<p>I'm currently enjoying using the "Recursive Mono Semicasual" variant of Recursive - <a href="https://www.recursive.design/" rel="nofollow">https://www.recursive.design/</a> . It adds just a little bit more fun that a typical mono font, especially at higher font sizes (e.g. for headings in Markdown in an editor).</p>
]]></description><pubDate>Sat, 09 Jul 2022 10:07:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=32033540</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=32033540</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32033540</guid></item><item><title><![CDATA[New comment by spookylukey in "Harmful Defaults in Django"]]></title><description><![CDATA[
<p>The default user model is fine, but I *always* start a project by extending it, for future-proofing. If you need to add to it, this is *so* much better than having to add a one-to-one, and at *some* point down the line you find you do want to add something. The problem is that doing it later when you need it is a pain, because of poor support by the migrations framework.<p>It's like 4 lines of code that saves you so much grief later on:<p><pre><code>    from django.contrib.auth.models import AbstractUser
    class User(AbstractUser):
        pass

    AUTH_USER_MODEL = "myapp.User"

</code></pre>
If you never need it, those 3 lines are not hurting you. In terms of a default, I think it probably would be nicer if Django pushed you to do this up front.</p>
]]></description><pubDate>Fri, 07 Jan 2022 09:49:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=29837171</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=29837171</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29837171</guid></item><item><title><![CDATA[New comment by spookylukey in "immudb – world’s fastest immutable database, built on a zero trust model"]]></title><description><![CDATA[
<p>I find it very strange to have claims about the database being tamper-evident etc without a clear description of the threat/trust model, and how/for whom it works. For example, what data does the client need to store to be sure no tampering has occurred?</p>
]]></description><pubDate>Mon, 27 Dec 2021 23:43:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=29708359</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=29708359</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29708359</guid></item><item><title><![CDATA[New comment by spookylukey in "The Decline of Django"]]></title><description><![CDATA[
<p>I think the case for server-side HTML rendering has never been stronger, and of all Django projects I work on, the ones I enjoy most are those that never got on the SPA bandwagon. From both a developer and user point of view I find them much faster and less painful. There are many cases where you really, really don't need the massive amount of extra complexity involved in designing APIs, adding JS frameworks etc.<p>When you need a bit of extra UI goodness, htmx <a href="https://htmx.org/" rel="nofollow">https://htmx.org/</a> is a fantastic solution, and you can still use SPA-type approaches for things that need them.<p>You can also benefit from massively faster (and more reliable) functional testing when you are mostly standard HTML - see  django-functest <a href="https://github.com/django-functest/django-functest/" rel="nofollow">https://github.com/django-functest/django-functest/</a> for an example of this.</p>
]]></description><pubDate>Fri, 15 Oct 2021 15:43:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=28878993</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=28878993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28878993</guid></item><item><title><![CDATA[New comment by spookylukey in "Technical Debt Doesn’t Exist"]]></title><description><![CDATA[
<p>I found Martin Fowler's "Technical Debt Quadrant" helpful on this - <a href="https://martinfowler.com/bliki/TechnicalDebtQuadrant.html" rel="nofollow">https://martinfowler.com/bliki/TechnicalDebtQuadrant.html</a> . He argues you can have deliberate and inadvertent debt, both of which can be wise or unwise - the debt metaphor still works.</p>
]]></description><pubDate>Fri, 28 Aug 2020 09:38:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=24303032</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=24303032</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24303032</guid></item><item><title><![CDATA[New comment by spookylukey in "Fucking Color Picker"]]></title><description><![CDATA[
<p>Also, xmag, you already have it installed if you use the X Window System. It's 41kb, extremely lightweight (always starts instantly) and also magnifies a screen portion which is helpful for picking colours.</p>
]]></description><pubDate>Sat, 13 Apr 2019 12:24:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=19652593</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=19652593</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19652593</guid></item><item><title><![CDATA[New comment by spookylukey in "Ask HN: Anyone Using Elm in Production?"]]></title><description><![CDATA[
<p>Could you do the following in TypeScript?<p>Can you, for any button in your interface, at any point in time, reliably calculate at runtime what your page's data model would look like, and if there were going to be any side effects, if you were to click on that button - but without clicking on it or invoking its callbacks (which could potentially change all kinds of things)? You can do that with Elm (more info here - <a href="https://lukeplant.me.uk/blog/posts/two-experiences-with-elm/" rel="nofollow">https://lukeplant.me.uk/blog/posts/two-experiences-with-elm/</a> ), due to The Elm Architecture and everything being immutable.<p>(In theory you could do this in TypeScript, but it would be a lot of work and its reliability would depend on everyone coding everything a certain, very unnatural way, with no help from the compiler).<p>I'm using Elm in production, version 0.18, it is an extremely robust way to make front end code. You just don't have runtime issues.<p>However, like IBM folks (mentioned in another reply) who said in the their post they didn't know how they would upgrade to 0.19, I also don't know how I will be able to upgrade. Specifically, 0.19 adds some cripple-ware restrictions (you can't use native modules unless you are contributing to certain projects). So, if you want to use something like Intl - <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...</a> - not only is there no wrapper provided, the restrictions in 0.19 attempt to stop you from writing your own wrapper. Only the core team can do it, which requires them having both the expertise and motivation to do so. Plus Elm has essentially a closed-source development process. In fact, there is no 'process' for contributing, and the fact that there is no process is deliberate, as far as I can tell.<p>So for me, if I can't find a way around the restrictions, they may kill my ability to being able to keep my code nicely architectured (i.e. using The Elm Architecture). I may be forced to switch to something like ReasonML with bucklescript-tea - <a href="https://github.com/OvermindDL1/bucklescript-tea" rel="nofollow">https://github.com/OvermindDL1/bucklescript-tea</a></p>
]]></description><pubDate>Mon, 04 Mar 2019 13:42:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=19301108</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=19301108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19301108</guid></item><item><title><![CDATA[New comment by spookylukey in "Debt Worldwide Hits Record $86k per Person"]]></title><description><![CDATA[
<p>"real money from real people's savings accounts" is not how it works. See this book - <a href="https://www.amazon.co.uk/Where-Does-Money-Come-Monetary/dp/1908506547" rel="nofollow">https://www.amazon.co.uk/Where-Does-Money-Come-Monetary/dp/1...</a><p>Banks do indeed make money "from nothing". If you get a loan of $1000 from a bank, they just add $1000 to your current account, and write down in another account that you owe them $1000. They don't have to "get" this money from somewhere.<p>This is all as it should be. Say I can make tables, and you want one, but don't have anything to give me in exchange. We can agree that you now owe me $100, say. You can write me an IOU and sign it. Suppose you are trustworthy enough that an IOU from you is considered acceptable as payment. I can now use your IOU as money - we have just "created" $100 money from nowhere (or, $100 debt, same thing).</p>
]]></description><pubDate>Sat, 15 Dec 2018 06:00:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=18687293</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=18687293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18687293</guid></item><item><title><![CDATA[New comment by spookylukey in "Google is testing expiring emails in the new Gmail"]]></title><description><![CDATA[
<p>There is no value in it because it is a false promise. If you give someone access to data, you have lost control over it, especially if it is by email - because not everyone uses Gmail. Many of those who do do not use the web client, and email clients are ultimately controlled by end users, even web based ones.<p>Only if you have complete end-to-end control over all the devices that everyone uses, including their brain, can you stop people from copying data.<p>If I have a file that I want to limit access to, I would never dream of sending it via e-mail. Some hosted document service which only shows parts of the file would be far preferable.</p>
]]></description><pubDate>Fri, 13 Apr 2018 18:01:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=16832374</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=16832374</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16832374</guid></item><item><title><![CDATA[New comment by spookylukey in "Falsehoods programmers believe about programming"]]></title><description><![CDATA[
<p>> There is some innate affinity for computer programming which you must be born with, and cannot be taught.<p>This being a falsehood is a matter of considerable debate, and it's impossible to prove (There are certainly some people with very low ability for computer programming, to the point of effectively useless. How would you prove this was entirely nurture and not nature?). This is a not a good candidate for a "list of falsehoods" article.</p>
]]></description><pubDate>Sun, 10 Dec 2017 14:31:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=15891511</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=15891511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15891511</guid></item><item><title><![CDATA[New comment by spookylukey in "Ask HN: What happened to the ORM?"]]></title><description><![CDATA[
<p>This is not the case - with Django's ORM you are still susceptible to the N+1 problem. It can be largely mitigated through `select_related` and `prefetch_related`, but the fundamental issue is there - that simply by accessing an attribute for an object that wasn't already fetched, you can  do another database query without it being at all clear in the code that this will happen.</p>
]]></description><pubDate>Thu, 29 Jun 2017 10:18:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=14662058</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=14662058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14662058</guid></item><item><title><![CDATA[New comment by spookylukey in "Problems I Have with Python"]]></title><description><![CDATA[
<p>That's really helpful. Can you make an example which doesn't require making the my_handler function 'async'? For cases when you don't want to make an entire async stack, you just want to slot some async code into your existing code.<p>If the answer is "to get some async goodness, just use this easy code, plus rewrite your entire project to use a different framework and set of libraries", then we are only fooling ourselves.</p>
]]></description><pubDate>Wed, 25 Jan 2017 11:19:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=13480496</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=13480496</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13480496</guid></item><item><title><![CDATA[The very minimum you need to know about words]]></title><description><![CDATA[
<p>Article URL: <a href="http://lukeplant.me.uk/blog/posts/the-very-minimum-you-need-to-know-about-words/">http://lukeplant.me.uk/blog/posts/the-very-minimum-you-need-to-know-about-words/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=13303684">https://news.ycombinator.com/item?id=13303684</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 02 Jan 2017 19:28:40 +0000</pubDate><link>http://lukeplant.me.uk/blog/posts/the-very-minimum-you-need-to-know-about-words/</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=13303684</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13303684</guid></item><item><title><![CDATA[New comment by spookylukey in "Ask HN: Why does 'View Source' issue a new HTTP request?"]]></title><description><![CDATA[
<p>It's a bug: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=307089" rel="nofollow">https://bugzilla.mozilla.org/show_bug.cgi?id=307089</a><p>Or, it's a memory saving feature. To implement "View source from cache" requires keeping around the raw page HTML, which you might not otherwise need after parsing - except you probably will for all the developer tools to work, so this  probably should just be considered bug.</p>
]]></description><pubDate>Mon, 19 Dec 2016 12:44:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=13211046</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=13211046</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13211046</guid></item><item><title><![CDATA[New comment by spookylukey in "Super Mario Run"]]></title><description><![CDATA[
<p>Yeah, the video made me want to go outside and run, not take my mobile with me, and certainly not stay in and tap a screen.</p>
]]></description><pubDate>Fri, 16 Dec 2016 06:51:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=13191565</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=13191565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13191565</guid></item><item><title><![CDATA[New comment by spookylukey in "Same-site Cookies"]]></title><description><![CDATA[
<p>The current spec has a serious flaw for CSRF prevention - it doesn't include the protocol in the definition of site, only the domain. This allows a MITM'd http page to CSRF a https site. This same flaw is in cookies themselves - a cookie set over https is used for http requests.</p>
]]></description><pubDate>Sat, 28 May 2016 07:33:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=11790905</link><dc:creator>spookylukey</dc:creator><comments>https://news.ycombinator.com/item?id=11790905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11790905</guid></item></channel></rss>