I didn't set out to screed at this length. Shit happens. It might at first look appear to be a bramble patch. Appearances are deceiving.
Every word here is as deliberate as accidental off-the-cuff could possibly be. I suppose I could open up every second snarky entry on TV Tropes.org just listing all the rhetorical devices employed within (should my browser permit this).
However, I spent my wad in the composition and don't feeling like going back over it with a grooming rake. Colour me slovenly. Yes, Dragon Killers Wear Black, but not while actually killing dragons.
I have three displays, so I have three FF tab bars on my working desktop. The vast majority of my windows are full screen. I use middle mouse on the title bar (push to back) to rotate through multiple windows on one screen. I rarely have more than three windows per screen.
In addition, I have a bunch of desktops. Stray tabs from half-completed research topics get grouped together into a new window, which is titled with FireTitle. Then the window itself gets fired off to an alternate desktop. I find that my tab bars become annoying with more than 10 tabs, unproductive at 20 tabs, and almost unusable at 30 tabs (unless my work process is extremely stack oriented, and they all tear down again in LIFO order).
Sometimes a work process starts out LIFO, but then you realize that you're cross-referencing tabs on the same FF window that are far apart. Crossing the phase boundary from a stack-based workflow to a heap-based workflow with more than a dozen tabs open is usually what triggers forking a new window and a mark-and-sweep GC into a named tabs-for-later window, immediately "niced" onto a different desktop).
Now we need to get into why bookmarks suck.
You see, there used to be this technology called a "book", subtype: comprehensive reference work, subsubtype: warts and everything.
People talk about code smells. I'm more likely to talk about documentation smells. A super common documentation smell these days is "let's not even mention the possibility of not-yet-implemented, but super obvious feature that completes the conceptual paradigm". You know, the kind of software which discusses the fabulous cosine feature on their home page, mentions the related feature sin as a footnote in some appendix, and the tan feature not at all, anywhere, ever (maybe the bowels of an associated bug tracker as a feature request, largely snowed under by discussion of "do we REALLY need this" scrum-brainrot feature triage).
A scrummer might think, well, sin is sufficient, anything more would be feature creep. And there is some logic in that, as viewed by anyone who hoped that all Java floating point primitives would be bit-identical across all machine architectures, forever.
But it turns out that floating point is nasty, in the same way that managing memory is nasty, so nasty that we often abstract memory management right out of the software specification (some specifications are just too hard).
sin(x) equals cos(pi/2 - x) only for extremely high quality values of pi.
tan(x)=sin(x)/cos(x) only for a Taylor series expansion of sin(x) with enough precision to complicate memory management .
I'm just using this as a hyperbolic example of skin-deep identities.
Another example: if you've got copy and delete, do you really need move? (If you've previously abstracted memory management right out of the specification, you might struggle to answer "yes".)
What reference book technology used to do is have a little paragraph near the front of a relevant chapter which declared that for the purpose of this application, you do have a complete set of sin/cos/tan, but you don't have a complete set of copy/delete/move (some composition required).
There's a systemic reason why the official online documentation goes to code-smell "obnoxious silence". Because Stack Overflow. Remember how we all loved the way PHP defined its formal semantics by long user-contributed discussion pages? Well, now we've abstracted a formal declaration of scope right out of most project's official purview.
Which is often great. But it leads to this little problem that it now takes five to ten Stack Overflow tabs to add up to a single useful paragraph from original technology reference book.
I played with SaltStack for a couple of weeks earlier this year. Lacking a strong conceptual overview to orient myself, I soon had window after window after window filled with partially-digested Stack Overflow threads, while I played Great Detective. (SaltStack is particularly obnoxious in the tone of its official meta-documentation having zero on-the-ground caloric content.) In addition, Python lives in about tenth place on my proficient languages list. So I soon had window upon window of Python idiom Rosetta stones (more like Rosetta pebbles).
Think about it. I'm not going to adapt my workflow to use FUCKING BOOKMARKS for this kind of cruft.
I realize that the GC generation is not as well equipped to reason formally about object lifetimes as my own, but let's go there, anyway.
What is the likely object lifetime of these steaming piles of Stack Overflow tea leaves and crunchy expanses of Python-idiom pink gravel?
Depends on the halting problem.
My screams will halt the moment some damn syntactic frob actually works. (How to find out what SaltStack just attempted to do before puking its guts out ... yet another simmering thicket of thin-gruel tab soup).
And we all know about the Great Straight Line of pulling your hair out over sprawling ecosystems one doesn't yet comprehend at any deep level: we invented cheap, cheap, cheap git branches to handle this. Cheap as in 1600 branches = piece of cake. Cheap as in 1600 ZFS datasets (or 1600 ZFS snapshots) = piece of cake.
But, browser tabs, my God! now we're spending real money.
It actually happens, with fractal logic, that many of my tab flurries soon resolve themselves and I punt them en masse, while other tab flurries stubbornly persist, until at the end of the week I consign them to my how the "hell could this still not work?" queue. (I'm sure I had one of those after using FreeNAS to set up PXE boot to load a test OS onto a crashbox that was hard-locking at the first BIOS taste of EFI-formatted thumb drives. I finally got it to work with a few bizarre contortions that I never completely managed to smooth over.)
Here's the thing. Bookmarks were invented in an era when books were useful consolidations of warts-and-everything full disclosure. This no longer exists, in the main.
For most of my disposable tabs, there's simply not enough there there to serialize from my working set into a formal bookmarks folder.
I was reading the other day about how Python doesn't have many scopes (after eliminating braces, who knew?) "Well, if your loop index names start to collide, consider breaking your function up into smaller pieces." and "in practice, I don't find that I trip over this problem all that much" (sounds a bit to my ear like the hoary C++ programmer canonically afflicted with Stockholm syndrome). It was funny, because I had just watched a video where Stroustrup (or Meyers?) talked about the dysfunction of the C++ standardization process, pointing out that inside Microsoft, Visual Studio C++ needed to be able to compile functions containing 40,000 statements (everyone else was implied to have their own very special pickle sauce), which makes it hard for the big players to all jump onto the same tooling boat. C++ is exactly the language that doesn't say "40000 statements in one function—you must be mad".
And now we have a computer science profession divided into two camps: (A) be conservative in what you refuse, and considerate in what you demand; and (B) let's just add the cure for insanity into the global water supply.
Turns out, it's far too easy to play "father knows best" at arm's length.
You have this large code base that grew organically, with less than optimal foresight (picture, if you will, the original Mozilla).
You realize in sober retrospect that some important things pulled off onto a rusty side track Destination Ugly and you want to Do the Right Thing and fix this. But some helpful fairy whispered into your ear "the root of all evil is concurrent refactoring" so you set out with your best Bilbo Baggins walking stick (adventuresome, yet oh-so-Shire all the way down to your squishable bone marrow).
You've Got a Plan. You're going to corral the worst of the worst of the ugliness into one place, where it can reside with the "deprecated" ankle bracelet until you can finally tip it into the ocean once and for all (FreeNAS Corral combined all these steps into a single, grand yowl but that's another story.)
But think about it: you're basically compressing Pure Evil until the ankle bracelet fits the potty-mouthed pea-hating princess.
And somehow, by a painful litany of degrees—you had to be there to fully understand—you end up with a Mordor() function containing 40000 statements (in Microsoft's case, this likely stems from the original smelting conditions).
Of course, you could refactor Mordor(), as a side project to Securing Gondor. Which pretty soon (consult any corpse in the Dead Marsh) will spin off into a side side project refactoring Nine Lords.
Here's the thing. Python is So Beautiful (By Design) that you always exist at depth 0 in the Refactor of Eden, and the moment you stray but a little, the Phial of Galadriel will illuminate your immediate safe return to happy Hobbiton.
"What concurrent refactor?" ask the cute, innocent cherubs of strange Uncle Bilbo.
They do say that youth and beauty are wasted on the young. To which Postel's law is the One True permanent testament.
Stubbornly, I clad myself in my no-limits-anywhere ZFS mithril armour, which boldly proclaims: thou shalt never be caught with your pants down in Concurrent Refactor at The Worst Possible Moment instigated by an Ungenerous Tool.
Only this: How to increase MNAMELEN on FreeBSD 4-stable
This raises two questions: Why do i386 and alpha have different limits? And shouldn't 80 (or even 72) characters be enough for everybody?
For the first question: The value of MNAMELEN is chosen so that the size of the statfs structure is exactly 256 bytes, so it will align nicely on memory page boundaries. The alpha platform is a 64-bit architecture, so some elements of the statfs structure take more space. Therefore, MNAMELEN is a bit smaller in order to compensate for that, so that the overall size stays 256 bytes.
Uh, oh. I've got a bad feeling about this.
But still, shouldn't 80 (or 72) characters be more than enough? In the above example, the longest filesystem node takes 14 characters.
Sure sounds like the Root of All Evil about to clear a giant phlegm wodge.
For most needs, it is indeed enough, but there are cases where you run into trouble.
At this point, the author goes off onto a not-entirely-contrived narrative of pain, entirely unrelated to running nested ZFS jails, with nested delegation (e.g. Poudriere inside iocage).
The patch described on this page will increase the limit to 208 characters (i386) or 200 characters (alpha), respectively. BUT: It will break binary compatibility for some programs. Not for all, but for some. Notably, you'll have to recompile any non-standard shells such as bash and zsh, Tools that do things to your file systems such as backup programs (e.g. Amanda), and probably a few other things. On the bright side, you will be able to continue using your old Netscape 4.x binary. ;-)
To be more exact: All programs that use the statfs(), fstatfs or fhstatfs() system calls will break, i.e. they will crash with signal 11 (SIGSEGV). You will have to recompile them from source. If the source code is not available, you've got a problem.
Of course, everything you do, you do it on your own risk. If it blows up your machine, don't blame me. You have been warned. If you're not familiar with compiling kernels and with the "make world" process, don't do it.
Your mission, should you choose to accept this, is to Imagine the Tabs. Should one choose to walk this path, they would surely breed like fucking tribbles: I spit on your Mordor() and raise you a non-standard sizeof(statfs_t).
So sure, fine, for all you comfortable Hobbits snug in your bed, use bookmarks.
But for myself, I've got some serious necromancing to do. Any necromancer in my neck of Mirkwood dons ten bandoliers at the first sniff of ominously contorted spider silk.
No doubt, in post-enlightenment Fangorn, everyone now subscribes to Closet Organizzar Monthly. Well, suit yourselves, but please remove your grubby Martha Stewart fingers from my frictionless bandolier bangles.