I came from backend development, writing mostly in C++ and Python for most of my career. I've always found modern JavaScript frameworks so difficult to reason about because it feels like I'm always working through nine layers of abstraction.
Last year, I read Julia Evans's article "A little bit of plain Javascript can do a lot," and it inspired me to try to push regular JS as far as it would go in my next project. It's now 8 months later, I have thousands of users, and I'm still using plain JavaScript.[1] No babel/webpack or anything. I do use Flask to aggregate source files together, but I purposely avoid any cleverness there. Overall, I find the code much easier to debug than any of my other web apps.
One nice advantage of using only vanilla JS is that it's easier to find contributors. If you're a React project, then only React developers can contribute. But if you're a vanilla JS project, you're not bound to developers of any particular religion. Vue, React, Angular, Svelte developers can all work in a vanilla JS codebase.
I was once working with a sr exec who was told by his boss: "you're not picking enough fights." They weren't fighting hard enough, pushing for enough change, pissing off enough of the old guard by changing the company's way of doing business. Their boss could tell because people weren't screaming.
The other reason you bring your own people in at very senior levels is because, when battle lines are drawn (do X or Y, where X is better but Y has a collective millenia of man-hours already sunk in), a sr exec has to know their reports have latched their careers to them, and not the rest of the company. Because if that's not the case, the sr exec has no chance at all.
It's Hobbes' leviathan: you are your org, and vice verse. Gotta make sure everyone acts like it.
I ask my junior sysadmins / new hires to write a daily log for their first year or so.
What did you do today?
What do you need help with?
What went well?
What was frustrating?
What should we change or fix?
When we get together to talk about their day or their week, these logs are extremely useful. Sometimes they generate tickets, sometimes book or course recommendations, people to talk to, sometimes just conversations.
This is a very interesting question since it is a fundamental problem in any group human activity. I have found the following useful;
* Management: A political activity by Ted Stephenson. For some reason, most people are not aware of this book. Deals with Power, Conflict, Bargaining, Compromise, Participation and Change. The opening line of the preface states "This book presents the view that management is substantially a political activity, based on power and characterized by conflict". Since we are dealing with Human organisms this is absolutely the right approach to take.
* The Empowered Manager: Positive Political Skills at Work by Peter Block is also good but more idealistic. But be aware that trying to be/do good does not guarantee reciprocation.
* The Complete Upmanship: Including Gamesmanship, Lifemanship, One-upmanship and Supermanship by Stephen Potter. Humourous, but a great deal of life advice in it. Basically, how to put down other people and show yourself in the best light using "genteel" psychological means.
* Behavior Modification: Principles and Procedures by Raymond Miltenberger. ABA psychology course textbook which is a must read.
* Brainwashing: The science of thought control by Kathleen Taylor. The title is bit sensationalist, but the content is very relevant.
BDDs / ZDDs are really cool, but this isn't a good link for Hacker News IMO. And the title is clickbait: its not the famous Knuth quote (and the famous Knuth quote isn't even in the blogpost).
Maybe the Wikipedia page is a better start. Or maybe a blogpost out there is a better description of BDDs.
-------
Okay, so what is a BDD? Lets start with what problem we're trying to solve.
"Decision Tables are useful". Lets start with that. They're useful in a variety of algorithms and situations. The above blogpost is your "ELI5" introduction to this subject.
Now lets start talking HARD problems, I'm talking NP-hard, like traveling salesman. We can use "decision tables" to decide if "CityA + CityB" should be in a certain order in the path, or if it should be "CityB -> CityA", and the like. Ultimately, its all a table of decisions, but this table starts getting big. Very, very, very big.
Exponentially big even. Every "column" you add doubles the size of the table. We can't fundamentally get around this, but we can offer a kind of "compression". Lets start with a 3-bit table and think about things.
Now instead of taking up 8-rows, the table only takes up 4-rows. That's the general gist of the problem: these "tables" clearly have compression available.
Now Binary Decision Trees are a compression methodology. Instead of storing a table, you store a graph. One such graph is...
Its the same information as the table, but now in graph form. It achieves the "compression" thing we're looking for.
Ultimately: that's the goal. To "compress" these tables so that they take up less RAM. But we still want to perform operations on them (such as AND/OR/NOT, but also cross-joins and a bunch of relational-algebra). The overall discovery was that the graph-form, the Binary Decision Tree, is actually pretty efficient with a large number of operations.
----
EDIT: Ah right. And the "key feature" of BDDs is the ability to share "subtables" between different tables. Notice that B=0 has two links, so there is substantial "column-savings" compared to the original table.
The "compressed table" had to store 000 and 001 in two different rows. But the A=0 -> B=0 link is "redundant information" in that situation, and itself can be compressed.
The graph form compresses that information, while the "compressed table" doesn't. These small savings don't matter on 3-bit examples. But on a 16-bit or 32-bit or larger graph, those sorts of things really add up to huge amounts of compression.
And once you start sharing subtables among "unrelated" tables (ex: lets say you have 100-such tables. The graph form provides an obvious "common subtable" that can be shared between say 20+ tables at a time. The "compressed table" cannot share such subtables in any obvious way).
You don't want to go too crazy: the optimal sub-table compression is itself an NP complete problem. But don't worry about that: this is quite common on NP-hard situations. You need to solve NP-hard subproblems to solve the greater NP-hard problem efficiently...
Instead, find a greedy, "decent" solution to compression. Simple heuristics (column ordering heuristics, variable-ordering heuristics, etc. etc.) and the like are common here. As long as it works kinda-sorta okay, you're probably fine.
I've recently joined an existing fully remote team. Once or twice a week someone will start an Among Us session, with a parallel Google Meet video call. People will play Among Us, and then discuss who the Imposter is in the video call. Once the game resumes, people mute their mics and disable video.
It's been a neat way to spend some social time with my new colleagues. Being on non-work calls has helped me get a sense of who my new colleagues are and I feel it's helped me integrate in to the team.
The point of the pure text recognition service is to draw business; not to make a profit. Without the "Advanced Features", the service operates at a slight loss. However, the profit margins and total volume we do on "Advanced Features" covers the loss and turns a profit.
On the Hydra (Documents-to-Database) side of things, I think we charge enough. Margins are very high.
> Puzzles start feeling like they're asking more for busywork than for puzzle-solving. I enjoy thinking about "how do I do this?" I don't enjoy thinking "well, I know exactly what I want to do, but it's a huge slog to actually go through the motions."
Notion has taken over the tech/design industry by a storm, and many people have used it to create web pages. However, Notion doesn’t allow custom domain and the page URL contains a long uuid (for example: https://www.notion.so/The-Beauty-of-Notion-4663b221fd154c07b...)
I built Fruition to solve exactly that. You can use a custom domain and add pretty URL slugs like https://fruitionsite.com/showcase. You can also add custom font and scripts like Google Analytics. It’s all free and open source.
I shared this on a couple of Notion communities a month ago, and 30000 people have checked it out since. Hundreds of sites have been built with Notion and Fruition.
When I was in university, my girlfriend at the time taught me about good note-taking.
- Use paper. I could annotate printed PPT slides with the whitespace on 4 per page, but sometimes would overflow onto the (blank) reverse side. Computers have too many distracting notifications.
- Write down questions with a big (?) and ask them at an appropriate time. Professors care much more about that than you think, in Western education systems (don't get me started about my ill-fated Ph.D. attempt in Korea).
- Use coloured pens. If you think this looks too feminine or gay, get over yourself. It's SO much easier to quickly speed-read and study once you're doing this. I would use red for formulae, green/pink for definitions, black for examples, pencil for diagrams, blue for everything else.
Oh hey, that's my web site. :) Those PDFs were generated through a rather nasty process (print to PDF on a Mac OS 9 system), and the quality is a little uneven.
* Flowsheets V2: a prototype programming environment where you see real data as you program instead of imagining it in your head:
https://www.youtube.com/watch?v=y1Ca5czOY7Q
* Marilyn Maloney: an interactive explanation of a program designed so that even children could easily understand how it works:
http://glench.com/MarilynMaloney/
Same, of course. I added some bash aliases to make it much easier to write to the file, and use markdown instead to allow tracking todos easier.
I also added a vim command to push it to github while editing. These just remove barriers to opening and syncing the file, but the concept is the same.
Bukowski published his first novel at 51. He had written a couple of stories and poems before his 30s, but spend most of the next 1.5 decade drunk and not writing.
Burroughs published his first noval at 39. He had just written a few articles until then.
Walt Whitman first published a poetry book at 36.
Toni Morrison wrote her first novel at 39.
Bram Stoker wrote Dracula around 50. He worked as a public servant before, and wrote theatre reviews.
Anthony Burgess (of Clockwork Orange fame) first published at 39.
Raymond Chandler worked as a businessman (in the oil industry IIRC) and started writing novels at 51.
Wallace Stevens, celebrated poet, worked office jobs, and first published at 35, but his best work was done in his 50s. He went on to win the Pulitzer price at 75.
Beatrix Potter wrote her first book at 35.
Jules Verne, who went on to write tons of classics, started at 35.
Ian Flemming worked as a spy in Britain, and only started writing his books (James Bond) when he was 44.
In another genre, Martin Rev released his first album (with Suicide) at 39, Leonard Cohen started as a singer/songwriter at 33, and Vi Subversa (nee Frances Sokolov), started singing and performing as the vocalist of the influential Poison Girls punk band at the tender age of 44, and as a mother of two.
>Early means in your teens, early 20s. After that it is near impossible to master the unconscious mastery of the basics of whatever craft you choose.
That presupposes that you need to. Modern painters don't need to learn to learn to paint like Michalangelo to express themselves (and many don't know), modern musicians don't need to go into classical training or even know the scales (e.g. somebody like DJ Shadow and tons of others).
As for writing, it can be more about sensitivity to details and having an interesting story or viewpoint to express, than mastering some genre rules. One can learn most about writing from having read a lot (which is also what most writers advise young writers to do).
Kind of like how you don't need to study CS and study TAoCP to learn to program and write something useful. There are stories that picked up programming later in life and went on to write succesful apps and open source projects.
I can recommend using this flowchart "How to Get Motivated: A Guide for Defeating Procrastination" [1]. Consider putting it on your background on your computer.
> You need to understand that your motivation to read something new, like a new paper, or a new blogpost, fades away pretty quickly. Whatever way you use to obtain new things to bookmark, next time you're about to bookmark something interesting stop, and read the damn thing. Waste some of your precious time to read it.
Actually, I found out that if you procrastinate reading material, and you still want to read it in the near future (e.g. within a few months) it is probably worth reading it, and you should give it a whirl.
It is also OK to procrastinate with some material. For example, I still want to read Cryptonomicon, but I am intimidated by its size. However, good fiction ages well. I assume it is still a blast if I read it in 2025. So I don't feel a need for haste. I also consider fiction akin to gaming on a computer (pleasure is not useless, but can only be applied within leisure time), whereas non-fiction ages less good, and can be easier applied wrt your profession or life.
I find e-mail quite easy to deal with. I read it, process it (deal with it), and delete it (move it to trash). If I cannot deal with it right away, I don't delete it, but once in a while I go through my e-mails to get rid of such. If it is important (ie. important deadline), I star it. Approx once a year, I clean my mailbox, and make new folders for the new year.
As for news, a good newsreader with RSS which syncs between your devices yet respects your privacy is what I recommend. Don't follow too many websites, and make sure you differentiate between work(-related) and pleasure. Don't bother to follow all your websites. It is OK to miss news, comics, etc. Likewise, using Firefox on mobile and desktop allows to sync between the 2. I usually send my browser tabs from mobile to my laptop which is much more easy to interface with (IMO, YMMV, I'm from the previous century).
Also, I like to combine cleaning my stuff with other tasks. For example, you can do the dishes while listening to a podcast, or you can watch a documentary which does not interest you completely with something like reading the news. You cannot multitask, but you can change focus when it is interesting to you. This way, you can get more things done.
One thing I did learn, is that I should prioritize time with my daughter. I learned it the hard way (tho she's only 2 y.o.), and I guess if it doesn't occur to you, you can only learn it that way. Time with my daughter is the most valuable because she goes through her young life relatively quick, so if I want to experience these changes including the fun parts, then I have to spend time with her. Even if it is sometimes incredibly (mind-numbing) boring, there's no ups without such, and it isn't so much about me; it is about her, for her these experiences are interesting, and I need to remind myself about that.
As it stands, Sonos is effectively buying their old speakers and then throwing them away. Could they not recoup their costs and avoid e-waste by simply selling the used Sonos devices into a market that can't afford the brand new ones? I thought this is how most phone trade-in programs worked, which seems like a mature process now.
Theres a great talk from gmunk that goes into the inspiration and process for a lot of his projects. And some general good life advice for anyone that creates with a passion
I run a pretty active community of about 650 in the local news publishing space. Start when you have a handful of smart people with a common agenda (we originally called it "the thinktank").
Then organize them using software that stays in their day to day workflow like an email list or social media group. Despite its shortcomings, I used Facebook groups and it works kind of well.
Then link to, market, and promote your group wherever appropriate. Ours is still approval-based to keep the quality high and the users engaged.