Hacker Newsnew | past | comments | ask | show | jobs | submit | inopinatus's favoriteslogin

If you're fond of state machines as an abstraction for system design, I highly recommend reading the Harel statechart paper. It's well-written and understandable. And, it's truly a useful extension of the type of state machine diagrams software engineers typically produce.

I love the language. I'm using Vapor+Fluent+Leaf, but I've had a few issues with them, I think they're fine, but if I was making decisions again I'd probably choose something else. I think the problem is that Vapor is trying to be a Django/Rails style, batteries-included framework as opposed to a Flask-style library (if those terms help you at all), but they've not quite nailed it to the Django/Rails level yet. For my project I'd have been better off with less framework, as most of my code is not strictly web code. I've ended up changing the Vapor application architecture a bit and pulling lots out into non-web-specific Swift Modules. If I were choosing again I'd give consideration to Hummingbird.

Library availability has mostly not been a problem for me, there are some really high quality libraries, particularly open source ones from Apple. Quality is high compared to other ecosystems.

I'm targeting Linux/Docker for deployment and while I don't have the project running in production yet, I've been running CI builds and it so far seems fine. It's fairly clear when things are Linux compatible and when they're not. Most things you'd expect to be are compatible. Some third-party libraries are accidentally not Linux compatible, but it hasn't been much of a problem for me.

The new Swift Testing library is really nice, and I'm using that for all my server tests with no real problems. Vapor could have more testing support (Django's is excellent and my bar for comparison), but it all works.

Overall it's just a lovely language to work in, and I'm enjoying server side development with it.


This is similar to the observation that memory semantics in most any powerful machine since the late 60s are implemented using messaging, and then applications go ahead and build messaging out of memory semantics. Or the more general observation that every layer of information exchange tends towards implementing packet switching if there's sufficient budget (power/performance/cost) to support doing so.

This is novice stuff. I write my blog by modifying the filesystem's binary structure by hand with a hex editor. There is no Javascript or CSS whatsoever and the document uses only elements, attributes, and behaviours that were both described in the original HTML v1.1 DTD and that have continued to appear in every intervening IETF, W3C, and WHATWG issuance since then. Many of the elements are therefore deprecated and currently unimplemented in all evergreen browsers. Nevertheless I live in firm expectation of their eventual reinstatement. The HTTP service is one I nicked from a grad student in my CS department circa 1995, it speaks only HTTP/0.9, and is written in a mixture of ksh and dd, requiring no other utilities. This runs on a SPARCstation 20 from the same era that has been repaired from scavenged parts so many times that the hostname spontaneously updated to "theseus" a few years ago. Fun fact: impurities in the copper I smelted to replace the power supply windings led (as you can no doubt imagine) to induction spikes on the drive rails, and the subsequent fsck erased all blog entries mentioning Jonathan Schwartz. So nothing of value was lost. Readers may be pleased to learn that despite all this I'm not totally retro; since SunOS 4.x is now out of support, the Kodiak is proudly booting NetBSD.

The blog itself is, of course, optimised for viewing in Lynx. In fact it only works in Lynx


The issue isn't that the comparison should be valid, the issue is that datetimes should not be dates. At best, there is a "has a" relationship, but there shouldn't be an "is a" relationship.

Progress is very gradual in this space, but browser vendors are working on a lot of this stuff in the Open UI W3C community group. https://open-ui.org/

https://open-ui.org/components/combobox.explainer/ https://open-ui.org/components/switch.explainer/

> Where are the native HTML Tabs control?

You implement tabs today (aka accordions) with `<details name="tab">`. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/de... "This attribute enables multiple `<details>` elements to be connected, with only one open at a time. This allows developers to easily create UI features such as accordions without scripting."

You do have to write some CSS to align tabs horizontally, but it's fine.

> Image selector?

Use `<input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" />`. Opens the OS photo picker on mobile. You can style it however you like.

> We can't even get text input to respect autocomplete directives properly.

"Properly" seems to be doing a lot of work there. "autocomplete" works fine, but it's annoying to get it right, and this kinda can't be fixed, because HTML is under a lot of backwards-compatibility constraints.

If you have autocomplete bugs to file, file them, and maybe convince the Interop group to focus on this issue. Their priorities for 2025 were just announced, but there's always next year. https://web.dev/blog/interop-2025


Thank you! Here's some more stuff:

I attended this talk by Will Wright in 1996 at Stanford, and went to work on him at Maxis soon thereafter. Years later looking back and watching this after working on and shipping the game he demonstrated for the first time in public in this talk, I was surprised by how much of the important parts of the design he already had thought through and explained in this talk, including having the Sims talk with an abstract language like adults in Charlie Brown, and using the game to enable storytelling.

Will Wright - Maxis - Interfacing to Microworlds - 1996-4-26

https://www.youtube.com/watch?v=nsxoZXaYJSk

Jan 27, 2023 STANFORD UNIVERSITY - COMPUTER SCIENCE DEPARTMENT

Video of Will Wright's talk about "Interfacing to Microworlds" presented to Terry Winograd's user interface class at Stanford University, April 26, 1996.

He demonstrates and gives postmortems for SimEarth, SimAnt, and SimCity 2000, then previews an extremely early pre-release prototype version of Dollhouse (which eventually became The Sims), describing how the AI models personalities and behavior, and is distributed throughout extensible plug-in programmable objects in the environment, and he thoughtfully answers many interesting questions from the audience.

This is the lecture described in "Will Wright on Designing User Interfaces to Simulation Games (1996)": A summary of Will Wright’s talk to Terry Winograd’s User Interface Class at Stanford, written in 1996 by Don Hopkins, before they worked together on The Sims at Maxis.

Use and reproduction: The materials are open for research use and may be used freely for non-commercial purposes with an attribution. For commercial permission requests, please contact the Stanford University Archives ([email protected]).

My notes and write-up:

Will Wright on Designing User Interfaces to Simulation Games (1996) (2023 Video Update):

https://donhopkins.medium.com/designing-user-interfaces-to-s...

HN discussion:

https://news.ycombinator.com/item?id=34573406

Lobster.rs post:

https://lobste.rs/s/fz36cj/will_wright_on_designing_user_int...

Will Wright on Designing User Interfaces to Simulation Games (1996) video games donhopkins.medium.com

DonHopkins avatar authored by DonHopkins 2 years ago | caches | 3 comments

On April 4, 1996, Terry Winograd (who I worked with at Interval Research) invited me to sit in on his HCI Group CS547 Seminar where Will Wright was giving a presentation called “Interfacing to Microworlds”, in which he gave demos and retrospective critiques of his three previous games, SimEarth, SimAnt, and SimCity 2000.

He opened it up to a question and answer session, during which Terry Winograd’s students asked excellent questions that Will answered in thoughtful detail, then one of them asked the $5 billion question: “What projects are you working on now?”

Will was taken aback and amused by the directness, and answered “Oh, God…” then said he would back up and give “more of an answer than you were looking for.”

The he demonstrated and explained Dollhouse for the first time in public, talking in depth about its architecture, design, and his long term plans and visions.

I took notes of the lecture, augmented them with more recent information and links from later talking and working with Will, and published the notes on my blog. But all I had to go on were my notes, and I haven’t seen a video of that early version of Dollhouse ever since.

But only last week I discovered the Holy Grail I’d been searching for 27 years, nestled and sparkling among a huge dragon’s hoard of historic treasures that are now free for the taking: Stanford University has published a huge collection of hundreds of Terry Winograd’s HCI Group CS547 Seminar Video Recordings, including that talk and two more by Will Wright!

I really appreciate Terry Winograd for inviting me to Will’s talk that blew my mind and changed my life (it overwhelmingly and irresistibly convinced me to go to Maxis to work with Will on The Sims), and to the Stanford University librarians and archivists for putting this enormous treasure trove of historic videos online.

Guide to the Stanford University, Computer Science Department, HCI Group, CS547 Seminar Video Recordings

https://oac.cdlib.org/findaid/ark:/13030/c82b926h/entire_tex...

Will Wright, Maxis, “Interfacing to Microworlds”, April 26, 1996:

https://searchworks.stanford.edu/view/yj113jt5999

Will Wright, Maxis, “Games and Simulation”, May 2, 2003

https://searchworks.stanford.edu/view/pw467bz3079

Will Wright, Maxis / Electronic Arts, “Laughing Creative Communities: Lessons for the Spore community experience”, May 22, 2009

https://searchworks.stanford.edu/view/pd936vc7267

I uploaded the video to YouTube to automatically create closed captions, which I proofread and cleaned up, so it’s more accessible and easier for people to find, and you can translate the closed captions to other languages.

https://www.youtube.com/watch?v=nsxoZXaYJSk

And I updated my previous article “Will Wright on Designing User Interfaces to Simulation Games (1996)” to include the embedded video, as well as the transcript and screen snapshots of the demo, links to more information, and slides from Will’s subsequent talk that illustrated what he was talking about in 1996.

https://donhopkins.medium.com/designing-user-interfaces-to-s...

[Reposting this thread here, because a GamerGate incel "FAAST" just tried to vandalize this discussion by posting an incoherent angry reply and flagged my comment as undermining his self-loathing homophobic ideology, so now you can read it without his ridiculous hate speech:]

I'm disappointed The Sims 1 wasn't included on that frightened angry list of "Woke Games" the GamerGate incels were circulating around!

https://donhopkins.com/home/TheSims/

The Sims Design Documents

https://donhopkins.com/home/TheSims/TheSimsDesignDocumentDra...

This is a PDF file with the annotated Word document of Don Hopkins's Review of The Sims Design Document Draft 3, 8/7/98.

On page 5, he wrote the following comments about same sex relationships in the game:

>The whole relationship design and implementation (I’ve looked at the tree code) is Heterosexist and Monosexist. We are going to be expected to do better than that after the SimCopter fiasco and the lip service that Maxis publically gave in response about not being anti-gay. The code tests to see if the sex of the people trying to romantically interact is the same, and if so, the result is a somewhat violent negative interaction, clearly homophobic. We are definitly going to get flack for that. It would be much more realistic to model it by two numbers from 0 to100 for each person, which was the likelyhood of that person being interested in a romantic interaction with each sex. So you can simply model monosexual heterosexual (which is all we have now), monosexual homosexual (like the guys in SimCopter), bisexual, nonsexual (mother theresa, presumably), and all shades in between (most of the rest of the world’s population). It would make for a much more interesting and realistic game, partially influenced by random factors, and anyone offended by that needs to grow up and get a life, and hopefully our game will help them in that quest. Anyone who is afraid that it might offend the sensibilities of other people (but of course not themselves) is clearly homophobic by proxy but doesn’t realize it since they’re projecting their homophobia onto other people.

https://donhopkins.com/home/TheSims/TheSimsDesignDocumentDra...

https://donhopkins.com/home/TheSims/TheSimsDesignDocumentDra...

This is a PDF file with a scan of the handwritten notes, and a PDF file with the annotated Word document of Don Hopkins's Review of The Sims Design Document Draft 5, 8/31/98.

On page 4, there is a section about Same Sex and Opposite Sex relationships, which reflects Don's suggestion to change the design to support same sex relationships.

>Same Sex and Opposite Sex relationships To be outlined in 9/30 Live Mode deliverable. Currently the game only allows heterosexual romance. This will not be the only type available – it just reflects the early stages of implementation. Will is reviewing the code and will make recommendations for how to implement homosexual romance as well.

https://donhopkins.com/home/TheSims/TheSimsDesignDocumentDra...

This is a PDF file with the annotated Word document of Don Hopkins's Review of The Sims Design Document Draft 7, 10/2/98.

On page 21, there is a section (same as above) about Same Sex and Opposite Sex relationships, which reflects Don's suggestion to change the design to support same sex relationships.

After discussing it with Patrick J. Barrett III, we've determined that the sequence of events that led to The Sims having same sex relationships: The initial prototype implementation did not support same sex relationships, and I noticed that, when I tried to have two women kiss, the would-be-kissee slapped the kisser. So I wrote up my opinion that it should support same sex relationships, instead of resulting in homophobic violence, and proposed a straw man 2-dimensional way of modeling it. Subsequent design documents said heterosexual romance would not be the only kind available, and that Will was reviewing the code and would make recommendations on how to implement it. Patrick was hired soon after that, and was set to task implementing some social interactions. But Will didn't get back to Patrick and the production database didn't reflect his opinion by the time Patrick started working on it. But Patrick implemented support for same sex relationships anyway, but not by explicitly modeling sexual preference as property of The Sims personality -- just as a behavior that was possible at any time for any character.

spondylosaurus 1 hour ago | parent | next [–]

And the Sims 1 live demo at E3 had two female sims unexpectedly kiss!

https://www.newyorker.com/tech/annals-of-technology/the-kiss...

Which generated a lot of buzz for the game, as you might expect. Maybe it wouldn't have taken off without that publicity.

DonHopkins 42 minutes ago | root | parent | next | edit | delete [–]

Yes, the unplanned off-the-rails lesbian kiss at E3 generated some really great press coverage! And it was also soon after Columbine, when video games were getting a lot of unfair flack and blame for causing violence and school shootings, so people were really hurting for a non-violent gender inclusive video game, both for gamers to play and for the press to write about.

Here's a great video essay by Alex Avila, who deeply analyzes The Sims, and discusses "The Kiss". The YouTube comments are exceptionally amazing and heartwarming! (Well curated to eliminate the toxic slime from hateful GamerGate incels like FAAST, too.)

Did The Sims make you gay? - a video essay.

https://www.youtube.com/watch?v=Xi-HWyh0Ybk

>It's no doubt The Sims is an influential video game. In this video essay, we're going to talk about its GAY influence, particularly the role it plays in queer people's identity development. Enjoy the presentation as we go over how the Sims influenced a generation in letting them live out their Tumblr dreams...

Just a few of the many comments:

Yes it did, I used to make wlw families in my Sims 2 games and make their homes lower than the ground level bc I thought it'd hide them from my parents

I DID SOMETHING LIKE THIS. I made the bedroom downstairs so when they slept, cuddled or whoohoo, my parents would not see.

Ah yes, fond memories of saving my gay in-game relationships on a separate memory card. And if that wasn’t enough good measure, being a psychopath and making my characters fight to reduce their social status back down to friends or enemies so that no one would see or suspect that they were ever married.

You were hardly made gay by the sims. You were always gay. The sims just help you discover it.

@tikimillie hey not trying to respond in a mean or hateful way, I’m pretty sure everyone commenting and the person who made the video know the sims didn’t make them gay, but it’s a joke based on anti lgbt people claiming stuff makes us gay, so this joke subverts that by claiming the thing that made us gay is a game we love.

My wife was a huge fan of The Sims and your video on its impact on sexual orientation made her laugh out loud. She would watch it over and over, always finding something new to enjoy. Though she is no longer with me, the memories of her laughter while watching your video will always be a source of comfort. Thank you for creating something that brought her so much joy. Rest in peace, my love.

I 100% made gay sims but the pattern actually started way earlier. When I was five had a pair of polly pockets who were "married" and lived in the same little pocket house. My parents thought this was very cute and were equally sweet (and completely unsurprised) when I came out 10 years later.

I was gay before but the Sims make me accept in who i am, because of how gay people in the game is treated as just normal people, it was so heart warming to see my two gay sims kiss each other in public without people harassing them

I remmeber playing my first sim game (3) alone at the age of 10 and my two characters, one rich old man and one surfer bro who started out as roommates, eventually fell in love and started cuddling on their own and at the time I was so unfamiliar with gay content in any of the media I consumed I remember being absolutely astonished that the game would let them do that at all. not in the angry reactionary way but in the "holy shit... they can just DO that????? and it's FINE???????!!!!" kind of way

When I came out to my sister, the very first thing she said to me was “……. Is that why all your Sims were gay?”

I'm one of those players that never had a problem with the sexuality system in The Sims. I never felt the need for labels, homophobia, queer history and such in my game. Equal for me was enough. More than enough, it was everything I wanted. No distinction means no hate. Everyone is normal and the same. I love queer history irl, but I long for a world where I don't need to label myself, to come out, to identify with a community and not with another. For me, not having to be different is freedom. As in, I can be as different and unique as I want, but it won't make a difference in how much people love me or hate me; I want walk down the street holding hand with my partner without people looking at us because we're not the pair they expect. Their indifference would mean the world to me. And The Sims gives me that. I don't want no labels, no hate, trauma in my game. Not the real life kind that is. Downloading extreme violence and ending families is a whole different story :)

Making my sim flirt with/date/kiss a female sim every day before quitting without saving so my parents wouldn’t find it and so it didn’t count is one of my gayest experiences

That reminds me a story of my childhood: Me and my cousin playing the sims together. Making two sims (me: a female, he: a male) and controlling them in turns. My cousin controls his sim and gets him a girlfriend from some of the neighbor households. Then he says: "Yay, I started dating her! And who are you going to date?". And I answered, without a second thought: "I am going to steal your girlfriend". He: "What? Is it even possible?" Me: "Let's try and see." And it worked, my sim successfully stole his sim's girlfriend. That's how we discovered the sims can be gay. And how I discovered I prefer girls. So I quess The Sims made me gay? :D

When I was like 7 I used to play a psp sims game and saw the option for 2 same sex sims to get married, so I tried that and was surprised to see it wasn't like a weird insulting thing. When I showed it to my grandma she just confiscated the psp and hid it for actual years which was so confusing

I remember the first time I ever made gay happen in the Sims. As a kid I didn't know sex worked so I made my Sims adopt their children as I was unsure of how to make them have children naturally. I learnt much later by accident when 2 of my Sims were sharing the same bed and the option came up. So the next generation of my Sims family came along. Their offspring was a girl who had a friend throughout childhood who was also a girl. As they grew into teenagehood, I realised the option to do romantic interactions was there. I was really surprised. When I clicked on them I didn't think the two girls would actually kiss. I felt really hot all over, it was so exciting. I made them kiss over and over and over. I didn't know why this kiss felt different from all my other Sims kissing. Quickly, I started to feel guilty and embarrassed (I don't know why because my family have no issues with gay things, seeing as many members are gay themselves). I forced my sim to leave her girlfriend and marry a man so they could have children, because I was desperate to have biological children. My Sims were basically always gay as I got older and older. The Sims actually helped me to realise that I was apart of the lgbtq community myself even if I didn't know it yet.

as a bisexual sims fan, i view the lack of choosing an identity, and the "utopia" of existing without having to declare a label as something that was helpful to me. to see sims autonomously love each other despite that was one of the things that helped me realise that people having to come out is just strange. And as someone who loves queer history and understanding the oppression and suppression presently and in the past i think having a game where flirting with the opposite sex is the same as flirting with the same sex. it felt refreshing to other games i also like, such as stardew valley.

When we were 9 or 10 my best friend and I made an all-female prison and since we had heard that lesbians were bad people we made two prisoners kiss, it was supposed to be wrong but for some reason it felt more familiar to me than my sim self's life with a husband and kids. So I decided to give myself a girlfriend and see how I felt, I realized this is how I wanted my real life to be as well when I grew up. Unfortunately, my mom caught me and made me delete my gf and back in the closet I went.

I'm obsessed with how well this essay was put together. The background information laid a wonderful platform to build off of and put things into perspective, and then call back to as we went and were introduced to new information. Not only that, but it created a sense of tension that led up to and really paid off around the 30 minute mark when the mirror stage was brought up. That whole section brought all the other ideas talked about into a singular, clear focus and made a really compelling argument.

From the title before watching, I thought the video was going to talk about being able to discover your identity through a private experience with a game that allowed queer expression that you might not have seen/experienced before, but damn, it went in hard with the idea of queerness coming from innately within or from external societal ideology and has seriously made me rethink a bunch of things, past just the game and even past the subject of queerness.

Seriously, amazing job. I hope you got great marks for your school essays, because I'd bet my left foot you deserved them.

[These are just a few examples. There are many more great comments on the video!]


Surprisingly, storing a game (with all moves) can take less space than encoding a single board. This is because you can effectively encode a move in a single byte (as there are less than 255 moves possible in each position). Applying compression to the resulting binary string will allow you to reduce the space even more.

Check out this great blog post of Lichess for more information: https://lichess.org/blog/Wqa7GiAAAOIpBLoY/developer-update-2...

And shameless plug: Using this encoding, I'm storing millions of games on https://www.chessmonitor.com/ There you can link your Chess.com or Lichess account and view all kind of statistics of your games.


“Those spikes for std::lower_bound are on powers of two, where it is somehow much slower. I looked into it a little bit but can’t come up with an easy explanation. The Clang version has the same spikes even though it compiles to very different assembly.”

I saw this and immediately went “oh, those look like Intel hardware”.

Intel uses 12-bit memory port quick addressing in their hardware, resulting in an issue known as “4K Aliasing”. When addresses are the same modulo 4K, it causes a collision that has to be mitigated by completing the associated prior memory operation to free up the use of the address in the load/store port system, effectively serializing operations and making performance very dependent on the data stride.

I first bumped up against this when running vertical passes of image processing algorithms that got very slow at certain image sizes, a problem that could be avoided by using an oversized buffer and correspondingly oversized per-line “pitch” to diagonally offset aliased addresses (at a small cost to inter-line cache line overlap).


Hi! I invented replayable event graphs. I'm writing a paper at the moment about it, which hopefully should be out in a month or so. Send me a private email and I can mail you the current draft if you like.

> If you remove these ops from history, does that remove the ability to time travel

Yes it does. You also need the ops from history to be able to merge changes. You can only merge changes so long as you have the operations going back to the point at which the fork happened.

> is it possible to put the removed historical/tombstone ops into a "cold storage" that's optional and only loaded for time-travel use?

Absolutely. And this is very practically useful. For example, you could have a web page which loads the current state of a document (just a string. Unlike CRDTs, it needs no additional metadata!). Then if some merge happens while you have the document open, the browser could just fetch the operations from the server back as far as it needs to be able to merge. But in normal operation, none of the historical operations need to be loaded at all.

All this said, with text documents the overhead of just keeping the historical operations is pretty tiny anyway. In my testing using diamond types (same algorithm, different library), storing the entire set of historical operations usually increases the file size by less than 50% compared to just storing the final text string. Its much more efficient on disk than git, and more efficient than other CRDTs like automerge and Yjs. So I think most of the time its easier to just keep the history around and not worry about the complexity.


The best advice I can give you is to use bigserial for B-tree friendly primary keys and consider a string-encoded UUID as one of your external record locator options. Consider other simple options like PNR-style (airline booking) locators first, especially if nontechnical users will quote them. It may even be OK if they’re reused every few years. Do not mix PK types within the schema for a service or application, especially a line-of-business application. Use UUIDv7 only as an identifier for data that is inherently timecoded, otherwise it leaks information (even if timeshifted). Do not use hashids - they have no cryptographic qualities and are less friendly to everyday humans than the integers they represent; you may as well just use the sequence ID. As for the encoding, do not use base64 or other hyphenated alphabets, nor any identifier scheme that can produce a leading ‘0’ (zero) or ‘+’ (plus) when encoded (for the day your stuff is pasted via Excel).

Generally, the principles of separation of concerns and mechanical sympathy should be top of mind when designing a lasting and purposeful database schema.

Finally, since folks often say “I like stripe’s typed random IDs” in these kind of threads: Stripe are lying when they say their IDs are random. They have some random parts but when analyzed in sets, a large chunk of the binary layout is clearly metadata, including embedded timestamps, shard and reference keys, and versioning, in varying combinations depending on the service. I estimate they typically have 48-64 bits of randomness. That’s still plenty for most systems; you can do the same. Personally I am very fond of base58-encoded AES-encrypted bigserial+HMAC locators with a leading type prefix and a trailing metadata digit, and you can in a pinch even do this inside the database with plv8.


To this day I maintain that a large part of IPv4 space wastage is due to the HTTP WG's longtime avoidance of adopting SRV or SRV-like DNS records or even the DNS itself as normative for HTTP/HTTPS, instead allowing the HTTP RFCs to just vaguely suggest that DNS might be one way to resolve the IP address of origin servers, whilst in practice squatting on the A (address) record like they owned it (and worse, all the apex records). Consequently inspiring a vast chorus of LIRs applying for /19 allocations over the years "for SSL hosting" and continuing to do so long past the introduction of SNI (RFC 3546). Saw this behaviour firsthand as a European LIR operator with friends at RIPE. Is it cracked down on now? Yes. Are there whole swathes of IPv4 space that remain unassigned or entirely unannounced? Yes. Does every large-scale DNS hosting service have some hackish way to workaround the prohibition of CNAME records at the zone apex? They sure do, and HTTP is why.

Paul Vixie saw it coming, the very first example in the original SRV proposal (RFC 2052, 1996) is resolution of HTTP. Alas that this example was omitted in later editions. The new SVCB/HTTPS RRs (RFC 9460, 2024) are literally decades overdue.


> people who didn’t understand networking

A couple of decades ago I witnessed a classic demonstration of Weinberg's Corollary¹ when a spanning tree misconfiguration on a freshly-installed BlackDiamond disabled LINX for hours, throwing half of Britain's ISP peering into chaos. The switch in question was evidently cursed: it'd been dropped on my foot earlier that week, thus disabling me for hours, and everyone else involved in that project was dead within two years.

__

[1] "an expert is a person who avoids the small errors while sweeping on to the grand fallacy"


There is a tale - perhaps apocryphal - handed down between generations of AWS staff, of a customer that was all-in on spot instances, until one day the price and availability of their preferred instances took an unfortunate turn, which is to say, all their stuff went away, including most dramatically the customer data that was on the instance storages, and including the replicas that had been mistakenly presumed a backstop against instance loss, and sadly - but not surprisingly - this was pretty much terminal for their startup.

    On Tue, 10 Oct 2023 07:55 +1100 jameshart wrote:
    > Are there any pre-eternal-September warriors still sticking
    > Emily-Post-like to their 1992-era netiquette standards

    Yes.

    —- 
    inopinatus

    y = ->(f) {
      ->(x) { x.(x) }.(
      ->(x) { f.(->(v) { x.(x).(v) }) } )
    }

Here's a thought: HTML does not separate structure, or content, from presentation. I'm not sure where the myth of the web's separation of concerns first arose - possibly from some architecture astronaut who'd never written an element in their life, perhaps from someone who really knew better but needed to slip something past the mediocrity police - but irrespective of what any non-normative reference may say, HTML does in practice blend structure, semantics, content, and presentation. CSS and JS substantially augment the presentation and semantics, but fighting against the grain of what HTML fundamentally embodies, instead of leaning on the framework, is a prime recipe for technical debt, not to mention opening the door for an awful lot of NIH.

Tailwind responds to that with an organising principle of styles refactored at the abstraction level of page components. It is not supplying an off-the-shelf design system for front-end novices a la bootstrap/material design. That is an excellent fit for a template-driven world, which is to say, most applications of scale. It is also an excellent fit for anyone (or any HTML generation language) that thinks of data as functional and anonymous. Naming things is hard, so the fewer things we're forced to name the better. My CSS has even improved from using Tailwind, not just thanks to the excellent docs but because it's been easy to experiment with alternative compositions.

To your specific inquiry - I've been maintaining several Tailwind frontends for a few years now, and it's been more reusable, more composable, and more maintainable that any of the hand-crafted CSS I might've written in the past, no matter how polished and proud I was of it.


> One way to enhance the usability of unique identifiers is by making them easily copyable.

No matter what your identifiers look like, if you want them to be easily copyable you should add `user-select: all` to the element containing them.

If you do this, all of the text will be selected automatically when you click on the element.

https://developer.mozilla.org/en-US/docs/Web/CSS/user-select


I have twice had the experience of meeting a professor who had done their PhD in the late 1980s/early 1990s on Dataflow and were lamenting having wasted their time since it turned out to be a dead end. I pointed out to them that the computer they are currently using has a hidden Dataflow machine inside of it - it just has a front end converting the x86 code stored in memory into the dataflow graph (reorder buffers, reservation stations and so on) before actually executing it.

Perhaps one day the "all advanced processors are really RISC inside" meme will get replaced with "all advanced processors are really dataflow inside".

Of course, there is the option to make the dataflow visible to the outside with the EDGE (explicit data graph execution) architecture (Microsoft even showed Windows running on one).


I'll throw out a VC's perspective on liquidation prefs:

1) I think 1x is very fair and meant to protect investors from bad company behavior. If you didn't have 1x preference, this would be an easy way for an unscrupulous founder to cash out: raise $X for 20% of the company, no liquidation preference. The next day, sell the company and its assets ($X in cash) for, say, 0.9x. If there's no liquidation preference, the VC gets back 0.18x and the founder gets 0.72x, even though all that the founder did was sell the VC's cash at a discount the day after getting it.

2) >1x liquidation preferences are sometimes the founder's fault and sometimes the VC's fault. Sometimes it's an investor exploiting a position of leverage just to be more extractive. That sucks. But other times it's a founder intentionally exchanging worse terms for a higher/vanity valuation.

For example, let's say a founder raised a round at $500m, then the company didn't do as well as hoped, and now realistically the company is worth $250m. The founder wants to raise more to try to regain momentum.

A VC comes and says "ok, company is worth $250m, how about I put in $50m at a $250m valuation?"

Founder says "you know, I really don't want a down round. I think it would hurt morale, upset previous investors, be bad press, etc. What would it take for you to invest at a $500m+ valuation like last time?"

VC thinks and says "ok, how about $500m valuation, 3x liquidation preference?"

The founder can now pick between a $250m and a 1x pref, or $500m and a 3x pref. Many will pick #1, but many others will pick #2.

It's a rational VC offer -- if the company is worth $250m but wants to raise at $500m, then a liquidation preference can bridge that gap. The solution is kind of elegant, IMHO. But it can also lead to situations like the one described in the article above where a company has a good exit that gets swallowed up by the liquidation preference.

3) generally both sides have good lawyers (esp. at later stages of funding), so the liquidation preference decision is likely made knowingly.

Related to #3, if you're fundraising, please work with a good lawyer. There are a few firms that handle most tech startup financings, and they will have a much better understanding of terms and term benchmarks than everyone else. Gunderson, Goodwin, Cooley, Wilson Sonsini, and Latham Watkins are the firms I tend to see over and over.


> Of course, designers may not like the way this looks and we want to create a great looking custom switch.

The general UI rule is use a switch when toggling has an immediate impact (similar to pressing a light switch) vs a checkbox when there's a submission step before it has an impact (similar to ticking a paper form then mailing it). See:

https://www.nngroup.com/articles/toggle-switch-guidelines/.

It made sense after learning this but I didn't find the difference that intuitive before. A lot of UIs get it wrong (e.g. switches in forms, checkboxes for settings that immediately change something) but it only bugs me now I know which one to use. It's not only for cosmetics though.


Andreas Fredriksson demonstrates exactly that in this video: https://vimeo.com/644068002

PHYSICIST: I offer you the following gamble. I toss a fair coin, and if it comes up heads I’ll add 50% to your current wealth; if it c—

ROSENCRANTZ: (interrupting) Do it.


This is an excellent article, and I enjoyed skimming it, as I am only faintly familiar with Blessed John Duns Scotus or his work. I've spent more time around the Dominicans, and so I adopted a Thomistic outlook and studied the Angelic Doctor more than the others.

This controversy that Blessed Duns participated in is only the tip of the iceberg. The Dominicans and Franciscans are contemporaries, both founded in the early 13th Century, and the Jesuits, though they came around 300 years later, joined in a very vigorous, sometimes brotherly, rivalry among the three.

The three orders often had debates regarding the doctrine of the Immaculate Conception, which was not defined as dogma until the 19th Century, and which is basically rejected by the Eastern Churches, unless you can reformulate it carefully in Greek.

They also had debates about missionary activity and the "Chinese Rites Controversy" was a huge factor in how East Asia would be evangelized, and how they would worship, and whether indigeneous peoples worldwide are able to contribute their faith practices to Roman Catholic liturgies at this late stage of development.

There's an old joke they have, which goes: "The Dominicans were founded to combat the Gnostic heresy of the Albigensians. The Jesuits were founded to combat the heresy of Protestantism. Who was more successful? Have you met any Albigensians lately?"


“75% chance of rain”:

1. It will definitely rain, on 75% of the relevant area.

2. It will definitely rain, for 75% of the relevant time period.

3. It will rain with an intensity of 75% of the maximum our instruments can measure.

4. Three out of four meteorologists think it will rain.

5. It will rain on 75% of the population.

6. It will rain on everyone, but 75% of the population forgot their umbrella.

7. It will rai

8. 25% chance of dry.

9. 25% chance of snow.

10. When you become trapped in a Groundhog Day-type loop and are forced to repeat today three more times, then a subsequent analysis will show that it rained on exactly three of the four total days. Probably.


Entrepreneurship is like one of those carnival games where you throw darts or something.

Middle class kids can afford one throw. Most miss. A few hit the target and get a small prize. A very few hit the center bullseye and get a bigger prize. Rags to riches! The American Dream lives on.

Rich kids can afford many throws. If they want to, they can try over and over and over again until they hit something and feel good about themselves. Some keep going until they hit the center bullseye, then they give speeches or write blog posts about "meritocracy" and the salutary effects of hard work.

Poor kids aren't visiting the carnival. They're the ones working it.


Reminds me of this good old rant from Peter Welch, Programming Sucks

    ...

    Every programmer occasionally, when nobody’s home, turns off the lights, pours a glass of scotch, puts on some light German electronica, and opens up a file on their computer. It’s a different file for every programmer. Sometimes they wrote it, sometimes they found it and knew they had to save it. They read over the lines, and weep at their beauty, then the tears turn bitter as they remember the rest of the files and the inevitable collapse of all that is good and true in the world.

    This file is Good Code. It has sensible and consistent names for functions and variables. It’s concise. It doesn’t do anything obviously stupid. It has never had to live in the wild, or answer to a sales team. It does exactly one, mundane, specific thing, and it does it well. It was written by a single person, and never touched by another. It reads like poetry written by someone over thirty.

    ... 
[ https://www.stilldrinking.org/programming-sucks ]

Slightly offtopic but anyone with a dark sense of humour would do well to check out Chris Morris's stuff - I get a feeling most younger Brits haven't heard of it. Day Today and Brass Eye, both still funny, are wonderful time capsules satirising Britain as it was thirty years ago.

But IMO his finest work was Blue Jam - the radio comedy not the TV incarnation, hour-long episodes of low-key music and surreal sketches. Absolutely brilliant even today. Archive.org has a copy at https://archive.org/details/chrismorris_bluejam. Best enjoyed late at night.

Trigger warning: basically everything. The BBC would never get away with broadcasting it now.


Very interesting essay. Reminds me of how Donald Knuth describes his job:

> Email is a wonderful thing for people whose role in life is to be on top of things. But not for me; my role is to be on the bottom of things. What I do takes long hours of studying and uninterruptible concentration. I try to learn certain areas of computer science exhaustively; then I try to digest that knowledge into a form that is accessible to people who don't have time for such study.

https://www-cs-faculty.stanford.edu/~knuth/email.html

It's an aspiration for how I want my career to go, though I haven't been very effective at moving in that direction.


:focus-within is a favourite of mine since it is one of the few CSS selectors where child element state is significant. Thus it is very nice for drop-downs. It also works with CSS transitions, so my pure CSS drop-downs have a 150ms easing in & out (tip: transition the visibility property, since display:none can't be delayed).

There is another, however. An element whose state depends on that of other elements, and it's even more general. A form element moves between :valid and :invalid based on its inputs, allowing us to use form:{in}valid with any of the descendant, child, sibling or adjacent combinators. A hidden required checkbox is sufficient. Radio inputs work too (tip: you can clear radios back to :invalid with an input type="reset").

The really, truly monstrous part of this, however, is that the associated input doesn't even have to be a child of the form. Using the form attribute (i.e., <input form="whatever">) means they can be anywhere on the page, and they can themselves be hidden and targeted from somewhere else on the page again, with a <label> element.

I once documented the horrifying potential of this in a company wiki, along with a lovely modal slideover that was wrapped in a <form> element and transitioned to visible based on form:valid via a hidden required radio button, and whose backdrop was a reset button, and this was rightly labelled NSFW and banned by popular acclaim from ever appearing in our HTML.


Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: