I can't even tell you how much I wish JS had better utilities for point-free programming.
I shouldn't have to
```js
.then(function (data) {
displayNotifs(data);
addReplyListeners();
})
```
I should be able to
```
.then(data => progn(displayNotifs.bindArgs(data), addReplyListeners));
```
or even
```
.then(prognPassArgToFirst.bindArgs(displayNotifs, addReplyListeners));
```
The weird thing about the GPL is that it can't guarantee you, as an end user, any rights. It guarantees that contributors that their
code contributions will not become part of closed source software. But if you're not taking contributions, then that doesn't matter.
(*I am not lawyer and this is not legal advice. My understanding of the GPL is imperfect, this is just what I've pieced together.*)
Okay let's run numbers. I think this is going to be most Thoughts for a season, since I was working at a computer for 8 hours a day.
Huh, only 619 for the season (plus this one and whatever I do in the next 3 days). Not a record. What was I on in winter 2021?
2022 - Fall: 619
2022 - Summer: 527
2022 - Spring: 456
2021 - Winter: 692
2021 - Fall: 386
2021 - Summer: 375
2021 - Spring: 317
2020 - Winter: 410
2020 - Fall: 584
We're up to 144k words across 4,366 Thoughts. Kinda fun.
People in IRC are just unfathomably based. It has the same short-character-limit problem as Twitter, but since there's no mechanism for
popularity on IRC it doesn't self-destruct in the same way.
Anyways: [on the topic of rapid software development pace] "you move faster when you go downhill"
I think one of the problems with moderation is that you always have people who legitimately think it’s okay to post X or Y or Z content. Who
just can’t read the room. People whose only experience with the internet is 4chan and waltz into your forum and you have to spell out your expectations for them. And that person looks like someone acting in bad faith, but they’re not necessarily.
Like if you’re the one that made the rules, the rules seem obvious to you. But it’s easy to underestimate the extent to which other people’s expectation of “reasonable” behavior differs.
Orwell is interesting because it’s not partisan in the traditional sense. But it is super individualist. The message of 1984, directly, is
that big government is bad. But the message is also that you can only trust yourself and everyone else has been ‘corrupted.’ And I don’t think it’s just that they’ve been corrupted by the government. I think it’s that they’ve been corrupted by not being you.
Sources are the scene where Winston talks to the older prole who says the current time is much better. And the gaslighting scenes in Animal Farm, where it’s not just the pigs, but the other animals, gaslighting.
Rigby is down again :(
I made a post just the other day, entitled “imagine escaping from the confines of this space”
If I remember correctly. I don’t have it backed up, keeps things interesting.
Rigby might not actually be down, it might be my internet. Got a 502 for a minute.
So Cohost doesn't allow you to use <style> elements, so you can't create keyframe animations, because you can't define `@keyframe` inline.
But inside an svg you can create a `style` tag, define a keyframe animation, and apply it to an element. Then you can base64 encode the svg and use it as a background image. Allowing you create looping animations in inline CSS. Woohoo.
After a couple of hours of hacking, I now have 'duplicate-line' working the way I want it to.
=> /?show=a6e6f170-4d9a-4a47-85ae-03d6b808801e
There was a second issue which I didn't notice at first: copying deselected (deactivated the mark, to use Emacs terminology). To fix both issues needs 50 lines of (ugly) elisp.
I'll share my config at some point.
You need some sort of proof of work system with gleaning built in.
> When you reap the harvest of your land, you shall not wholly reap the corners of your field, nor shall you gather the gleanings of your harvest. And you shall not glean your vineyard, nor shall you gather every grape of your vineyard; you shall leave them for the poor and the stranger: I am the Lord your God.
- Leviticus 19:9-10
Tea cli looks really interesting.
And I'm not opposed to bringing crypto or money into open source software.
But I'm reading the Tea whitepaper and a lot of the crypto side of things seems super hand-wavy and I'm imagining a lot of problems.
Not to mention they have 8 million in VC that they need to make up. I don't think they have any of the blockchain stuff done? I literally think they've gone as far as "we'll store the packages on a blockchain" and the whitepaper is like "we'll store the packages on a blockchain."
Yeah GUI Emacs is the way to go, this is pretty hype.
I've installed as a Homebrew cask. The main packages I have installed right now are use-package, ivy, and the Catppuccin theme.
It's just the little things that are going to drive me crazy until I can dive into Emacs and fix them. If you have a selection and press left, the cursor should end up at the left end of the selection, and if you press right, the cursor should end at the right side of the selection. Emacs, instead, moves the cursor one position right or left of the side of the selection in the direction of the selection. Which also makes sense, like it's clear what Emacs is doing if you think about it, but I don't think about it. My brain goes "duplicate line" and my fingers go *command-right command-shift-left command-c right enter command-v* in about 50ms. And then I have to replay it in slow motion to figure out what Emacs did wrong because the line has ended up inside of itself.
So I'm going down the emacs rabbit hole and it is so funny to me how many of the emacs people just use Vim keybindings. Like based.
> It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer—envious of the features of modern text editors—spirals into despair before he succumbs to the dark side.
- Doom Emacs Readme
(The text "dark side" is a link to the "evil" package for Emacs, which provides Vim keybindings.)
It's weird that I'm at the point in my life where I need to start closing off options.
Up until now, my options at any given moment have pretty much only increased. But the number of options is kind of overwhelming, so to start making efficient decisions, I need to make some decisions now and not worry about them later.
Re: lightweight editors. I think I need something that I can run in the terminal, in iTerm2, so that I can use it over SSH.
Counterpoint, you can use emacs client in a GUI over SSH (or so I understand).
I just don't trust any program except for iTerm2 to do any sort of terminal emulation.
hmmmm
Mac-emacs does a lot of very nice stuff, a lot of things that I say I want, like beautiful native menus, etc.
But I don't trust it in the way that I trust emacs and iTerm.
Hmm. I think we need to work on getting both working more or less in parallel because I don't have enough information right now. The things that are going to screw me up are absolutely small, dumb, things that aren't going to be documented or prioritized by anyone, so I really have to do my own evaluation.
I am now convinced Cybersmith is a troll. “Do these bones look hollow” *posts picture of the outside of bones*
No it’s not that they’re dumb, it’s that they have accounts on Twitter, Reddit, and Tumblr and continue to try to argue with people who are clearly making fun of them.
Edit: others on Reddit are convinced the original user was legit and the account was take over by a troll somehow in the last year.
I guess I should include a content warning: the post that made Cybersmith famous can be mentally scaring. Don’t seek it out if you value your sanity.
Sapling is so buggy this is incredible. It feels like using 1.0 software except that apparently this has been in use for 10 years inside
Facebook? And apparently no has tried to open the web interface in Firefox in that time?
Does Facebook give all of its employees a pre-configured laptop with identical software?
Edit: It's not a browser bug, it doesn't work in Chromium either. Based.
I'm very excited about Sapling. As much as I like git, I do think there's room for a more opinionated tool.
Unfortunately, as far as I understand, it is designed for a workflow built around 1-commit-per-pr. This is an established philosophy, see, https://git-ps.sh/, but it is not super common, compared to feature branches.
So it looks like Sapling can't make PRs with more than one commit. Which is a shame, because I wouldn't mind working locally with an absorb/amend/etc workflow. I already frequently rebase and amend my commits locally before creating a PR. But I would like to still be able to push up multiple commits for the sake of code history and review.
I guess that sounds weird when I say it.
But it also sounds really weird that Sapling doesn't let you put multiple commits into the same PR.
I don't know, I need to play around with it.
"Guess I don't understand that life, wonder why? 'Cause I'm all in 'til the day I die."
The song before this on the album ends with a sample of someone asking 'you've been going at this pace for a while, how much more you got in you?'
So many hype lyrics in this song
https://www.azlyrics.com/lyrics/tobymac/tilthedayidie.html
I really wish there was a way for components in React to expose read-only information about their state to their children.
This doesn't violate the "state flows down" but it isn't possible right now, without having the children be a function (which is a pattern that exists, but I don't love it).
Edit (12:43): this is contexts.
Maybe if you focus on "user experience" too much, you lose sight of the fact that the user isn't trying to have an experience, they're
trying to solve a problem.
If the software is a pair of scissors, it matters more to the user that the blades are sharp than that the handle is comfortable.
Being trapped inside of the GNU Info info-page would be torture. I'm reading it ironically and enjoying it but like. Ugghgh
I'm reading it out loud (a recording may be posted at some point), which is fun because the rhetoric is not bad. Like it's almost perfect English. Which is just another level on top of it doing a terrible job explaining things, and the fact that the things that it is trying to explain are so dumb.
"While you are typing the item name, you can use the DEL (or BACKSPACE) key to cancel one character at a time if you make a mistake."
(I had to restrain my self from laughing when I got to reading that line.)
I wonder if it was written in the 90s, or possibly even earlier? It's written with a sort of innocent attitude that you can describe software by describing the list of actions that you can take to interact with it. And it leaves it up to the reader to comprehend the implications of those actions, and at the same time, it doesn't attempt to build up a practical model of how to use the software.
"This all probably seems insultingly simple so far, but _please don’t_
start skimming. Things will get complicated soon enough"
I don't think I could write a better satirical help page if I tried.
=> https://www.gnu.org/software/emacs/manual/html_node/info/Help_002dP.html
If you're not following, this is the manual for the "info" program that runs inside of emacs that allows you to access emac's documentation and help pages.
"When you type the SPC, the two lines that were at the bottom of the screen appear at the top, followed by more lines. DEL or BACKSPACE takes the two lines from the top and moves them to the bottom, usually, but if there are not a full screen’s worth of lines above them they may not make it all the way to the bottom."
"From now on, you will encounter large nodes without warning, and will be expected to know how to use SPC and BACKSPACE to move around in them without being told."
Reading this makes me feel computer-illiterate. I can't.
The problem at this point is that I want a native-app experience, and emacs is not at all a native app. That's fine, I can work with that, but I have to decide what trade offs I want to make.
Emacs can either run in the terminal or as a GUI. The GUI view is super weird because it's just like a pop-up window with a terminal in it running emacs. But it's nice because it has native scroll bars (kind of) and native system popups (again, kind of), and, importantly, it can access the command key (which it calls super). And the intention is that if you want a GUI text editor, if you're not running emacs on a headless server, you're going to be using this GUI editor. All the support pages for emacs talking about getting the mouse working and getting command+c to copy (which actually works by default) are talking about the GUI editor.
Interlude, C-h C-h brings you to the help page for the help command, which directs you to C-h r for the emacs manual, which directs you to press h to open the help page for the info program, which is the program responsible for showing you the help pages, "Right now you are looking at one 'Node' of Information. A node contains text describing a specific topic at a specific level of detail." So we way off of the right side of the graph in https://xkcd.com/1343/
And I have stuff to do.
and yet your heavenly father feeds them
feeds them
and yet your heavenly father feeds them
feeds me
and yet your heavenly father feeds them
Look at the birds. They don’t plant or harvest or store food in barns, yet your heavenly Father feeds them. And aren’t you far more valuable to him than they are?
I don't support separating the art from the artist in general. But I think that should be a lens to view the art with. And it seems like
sometimes, especially recently, it's become common to use the fact that someone has made art (or is otherwise a public figure or celebrity) as an excuse to analyze them as a person.
Getting emotional thinking about the interview with POI-6897 on the SCP-3108 page.
> I'm sure he's a busy guy, wouldn't want to bother him, lol.
> Pierce, did you really just say the letters lol out loud?
SCP is about humanity's relationship with these unknown eldritch beings, but it's also about the authors: a group of young internet-users who didn't fit into the world. Kids who say "lol" out loud are as foreign to the SCP foundation as the unknown beings.
And SCP is about the contact between the foundation and these anomalies, but it's also about the contact between the foundation and these kids. (I've only read some SCPs, I don't follow the lore or anything, but there are a number of SCPs, not just 3108, that have been created by a group of internet users. It's not a main plotline or anything, but it's a theme.) The writers of SCP knew that their culture was different. And they also knew that the separation of their culture and the professional world was not indefinitely maintainable.
And to a large extent, they were right. The internet as a culture has had an impact on the world which is arguably more significant than the impact that the monsters have on the SCP world.
I can't quickly find a date for 3108 but I assume it was late '00s.
This topic fits in the same area of my brain as "The Hacker Manifesto"
Edit (8:08pm): looks like 3108 was written in 2017 and nothing I'm saying above holds true. 💀
Hey look an emoji on my Thoughts Learnerpages
You don't understand me until I'm comfortable enough with you that, when walking with you, I move as if I'm alone.
When I'm alone and I need to move from one place to another, I move like a character in a musical crossing the stage. You could call it running, or skipping, or dancing, but that none of those would be quite accurate.
There's something here.
Apple putting ads in default apps is absolutely disgusting and if they think that I won’t switch to Linux they’re wrong.
I think Jason Snell said it best when he said, ‘Apple products are supposed to be premium products. If I can imagine paying more money for an ad free experience, then what am I buying in the first place?’
And I do not like ads. The thing that I love about macOS and iOS is that there’s a great set of default apps. If I have to scour the App Store to buy a subscription to a weather app and a maps apps and a stocks app that don’t have ads, why am I using the platform in the first place?
And the crazy thing is that I have so much good will towards Apple. I have so much brand loyalty. My family has an Apple One subscription. I trust Apple to give me the best experience possible. I would still buy Apple products if they were 150% current prices. But for Apple to *intentionally, objectively, make the user experience worse* feels like a slap in the face.
I estimate that I passed 100 PRs on Github sometime recently.
I'm kind of surprised it's not more, considering I probably have 1,000s of commits, but I guess most of those are to projects that I have write access to and don't need to PR to. Like I have 267 commits to OurJSEditor and 19 PRs.
I think the finale of Dracula today serves as a good example of how Dracula is portrayed as a personification of evil, rather than as a
character, and how that really helps the portrayal of our protagonists. But at the same time it’s terrible for the portrayal of the Romani who are shown to be helping Dracula.
It’s hard to state as a general rule without it becoming a tautology, but there’s a really interesting relationship between the depth of the protagonist and the antagonist.
Working on a theory that Java’s type system is just bad and that other strictly typed languages are good.
Like I can’t stand Typescript but that’s because it’s just Java’s type system crudely bolted onto JavaScript.
The counter point is that I’ve written some Rust and that was pretty painful.
I don't think anything prompted this, just normal invasive thoughts.
I usually counter thoughts like this with "too bad I'm amazing" but in like a mean way. Doesn't help me make friends.
Oh frick shoot, I remembered why I wasn't using Micro :(
No JSX highlighting.
JSX highlighting is very important to me since I write JSX, but even more importantly, it's a litmus test for "do you actually have syntax highlighting as a feature or did you just get syntax highlighting working for a couple of languages."
And micro has a regular-expression based syntax highlighting system that works as a proof of concept but is very immature.
Learning Toki Pona vocabulary is annoying because all the words are so similar. I understand the desire to keep the phonology limited. But
why not make some of the words longer? I can’t remember ilo because I keep confusing it with ijo. Why not make one of them ilokupa or something?
I’ve never been great with languages or rote memorization. Toki Pona’s 140 words is better than some things but is still difficult.
One of the things that makes teaching math difficult is that Math fundamentally relies on formal-logic-proofs to derive truth but math
teachers often don't understand all of the underlying rigorous logic. So when students ask a question, the teacher can try to answer off of their own intuition, and can try to convey that intuition, but that isn't the real answer. The authoritative answer is step 16 of Gauss's proof of whatever.
But it's much more practical to try to teach the intuition of math of than the formal logic of math.
The "list of common misconceptions" Wikipedia page is dumb because it equivocates not using scientifically accurate language with a
misconception.
'Um, akually, the clade dinosouwa includes biwds which awe still alive today.'
The word dinosaur has an accepted meaning in vernacular English and it does not refer to birds.
'Um, akually, there is gwavity in space'
Yeah and it's operating on a distance-scale that causes it behave fundamentally differently from my day-to-day experience.
Like at some point 'gravity doesn't actually pull things down, it actually pulls them towards the center of the earth, there is no down in space' but wait 'actually, the center of the earth is just a helpful conception, actually gravity from every atom pulls on every other atom, and it happens the average of those forces pulls you towards what we call Earth' 'well aktually, gravity isn't a force at all but an effect that causes the bending of space time '
Like
Congrats, you've passed "pedantic" into "unable to understand the concept of language."
Edit: May 6 2023:
The article has been edited to clarify the zero-G misconception. It now says, "Astronauts in space are weightless because they are in free fall, not because they are so far away from the Earth that its gravitational pull is negligible." I have no complaints with this wording.
It still includes the sentence, "Objects orbiting in space would not remain in orbit if not for the gravitational force," which still makes it sounds like the misconception is that 'there is no gravity in space.' I think this sentence clarifies nothing and does not need to be included.
People are like, 'no one uses functional programming in the real world' except for Jane Street, who also happens to be one of the most
successful high-frequency trading firms. They traded 10% of the entire ETF market in 2020. Like what the hell. Dream job right there.
Edit (1:37): Jane Street is technically a HFT firm—they don't "invest" per-se, rather quickly buying and selling to take advantage of market imperfections.
I feel like there's something really profound to be said about the generation/group of people who grew up on Discord and continue to use it
today (including me). But I don't know what that is. I think it might be something about being able to define a culturally specific or private space within the broader internet.
I think that feeling is what I was trying to capture with my conception of the Linoleum Club.
The emacs daemon is using 66% CPU. I don't have any emacs clients open, what is it doing?
Nothing notable in the *Messages* buffer and no files open :thinking:
`M-x server-mode` closes the current frame but doesn't seem to stop the daemon like it's supposed to.
I wish I had time to debug this but I'm just going to kill it.
It's possible server-mode is stopping it and it's being managed by launchctl (via brew services) and it's being auto-restarted.
One of the reasons I’m not very motivated to do write poetry is that I don’t think my emotions or experiences are universal. I’m not under
any delusions that I could write poetry to describe my emotions or that if I did, you would want to read it.
On the other hand, I think that my conception of how software should be designed is universal and that’s one of the reasons why I’m motivated to write software.
The Safari feature "Siri Suggested Websites" where it suggest pages you might want to visit *above* search predictions when you're typing in
the address bar is spectacular. I do not understand why other browsers don't do that. I almost suspect it is because they are reliant on money from search engines.
My complaint in particular, I guess, is that switching from a full screen app A to app B, where B has multiple open windows, will prioritize an app-B window on a second monitor over the previously-focused app-B window. For example, I'll have firefox dev tools in a pop-out window on a second monitor with Slack. Looking at Slack and pressing cmd+tab will show the Firefox dev tool window, instead of focusing Firefox on the main monitor. Similarly, if I have my main terminal and Firefox on my laptop screen, both full-screen, I want cmd+tab to switch between them. Instead, cmd+tab switches to the secondary terminal open on my secondary monitor that I haven't touched in minutes.
There are lots of other ways to fix the underlying issues (workspaces? virtual desktops? a better algorithm for selecting windows when switching to an app) but allowing me the control to select exactly the window I want to see helps.
1. All actions have some good and some bad
2. God is good and good is God
3. Heaven's standard is not "good enough," it's perfection (God is a God of justice and this is just)
4. God loves you despite of, and not because of, your actions
5. If you accept Jesus's sacrifice, you are accepted into heaven on his merit, and not your own
I've been working on what I think is a novel explanation of sin and the problem of pain. The problem is that, while it is novel to me, I'm
sure it's not novel in the history of theology. So it's possible it's blasphemous. It's also possible that this is what every pastor has been trying to explain to me and they just haven't been able to do it in a way that I understand.
The basic idea is that every action have a percent that it is good, and a percent that it is bad (sinful). No action is purely good or bad.
Then you calculate (in theory of course), the percent good/bad that someone is by averaging their actions. Then if you're 100% good, if every action you've ever taken is 100% good, then you are perfect and can be admitted to heaven.
What this fails to capture is the inherit meaninglessness of sin. There's an interesting paradox there in Christianity, where sin is both meaningless and powerless and insubstantial, and yet even a small amount of sin can corrupt the whole.
But that fits, too. Anything that has a small percentage of bad in it is meaningless, is worth nothing, and as soon as you hit 100% good, then suddenly that thing becomes infinity good.
emacs (spacemacs in emacs mode) is more keystrokes than Vim, but arguably more intuitive.
Delete everything in the current file and save and close:
Normal mac editor: cmd+a, delete, cmd+s, cmd+w
Spacemacs in emacs mode: escape m b e y C-x C-c y
Vim: g g d G Z Z
Vim is so nice because it composes, g is start of file, G is end of file, d is delete, so d G is delete to end of file. Spacemacs achieves its goal of being discoverable, escape m is the general-purpose leader, then b for buffer, and e for erase, then just confirm and close and save. But it's more keystrokes and isn't necessarily nicer.
Really what I want is to be able to issue the mac keyboard shortcuts and have that work in a terminal editor. That is and always has been the goal. I have to get comfortable not using emacs, but modding emacs.
The main reason I'm doing NaNo is just to practice writing. I don't want my grasp on the English language to slip. If I get a novel out of
it, cool, but I kind of suspect I won't.
The cool kids just call it NaNo these days.
I'm also not like signed up for it or anything, I'm just chilling.
I don't get why my writing is so concise. I get through what feels like a chapter's worth of plot points in 2 pages.
I'm going to run with it, because reading it back it doesn't feel abbreviated, and there are a lot of chapters to go. But I suspect that I'm not describing nearly enough. Like "dodged past some cars" is enough to evoke the entire scene for me, since the worldbuilding exists in my head, but I think that actually needs to be a paragraph describing the width of the street, the number of cars on the road, the design of the cars (since we're not on Earth), etc. And similarly, "an inconspicuous, almost invisible, door in the building on his left" is enough for me, but we should probably describe the street again, the building itself (residential vs. commercial area), and how the character feels (is he tired, is he scared). But I don't know.
The Vite and Turbopack people are fighting over whether it takes 10ms or 100ms to do HMR. At work we're using webpack and it takes 10,000ms
to do a partial recompilation, at which point the HMR fails because webpack is misconfigured, and you have to reload the page anyways (which takes another couple of seconds).
I absolutely love how terminal/shell users convince themselves that the shell is better than GUIs.
I'm not even saying that it's not, but they make it sound like the terminal was invented more recently than GUIs as a way to address the failures of graphical interfaces. Which is like objectively not true.
> In very complex and specific situations, the request becomes too difficult to express using a mouse or pointing device. It is just these kinds of requests that are easily solved using a command shell.
> For example, what if you want to list every Word file on your hard drive, larger than 100 kilobytes in size, and which hasn’t been looked at in over six months? That is a good candidate list for deletion, when you go to clean up your hard drive. But have you ever tried asking your computer for such a list? There is no way to do it! At least, not without using a command shell.
Oh really?
It is unclear to me whether this code is intentionally setting `stroke: transparent` as a way to decrease the font-weight or if they are
trying to not set a stroke and this is a bug. I am going insane. Share to instant-KO a typographer. They're outlining the letters in the same color as the background, in CSS, in order to decrease the font-weight.
I'm not a lawyer, but I think the "notice of modification" clause (5.a) of the GPLv3 can be met by distributing the repository with
a git repository showing history. On the other hand, the corresponding clause of the GPLv2 (2.a) and Apache 2 (4.b), requires you to "cause the/any modified files to carry prominent notices," which I interpret as meaning that you have to include that notice in a comment at the top of every file itself.
Follow up to
=> /?show=b0ef6053-3937-4e70-8bfb-2d6a9ee6af3e The halting problem and supernatural numbers
I think the halting problem is still undecidable for all finite-length programs, even with an infinitely long tester-function.
No wait shoot. If you have an infinitely long program then you can enumerate all finite length programs as string keys in a hash map inside of it. So then the question is whether or not, for any given finite length program, you can encode an algorithm for whether it halts for any input. But I think theoretically that's possible. I think super-natural programs (infinitely long programs) have an expressive power greater than turning completeness. And you can't create the halt-ing problem paradox by passing our tester-program to itself, because it only claims to know things about finite length programs.
If you're reading this and are confused, this isn't like a super niche area of computer science or anything, I'm just making stuff up. Like I don't think these are the technical terms.
The reason why people don't like answering my questions* is because most of the time when I'm confused it's because something that someone
has told me is wrong and I'm normally asking the person that I think told me the incorrect thing.
*I don't think I have any evidence that people don't like answering my questions I just have anxiety.
The radically cultural liberal ideology is so inherently self-contradictory that it forces adherents to develop critical thinking skills and
nuanced views.
Edit: Reverse Occam's razor: The side that is more convoluted is better able to satisfactorily account for edge cases.
Matthias's Blade: The side that is obviously wrong is more accustomed to being challenged on their beliefs, and develops a sophisticated ability to reply to those challenges.
I'm kind of trolling with the premise here.
I’ve been thinking about meta-novelty. Do consistent sources of novelty dry up as they become predictable? Like at some point I recognize
broader patterns and the novelty within a given post/book is reduced. Or is it?
Do I have a novelty addiction or a meta-novelty addiction?
A lot of people, especially older people, aren’t interested in meta-novelty. Will I always be?
For concrete examples, /r/Askreddit is dreadfully boring to me today. It didn’t use to be, in 2015 I could read askreddit for hours. Now it’s possible the quality of the sub has declined. (I think I’ve noticed a decrease in the word-count of popular answers.) But there’s also an extent to which every AskReddit title and answer follows a predictable formula. There are still new AskReddit posts being made, there’s novelty. But they follow the same formula they did 7 years ago. There’s no meta-novelty.
On the other hand, I’ve been reading children’s fantasy novels for as long as I can remember, and they’re still good. It’s a relatively narrow genre, but I still can’t pick up patterns or predict what’s going to happen. Now there’s obviously more depth (and more words and information) in those books. But the question is, at some point do I figure out what the formula for children’s books is, and get bored of all of them? Or am I reading children’s fantasy as a 60 year old? (There are people who absolutely do.)
Geminispace ran out of meta-novelty for me extremely quickly. Which is a shame, because the individual posts are interesting and new, and about things that I’ve never heard before. But the formula, very predictably, is journal-style posts about things the author’s niche interests.
What about this website? Will the thoughts posted here eventually fall into a predictable tone and formula? Is that a bad thing?
What about the thoughts in my head? What if I tread all pathways for new thought in my brain at some point, and end up applying the same formulaic critical thinking process to everything? Are we already there?
It's difficult to describe the number of projects I have running at once right now if you're not in my head.
* NaNoWriMo prep
* Ideas for MatthiasPortzel.com
* Spancakes
* Update nodejs for Alex
* Rewatch
* Write something up for mod_md
* Modern Minimalist
Hm like 4 of those are long-form writing.
The problem with trying to make things intuitive is that there are a lot of things that seem intuitive until you think about them.
My example is Django auto-trimming text from text fields from the client. If you don't think about it, it seems natural. If you typo a space at the end of your name, and then you check database and there's no space, you're like "yes, exactly right." But if I tell you 'Django strips white-space from the start and end,' that feels unintuitive, at least to me. Why is the default behavior saving something different from what I type?
Along similar lines, if I go to reach for something and it teleports in front of my hand, that would be intuitive, in that I want it to happen, but it's also very unintuitive in that it violates my understanding of how the universe works. That's a contrived real-life example, but it makes more sense in the realm of software. Is a button that does different things depending on the context intuitive or unintuitive?
I have a theory that Arch Linux is only good because you have to set it up. Like any computer is good after you set it up, it's just that
an Arch Linux install isn't usable until after it's been set up. Whereas, you can go years without setting up a Mac, and just rely on default behavior.
I'm a rule-following person, right. I like rules and structure. That's part of why I'm a programmer in the first place. Why, then, do I care
so much about run-time flexibility in programming languages? I can't stand strictly-type or type-checked languages. And the answer is that the only thing that I hate more than a lack of rules, is conflicting rules. And a compiler, to me, feels like an extra set of rules that sometimes conflicts with the runtime rules of a program.
~starbreaker does the worldbuilding around CPMD so fricking well, like it's occasionally plot relevant but mostly blends into the background
except to make certain characters more interesting. And then it's completely undermined by the fact that they're just fricking catboys and catgirls and the image in my head is either anime, furries, or the *Cats* CGI.
CPMD: congenital pseudofeline morphological disorder
I am back to sitting on the floor. I looked at Jupiter, which is very far away. If my trigonometry was better I would have a more insightful
comment here about how it is cool that my eyes can focus on Jupiter, which is nearly infinitely far away (relative to the distance between my eyes). I suspect that this is a significant or at least meaningful trigonometric observation.
I wondered if the fact that Jupiter is in the southern part of the sky implies that the South Pole is closer to Jupiter than the North Pole. Although if Jupiter were equidistant from the two poles (which it approximately is, since the Earth and everything is in the same plane), then it may appear in the Southern Hemisphere of the Sky as a result of me being in the Northern Hemisphere.
I wonder if the person that told me that was Jupiter the other night is correct?
My head hurts.
I wish I could say that is abnormal.
I suspect the culprit is having my eyes focused on the screen a few feet in front of me. BobbiBroccoli and Nintendo recommend taking breaks to focus your eyes on objects far away. One of my favorite parts of [redacted] was looking for other people on the horizon, sometimes hundreds of yards away. I might go outside in order to look far away for a minute.
happy butterflies.
yellow submarine
apple pie
sheep
baaroogah
yes
liminal catastrophe
microphone eater
subnautica
hurancha
ba
doe deer
pier
fear tear we're lear mere
acrobat
I hate Twitter and Reddit outside of my bubble because the negatively bias is just so obvious. Like it's just 'watch this video of
someone getting shot.' 'Child is brutally murdered' 'Our son died today'
Like these things are awful and have a huge impact on the community that they're in. But all the algorithms (and human-run media compaines) see that big impact and assume the news is worth sharing outside of the original community. Which numbs me to it, and at some point lessens the impact when there is tragedy that's actually within my community.
I don't like plot devices (things that effect the plot) without effecting the conflict. In my opinion, describing the plot also implies
describing the conflict and its eventual resolution. But sometimes you end up with what I'm calling "horizontal plot," where you have plot elements that effect the character and effect the story, but don't effect the conflict.
You can tell people on the internet “you need to consume nuanced content and exercise your own critical thinking skills instead of only
reading stuff that you already agree with” and what they hear is “I need to think critically about whether the character in the book is a good person or a bad person and then decide whether the author is a good person or a bad person.”
This is still about the Harry Potter thread from a couple of days ago, but also about some other bad takes.
=> https://thoughts.learnerpages.com/?show=e8d0ddc5-8359-4ad6-bcab-feac7898b4f0
The great minds of Hacker News commenters on why Safari sucks:
“Ahhh, that's the version number. I thought that's how % of the spec that they actually supported.”
Safari only supports 15% of the web, and Chrome supports 106% of the web. You gotta give it to Chrome on this one, folks.
How will we ever find a system expressive enough to communicate the complex nuances of individual gender?
Don’t worry, the HTTP content negation protocol is more than complicated enough.
Accept-Pronouns: he/him,*/*;q=0.28
This accept pronoun header for me is different from last time I made this joke because I reread the spec and I think this is more accurate. I was under the mistaken (but reasonable) assumption that the q values were percentages that should add to 100, but they aren’t. Also, in this example, I left out q for he/him so it’s assumed to be 1.
The counter-argument to the "there is no speed limit" philosphy is that you should go slow and think about what you're doing, in order to
make sure that you're doing what you want to do; that you're solving the right problem. But like. You can always pivot as soon as you realize you're solving the wrong problem (don't apply the sunk cost fallacy). And a lot of the times the faster you go the sooner you realize that you're solving the wrong problem.
This desire to go slow and avoid mistakes a lot of the time can come out of a desire to avoid mistakes. That is to say, people who like to avoid mistakes tend to overstate the negative impact of mistakes, in a sort of re-enforcement-bias-loop. (Where as other people who like to go fast and make mistakes, shrug off the mistakes a lot quicker.)
Cars haven't radically changed in the last 100 years. They have four wheels, a windshield, a steering wheel, an ICE, etc.
We've changed the shape of the body and some of the underlying technology. Power steering, automatic transmission, etc, but these were improvements to the existing thing, nothing radically different. And moreover, we haven't had another radical innovation in the transportation field. Sure, some people commute on one-wheels or motorcycles or roller blades. But the majority of people today have a car that would be instantly understandable to someone from 1910 who drove a model T.
So the question is, was Henry Ford or whoever invented the modern family-automobile a super-genius who got it right the first time? Is there not a better input mechanism than the steering wheel?
No. Ford jumped us to a new area, and we've been iterating on cars since then. We're still looking for the local-maximum of all things that look like Ford's car. We haven't jumped again, but that's because jumping is hard. Inventing something radically new is hard.
The thing that makes this interesting to me is that there's a certain extent to which there exists a car design, call it car-prime. And Car-prime was invented by Ford in 1908 instead of the model T in a parallel universe. And Car-prime looks different from our cars in a way that is radical, but not significant. Maybe it has 3 wheels, or the engine in the back, or is one-person wide, or has a joy-stick instead of a steering wheel. And let's say it's technically, objectively better than a normal car in some small way.
But if you invented Car-prime today, it wouldn't take off. You wouldn't be able to convince people to use it. It's better, but it's not radically better, so you can't overcome it's radical differences. And this isn't just about "people don't like things that are different." If it was half as wide, or didn't run on gas, or whatever, it wouldn't make sense to switch because we have years of infrastructure established surrounding our version of a car.
This is about the web.
Trying to be less hypocritical and actually share my code where I can. This is a small project and I don't think anyone will use it. It's just about the principal of it. Also about padding out my TildeGit page.
We haven't talked
in quite some time.
I know
I haven't
been
the best
of sons.
Hello I've been traveling in the deserts of my mind.
And I
haven't found a drop
of life."
I actually kind of love how Slack has "calls" and "huddles" which are basically the same thing. Sometimes I want to huddle with someone and
sometimes I want to call them and those very different vibes. They deserve to have different icons and be called different things. Even though both of them are actually just a voice call.
I disagree with a lot of the criticism of Harry Potter because it's being used as test for whether you're a good person. I'm not opposed to
thinking critically about the book and analyzing its impacts and effects. But that's not what's happening. People are analyzing it to determine whether its a good book or a bad book, whether the characters in it are good or bad, and whether the author is good or bad, and whether the fans are good or bad. One commenter argued, 'most of the characters support the slavery of House Elves, therefore Rowling supports slavery and any fans of the book support slavery.' But with the House Elf question, Rowling has created moral nuance. She's introduced a question into the world building of the book that doesn't have a right or a wrong answer. The book doesn't make a judgement on the treatment of House Elves and it doesn't tell you what to believe about slavery in real life. You're supposed to think critically about the issue. You're supposed to see analogues between certain parts of the issue and certain aspects of real-world issues. But you're not supposed to "solve" the moral issue and then assume that anyone that disagrees with you about the treatment of House Elves is transphobic in real life.
This is about a Tumblr post arguing 'it's fine if you liked Harry Potter as a kid, just as long as you now recognize it's garbage.' I liked Harry Potter as a kid and if I read it today I would still like it. It hasn't changed as a book.
I'm not even a moral-relativist; I believe in absolute right and wrong; I just don't think a children's novel is either.
Another installment of myself live-Thought-posting my way through developing a versatile set of best-practices for React state management.
Buried way in this random page is a helpful hint:
=> https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key
If you pass a different `key` prop, React will re-create (rather than just re-render) the child component. This could be used in the resetable button challenge. The parent merely changes the `key` prop of the child Button, which implicitly resets the state of the child. In a lot of places, this is more idiomatic than an effect on the child that resets.
The obvious problem is that if the child component has more than a single state property or has other hooks or state values, changing `key` will wipe *all of them.*
If you start learning things at 8 years old, let’s say. Like, I think around that age your brain is close to
functioning like an adult. (I recognize that assumption is controversial, but that’s not the point of this Thought.) Then let’s say 8 years later you’re 16, you’ve learned an immense amount of information. You feel like you know just about everything there is to know. But someone who has lived another 8 years, someone who is 24, knows so much more. In absolute terms, it’s not wrong to say they know twice as much as you.
The 16 year old has an outline, but the 24 year old has filled in more of the details.
I this partially explains why the 16 year old wants respect from the 24 year old, and the 24 year old doesn’t want to give it to them. And of course this effect is greatly magnified with increased age gaps.
Obsessed with the HackerNews commenter who replied to my "we should fix bugs in software" comment with 'no. my job as a manager is to
make sure that my engineers don't go down rabbit holes chasing bugs that they might not even be able to fix. We need more engineers who ship features quickly'
I mean it's basic business sense. Why would you spend time and money fixing bugs when you could be making more software to sell. The user only encounters the bugs after they've paid. Why sell 1 piece of software that works when you could sell 5 pieces of software that are buggy as hell.
I'm going to become a fricking communist because I want software that fricking works all the time.
Maybe this is just a me-thing since I learned on Django, but I really expected an integrated view-model-controller story from a web
framework. Maybe I'm just missing it. Astro.build, Fresh.deno.dev, Remix.run, Next.js all look cool for the frontend, but they don't try to do models or user-authentication or hardly anything on the backend. If I'm writing a CRUD application with Next.js, like how? And this is more generally just directed at Jamstack apps. If I'm deploying to the edge, where's my database.
I've just never done it before, I can't picture it, you know.
(Side note, I absolutely love Dark because it's serverless but it has a beautifully integrated, first party, ORM feature. You just create an object it persists pretty much automatically.)
I guess you just use a separate ORM library and web framework and it's fine. And you have a database with a different host then your edge-functions. And it shouldn't actually be any more code
Still doesn't answer the question of whether you're writing your own user-authentication. But you can find a third or fourth library for that.
The problem is that humans will push until we hit a limit. I complain about Vivaldi lagging with 100 tabs open so I switch to Safari. Well
I have 56 tabs open in Safari right now (in different tab groups so I can manage them). And you know what, I'm going to keep opening tabs until Safari starts lagging.
I think I finally kind of get the philosophy behind "move fast and break things." I think in order to do it well you have to have
"zero-friction bug-fixes."
I guess what I'm imaging is a tangentially related idea that I'm going to call "zero friction bug fixes, low friction development." And the idea goes, "how do we ship software with less bugs?" Well, a lot of people do test-driven development or they push for better CI testing or integration testing or use a strictly typed language. But those things add friction to the development process, and they're not perfect. You're still going to have bugs. So at think at some point you have to optimize for fixing things. This is the fail-fast model. Just swallow your pride and fix the issue as quickly as possible.
I'm coming to terms with the fact that it's impossible to make perfect software. Your users, as an arbitrary-complex analog conglomerate, have a set of needs and desires that are impossible to meet.
Somehow I didn't notice it before but the font-rendering in Lapse on my retina screen is *wrong* somehow.
Man that was infuriating. It took me a couple of tries zoom in and out but I figured it out. Lapce is doing sub-pixel anti-aliasing, which is generally considered a no-no on retina screens. MacOS doesn't do it, WebKit (and therefore Blink and therefore all Electron apps) don't do it.
Spark (email client) released a new version. It's an electron rewrite, removes the dark theme, removes the option to open a side panel
forcing a mobile-like experience on Mac, is focused on a "smart inbox" that sorts your mail for you, and moves to a subscription model. It's like everything not to do, all at once. They all added a "sent from spark" to the footer of all your emails, but apparently that was a bug.
It doesn't even look that bad; like I don't think the company is trying to screw over users, I just think it was designed by managers and never actually used.
To clarify: I don't think managers are inherently bad at designing products or anything. But when making software, you have to have iteration cycles. You have to describe a feature, build it, then test it to see how it actually works, and tweak it. Products designed by developers are often easier to use because that cycle can be very quick. (On the other hand, they're often impossible to figure out how to use.) The Spark update sounds like some one white-boarded it, the developers implemented it according to the whiteboard diagram, and then it was shipped, with no UAT (user-acceptance testing).
Fleet just dropped.
I've played around with it for a little bit.
My expectations were very high; I think I knew I was being unreasonable. It's still beta software, they still have a long way to go.
The customizability that I expect isn't there. There are a couple of settings that I like, that are non-standard, like showing white-space characters. Fleet has a setting to show tabs, but not spaces, which is weird. There's no way to remap keys (at least not in the GUI), so while the defaults in Fleet are very reasonable, there are a couple of keyboard shortcuts that I'm missing. It auto-saves files by default, which I am not a fan of. And the setting to turn it off is per-project (or per-file for files not in a project).
I'm trying to edit this file which is indented with 2 spaces, and it's struggling. It's just not a polished experience yet. (It doesn't have a per-file setting for indent size, it's definitely not detecting indent size, and I've changed the global setting and restarted the editor and it's still trying to indent with 4 spaces. Probably just early-day bugs.)
It's in a really weird position where it is very clearly trying to compete with VS Code. They styled the scrollbar to look exactly like VS Code's scrollbar. Which isn't bad, but it's very obvious what they're trying to do.
While it's open, it feels much more responsible and lightweight than RubyMine, so that's good.
The syntax highlighting seems less vibrant than Vim or VSCode (sorry, I'm actually using Neovim and VSCodium, but same idea). But that's not really a fair criticism since I'm using third-party themes in both of those editors.
Okay so one thing that I'm very happy about is that in promo material they had a very small list of supported languages. I was worried it wouldn't support syntax highlighting other languages at all, but it does. The short-list is for languages that support "smart mode," which I don't really care about.
Or rather, I do use RubyMine when I want jump-to-declaration for Ruby, or the ability to debug and set breakpoints. I didn't expect Fleet to compete with that IDE experience. I want a lightweight editor that I can use to replace vim for quickly editing single files (for example, editing my .zshrc). I had hoped Fleet would work for that. It falls short there in two areas: ability to customize the core editing experience (keyboard shortcuts, syntax themes, indentation, showing whitespace), and the fact that it takes 4 fricking seconds to cold open. `vim ~/.zshrc` takes like 200ms and `fleet ~/.zshrc` takes 4,000ms, and up. Lightweight editor my left
Oh my word I miss Xi so much
OH! A proxy is when the server is listening for all of your requests and proxies them through; a reverse proxy is when a server is listening
for all of another server's requests.
This always confused me because,
Proxy:
```
User ──► Proxy Server ──► Actual server
```
Reverse Proxy:
```
User ──► Proxy Server ──► Actual server
```
It sounds like the "reverse proxy" is proxying from the server to the user, but that's not the case. The user always starts the request
The difference is:
Reverse Proxy
```
User ──┐
│
User ──┼────► Proxy Server ──► Actual server
│
User ──┘
```
Proxy
```
┌─► Server
│
User ──►Proxy Server├─► Server
│
└─► Server
```
If you want to see the diagrams well (since I know I don't support markdown on here), try a gemini client.
I wish there was a nice way to express "there exists an object such that y is true, and that object also has x true"
Let's say y is a database property and x is something that needs to be calculated. Solving this at a database level isn't super interesting, but solving it at a language level is.
I guess what I'm describing is literally just `?.` in JS and `&.` in Ruby.
`ObjectSearcher.get(id: 5)?.isCool()`. Without that though (e.g. ES5 JS), you need to do:
```js
var obj = ObjectSearcher.get(5);
if (obj) {
return obj.isCool();
}else {
return false;
}
```
`ObjectSearcher.get(5) && ObjectSearcher.get(5).isCool()` works of course, but runs the search twice, which is not ideal.
With the walrus operator in Python it looks like
`(obj := ObjectSearcher.get(5)) && obj.isCool()`. Not awful.
What if you need to invert `isCool`? (`(obj := ObjectSearcher.get(5)) && not obj.isCool()` in Python.) In think in JS you're back to having an imperative `if`, if you don't want to define a variable. The only think that I don't like about defining a variable in an expression is that it is then available later, and evaluating expressions shouldn't have side effects.
You know what this calls for, right? Actual optionals. Unfortunately I don't remember how Haskell Monads or Rust optionals work off the top of my head, so if you'll pardon the pseudocode,
```
ObjectSearcher.get(5).some(obj => !obj.isCool()).none(_ => false)
```
The thing about sexism in historical works is that it's so different from sexism today. It's still sexism in that the gender roles
historically were not good. But the historical gender roles are very different from what they are today. You can draw parallels, certainly, but it's a mistake to equivocate them.
"You must not shrink. You are nearest and dearest and all the world to me; our souls are knit into one, for all life and all time. Think, dear, that there have been times when brave men have killed their wives and their womenkind, to keep them from falling into the hands of the enemy. Their hands did not falter any the more because those that they loved implored them to slay them. It is men's duty towards those whom they love, in such times of sore trial! And oh, my dear, if it is to be that I must meet death at any hand, let it be at the hand of him that loves me best."
- Dracula (Mina imploring her husband to kill her before she turns into a vampire)
So, uh, which one of you is the one responsible for killing the other in times of sore trial?
I'm self-diagnosing with ADHD.
Which is dumb because I very clearly do not have ADHD.
I don't know what ADHD is. I sometimes, like now, enjoy a little bit of chaos. I like doing multiple things at once, and switching between them rapidly. I rely on habits and rules to avoid executive disfunction. I'm indecisive. I'm capable of relaxing but sometimes I don't want to.
I think I previously posted something about my idea that online communication requires a totally different set of social rules than
in-person. To give an example of that; I can DM someone on slack with a direct question, and a polite amount of time for them to wait until replying is like over a day, if they reply at all. Whereas if I walk over to someone's desk and look at them, not saying anything, the polite amount of time before they stop what they're doing and look at me is about 5 seconds.
This is a dumb thought. I have proven that talking to someone in person is *different* from DMing them on Slack.
Just used control+shift+e for the first time. I fricking love this.
For a tiny bit of context, macOS implements some emacs text manipulation shortcuts in their native text entry fields. (control+a to jump to the beginning of the current paragraph, control+e to jump to the end of the paragraph, control+t to transpose the characters on either side of the cursor, etc.) I just tried control+shift+e to select to the end of the current paragraph and it worked and I'm surprised.
You know what I think I want is
```
Array.prototype.filter = (function () {
const oldFilter = Array.prototype.filter;
return function (f, ...args) {
return oldFilter.bind(this)(f ? f : v => !!v, ...args);
}
})();
```
Filtering for truthyness is a common operation when doing functional programming stuff. In JS I normally do it like `[1, false, 2].filter(v => !!v)`. (The `!!` is of course optional but I think it improves readability over the identity.) Ruby has a function for this called `.compact`, but I don't love that. I've been thinking about names and I just can't come up with something better. `.dropFasly()`, `.filterTruthy()`, `.removeUndefined()`, `.true()`? But honestly I think having it be a default behavior for `.filter()` makes a lot of sense.
Although `Array.prototype.extant = function () { return this.filter(v => v !== undefined && v !== null) };` would be pretty nice.
Do something
do something that's never been done before
never done before
do something that's never been done
do something before
do
something that's never been done before
never been done before never before something that's been done
do something
do something that's never been done before
I took me forever to find this again, I couldn't remember the name of the fake language, and it's actually a section inside a longer article.
=> http://paulgraham.com/avg.html
I have three takeaways.
First, I absolutely agree that people tend to think in the language that they're most comfortable in. I took a class that used a Lisp, and on the final I wrote a program in a functional style in JavaScript (like on the paper). And then I translated the Javascript syntax into Lisp syntax. People have a hard time understanding concepts from languages that they're not comfortable with. I make an effort now, when I read about a feature in a new language, to think past my knee-jerk reaction. Because most of the time my initial reaction is just "how closely can I map this feature onto a JS feature." I agree that the language you use does matter. I'm glad JS is the language I first learned because it's pretty powerful. It also makes me think that the language you first learn is more significant than people think.
Second, I think Graham understates the importance of a library ecosystem. He doesn't even mention it. This was written in 2001, so maybe libraries just weren't as important then. Maybe you could get away with rolling your own wrapper layers. But like I posted a thought the other night that Django isn't giving me as much support as I want and I feel like I'm writing hundreds of lines of boilerplate to handle user registration. I haven't checked out the CL ecosystem scene but it's hard to imagine more support than Python. If I was going to write a Discord bot, I would write it in JS because I know Discord.js is up to date with the latest Discord API feature and I don't want to re-create that work. (The Discord API is non-trivial.) Maybe this is where you end up writing Closure and integrating with Java libraries.
Third, Graham describes the "power" of a language as a purely linear scale. But there are things I can do in JS that I can't do in Lisp. This isn't like an argument, it's just an interesting point.
Here's a pro tip for you: maintain your own libraries. Fork any library you use. Never update from upstream unless you have a reason to.
Libraries expand, and they add features, and most of the time you don't need the features. So end up spending extra updating the libraries to get features that you don't need. If you go looking for the feature, and the new version of the library has the feature, then by all means, update the library.
Anyways I'm trolling here, I don't actually do this.
Some Scarlet Pearl animatics:
One of those says 'I love double-life Pearl a normal amount' and like yes. This is the only appropriate response to Pearl's character.
=> https://youtu.be/MhFDVkOANEs
=> https://youtu.be/HzXCXvEEy7A
=> https://youtu.be/M_7Ann8QwhI
'There are two green names, and there are eight of us. What do you say? What do say we go...'
"I think we gotta call Cleo."
*silence*
*silence*
=> https://youtu.be/H9p3S60sS9o?t=139
I love that scene so much because Etho and I are on exactly the same page. I love Cleo.
Django doesn't have default templates for signup, login, reset password, etc. It has the code for that, but it's not a frontend framework,
it doesn't even give you basic HTML implementations. Which is frustrating because I really don't want to build logic to check if passwords match again, I want to build my actual application.
Unfortunately, progress in the area of full-stack frameworks is depressingly slow. The only frameworks I can think of that will handle user authentication for you (including default pages), are Redwood, ASP.NET, and that's all. Rails doesn't by default but there's a library (devise) that does everything you want.
Looking at the devise feature list makes it clear how much you really need.
* authentication (e.g. login page)
* session management (setting cookies)
* password reset (email, etc)
* registration (sign up page, confirm passwords meets requirements, email confirmation, etc)
* user management (the ORM-level user object)
* account deletion
2FA and third party auth providers (e.g. Oauth) are things that make sense to be handled by plugins. Plus lots of other settings (e.g. locking account after invalid attempts), some that are assumed.
Anyways. Django does some of those things. Rails needs devise to do them. I haven't used other frameworks to know, but I feel confident saying most frameworks aren't wide reaching enough to cover all of them. But I don't understand why not. Why should I have to re-write any of that?
VS Code JSX syntax highlighting broke on me. My JSX is valid but VS Code is failing to syntax highlight it because I'm doing fun things
Minimum reproduction example:
```jsx
function makeComponent() {
return (
{component: <div>Hello</div>}
);
}
export default function App() {
return <div className="App">{makeComponent().component}</div>;
}
```
This works and renders fine, but VS Code doesn't syntax highlight the first div.
My fifth emotion, and the one currently incapacitating me, is what I'm going to call "time sickness." It's a feeling of dread at the
inexorable passage of time, a longing for the past, a fear of aging all at once. It's tinged with nostalgia; indeed at one point I thought this was nostalgia. But nostalgia is used today as a positive thing. This feeling is not. It's a terrible crushing weight; the weight of everything I've ever done and ever will do compressed into a moment. It's a violently intense homesickness for a time that you will never again experience. And it's the knowledge that the present too will one day be as far out of reach as the past currently is. And there's nothing you can do about it except stare at the picture and try to remember. I could shake it off, I could move on, but I feel an obligation not to.
I'm going to tentatively code-freeze this site until spring. It's at a really good balance of functional but really weird.
And I'm at the point now where a lot of future improvements (e.g. improving page-load-time even more, importing Tweets) require large architectural changes (e.g. static site generation, DB schema changes). Oh and I don't feel the need to do more "wacky" things with it. There's still milage to be gotten out of the red colors, the about page, and of course Super Thoughts.
I'll think about it for a couple of months; I might rewrite it entirely in 2023.
I wonder if other fields of study are solvable in the way computer science was.
Like Turing discovered a series of building blocks that can be combined to create any program. Gödel proved that formal logical systems are incomplete. I wonder if there's like an equivalent for Geometry, where we can say, all shapes are made up of lines and circles and complex curves or something.
That is, we have rules that constrain the behavior of all computer programs, and that constrain the rules of all logical systems, but do we have a set of rules that constrains all shapes? Or can someone turn up tomorrow with a new type of shape that behaves differently from normal shapes?
Hear me out, a block-chain-based database reliant on data transformations which are expressed in a functional programming language.
Oh my word.
So your "website" is a function that takes a copy of the database and a network request and returns a new copy of the database and a network response. And the beautify is that if you write it right, in a lazily-evaluated functional programming language, you don't even conceptually need a database; you just store all the transactions.
Oh my word. This is what I want. Frick. Cache invalidation, which used to be a hard problem, because literally so trivial, because the entire application is the composition of pure functions.
If I could change one thing about JS I would make it throw key-errors when doing lookups on objects instead of returning undefined.
People complain about the fact that all values in JS are null-able, but that doesn't bother me that much. It's not a strictly typed language, I want to be able to assign any data to any variable at any time. But it's really weird and not-obvious to me that `({}).key` should return `undefined`, I think it should error. This is what Python does, and if you want to optionally get an item from a dict, you can either check for presence beforehand, catch the KeyError, or use `.get("key", "default value")`. I think the three of those are more than flexible enough, and more explicit and readable. In my experience, I hit a lot of errors as a result of assuming a key exists, and it would be easier to locate and fix these errors if it failed-fast, and errored at the source, instead of propagating into an error later.
I’m trying to remember how the Gemini version of MatthiasPortzel.com works. I think what I need to do is re-write it to be static like the HTTP version, then I can throw out Astronomical Theater. But I would still have to hack together static file support in Jetforce.
This might be the sunk cost fallacy, but I just can’t see how it’s easier to reconfigure everything with a different Gemini server than it is to fix astronomical theater, which already does everything that I want, at least in theory. Especially since I have such esoteric requirements.
I've had a breakthrough! There is not a memory leak. Rather, starting astronomical theater just takes 11GB of RAM.
After 0 requests it takes 10.8 GB, while constantly serving requests (while true; … openssl s_client … done) it sits at 11.1GB, and afterwards, it stays at 11.1GB.
And! This is on a different computer, still Linux, but with node.js 18.
Also, in case it wasn't clear, this computer also doesn't have 11GB of RAM, and the OS is just overpromising.
* Sometimes (~1/10) Lagrange will fail to open Thoughts. I think this is a problem with Lagrange, but it's also totally possible that Astronomical Theater is failing to send a TLS close or something. Update: yeah this is happening even with `openssl s_client`, it's definitely a problem with my code. Update: When this happens, Jetforce gets the request and I'm pretty sure it sends back a response.
* Node.js appears to be leaking memory; as astronomical theater is currently at 12 GB of RAM. This is the one that interests me, that I wanted to debug, but I keep distracted by these other problems. Update: It's just a know Node.JS bug that it takes 11GB virtual memory to import a common-js dependency.
* I can't get openssl 1.1.1f to print the content of a Gemini page. `echo 'gemini://matthiasportzel.com/\r' | openssl s_client -connect 'matthiasportzel.com:1965' -servername 'matthiasportzel.com' -ign_eof` works if openssl is Openssl 3 or Openssl 1.1.1q or LibreSSL 2.8.3, but it doesn't work with the Openssl version on Luther.
* Astronomical Theater's reverse proxying is dropping or screwing with query parameters, or Jetforce for some reason doesn't reply if you make a proxy request with query params. Update: Jetforce seems to be behaving as expected. Update: I've fixed the issue where AstT wasn't passing through query params. The 1st issue is happening a lot more though, when navigating between these pages. It's happening in amfora too, not just Lagrange. Uhhhgg.
It's like, I don't think anyone would have a problem with there being a function to convert an object to a JSON string and another function
to convert an object to do JSON serialization but return the object hash before stringification. The problem, where I have a problem, is that one of them is called `.to_json` and the other is called `.as_json`. Yeah.
> Be me
> wake up
> go to work
> create merge conflicts
> resolve merge conflicts incorrectly
> open PR to merge two branches
> don't actually write any code
> no one notices
> 1000s of commits attributed to me
> they're all merge commits
> go home
> best employee
When you have a child component and a parent component and both of them need to be able to read and write state, what do you do?
```js
function Counter ({ parentCount, onUpdate }) {
const [count, setCount] = useState(parentCount || 0);
useEffect(() => {
if (typeof parentCount === "number") {
setCount(parentCount);
}
}, [parentCount])
useEffect(() => {
console.log("inner count changing");
if (typeof onUpdate === "function") {
onUpdate(count);
}
}, [count]);
return html`<div>
<button onClick=${
() => setCount(count + 1)
}>+</button>
${count}
</div>`;
}
function RestableCounter () {
const [count, setCount] = useState(0);
return html`
<${Counter}
parentCount=${count}
onUpdate=${setCount}/>
<button onClick=${
() => setCount(0)
}>Reset</button>`;
}
```
In some ways this is exactly the solution I was looking for. Both can read and write, the Counter can be used without the RestableCounter. The reset logic lives in the parent, the incriminating logic lives in the child. The obvious unfortunate part is that the parent and the child both store state, and so state is duplicated, and furthermore, it relies on React aborting the update when the props are the same. It looks like it's going to loop with the child updating the parent and the parent updating the child.
I might pull the plug on the Gemini version of Thoughts and switch matthiasportzel.com over to static content served with agate.
I hate to be like, 'this is too hard,' especially when the design and the technical engineering are done. Like I know what everything needs to do. But it looks like making everything work is going to be another several hours, for little payoff.
It doesn't help that
* maintaining the Gemini version of the site slows down development, making it harder to iterate fun ideas, like changing the pagination system or importing tweets
* the Gemini version of the site is a different experience. It's better in some ways (I still love Gemini more than the web), but it doesn't (and will never) have the colors or the ability to link to Thoughts
I don't know, I really like the Gemini version of the site, it's something that I think it cool that I want to exist. But I don't use it, no one else uses it, and it's essentially another whole site for me to maintain. Especially since I'm writing some of the intermediary layers like astronomical theater.
Yeah the certificate I'm using isn't technically right. And this gets into subjective stuff I think. I'm using an expired certificate for
thoughts.learnerpages.com, which I should be using a self-signed certificate for localhost. And again, they're equally secure but openssl is aborting because the cert is expired.
I don't know how to communicate how hard it is for me to maintain this website. Like. Maybe I'm just an idiot. but like.
I removed the rss page but didn't remove the `link` tag pointing to it, so Google is emailing me about how I have broken links on my site.
The rest of my problems are with the gemini version of the site, so I guess producing Gemini content is too hard, sorry. Maybe they should have made the protocol simpler.
I suspect there's a memory leak in nodeJS around pipelines, I'm trying to look into it.
I had to fix the Astronomical theater reverse proxy to pass query parameters.
Jetforce in prod isn't responding to queries when I make them from the command line in prod. It's working because astronomical theater can find it to make queries against it. And the command that I'm using is right because it works locally.
I just.
Like.
I don't know what to tell you, computers are too hard.
I guess the React way of solving the item-deleting or resetable-counter challenges is by saying "the parent can't declaratively effect the
state of the child, period." If the parent needs to even "hint" at the state, then it needs to control the state, and you should lift state up.
And furthermore, component organization is for grouping state and rendering, not for logic organization. If you have logic that needs to be shared, you should refactor it into a hook that can be shared. This is annoying because it splits what feels like a parent and a child component into a component ("Counter"), a component ("CounterButton"), a component ("ResetableCounter"), and a hook ("useCounter"). That is, you re-use logic through hooks, and you re-use rendering through state-less components, and there's not a good way to re-use logic and rendering at the same time (without also re-using state).
Just to reiterate, I wish there was a way to re-use rendering and logic at the same time, while delegating control of state to the parent.
Thinking about how often I was lied to as a child and it makes me want to cry.
Lying, in my mind, is the ultimate betrayal of trust, because it shows that you have no respect for me and see me as just an object to be manipulated.
This is about magicians who would say "magic" when I asked them how they did a trick.
Even as a kid, I knew what it felt like to know someone that someone else didn't. That feeling of power and superiority. And it's humbling to explain it to someone else.
So when I magician refuses to reveal their tricks I don't think think "oh it must actually be magic," I think, "this person values their own ego over any respect they have for me," and I pretty much instantly lose any respect I had for that person; as well as "willing to deceive others for their own reputation."
And like, I've talked about the magic thing before. I like magic, I like magicians. It's the afterwords; after the show, in the comment section. Are you trying to ride the high of knowing something other people don't for as long as possible, or are you willing to admit how it was done. The magic looks cool whether you know how it was done or not. I can't put it into words well, but the dismissiveness just comes off as super disrespectful to the audience sometimes. Like if I respectfully ask a random person on the street a question that they can answer (what time is it? where'd you get that coat?), they'll answer me respectfully. To say, "you don't deserve to know how I did it," is treating me as less that a stranger, as an adversary. I feel like I'm in an adversarial position trying to uncover a big secret, and my point is it doesn't have to be that way. I meant the question very respectfully, even as a kid asking magicians. Asking a question of someone is humbling and shows you respect them. Magicians act and feel like it's a cold war or something, and I really think that that is the fault of the magicians and not the audience. Audiences are perfectly willing to suspend disbelief for every other fiction medium.
I still haven't forgiven Rick Riordan for writing in the introduction of the first Percy Jackson book that the book was definitely true.
Like do you think I'm idiot? Do you think I'm 4?
No, I think you're lying to me because you're insecure about the fact that you're writing fiction.
In a moment of brutal self-reflection, I realize that part of the reason this upsets me is because I want magic to be real and I want to be able to trust someone if they told me magic was real.
Anyways, this post wasn't supposed to be about magicians or about Rick Riordan; it was supposed to be about how I take lying a lot more seriously than most people. But I think I made that point.
Anyways, this is why I don't trust anyone and why I don't have any close friends.
I think I'm being unreasonable, just because my criteria are things that I've made up. Like I want to do stuff on the server-side, which
makes caching hard (I can't have a totally static site on Cloudflare Pages). But that's just because I decided I wanted to limit my JS usage as much as possible.
I'm honestly so upset right now that I can't make this website faster. I mean I'm not that upset. But I'm definitely not happy or satisfied.
If it were network latency, I'd be like, sure, what are you going to do. But it's not it's fricking processing time. For a website that is basically static.
It takes just over a second to load Winter 2021. For a sane person that would be perfectly fine, but I'm not sane and that's not fast enough
Caching the HTML content from every thought instead of rendering them on-demand lets us save close to 400ms.
I've been working on getting this working for the last 7 hours.
It's still not fast enough for me, but I think this is close to the max I can get out of Django. Might need to re-write this as a static site at some point.
There's just so much that happens in the book! Like we see Villefort, but then we also see his wife and daughter and baby and father and grandfather and it's incredible.
Decided I’m doing an Edge Chronicles re-read (except that I only read the first 6-ish and I don’t remember them). At the latest, after
Dracula Daily finishes, possibly before.
I’m struggling right now since the last DD was two days ago, but the book is picking up a lot so I don’t want to start something else at the same time. What am I saying, I read DD in like 5 minutes in the morning at work?
I'm actually going to use a variant of this code, I think, because the idea of a nonce well-represents the idea that we have a "hint" that
state needs to be invalidated, but no specific variable that went into the state has changed. Obviously this seems super hacky to reset a button, but it makes more sense for the variant where the "reset" is an imperative CRUD operation and the effect is a network effect to get a new state from the database.
```
function NonceCounter (props) {
const [count, updateCount] = useState(0);
function reset() {
updateCount(0);
}
useEffect(() => {
reset();
}, [props.nonce]);
return html`<div>
<button onClick=${
() => updateCount(count + 1)
}>+</button>
${count}
</div>`;
}
function NonceResetCounter () {
let [nonce, setNonce] = useState(Math.random());
return html`
<${NonceCounter} nonce=${nonce}/>
<button onClick=${
() => setNonce(Math.random())
}>Reset</button>`;
}
const domContainer5 = document.querySelector('#nonce');
render(html `<${NonceResetCounter} />`, domContainer5);
```
Edit (:39): I've found several people on the internet doing something very similar, but instead of using `Math.random` they just use a value that counts up sequentially. I like `Math.random` because then generating the new value doesn't rely on the previous state. But in the button example it makes a lot of sense. You just call it `numberTimesReset` and then have an effect/state inside the button so that when it increases you reset the button value. It feels a lot less hacky.
The ignore cache button in the Safari dev tools just doesn't work?
Maybe this is what I was referring to when I said the Safari dev tools
were bad a little while ago. Going to try Safari Tech Preview, will update you.
Also doesn't work in STP. I'm wondering if I'm misunderstanding it when it says "resource was served from memory cache" or else "Disable Cache" with a checkmark.
Edit 5:41: Coming back to follow up: I think there was something else going on because I was getting data I thought was stale in three different browsers.
React organizational question. You have a list of items and you delete one. You make a fetch request to delete it, easy. You could do a
client-side delete, and drop an item from the list. But this is weird if the list is paginated. As long as you weren't looking at all the items to start with, deleting one shouldn't decrease the number you're looking at, you should fetch a replacement item from the database.
How do you do this? I think you might just end up needing to create a boolean variable "needsReset" that is set to true and then you can monitor when it changes with an effect.
This has a lot of parallels to the The Resetable Counter Challenge
=> https://ourjseditor.com/program/B9YlIe
Lapce (new text editor) has so many features and is so unpolished it's impressive.
It's a Xi front-end, which I'm a huge fan of.
I'm thinking it might be worth me forking it and literally just fixing bugs in it for the rest of my life and using it as a primary editor.
Because all the hard stuff is done. There's a language server client implementation and tree-sitter syntax highlighting all these languages, it's just like missing half the keyboard shortcuts that I expect. But there's a panel for customizing keyboard shortcuts.
Edit (2023): Although Lapce is inspired by Xi, it is not a Xi frontend.
The thing that's so weird to me about "communist takes" is that a lot of them follow a pattern of "humans are bad because of capitalism."
I guess I just don't follow? They like simultaneously want to blame human nature and capitalism, and maybe they just need to use more words, but human nature wasn't created by capitalism. This is similar to the 'capitalism is responsible for computers (and that's a bad thing)' that I've posted here before.
This Thought brought to you by, "[people] want to use and abuse everyone around them…It's a side-effect of having built a society around the idea that money is literally more important than anything else (including even life itself)." Like. Okay.
It's just, I would totally agree with "capitalism encourages people to hurt others in order to increase their own wealth." Or "capitalism rewards being greedy." But I honestly can't tell if these people would agree with that, or if they're arguing something more fundamental about how human nature is fundamentally corrupted by being in the presence of dollar bills.
When you say you're glad that humans are in the process of wiping ourselves out, is that tongue-in-cheek, or do you actually believe that humans are inherently a stain upon nature, and that the most ethical way forward would be expediting a mass suicide?
If you'll allow me to meta-pivot for a moment,
In real life I wouldn't ask these kinds of questions. I would file away "is communist" in my mental notes on the person talking, and find a prompt that would turn the conversation in a more pleasant tone. But on the internet, I'm frankly not interested in the individual person. I'm here (on Hacker News) to stimulate my mind by engaging it with new perspectives or arguments that I wouldn't have come up with alone. To that extent, I want to engage solely the argument, in isolation from the author. I've said before that I'm frustrated by takes that I don't understand, and I think that's part of it. But I'm also frustrated by takes that aren't purely logical, because I can't engage them without understanding the person.
For the bridge builder,
oh, to the creation of new things
connections, stability
architecture and art.
The fierce orange winds of the autumns of my childhood,
an all encompassing experience,
warm gusts passing my body,
to be swallowed by the air.
The warm sand on the beach beneath me,
the hot sun, radiating,
and the cool, salty, air
sweeping me along.
The problem with hook-based React is that it forces you to enumerate your stateful dependencies and side-effects. This sounds fine, but it's
very hard to write because there are a lot of things that technically are non-pure but that you don't think of that way. It doesn't seems like you should need to list the current time or the network state, but if that's the dependency, then you need to.
If you can rewire your brain to recognize those as dependencies, okay. But if you can't, then you end up abusing state and dependency arrays in order to hack your way to equivalent code.
This is too controversial for a HN comment, but my two-sentence thoughts on Ladybird:
If they're trying to hit the sweet-spot where they've done 20% of the work and 80% of websites work, they're already there. If they're trying to compete with Chromium, well, not even Firefox or Safari can do that.
I mean I guess I'll go to sleep since there's nothing I can do that will make me happy, but I'm just going to end up in bed staring at the ceiling sad.
The funny thing about Rails is that when I go back to Django I miss the little things.
Like to get a object by ID from the DB in a shell, Rails:
```
$ rails c
> Thing.find(1)
```
Django
```
$./manage.py shell
>>> from app.models import Thing
>>> Thing.objects.get(id=1)
```
Like, why doesn't Django import my models for me?
The thing I love about "The Magician Poem" is that it exemplifies the fact that I have no idea what I'm doing. I absolutely love something
about its cadence, but I couldn't tell you want that is. I can't write more like that, the poem just came to me.
Like it's not even a poem, it's bloody prose, and yet it triggers every part of my brain that is triggered when I'm reading poetry.
It took me like half an hour to figure how to install Turbo on a page, but once I did, it just worked, which is pretty cool.
To get to the point where you can copy a script tag into the top of the page, you have to go hotwired.dev > Turbo > Installation > skypack link which returns a JS file* > copy and paste a link out of the comments at the top of the JS file > the actual fricking installation instructions.
* You can just include this JS file, *if* you specify `type=module` on it. That isn't documented anywhere, which is my main complaint.
I wonder if positional function arguments is just an anti-pattern.
Oh my word oh my word: a functional language without positional function arguments. Because really that's what rubs me the wrong way in Lisps and Haskell, more than anything. And it lets you do magical things with currying; it makes currying even more powerful.
Vivaldi can pull the theme color from the website into the browser to use as an accent color. Now, on this website I haven't set the meta
tag that specifies theme, so Vivaldi has to guess. It does that by taking all of the colors in the favicon and mixing them together like a small child mixing paints. Imagine yourself as that small child. You take the beige that underlines the T, and mix in some of the background green, but the result is an ugly greenish-brown. What else did you expect from mixing green and brown? You try to salvage it by including some of the barely-not-white from the T itself. But it's too late; there's nothing to be done but throw it all over the browser window anyways. Vivaldi, being a computer program, lacks even the artistic sense of a small child, and so it feels no shame in framing my website with this disgusting color.
Edit (3:58): reworded to be more rhetorically enjoyable
I know we're all more concerned about whether or not Alex is still alive, and not necessarily whether or not I'm alive, but I thought I'd update you anyways, just in case.
It's just so f-ing depressing to me that we're never going to fix these bugs. Like this generation is going to grow up with the expectation
that bugs are bugs are just a normal, expected, part of using a computer. And the status-quo is never going to change.
Computers aren't the real world. We can do better. We can be better. Software doesn't have to have bugs, we just need to invest more resources into fixing them.
Receiving gifts is just really stressful for me because it feels so performative. Like it seems like you're giving me the gift, and in
response I'm supposed to do a little a dance, smiling and thanking you for it, regardless of how much I actually want it.
I know this is just like, "being polite," but I don't like it.
Attempts to monetize Tumblr:
* Ads. Outcome: the ads are infamously weird. It's often unclear what the product they're selling actually is. There's no way a sane person would actually click on any of them, but sometimes people screenshot the ads and share them because they're so weird. A common feature request is being able to reblog ads so that you can make your followers see the same surreal ad that you did. (https://66.media.tumblr.com/2f985a5ed8624a0917d9fc543d90292e/tumblr_pnkgrx6qpu1v25kqw_540.jpg)
(Ads covered the first 10 years of the site. All of the following attempts occur in the last year-ish, since Tumblr was given to Automattic by Verizon.)
* Post Plus: bloggers could make posts private, and charge for access to those posts (similar to Patreon or Substack). Outcome: The "limited beta" features one person, who didn't agree to be part of it, and was bullied for charging for posts that used to be free. Users protested, afraid that the feature represented Tumblr trying to appeal to "content-creators," as opposed to fan-dom, their historical userbase. It was canceled before it fully launched.
* Tumblr Blaze: Announced on 4/20, 2022, Tumblr Blaze allows you to pay money to promote your own posts (known as "blazing"). Outcome: Tumblr reacted favorably to this. People blazed their own work to advertise, but also funny posts they wanted to share. Although many Tumblr users did complain about the religious sections of the website (like Catholic-Tumblr) using Tumblr Blaze to proselytize.
* Tipping posts and users: if the author of the post has enabled it, you can tip the authors of posts you like. Outcome: this feature bypasses the legal issues of charging access to posts on a website that features mostly gifs of TV shows. It is enabled by a non-zero number of users, but is still mostly ignored in favor of paypal links for fundraisers. (For those not aware, the Tumblr community welcomes Go-Fund-Me-style posts asking for financial assistance.)
* Ads never went away, but Automattic tried to find new, better advertisers. Outcome: Manscaped becomes the primary advertiser on the site. Manscaped's mission, if you're not aware, is to create the cultural expectation that men should shave their balls, and profit from selling special, ball-shaving, electric razors. Why they're doing this on Tumblr, which has a disproportionately female audience, I cannot imagine. https://www.tumblr.com/blog/view/manscaped/682906639183101952?source=sharehttps://www.tumblr.com/blog/view/manscaped/688948518002589696?source=share
* Ads from Automattic. Automattic frequently promotes their own content on the platform. Outcome: The half of Tumblr ads that are not a half-naked person selling intimate-grooming supplies are ads for Automattic's own products. Ads for Wordpress and Day One Journal aren't worth mentioning. However, they also advertise Tumblr on Tumblr. I don't know why. One such ad features a person in a Pikachu costume. But like, it's just a yellow morph suit with red cheeks and glasses? Expert speculation is that they're trying to terrify people into buying their new ad-free tier. https://www.tumblr.com/blog/view/parasiteangels/688462337355694080?source=sharehttps://help.tumblr.com/hc/en-us/articles/6797403156631-Help-I-clicked-a-Tumblr-ad-on-Tumblr-and-now-I-m-still-on-Tumblr-/?utm_medium=display&utm_source=tumblr&utm_campaign=houseads_set4&source=wordads Oh yeah ads are now re-bloggable so you can share Pikachu man with your friends.
* An ad free tier. Outcome: Automattic seems to believe at this point that their best option is to give Tumblr users lots of options to pay for their website. One of those options is an ad-free-tier. The ad-free-tier removes ads, unless you're afraid of missing out on the latest Tumblr-advertising-cultural-event, in which case there's an option to turn ads back on.
* Merchandise. For their fifteen-year anniversary, Tumblr started a merchandise run. https://www.tumblr.com/blog/view/staffs-secret-blog/694234268426207232?source=share Outcome: I don't know why anyone would want to wear Tumblr merch. Apparently Tumblr was self-aware about this, as their merch-store launched with the tagline "cringe is dead." You wish Tumblr. Many people reply that they should sell shoelaces, referring to a 2012 meme in which someone suggested Tumblr users could covertly identify each other in public by complimenting their shoelaces. https://www.urbandictionary.com/define.php?term=I%20like%20your%20shoelaceshttps://www.tumblr.com/blog/view/staffs-secret-blog/694460275848511488?source=share
* Subtle shoelace campaign: There's a small banner that sometimes pops up, saying "Shh, I like your shoelaces." Clicking it takes you to the Tumblr merch store, which now sells shoelaces. Outcome: Some people buy the shoelaces with the Tumblr logo on them. I was not one of those people, I'm glad to say.
* Manscaped ad featuring a person in a yellow morph suit dressed a Pikachu. https://www.tumblr.com/blog/view/manscaped/688335951551938560?source=share Outcome: Aahaahahaahahhhh.
* Post Plus. Oh yeah they brought back Post Plus at some point. https://www.tumblr.com/blog/view/babiedeer/680083679311216641?source=share Outcome: I didn't hear about it all when it actually came out, so I guess they're downplaying it and no one cares.
* Crabs. For April Fools, Tumblr had added (among other things), a button that, when pressed, added a crab to the dash. Users enjoyed spam clicking the button until their dash with crabs, and they mourned when April Fools was over and the crabs were gone. Tumblr now sells access to the crab button for $2.99 / 24 hours. https://www.tumblr.com/blog/view/matthiasportzel/694509011986432000?source=share Outcome: Crab.
There are problems that I can't solve alone, that I'm afraid to mention to other people. And I just write off solving them, which is really frustrating.
I don't want to be a complainer, I don't want to cause problems. But I notice things that are wrong that no one else seems to notice or care about and I
like are we just all ignoring this? elephant in the room, the sentry docs install instructions don't make any sense. And I point that out and get gaslit into thinking that they do work.
The lightbulb in my room burned out and I hate talking to people and that's not really a problem I can solve without talking to people. But moreover, it's my problem, I can just live with less light in my room. No one else is bothered by that, but if I mentioned it to them I would be complaining, right, I would be making it their problem. And I don't want to do that.
I want to curl up into a little ball and not exist.
Matthias's first rule of Reddit: unless a given subreddit has rules that disallow posting political screenshots, it will eventually be
overtaken by screenshots of political tweets.
I do not understand why in 2022 you can get thousands of upvotes for posting a screenshot of a tweet insulting Trump on a tangentially related subreddit. It's just a force of nature. Redditors just can't help themselves.
It just drives me insane knowing that I'm an irrational, illogical person. Because I'm doing things that are dumb because I can't come up with a better alternative.
The hotwired.dev paradigm has the potential to be the future of the web.
Unfortunately DHH's mastery of the long-form essay isn't appreciated by today's JavaScript developers.
The difference between the Next.js docs and the Turbo documentation is shocking, especially when you consider that Turbo is much simpler than Next.js.
The thing about cancel culture that gives me a bad feeling is that it normally takes a person and then enumerates the things that that
person has done that are bad. It seems to me that if you cared about addressing the issues, and not about attacking the person, you’d take one issue at a time and list some people that were to blame.
Maybe this is a distinction without a difference, I don’t know.