Not boring, and a bit of a condescending prick
327 subscribers
124 photos
4 videos
196 links
Semi-digested observations about our world right after they are phrased well enough in my head to be shared broader.
Download Telegram
Here's the shortest posible "proof" that React is better than Vue.

I am using Telegram from the Web on this Mac. And have marked several conversations as unread a couple days back.

Since then, I have definitely "read" these messages.

The "K" version of Telegram Web correctly displays them as read. My OCD is happy. Nothing is left to be unread, except in spammy folders.

The "A" version of Telegram Web keeps displaying this buggy behavior of highlighting as "unread" the chats I have indeed "read" since marking them as "unread".

State management is hard. This could be a skil issue, of course; or even just a bug. But, clearly, the React version does work correctly while the Vue version does not.

And if my assumption that they are mostly using the same backend API is correct, this is a solid, constructive proof that Vue is more buggy than React.

Now I'm wondering if Vibe Coding could have anything to do with this problem. Or with solving it.
πŸ‘2
Quality tech memes time!
πŸ”₯5πŸ‘3
Silly thought of the day: Why is the political spectrum "Economic left" vs. "Economic right" on the X-axis, and Authoritarian / Libertarian on the Y-axis?


Here's a much easier way to read the quadrants.

Left to right: Who is responsible for the work being done?
Left: The society. Right: The individual.

Top to bottom: Who gets to benefit from the work being done?
Top: The society. Bottom: The individual.


Top left and bottom right are "net zero". Societal equilibrium is that people somehow agree on who works on what and who gets what. Top left is "from each according ..." and "to each according ...", bottom right is "don't tread on me, we get to keep the fruits of our labor.

Bottom left is clearly unstable. If work is effectively voluntary but the benefits are expected to be shared, the total amount of goods and services produced will never sum up to the total amount of goods and services consumed. Unless we are talking about abundance. No wonder sex, drugs & rock-n-roll are provided in huge quantities in the bottom left quadrant.

(Abundance in the bottom left quadrant especially makes sense when it comes to sex, since consensual sex is clearly a positive-sum game, the "production of social good" out of literally nowhere). No wonder people on the bottom left are hoping for robotics and what not, so that the benefits are available, while work is ... something we/they, humans, do not have to do much of.)

What is interesting in this reading of the quadrants is that the top right one is super-stable mathematically. As in, at least from a pure unit economics standpoint, it gets more stable over time, as long as it stays stable. Since it is the most effective quadrant at extracting more labor from people while making them consume less, willingly, as long as the propaganda and the ideology is working.

(Fun fact: The USSR model had this ingrained assumption that eventually "the new Soviet [hu]man" would emerge, whose consumption patterns match exactly what the society can offer most effectively. Unironically, speaking with ex-USSR folks in Seattle/Redmond/Bellevue, we tend to agree this task was best solved by, surprise, Microsoft, back circa 1990s and 2000s. But I digress.)


So, if we accept this reading of the four quadrants β€” which I think makes quite some sense β€” we should pretty much assume the top-right-ification of the world, country by country. Unless we either A) Witness a Black Swan event of sudden abundance (robotic manufacturing making human labor ~10x more effective, ref. Japan). Or unless B) Humans can truly be taught consumption patterns over several generations (ref. Europe).

The rest is mostly uncertain. So grab your popcorn, and let's all pray it does not get ugly in the next few dozen years.
πŸ”₯3
Lazy web, I'm quite comfortable sharing some thoughts on coding publicly; but not very publicly yet.

TL;DR: To write code, and to otherwise keep geeking, is no longer my job.

It's my passion. It's something I do for fun. It's really cool if it helps projects I help drive.

It also is a great prophylactic against possible mental health issues. If in doubt, I go and put together that thing that's bugged me for a few days or weeks already. I hope this continues for as long as I live β€” it's quite enjoyable to not just have ideas and diagrams in my mind, but to have them battle-tested against something as objective and brick-and-mortar as a computing system. I'm learning Rust now, and so far it's just a gift that keeps on giving.

If the stars align, something I code in my spare time has more value than "just code". I mean, it always has a lot more value already, ref. the mental health point above. It also keeps me in shape, should I want to or need to prove myself as a tech-savvy person, which does happen every once in a while.

But I am no longer delusional that high-quality code has any value in and of itself. If I were to go and raise money, it will most definitely not be based on how awesome some piece of code is.

Moreover, if I were to go and raise money, I firmly believe I'd have to justify the need to code to my investors (ref. the mental health point above), since, arguably, what I bring to the table outside the realm of coding is more valuable than the value of my code.

(Don't get me wrong, I am of high opinion of the value of my code. Who knows, maybe this wall of text is just me patting myself on the back that my soft skills are probably stronger than my hard skills these days.)

Anyhow, internalizing the above gives me a sense of relief. Since the "I do not have to code" framing gives me the indulgence to not try to get more coding work upon myself. If this code I could contribute to is valuable, then let's agree what other work-related activity is worth sacrificing in favor of having this code written. Can't find any such non-coding task? Then let's face it: dedicating time to work on that code would be a net-negative move for all the parties involved (except perhaps for me having a bit of fun).

Maybe there exists a universe in which the stars do align, so that I get to geek around for fun and profit, knowing full well what I deliver with my fingertips code-wise brings impact and value in and of itself. But I'm starting to sincerely doubt we live in such a universe. And even if we do it'd be 90+% shaping the world around me to be this way, and only ~10% of actually getting to work on difficult problems which Quality Code Alone Can Solve.

For most coding tasks, I just bring more value to the product when I focus on breaking down a business problem into smaller product tasks, then into architectural diagrams, and then ultimately into what needs to be coded, including their acceptance criteria and test plans. And I know too well by now that talking to people who are ultimately putting everything together can easily turn into a full-time job. Which I would enjoy less than writing some parts of the code and integrations and tests. But someone has to solve The Alignment Problem, people who can solve it are rare compared to those of us who can code, and, on a relative scale, I am more useful at aligning people than at aligning bytes.

Unironically, the above paradox is well known to economists, under the name Comparative Advantage Paradox, by David Ricardo.

Applying it to my case, I may well be relatively effective at geeking and relatively ineffective at working with people. But if other people are even less effective at working with people, and if we do not have enough people who are willing to work with other people, then, on a relative scale, I would bring more value as an ineffective person working with other people than I would by being an effective geek. More geekiness to the rescue, hehe.

Now my long-term plan should be to not lose touch with coding. We'll see what I can do. For once, after
πŸ‘7
internalizing the above, the percentage of code I write "for fun" will probably jump to 90+% β€” since I am now at liberty to openly forfeit most code-level work in favor of bringing more value by being The Glue.

Also, coding is something I should really double down on for long-term mental health reasons. Given my writing is not that valuable anyway =)

Obligatory disclaimer. This post has nothing to do with what is known these days as Vibe Coding. If anything, I'd love to hijack the term, but alas.
πŸ‘2
I mean ... seriously?
😁5
I have mixed feelings about this.

Move fast and break things is real in the US culture. And Chungin is most definitely winning at this particular game, especially at the "breaking things" part.

I do not believe university degrees matter that much these days. Thus, as long as the project is interesting for him, trading school for an extra boost in "positive" PR is definitely a +EV move.

On the other hand I do take issue with the PR being mostly positive. As in, the "let's cheat" vibe is somehow prevalent, with alternate points of view more or less silenced.

Say what you want about the quality of hiring via Leetcode-style interviews. I'd agree with many points against them. The thing is, when it's on you to hire, at scale, and when your long-term success depends on the quality of hiring β€” there really are not many alternatives to choose from. Leetcode-style interviews are here to stay.

So the idea to view each and every company that does Leetcode-style interviews as a nemesis who "deserves" to be "exploited" is just clearly wrong to my taste. It's wrong in the worst silly, populist ways. And this I definitely do not like and endorse.

About two years ago I was at the forefront of the movement at Miro where we pioneered a non-Leetcode interview style. I adopted the new approach since, including in my current company. I do agree making candidates code in a browser, or in a Google Doc, is just disgraceful. But we want to see them code, and use git, the command line, the IDE, and, of course, whatever AI tools they prefer to use.

So we tell the person up front it will be on them to share their screen and work together on a proper that is designed to mimic a real life problem.

And this does not scare people away. And this does work, to my taste.

So, sure. If what it takes to catalyze the process of moving away from Leetcode-style interviews is for one to put their name out there, next to the tool that helps cheat on these interviews β€” I'd say the end result is worth it.

Much like UberX was totally against the law, but I'm oh so glad it happened. Since otherwise we'd be stuck in the yellow cabs era for another decade or so. That's the American way to innovate, and, in this regard, I do like moving fast and breaking things.

But sometimes having a crowd to support you and pointing this crowd at the wrong enemy is just ... unwise. Especially given that many, if not most of the people who consider cheating on Leetcode-style interviews will ultimately be paid by companies such as Amazon.

I won't feel bitter if Chungin ends up on the losing end of the stick. Because, personally, even though it's sad to be saying this: I would much prefer to live in the world where we get back from this AI-assisted coding insanity back to where knowing exactly what happens under the hood does matter.

And, in such a world, people who got their jobs not by preparing for the interviews but by speed-running these interviews with the help of concealed AI assistants ... well, they should probably be fired, or at least made to re-interview.

Much like we do revoke degrees when we learn people have plagiarized their work. And, to my taste, we do not do enough of this β€” there were high-profile cases where plagiarism was proven definitively, but the institution was dragging their feet for another weeks or months. That's not right.

Similarly, it's not right to unanimously stand with the side that glorifies cheating. Some middle ground does exist, and let's all work together to converge on better hiring practices over time.

But being categorically against the status quo when this status quo is pretty much what is paying your bills β€” hmmmm. There have been "successful" coups in the history of humankind. All they show is that building from scratch is far more difficult that destroying what already is somewhat working.

The LinkedIn post I am responding to: link.
πŸ”₯1
I'm starting to understand how the Apple marketing ecosystem works. It's truly genius. And it frustrates me that I confess to starting to appreciate it.

TL;DR: Assume your users only care about the "vibe" and are on some empathy-enhancing drugs all the time. Keep shipping products that users get emotionally attached to "because it's pleasant to use". And, slowly but surely, you get a solid base of addicted users.

I am trying a MacBook now. It's my 4th try in almost twenty years.

(The first ever MacBook I bought was that white Intel model they released in 2006, in New York's most famous Apple Store, [mostly] with Google Code Jam's prize money. Two months later it was running Windows, then Ubuntu, then briefly Windows again, then MacOS specifically for personal Skype use cases, and then I've donated it to friends who needed this type of box for their CI/CI, hello, maps.me!)

So, the first three tries lasted for at most two weeks each. The current stint is already half a year.

I hate a lot of things about the Mac. What I hate the most is how slow it is at exactly where I want it to be responsive. Look, I have a 3ms 240Hz screen and a gaming mouse for a reason. When I press Cmd-Tab, or Ctrl+{Left/Right}, I expect it to be a one-frame operation, and instead you are carefully drawing this insanely slow and insanely useless animation.

But you know what? Yes, this is what I love my Vim and my Ubuntu for. But, somehow, after using both for a while, I keep finding that the number of things that irritate me on Ubuntu is comparable to the number of things that irritate me on a Mac.

And once I have converged to using both OS X and Linux, I am [un]pleasantly surprised that even some coding tasks are at times more enjoyable to complete on a Mac.

For instance, video calls are best on a Mac, especially given I used my iPhone as the camera, and my AirPods as the headphones (although I do have an external microphone). This is not surprising. Clearly, once I use a Mac somewhat proficiently, recording the meetup / podcasts and taking calls is what a Mac is good at.

As clearly, if it has to do with intra-Docker reproducible builds, it's just more pleasant for me to code on my Ubuntu machine. A lot of things are just more native. And I do enjoy swift and responsive Alt-Tab-s.

But somehow if I want to debug some Rust error message with the AI, I end up firing up VS Code or Windsurf on the Mac. And I find myself cursing some things Ubuntu can not do in one click about as strongly as I used to curse a Mac just three months ago. (I mean, seriously, why can't Home/End work as they should, for God's sake?)

So go figure. Maybe Mac is not that bad after all. The hardware is certainly powerful and enjoyable to use.

Anyhow, for now I have ordered that programmable keyboard β€” thx Max! β€” and am committed to putting some work into configuring key bindings, so that stuff like copy / paste / new tab / change input language / start the terminal requires identical keystrokes. Once I have this done, I might end up buying a KVM switch; although plugging this USB-C cable from one laptop into another is not too much trouble either. And then we can run a clean A|B-test, so ask me in half a year.

Suffice to say, I already had my first long-term international biz trip experience when I only took this Mac with me. It required three browsers to separate work from social from personal to conquer my paranoia, but I've done it, and it worked fine.

In the meantime: with this single-USB-cable setup, when will we have decent LineageOS builds so that my tablet, or even my phone, could be used as the 3rd alternate development device? I'd definitely buy a top-notch Android phone to try this out, especially if it can act as the external camera for my calls!
πŸ‘4πŸ‘1
Lazy web, I'm meditatively playing with the Pest grammar parser in Rust.

And it turns out it's ... weak!

I want the top-level grammar to only accept "legal" identifiers. Such that foo_bar and FOO_BAR and FooBar are okay, but fooBAR fails the "parser frontend" stage.

Well, I could not do it with Pest. After several approaches. (Yes, I've tried non-consuming and-clauses. With no success. Would be grateful for some education.)

Fine. Let's use an inner Pest grammar, and, in the outer one, capture every identifier-like term, so that these terms individually are the inputs to the inner grammar.

Well, surprise. See this code. It does not parse CamelCase.

Technically, I can make it work. For these three clauses. The change is trivial. Can you spot it?

(Yes, this "inner grammar" will only be parsing one term. The top-level comma-separating clause is just for the "unit test", and to make this post more readable, and the link β€” to immediately show the example with no edits whatsoever.)

If you can solve this problem, bonus points for supporting what I call the uglyJavaStyle convention. Ideally, it should get itself parsed into a term of special type. Not conflicting with the other three, lower_snake, UPPER_SNAKE, and CamelCase.

In fact, I am quite positive that if my intuition of what Pest does behind the scenes is correct, a very similar problem, or even this very problem, may well be impossible to solve with the grammar alone. (Because if it can be solved, it can provably be the case that for tricky inputs the parser engine would have exponential complexity. Been there. We sold a company based on doing such parsing right; with autocompletion and suggestions, no less.)

Ah, and did I mention that if you only define lower and UPPER terms, Pest happily parses lowerUPPER as a legal combination of the two? I wasn't able to make it require a whitespace there, at least not with "clean" syntax.

Still fun to play with. Just more tricky than I expected.

Link to the grammar in Pest playground.
πŸ‘1🀩1
While looking through some old posts, the original link to that wonderful test surfaced up.

A short game sheds light on government policy, corporate America and why no one likes to be wrong.

Feel free to share with friends and family, with no spoilers. And be ready to either swallow quite some emotions or lose some friends. I vaguely recall my dad refused to accept what the test is about, and kept insisting his answer is the correct one β€” turning this into an acceptance exercise for me.
πŸ‘3
Seriously, what do we think of this [Rust] construct:

pub fn accept_header_contains_text_html(headers: &HeaderMap) -> bool {
headers
.get_all(header::ACCEPT)
.iter()
.filter_map(|s| s.to_str().ok())
.flat_map(|s| s.split(','))
.map(|s| s.split(';').next().unwrap_or("").trim())
.any(|s| s.eq_ignore_ascii_case("text/html"))
}


I have mixed feelings about it.

On the one hand it's clearly readable and strongly typed, reads almost as well as Haskell or OCaml, and every step makes sense.

On the other hand, as of today, we all agree regular expressions are unmaintainable write-only code, and I wonder if 20+ years from now developers would consider the above snippet archaic as well.

The nerd in my can't let go of the concept that (except perhaps to_str()) every single line in the above code matters. So, if we truly live in the world where 20+ years from now this code reads archaic, we'd have to have improved quite a few parts of our technology stack by then. And I doubt it HTTP and the `Accept header, as well as the JSON format, are going anywhere in a time frame as small as twenty years.

What do you think?
πŸ‘1
Given the entire team has ${AI_CODING_AGENT} now, the definition of done for engineers changes!

Before it was "You can follow these instructions in the ${WIKI}, let me know if you hit any issues along the way".

Now it should literally be "This one-prompt test setup & run should be everything you need to get going".

Can ${AI_CODING_AGENT} read the ${WIKI}? If not, perhaps now is a good time to create some convention about how to encode run instructions into README files β€” referenced from the knowledge base, of course β€” so that it can be reproducible how ${AI_CODING_AGENT} runs the scripts outlined in those files?

Perhaps ${OUR_AMAZING_MARKTING_DUDE_TURNED_VIBE_CODER} could put together a trivial ${WIKI} integration, so that updates to the Markdown in code propagate into the knowledge base automatically?
Also, ${AI_CODING_AGENT} sessions can be shared, right? So that if it struggles to run something or understand something, one can share that particular chat conversation and ask colleagues for help β€” in the form of corrected prompts, or corrected instructions.

"Works on my machine" now has an entirely different meaning too, lol.

~ ~ ~

The above is literally my message in a work ${TEAM_CHAT}, with minor edits. More thoughts outside work.

If only AI models were cheap to run locally, and if only business & licensing models would allow for it, I would argue that the future is in some developer-first Docker-based setup which includes the pre-trained models ready to prompt-code with.

DevEx and DevRel takes on an entire new meaning then. Maintaining these "developer-first Docker images" is no longer only about the reproducibility of build & run steps. It's also the predictability of AI-generated code changes given the prompts. And the end-to-end regression testing for these code changes. Taking the last week or months of the team's work as the golden set of input data.

Actually, this is entirely possible with cloud-based AI agents too.
Bet you that's what the IDEs will converge to soon.
πŸ‘4πŸ”₯2❀1
I wonder what is that training corpus for ChatGPT when it comes to "explain Rust assuming I speak C++".

Talking about footguns without quotes as if it's a standard industry-adopted term ... some people would not be happy!
😁2
Okay, so I was officially drinking the cool AI codegen aid for a bit over a week.

Looks like how much Cursor et. al. can help is proportional to:

1) How trivial / mundane the task is, and
2) How much effort I am willing to put into breaking it down.

Now, (2) is a useful skill.

AI can act as a good "surrogate mentee" I think. That is, if you want to learn the skill of teaching someone to code, and if you are delighted this someone is full of time and energy, you can safely practice this on the "AI companion" bots.

At the same time, (2) is a useful skill by itself. But every good engineer is using it in practice 24/7 regardless. "If in doubt, make a simple self-contained sketch first" is generally the most effective approach to a semi-understood problem regardless. And true specs for N steps ahead exist only in fantasies. And for self-contained sketches, one does not need Cursor; the most basic ChatGPT does the job well enough.

And with (1), well, I'm glad I no longer need to put effort into the code which I believe is mundane. But this is effectively about saving me StackOverflow time. Sure, if some HTML/CSS thingy, or some YML file, has a property that is nontrivial to understand, the AI will likely save me 15+ minutes per iteration.

Well, duh. Thankfully, a) I am not interested in understanding CSS or various proprietary YML formats, and b) I have managed to structure my professional life such that these tasks do not come up often.

So, yes. Next time I need to get my hands dirty with Golang, I'm not touching that pile of sh*t with a ten feet pole, and am instead asking the AI to do this. With clear and verbose instructions on everything, including the tests. Same with YML configs. But let's face it: had those YML configs been strongly typed (Haskell or Rust), they'd be a pleasure to write manually to begin with.

Ah, and one more thing. I have not tried AI codegen for languages with "trivial" syntax, such as Python or JavaScript. The experience there may well be more painful, since some "obviously correct" code could well fail to do the right things in various unpredictable ways. In Rust though, this is not an issue at all.
😁3πŸ‘2
HA!

I was wondering why my browser keeps opening random pages of Rust documentation. Was waving it off as accidental touchpad taps.

They are not accidental touchpad taps.

It's Cursor reading the documentation while writing code.

Need to remove that --open, lol.

I was not 100% sure, but now I am 100% sure: Never run Cursor on the machine that has any secrets. Most definitely, there are plenty of attack vectors on them. And even the most un-sophisticated attacks are pretty much guaranteed to succeed these days.
😁10
From the top of your mind, what do you think is the percentage of commercial air travel passengers who miss their flights?

Bonus question: Count only those people who made it to the airport and got through security (or at least made it to security). So that they had their boarding passes issued, and then confirmed to be valid.

As in, credibly not those folks who have forgotten / confused the flights, somehow made the decision to not fly, or were too late to not have had a chance to make it this time.
😱2
Unpopular but soon to be mainstream opinion.

ChatGPT et. al. will make books much better!

In the pre-LLM era, some ~50% of books were meh. So-so. Trash. But people got used to reading books that are mostly trash, and the industry was in some form of an equilibrium between authors and readers.

In today's world, even if we freeze it "as is" although it is constantly changing, some 95% of books are below the bar of what an LLM can write.

Seriously, me asking nontrivial Rust questions to ChatGPT would probably make for a decent book. And, for me personally, it's far better than a decent book, since it's tailored exactly to the questions I have had at those particular times, with ChatGPT responding exactly to the context I had in mind (and was able to communicate through my questions).

95+% of topics for 95+% of people thus do not need any books. People would just be self-taught (or ChatGPT-taught), and that's not the exception, it's the norm.

Only those very few people who would want to go very deep will buy books.

And those will be the books written by human experts. Who not only understand the domain extremely well, but also can safely assume their readers have done their "LLM-powered" homework well enough.

Personally, I am sort of looking forward to it.

Especially if I plan to write books in this life. Since I no longer need to concern myself with completeness and length intros. Rather, I can focus on sharing my holistic view of a certain domain with a human touch, so that other humans who are reading the book are enjoying this human touch itself; not just the content.

Maybe somewhere along these lines we can [re]define what a human soul is. And perhaps a few years from now AI models would be able to provably demonstrate they do possess this soul, at which point we define it to be something else. Fun fun fun.
πŸ‘7πŸ”₯1
Folks, has anyone here tried coding in VR?

I’m getting more and more interested.

Especially given my long-term dream of being able to have the powerful phone + wireless keyboard + virtual monitors, for an immersive setup anywhere including while in the airport / on the plane.

But unlike many other things this one is not something I’m comfortable throwing money at β€œto see what works”.

So, good advice much appreciated, as well as perhaps ideas on how I can β€œtry it before I buy it”.
❀1
I’m nowhere near a socialist and nowhere near a token libertarian, but the fact that an American for-profit company can and wants to succeed in Denmark at these rates proves that taxes and well-being can be balanced better.

Not that I’m aware of any natural resources that Denmark is selling.

One can argue the US protecting Europe militarily is what contributes to lower defense spendings in Denmark, and thus to slightly more prosperity.

But I doubt it. I think it’s about the efficiency of the local government, coupled, of course, with the culture of people being educated and self-aware and conscious about consumption and well-being.

Would be delighted to be proven wrong.

At best, by simple facts (perhaps McDonald’s is a high-end place in Denmark, or perhaps it is subsidized somehow, or is a tax avoidance scheme of some sort.)

Or, at worst, by seeing this to end soon, due to worsening macroeconomic situation.

Because if things do get worse but McDonald’s in Denmark somehow stands strong, the only logical explanation would be that the US is indeed doing plenty of things ineffectively, to say the least.
πŸ‘3