<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: chrisdone</title><link>https://news.ycombinator.com/user?id=chrisdone</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 27 Apr 2026 11:31:59 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=chrisdone" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by chrisdone in "Archive Team: A Smattering of Tweets"]]></title><description><![CDATA[
<p>The Economist stylized this as “tweets are appraised as speech, but punished as writing.”</p>
]]></description><pubDate>Mon, 05 Apr 2021 19:57:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=26703828</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26703828</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26703828</guid></item><item><title><![CDATA[New comment by chrisdone in "The Lost Apps of the 80s"]]></title><description><![CDATA[
<p>I’m working on <a href="https://inflex.io/" rel="nofollow">https://inflex.io/</a> which can achieve the data / logic separation of Improv, by putting functions in cells. But Improv isn’t an inspiration. Inflex is certainly closer to it than Airtable though.</p>
]]></description><pubDate>Mon, 05 Apr 2021 15:25:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=26700258</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26700258</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26700258</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>I see that it supports units in terms of scale - does it also prevent units that measure different things from being combined? E.g. 2 kg + 3cm (units mismatch) or 3$ * 7$ (two monies can’t be multiplied).</p>
]]></description><pubDate>Fri, 02 Apr 2021 22:30:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676636</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676636</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676636</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>Airtable is strongly typed in the fields of the tables, but the expression language is not.  It is my conclusion based on researching Airtable, that the decision to have well typed tables is so that relational operations work nicely, and so that they can implement interfaces on top of these tables easily, such as calendars and work planning things etc. I don’t think that there is an underlying motivation to fix the ill-type code of the world, so to speak. Any non-trivial code work is done in JavaScript, anyway.</p>
]]></description><pubDate>Fri, 02 Apr 2021 22:04:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676451</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676451</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676451</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>I commented elsewhere in this submission that I am working on a strongly typed spreadsheet. (Don’t want to spam my product link.)<p>I do think that bringing new syntax to the table is justifiable if it brings new concepts with it.<p>I agree, power query is essentially a separate product and doesn’t feel first class. I think that probably explains its relative obscurity, despite being highly powerful.</p>
]]></description><pubDate>Fri, 02 Apr 2021 22:01:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676421</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676421</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676421</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>I am working on a product which is pretty much exactly what you describe. I love spreadsheets but I wanted something that I wanted to actually program in right from the beginning to the end of my work process.<p>It’s called Inflex: <a href="https://inflex.io/" rel="nofollow">https://inflex.io/</a><p>And it is a pure functional programming language, with cells, which are reactive, and with real data structures like lists and records. We have a work in progress beta. Sign up requires a paid subscription, but only because I wanted to make sure that the infrastructure was working. To try the work in progress product, you can just hit Try which lets you play in a sandbox. It doesn’t save or remember any of your work, and also doesn’t even hit our databases. (Safe from the hug of death.)<p>It’s pretty bare-bones right now but it’s based on ideas from Haskell, and Unison which is a content addressable language. (Every cell has a SHA512 hash of its content.) That makes versioning very easy, but this is not seen in the UI yet.<p>The table editing and what not is a little cumbersome right now, as there are a lot of things to come together and I wanted to demonstrate at least some of them.<p>Speaking of clean separation between data and display,  The plan is to build for example reports using a simple HTML like DSL.  Also, things like time and external data sources will be treated in the type system as explicit streams, which is an architecture that has been fully explored in Haskell under the guise of FRP.<p>But I’m working on this in my spare time and therefore progress is turtle pace rather than silicon valley pace. :)</p>
]]></description><pubDate>Fri, 02 Apr 2021 21:54:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676378</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676378</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676378</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>I like your work on Mito, and I feel like it’s the python answer to a project that I’m working on which is the equivalent but with Haskell, or rather a riff on Haskell to be more amenable to spreadsheets-like programming.<p>One thing that you can do when you have a pure functional programming language is rather than generating separate cells for modifications, you can go into the code and modify it directly fairly reliably.<p>I’ve linked my project elsewhere, don’t want to spam the thread.</p>
]]></description><pubDate>Fri, 02 Apr 2021 21:42:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676296</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676296</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676296</guid></item><item><title><![CDATA[New comment by chrisdone in "Spreadsheet is a software development paradigm"]]></title><description><![CDATA[
<p>SPJ has been coming at this from the angle of let’s add things to Excel because Excel itself is already established.<p>This, in my opinion, is putting lipstick on a pig. The inputs and outputs work represents a very stretched contortion of trying to do real programming in a limited environment.<p>I am coming at it (commented elsewhere in the submission my project, avoiding spam) from the other end: start with a fresh, language take all the tried and tested programming language research useful to this way of working and connect it to a UI which fully comprehends this language. Throw out the grid and coordinates.<p>Row types, polymorphic variants, FRP for time/streams/events, type classes for arithmetic, CAS for cells, etc. We really do know what works, and therefore we can actually start from scratch and have some thing that is actually nice to use.</p>
]]></description><pubDate>Fri, 02 Apr 2021 21:39:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=26676266</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26676266</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26676266</guid></item><item><title><![CDATA[New comment by chrisdone in "Baserow.io – Self-hosted Airtable alternative"]]></title><description><![CDATA[
<p>It’s my understanding that the main selling feature of AirTable is the hard coded views that they offer; calendars, kanban style planners, things like that. The slightly more structured nature of relational tables over spreadsheets lets you implement those fairly reliably.</p>
]]></description><pubDate>Sun, 14 Mar 2021 10:56:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=26454299</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=26454299</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26454299</guid></item><item><title><![CDATA[New comment by chrisdone in "WhatsApp and the Domestication of Users"]]></title><description><![CDATA[
<p>Someone said the problem of WhatsApp is network effects. Network effects are fine.<p>Email benefits from network effects. The difference is that email is designed to be decentralized and from the beginning had many clients with open protocols. IRC similar. And of course, the web browser itself. DNS.<p>Back when these were invented, people had many different operating systems and architectures, so the protocol was more important than the client/server. Today, we have about three platforms: web, iOS and Android, meaning you can reach millions of users with software rapidly, rather than the slow way of pushing a protocol. There’s less incentive to have decentralization and there’s money to be made. Protocols require cooperation and therefore move slower. SMS and IRC and email don’t feel modern because they move at glacial pace of cooperation.<p>I think therefore it’s harder today to push a decentralized, more free protocol than it was when we had more OS/arch diversity. When in a quasi-mono-culture, protocols take a back seat. People don’t ask about it or know what they are. The ratios are flipped: we have basically three OSes and a very large diversity of app/services all incompatible and each locking you in.</p>
]]></description><pubDate>Sun, 31 Jan 2021 23:46:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=25983856</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=25983856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25983856</guid></item><item><title><![CDATA[New comment by chrisdone in "Ask HN: What's the best paper you've read in 2020?"]]></title><description><![CDATA[
<p>Not that, but Unison is one direct inspiration. I wrote a small overview here <a href="https://community.inflex.io/t/the-inflex-language/20" rel="nofollow">https://community.inflex.io/t/the-inflex-language/20</a></p>
]]></description><pubDate>Sun, 13 Dec 2020 22:15:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=25410908</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=25410908</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25410908</guid></item><item><title><![CDATA[New comment by chrisdone in "Ask HN: What's the best paper you've read in 2020?"]]></title><description><![CDATA[
<p>A paper that profoundly influenced my language design: “Programming with Polymorphic Variants” <a href="https://caml.inria.fr/pub/papers/garrigue-polymorphic_variants-ml98.pdf" rel="nofollow">https://caml.inria.fr/pub/papers/garrigue-polymorphic_varian...</a><p>And the earlier paper “A Polymorphic Type System for Extensible Records and Variants” <a href="https://web.cecs.pdx.edu/~mpj/pubs/96-3.pdf" rel="nofollow">https://web.cecs.pdx.edu/~mpj/pubs/96-3.pdf</a><p>Row types are magically good: they serve either records or variants (aka sum types aka enums) equally well and both polymorphically. They’re duals. Here’s a diagram.<p><pre><code>              Construction                Inspection

    Records   {x:1} : {x:Int}             r.x — r : {x:Int|r}
              [closed]                    [open; note the row variable r]
    
    Variants  ‘Just 1 : <Just Int|v>      case v of ‘Just 0 -> ...
              [open; note the row var v]  v : <Just Int>
                                          [closed]
</code></pre>
Neither have to be declared ahead of time, making them a perfect fit in the balance between play and serious work on my programming language.</p>
]]></description><pubDate>Tue, 08 Dec 2020 23:17:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=25352922</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=25352922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25352922</guid></item><item><title><![CDATA[New comment by chrisdone in "EU pushes for 'right to disconnect' from work at home"]]></title><description><![CDATA[
<p>That may be a cultural difference. You may see the EU as having a "very lax work ethic", but in my experience working in the EU, they see America (and Britain) as having an unhealthy work obsession.<p>(Work to live vs live to work, perhaps.)</p>
]]></description><pubDate>Fri, 04 Dec 2020 17:38:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=25305283</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=25305283</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25305283</guid></item><item><title><![CDATA[New comment by chrisdone in "Exotic Programming Ideas, Part 3: Effect Systems"]]></title><description><![CDATA[
<p>The recent Unison language uses the effect system described in the Frank language <a href="https://www.unisonweb.org/" rel="nofollow">https://www.unisonweb.org/</a></p>
]]></description><pubDate>Sun, 22 Nov 2020 20:22:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=25180697</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=25180697</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25180697</guid></item><item><title><![CDATA[New comment by chrisdone in "Tone of Voice Guide"]]></title><description><![CDATA[
<p>I agree. I read the same passage and had the same complaint.<p>I just finished a Great Courses lecture series on the Norman conquest of England, and the professor makes this very comment. And also argues that the melding of Norman--not 'French', Norman was a sister to Old French that looks more like Vulgar Latin--and Old English is what gives modern English its vast vocabulary, roughly twice the size of Spanish; as many words have the Germanic and Romance varieties. You can 'meet' someone or 'encounter' someone, etc.<p>Ironically, "Norman" comes from "north men", as Normandy was settled by Scandinavian invaders who "went native" in France. Then they "went native" again in England, forgetting their original Norman.</p>
]]></description><pubDate>Sun, 31 May 2020 22:15:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=23373306</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=23373306</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23373306</guid></item><item><title><![CDATA[New comment by chrisdone in "History of Logo"]]></title><description><![CDATA[
<p>There's a StrangeLoop talk about teaching programming by Felienne Hermans (<a href="https://www.youtube.com/watch?v=g1ib43q3uXQ" rel="nofollow">https://www.youtube.com/watch?v=g1ib43q3uXQ</a>) that claims that all fields have an "exploration vs instruction" debate on how to teach their field, but this debate is apparently absent from the field of programming for the most part, wherein the "mess around and figure it out" exploration style of LOGO and Papert ("every time you teach something, you deprive a [student] of the pleasure and benefit of discovery") is the predominant unquestioned wisdom. Felienne wants more pedagogy fights. It's a worthwhile talk. I love LOGO and I think our generation of programmers are very sympathetic Papert's philosophy due to most of us being self-taught to some degree (you can see the fond nostalgia already on display in the comments here), but Felienne made me think about it more critically.</p>
]]></description><pubDate>Sat, 02 May 2020 17:15:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=23053225</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=23053225</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23053225</guid></item><item><title><![CDATA[New comment by chrisdone in "Reiki can’t possibly work, so why does it?"]]></title><description><![CDATA[
<p>Reiki does not involve touch.</p>
]]></description><pubDate>Fri, 03 Apr 2020 11:35:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=22768140</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=22768140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22768140</guid></item><item><title><![CDATA[New comment by chrisdone in "Decision fatigue"]]></title><description><![CDATA[
<p>I think Decision Fatigue has a long and rich treatment in the Buddhist and specifically Zen tradition. One of the true practical daily takeaways from Zen teachings I can share is that dithering and hesitation are acute forms of suffering and akin to a broken record repeating.<p>A zen master may deliberate on a question, but will never dither. When presented with a choice, do the thinking it deserves but no more.<p>A simple example: you're looking at a menu and they all look good. Pick the first one or the one closest to your finger. It doesn't matter.<p>Also, don't cheat and be deferential; "I don't know, which  would _you_ like?" Practice actively choosing. It'll do wonders in your daily life.</p>
]]></description><pubDate>Wed, 04 Mar 2020 23:32:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=22489315</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=22489315</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22489315</guid></item><item><title><![CDATA[New comment by chrisdone in "Dynamic type systems are not inherently more open"]]></title><description><![CDATA[
<p>That's an interesting angle. Another way of saying it might be that GoDP on the face of it can make one-off proofs for a value. Proofs for a function requires making proofs about all possible inputs, which is where your property test comes in handy. I could have `Named a (List x -> List x -> List x)` as the function I'm proving things about.<p>With some template-haskell you could run the property test at compile-time, and then use that proof later (e.g. for an instance of Semigroup which would require a argument proof of associativity), in languages like Unison that never run the same test suite twice (due to Content addressable code), this would be feasible. Or just run the property in your test suite and hope that the developer runs the test suite often. GHC erases data types that aren't actually evaluated in many contexts, so we even have erasure too.<p>I like your angle!</p>
]]></description><pubDate>Mon, 20 Jan 2020 10:01:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=22097759</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=22097759</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22097759</guid></item><item><title><![CDATA[New comment by chrisdone in "Dynamic type systems are not inherently more open"]]></title><description><![CDATA[
<p>Techniques like Ghost of Departed Proofs are the most exciting thing to me as a casual correctness enthusiast. It acts as a means of combining static types with contracts.<p>Types are sound mostly because they are a stupid mini language, so easily enforced, like you said. Contracts are  practical and convenient because you tend to write them in the language or a subset thereof that you’re checking. That’s hard to ignore.<p>GODP has you write a runtime check in regular code, and return as a result a proof value. Put that code in a module boundary. Then you have upstream functions expect a proof argument along with the value the proof is about. They’re tied together with a unique type variable (rank n or existential are the mechanisms of delivery for Haskell, but may differ in other languages).<p>head :: NonEmpty n -> Named n (List a) -> a<p>In this way you started from a dynamic, runtime piece of code, and ended up using a static type system to just ensure everything is passed around correctly which is trivial.<p>A single proof in this technique is nominal in the type (e.g. not null or positive or sorted ascending/descending), but combining them is done at the value level so there’s flexibility.<p>The bang for buck potential is large. I’m more interested in stuff like this than the dependent types direction that people are pushing for in GHC. If I wanted dependent types I have Agda, Coq, Isabelle, Idris, etc. to play with.</p>
]]></description><pubDate>Sun, 19 Jan 2020 23:36:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=22094950</link><dc:creator>chrisdone</dc:creator><comments>https://news.ycombinator.com/item?id=22094950</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22094950</guid></item></channel></rss>