<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: petalmind</title><link>https://news.ycombinator.com/user?id=petalmind</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 11 Jun 2026 04:03:01 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=petalmind" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by petalmind in "Anthropic's Model Naming, Extrapolated"]]></title><description><![CDATA[
<p>Claude Epitaph</p>
]]></description><pubDate>Wed, 10 Jun 2026 20:31:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48482229</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=48482229</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48482229</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>I think I understand this "Cartesian product" reasoning behind 4NF/5NF, I just find it irrelevant I guess.<p>Cartesian product is explained in Kent: case (3) in <a href="https://www.bkent.net/Doc/simple5.htm#label4.1" rel="nofollow">https://www.bkent.net/Doc/simple5.htm#label4.1</a> ("A "cross-product" form, where for each employee, there must be a record for every possible pairing of one of his skills with one of his languages")<p>I do not explicitly mention this Cartesian product even tho it is present in both posts ("sports / languages" in 4NF, and "brands / flavours" in 5NF).<p>>  it demonstrates [one of] the precise problem[s] the normal form sets out to solve: a combinatorial explosion of rows.<p>I just don't understand this wording of "a combinatorial explosion of rows" — what's so dramatic here?  I don't need four iterations of algebra-dense papers to explain this concept, I think it's pretty simple frankly.<p>And my implicit argument is, I guess, exactly that you could design tables that handle both problems without invoking 4NF and 5NF — people are doing that all the time.</p>
]]></description><pubDate>Wed, 15 Apr 2026 22:00:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47785895</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47785895</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47785895</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>Thank you, your take on the evolution from spreadsheets to proper databases is englightening.</p>
]]></description><pubDate>Wed, 15 Apr 2026 21:21:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47785398</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47785398</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47785398</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>Could you share an example of writing stule that you enjoy?</p>
]]></description><pubDate>Wed, 15 Apr 2026 13:12:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=47778511</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47778511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47778511</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>> Might it be a consequence of lack of disk space in those early decades<p>A plausible explanation of "normalization as a process" was actually found in <a href="https://www.cargocultcode.com/normalization-is-not-a-process/" rel="nofollow">https://www.cargocultcode.com/normalization-is-not-a-process...</a> ("So where did it begin?").<p>I hope someday to find some technical report of migrating to the relational database, from around that time.</p>
]]></description><pubDate>Tue, 14 Apr 2026 20:20:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47770957</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47770957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47770957</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>I have so many questions about that.  Should that normal form basically replace 5NF for the purposes of teaching?<p>Why do they hate us and do not provide any illustrative real-life example without using algebraic notation?  Is it even possible?<p>I just want to see a CREATE TABLE statement, and some illustrative SELECT statements.  The standard examples always give just the dataset, but dataset examples are often ambiguous.<p>> (in its joins)<p>Do you understand what are "its" joins?  What is even "it" here.<p>I'm super frustrated.  This paper is 14 years old.</p>
]]></description><pubDate>Tue, 14 Apr 2026 20:16:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=47770892</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47770892</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47770892</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>Imperative mood "normalize" assumes that you had something not-normalized before you received that instruction.  It's not useful when your table design strategy is already normalization-preserving, such as the most basic textbook strategy (a table per anchor, a column per attribute or 1:N link, a 2-column table per M:N link).<p>And this is basically the main point of my critique of 4NF and 5NF.  They both traditionally present an unexplained table that is supposed to be normalized.  But it's not clear where does this original structure come from.  Why are its own authors not aware about the (arguably, quite simple) concept of normalization?<p>It's like saying that to in order to implement an algorithm you have to remove bugs from its original implementation — where does this implementation come from?<p>The other side of this coin is that lots of real-world design have a lot of denormalized representations that are often reasonably-well engineered.<p>Because of that if you, as a novice, look at a typical production schema, and you have this "thou shalt normalize" instruction, you'll be confused.<p>This is my big teaching pet peeve.</p>
]]></description><pubDate>Tue, 14 Apr 2026 20:04:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47770731</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47770731</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47770731</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>Yeah, no NULL is ever equal to any other NULL, so they are basically unique.</p>
]]></description><pubDate>Tue, 14 Apr 2026 19:23:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47770210</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47770210</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47770210</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>> Someone, somewhere writing down a list and that list being blessed with the imprimatur of Academic Approval (TM)<p>One problem is that normal forms are underspecified even by the academy.<p>E.g., Millist W. Vincent "A corrected 5NF definition for relational database design" (1997) (!) shows that the traditional definition of 5NF was deficient. 5NF was introduced in 1979 (I was one year old then).<p>2NF and 3NF should basically be merged into BCNF, if I understand correctly, and treated like a general case (as per Darwen).<p>Also, the numeric sequence is not very useful because there are at least four non-numeric forms (<a href="https://andreipall.github.io/sql/database-normalization/" rel="nofollow">https://andreipall.github.io/sql/database-normalization/</a>).<p>Also, personally I think that 6NF should be foundational, but that's a separate matter.</p>
]]></description><pubDate>Tue, 14 Apr 2026 18:07:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=47769084</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47769084</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47769084</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>Frankly I don't think that overcounting is solved by normalizing, because it's easy to write an overcounting SQL query over perfectly normalized data.<p>I tried to explain the real cause of overcounting in my "Modern Guide to SQL JOINs":<p><a href="https://kb.databasedesignbook.com/posts/sql-joins/#understanding-the-problem-of-overcounting" rel="nofollow">https://kb.databasedesignbook.com/posts/sql-joins/#understan...</a></p>
]]></description><pubDate>Tue, 14 Apr 2026 17:32:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47768609</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47768609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47768609</guid></item><item><title><![CDATA[New comment by petalmind in "5NF and Database Design"]]></title><description><![CDATA[
<p>One day I hope to write about denormalization, explained explicitly via JOINs.</p>
]]></description><pubDate>Tue, 14 Apr 2026 17:30:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47768571</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47768571</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47768571</guid></item><item><title><![CDATA[5NF and Database Design]]></title><description><![CDATA[
<p>Article URL: <a href="https://kb.databasedesignbook.com/posts/5nf/">https://kb.databasedesignbook.com/posts/5nf/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47767676">https://news.ycombinator.com/item?id=47767676</a></p>
<p>Points: 203</p>
<p># Comments: 83</p>
]]></description><pubDate>Tue, 14 Apr 2026 16:22:49 +0000</pubDate><link>https://kb.databasedesignbook.com/posts/5nf/</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47767676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47767676</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>Do you know if Redex could be a tool that would be useful in my situation?<p>Claude suggests it, but I need to learn a lot of Redex to understand how to apply it.<p>I have a general understanding of what operational semantics is.  Or maybe, are there any Redex implementations for common programming languages? \lambda_v is a bit too abstract.</p>
]]></description><pubDate>Sun, 05 Apr 2026 18:29:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47652397</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47652397</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47652397</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>You reimplement `while` in terms of `loop`, but do you know that `loop` is also a method :)</p>
]]></description><pubDate>Sun, 05 Apr 2026 14:00:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47649552</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47649552</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47649552</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>Even Ruby `parser` gem uses S-expressions in their documentation: <a href="https://github.com/whitequark/parser/blob/master/doc/AST_FORMAT.md" rel="nofollow">https://github.com/whitequark/parser/blob/master/doc/AST_FOR...</a></p>
]]></description><pubDate>Sun, 05 Apr 2026 13:40:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47649345</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47649345</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47649345</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>> on the 'reflection' level, where most languages have specific keywords that cannot be used 'first class' with the rest of the language.<p>In Ruby this is also the other way around, and it's one of my pet peeves.<p>`Kernel#callcc` looks like a method (arguably, of a special class), yet it's impossible to re-implement directly in the language, as far as I can tell.<p>Same with `raise`, I keep forgetting that it's not a keyword even.</p>
]]></description><pubDate>Sun, 05 Apr 2026 13:18:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47649154</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47649154</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47649154</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>Yeah, I was also going to say that conflating trivial syntax and "supremely easy to learn" is a very weak flex.<p>The first Smalltalk-80 book you randomly find is 560 pages.<p>Also, there is a weird bargaining with "but not block temporaries" and "not an instance variable".  Why not?  Half of the postcard is basically empty. Also, "except primitives" — how many primitives are there?</p>
]]></description><pubDate>Sun, 05 Apr 2026 12:39:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47648781</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47648781</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47648781</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>> Ruby has syntax sugar, no need to remove the funny parts.<p>This is just an intermediate representation, it's not meant to be used directly (even though you can do that, of course).</p>
]]></description><pubDate>Sun, 05 Apr 2026 10:23:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47647953</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47647953</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47647953</guid></item><item><title><![CDATA[New comment by petalmind in "Rubysyn: Clarifying Ruby's Syntax and Semantics"]]></title><description><![CDATA[
<p>> Lisp? Then I would use Lisp...<p>Lisp has completely different runtime semantics.  Even the lexical scope in Ruby is extremely peculiar.  One of the hard parts of writing this document was to remove the intuitive influence of Lisp because it just doesn't make sense for Ruby.</p>
]]></description><pubDate>Sun, 05 Apr 2026 10:19:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47647914</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47647914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47647914</guid></item><item><title><![CDATA[Rubysyn: Clarifying Ruby's Syntax and Semantics]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/squadette/rubysyn/blob/master/README.md">https://github.com/squadette/rubysyn/blob/master/README.md</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47598835">https://news.ycombinator.com/item?id=47598835</a></p>
<p>Points: 72</p>
<p># Comments: 16</p>
]]></description><pubDate>Wed, 01 Apr 2026 09:54:18 +0000</pubDate><link>https://github.com/squadette/rubysyn/blob/master/README.md</link><dc:creator>petalmind</dc:creator><comments>https://news.ycombinator.com/item?id=47598835</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47598835</guid></item></channel></rss>