Can technical terms not be emphasized this way? “Today’s post is all about <em>malloc</em> and dynamic memory.” If I were reading that aloud, I might put a little pause around malloc so everybody hears it.

I think <i> would be better for technical terms: <i>malloc</i>. You are pronouncing “malloc” differently, but not because you are stressing it. Your change of voice is similar to the change in voice you might use when quoting a book title, which should also be marked up with <i>: “But what about <i>The Wind in the Willows</i>?”.

Good find with the <dfn> tag, but I’m not sure that <cite> could replace <i> for the book title. From the description of <cite> it sounds like it could, but the HTML demo on that MDN page includes a book title written with <i>, with <cite> wrapped around it, as in “check out <cite><i>The Wind in the Willows</i> by Kenneth Grahame</cite>”. Making the situation more confusing, the page says that the W3C and the WHATWG specs conflict on whether <cite> can include more than the book title.

Good catch. To make things even more confusing, the MDN page also says,

Typically, browsers style the contents of a <cite> element in italics by default.

So maybe it’s best just to stay away from that one, or at least to treat it as a semantic-only tag and handle the formatting yourself. (Some of those example uses would traditionally be formatted in quotes, not italics, so maybe that’s just as well.)

I beg all my fellow crustaceans to please, please use Firefox. Not because you think it’s better, but because it needs our support. Technology only gets better with investment, and if we don’t invest in Firefox, we will lose the web to chrome.

On the other hand, WebSocket debugging (mostly frame inspection) is impossible in Firefox without an extension. I try not to install any extensions that I don’t absolutely need and Chrome has been treating me just fine in this regard[1].

Whether or not I agree with Google’s direction is now a moot point. I need Chrome to do what I do with extensions.

As soon as Firefox supports WebSocket debugging natively, I will be perfectly happy to switch.

[1] I mostly oppose extensions because of questionable maintenance cycles. I allow uBlock and aXe because they have large communities backing them.

Axe (https://www.deque.com/axe/) seems amazing. I know it wasn’t the focus of your post – but I somehow missed this when debugging an accessibility issue just recently, I wish I had stumbled onto it. Thanks!

I have never needed to debug WebSockets and see no reason for that functionality to bloat the basic browser for everybody. Too many extensions might not be a good thing but if you need specific functionality, there’s no reason to hold back. If it really bothers you, run separate profiles for web development and browsing. I have somewhat more than two extensions and haven’t had any problems.

I do understand your sentiment, but the only extension that I see these days is marked “Experimental”.

On the other hand, I don’t see how it would “bloat” a browser very much. (Disclaimer: I have never written a browser or contributed to any. I am open to being proved wrong.) I have written a WebSockets library myself, and it’s not a complex protocol. It can’t be too expensive to update a UI element on every (websocket) frame.

The extensions are all terrible – but what’s more important is that I lost the belief that any kind of vertical tab functionality has any chance of long-term survival. Even if support was added now, it would be a constant battle to keep it and I’m frankly not interested in such fights anymore.

Mozilla is chasing their idealized “average user” and is determined to push everyone into their one-size-fits-all idea of user interface design – anyone not happy with that can screw off, if it was for Mozilla.

It’s 2018 – I don’t see why I even have to argue for vertical tabs and mouse gestures anymore. I just pick a browser vendor which hasn’t been asleep on the wheel for the last 5 years and ships with these features out of the box.

And if the web in the future ends up as some proprietary API defined by whatever Google Chrome implements, because Firefox went down, Mozilla has only itself to blame.

The extensions are all terrible – but what’s more important is that I lost the belief that any kind of vertical tab functionality has any chance of long-term survival. Even if support was added now, it would be a constant battle to keep it and I’m frankly not interested in such fights anymore.
The whole point of moving to WebExtensions was long term support. They couldn’t make significant changes without breaking a lot of the old extensions. The whole point was to unhook extensions from the internals so they can refactor around them and keep supporting them.

I’m not @soc, but I wish Firefox had delayed their disabling of old-style extensions in Firefox 57 until they had replicated more of the old functionality with the WebExtensions API – mainly functionality related to interface customization, tabs, and sessions.

Yes, during the time of that delay, old-style extensions would continue to break with each release, but the maintainers of Tree Style Tabs and other powerful extensions had already been keeping up with each release by releasing fixed versions. They probably could have continued updating their extensions until WebExtensions supported their required functionality. And some users might prefer to run slightly-buggy older extensions for a bit instead of switching to the feature-lacking new extensions straight away – they should have that choice.

What’s the improvement? The new API was so bad that they literally had to pull the plug on the existing API to force extension authors to migrate. That just doesn’t happen in cases where the API is “good”, developers are usually eager to adopt them and migrate their code.

Let’s not accuse people you disagree with that they are “against improvements” – it’s just that the improvements have to actually exist, and in this case the API clearly wasn’t ready. This whole fiasco feels like another instance of CADT-driven development and the failure of management to reign in on it.

The old extension API provided direct access to the JavaScript context of both the chrome and the tab within a single thread, so installing an XUL extension was disabling multiprocess mode. Multiprocess mode seems like an improvement; in old Firefox, a misbehaving piece of JavaScript would lock up the browser for about a second before eventually popping up a dialog offering to kill it, whereas in a multiprocess browser, it should be possible to switch and close tabs no matter what the web page inside does. The fact that nobody notices when it works correctly seems to make it the opposite of Attention-Deficient-Driven-Design; it’s the “focus on quality of implementation, even at the expense of features” design that we should be encouraging.

The logical alternative to “WebExtension For The Future(tm)” would’ve been to just expose all of the relevant threads of execution directly to the XUL extensions. run-this-in-the-chome.xul and run-this-in-every-tab.xul and message pass between them. But at that point, we’re talking about having three different extension APIs in Firefox.

Which isn’t to say that I think you’re against improvement. I am saying that you’re thinking too much like a developer, and not enough like the poor sod who has to do QA and Support triage.

Improving the actual core of Firefox. They’re basically ripping out and replacing large components every other release. This would break large amount of plugins constantly. Hell, plugins wouldn’t even work in Nightly. I do agree with @roryokane that they should have tried to improve it before cutting support. The new API is definitely missing many things but it was the right decision to make for the long term stability of Firefox.

Eh … WAT? Mozilla went the extra mile with their recent extension API changes to make things – that worked before – impossible to implement with a recent Firefox version.
The current state of tab extensions is this terrible, because Mozilla explicitly made it this way.

I used Firefox for more than 15 years – the only thing I wanted was to be left alone.

It’s one of the laws of the internet at this point: Every thread about Firefox is always bound to attract someone complaining about WebExtensions not supporting their pet feature that was possible with the awful and insecure old extension system.

If you’re care about “non terrible” (whatever that means — Tree Style Tab looks perfect to me) vertical tabs more than anything — sure, use a browser that has them.

But you seem really convinced that Firefox could “go down” because of not supporting these relatively obscure power user features well?? The “average user” they’re “chasing” is not “idealized”. The actual vast majority of people do not choose browsers based on vertical tabs and mouse gestures. 50% of Firefox users do not have a single extension installed, according to telemetry. The majority of the other 50% probably only have an ad blocker.

Picking just one example: Having the navigation bar at a higher level of the visual hierarchy is just wrong – the tab panel isn’t owned by the navigation bar, the navigation bar belongs to a specific tab! Needless to say, all of the vertical tab extensions are forced to be wrong, because they lack the API do implement the UI correctly.

But you seem really convinced that Firefox could “go down” because of not supporting these relatively obscure power user features well?? The “average user” they’re “chasing” is not “idealized”. The actual vast majority of people do not choose browsers based on vertical tabs and mouse gestures. 50% of Firefox users do not have a single extension installed, according to telemetry. The majority of the other 50% probably only have an ad blocker.

You can only go so far alienating the most loyal users that use Firefox for specific purposes until the stop installing/recommending it to their less technically-inclined friends and relatives.

Mozilla is so busy chasing after Chrome that it doesn’t even realize that most Chrome users will never switch. They use Chrome because “the internet” (www.google.com) told them so. As long as Mozilla can’t make Google recommend Firefox on their frontpage, this will not change.

Discarding their most loyal users while trying to get people to adopt Firefox who simply aren’t interested – this is a recipe for disaster.

I still miss them, didn’t cripple me, but really hurt. The other thing about Tree (not just vertical) tabs that FF used to have was that the subtree was contextual to the parent tree. So, when you opened a link in a background tab, it was opened in a new tab that was a child of your current tab. For doing like documentation hunting / research it was amazing and I still haven’t found its peer.

I don’t think we’ll ever get the majority of browser share back into the hands of a (relatively) sane organization like Mozilla—but we can at least get enough people to make supporting alternative browsers a priority. On the other hand, the chances that web devs will ever feel pressured to support the browsers you mentioned, is close to nil. (No pun intended.)

What would you like me to say, that Firefox’s existence is worthless? This is an absurd thing to insinuate.

funded by google

No. I’m not sure whether you’re speaking in hyperbole, misunderstood what I was saying, and/or altogether skipped reading what I wrote. But this is just not correct. If Google really had Mozilla by the balls as you suggest, they would coerce them to stop adding privacy features to their browser that, e.g., block Google Analytics on all sites.

sends data to google by default

Yes, though it seems they’ve been as careful as one could be about this. Also to be fair, if you’re browsing with DNT off, you’re likely to get tracked by Google at some point anyway. But the fact that extensions can’t block this does have me worried.

i’m sorry if i misread something you wrote. i’m just curious what benefit you expect to gain if more people start using firefox. if everyone switched to firefox, google could simply tighten their control over mozilla (continuing the trend of the past 10 years), and they would still have control over how people access the web.

It seems you’re using “control” in a very abstract sense, and I’m having trouble following. Maybe I’m just missing some context, but what concrete actions have Google taken over the past decade to control the whole of Mozilla?

Google has pushed through complex standards such as HTTP/2 and new rendering behaviors, which Mozilla implements in order to not “fall behind.” They are able implement and maintain such complexity due to funding they receive from Google, including their deal to make Google the default search engine in Firefox (as I said earlier, I couldn’t find any breakdown of what % of Mozilla’s funding comes from Google).

For evidence of the influence this funding has, compare the existence of Mozilla’s Facebook Container to the non-existence of a Google Container.

No word on the exact breakdown. Visit their 2017 report and scroll all the way to the bottom, and you’ll get a couple of helpful links. One of them is to a wiki page that describes exactly what each search engine gets in return for their investment.

I would also like to know the exact breakdown, but I’d expect all those companies would get a little testy if the exact amount were disclosed. And anyway, we know what the lump sum is (around half a billion), and we can assume that most of it comes from Google.

the non-existence of a Google Container

They certainly haven’t made one themselves, but there’s nothing stopping others from forking one off! And anyway, I think it’s more so fear on Mozilla’s part than any concrete warning from Google against doing so.

Perhaps this is naïveté on my part, but I really do think Google just want their search engine to be the default for Firefox. In any case, if they really wanted to exert their dominance over the browser field, they could always just… you know… stop funding Mozilla. Remember: Google is in the “web market” first & the “software market” second. Having browser dominance is just one of many means to the same end. I believe their continued funding of Mozilla attests to that.

It doesn’t have to be a direct threat from Google to make a difference. Direct threats are a very narrow way in which power operates and there’s no reason that should be the only type of control we care about.

Yes Google’s goal of dominating the browser market is secondary to their goal of dominating the web. Then we agree that Google’s funding of Firefox is in keeping with their long-term goal of web dominance.

if they really wanted to exert their dominance over the browser field, they could always just… you know… stop funding Mozilla.

Likewise, if Firefox was a threat to their primary goal of web dominance, they could stop funding Mozilla. So doesn’t it stand to reason that using Firefox is not an effective way to resist Google’s web dominance? At least Google doesn’t think so.

Likewise, if Firefox was a threat to their primary goal of web dominance, they could stop funding Mozilla. So doesn’t it stand to reason that using Firefox is not an effective way to resist Google’s web dominance?

You make some good points, but you’re ultimately using the language of a “black or white” argument here. In my view, if Google were to stop funding Mozilla they would still have other sponsors. And that’s not to mention the huge wave this would make in the press—even if most people don’t use Firefox, they’re at least aware of it. In a strange sense, Google cannot afford to stop funding Mozilla. If they do, they lose their influence over the Firefox project and get huge backlash.

I think this is something the Mozilla organization were well aware of when they made the decision to accept search engines as a funding source. They made themselves the center of attention, something to be competed over. And in so doing, they ensured their longevity, even as Google’s influence continued to grow.

Of course this has negative side effects, such as companies like Google having influence over them. But in this day & age, the game is no longer to be free of influence from Google; that’s Round 2. Round 1 is to achieve enough usage to exert influence on what technologies are actually adopted. In that sense, Mozilla is at the discussion table, while netsurf, dillo, and mothra (as much as I’d love to love them) are not and likely never will be.

I know you were joking, but I do feel like there is something to be said for the simplicity of systems like gopher. The web is so complicated nowadays that building a fully functional web browser requires software engineering on a grand scale.

I was partially joking. I know there are new ActivityPub tools like Pleroma that support Gopher and I’ve though about adding support to generate/server gopher content for my own blog. I realize it’s still kinda a joke within the community, but you’re right about there being something simple about just having content without all the noise.

I’ve relatively recently switched to FF, but still use Chrome for web dev. The dev tools still seem quite more advanced and the browser is much less likely to lock up completely if I have a JS issue that’s chewing CPU.

I tried to use Firefox on my desktop. It was okay, not any better or worse than Chrome for casual browsing apart from private browsing Not Working The Way It Should relative to Chrome (certain cookies didn’t work across tabs in the same Firefox private window). I’d actually want to use Firefox if this was my entire Firefox experience.

I tried to use Firefox on my laptop. Site icons from bookmarks don’t sync for whatever reason (I looked up the ticket and it seems to be a policy problem where the perfect is the enemy of the kinda good enough), but it’s just a minor annoyance. The laptop is also pretty old and for that or whatever reason has hardware accelerated video decoding blacklisted in Firefox with no way to turn it back on (it used to work a few years ago with Firefox until it didn’t), so I can’t even play 720p YouTube videos at an acceptable framerate and noise level.

I tried to use Firefox on my Android phone. Bookmarks were completely useless with no way to organize them. I couldn’t even organize on a desktop Firefox and sync them over to the phone since they just came out in some random order with no way to sort them alphabetically. There was also something buggy with the history where clearing history didn’t quite clear history (pages didn’t show up in history, but links remained colored as visited if I opened the page again) unless I also exited the app, but I don’t remember the details exactly. At least I could use UBO.

This was all within the last month. I used to use Firefox before I used Chrome, but Chrome just works right now.

I definitely understand that Chrome works better for many users and you gave some good examples of where firefox fails. My point was that people need to use and support firefox despite it being worse than chrome in many ways. I’m asking people to make sacrifices by taking a principled position. I also recognize most users might not do that, but certainly, tech people might!? But maybe I’m wrong here, maybe the new kids don’t care about an open internet.

I once tried to implement this for an in-browser editor using the tab-size CSS property, only to find that no browsers implement that property fully. The CSS standard says that you should be able to pass any distance such as 17px to set the width of each tab character, but in practice browsers only support passing an integer such as 2, which makes the width an exact multiple of the width of the font’s space character.

It’s a shame that no text formatting API I have ever seen makes implementing elastic tabstops easy.

Though, thinking about the above limitation of CSS implementations, maybe it would be possible to combine tab-size with a web font that changes tab characters to be one pixel wide? The unicode-range property of a @font-face declaration can be used to specify that the font is only used to render certain characters.

The OptiCSS part of CSS Blocks, a sub-library that compiles stylesheets for peformance, seems to do the same thing as the existing library Styletron. Styletron does the same splitting of rules into a rule for each set of styles that is shared across elements, followed by giving multiple classes to elements that assemble all subsets of rules they need. Styletron’s introductory blog post explains more about the concept.

That’s copyright law mostly with patent provisions in some licenses for the specific work as is. That leaves patents for how it’s used or combined with other software. Oracle, Microsoft, and IBM in particular like to file lots of those. I dont know if any are on GraalVM because just looking triples the damages. I never look.

If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an explicit
geographical distribution limitation excluding those countries, so that
distribution is permitted only in or among countries not thus excluded. In
such case, this License incorporates the limitation as if written in the body
of this License.

Seems to me that the patent clause is opt-in rather than required. OpenJDK uses the GPL v2, which lacks the clear patent grants of v3.

Thank you. That is very interesting reading. Sounds like the waters are muddy and we need an actual lawyer to chime in.

I partially side with Oracle on the Google case (excluding copyrighting APIs). Google had plenty of opportunity to licence Java from Sun, or indeed to buy Sun entirely, but they chose to incompatibly re-implement it and developers have been paying the price for that choice ever since. But it looks like Google finally did the right thing in the end:
http://www.fosspatents.com/2015/12/google-switches-to-open-source-license.html

Not all of it. The GraalVM Downloads page makes it clear that there are two versions of GraalVM: Community Edition (CE) and Enterprise Edition (EE). GraalVM EE is closed-source, and it’s the only version with support for macOS and with “additional performance, security, and scalability”.

The terminal app iTerm2 for macOS has this feature built-in. Just activate the menu item View > Show Timestamps (⇧⌘E) to display an overlay with the timestamps of every line in history. You don’t even have to turn the feature on before running the command to profile – iTerm2 is always saving past timestamps just in case.

What about triple-dot ranges that exclude the end value? The bug report said “I don’t think ary[1...] (exclusive) is meaningful.” Despite this, I see from the commit that endless ranges with triple-dot were implemented. There is only one test case that uses the range in a way other than inspecting its attributes, and that test shows that a 3...nil range iterates over the same numbers as a 3..nil range when passed to Array#fill.

What about infinite ranges in the other direction, (..0) and (nil..0)? They could theoretically be used for checking if a number is less than 100, for example. Well, they are not part of this feature because it would be too hard to implement in Ruby’s grammar:

It is better to have ary[..1] as a consistency. But it will cause a shift/reduce conflict. Anyway, ary[0..1] looks not so bad to me since it have no cursed negative index. So I don’t push it.

It’s not fashionable, but perl took from Larry Wall’s linguist background the concept of ‘it’ - i.e. the “thing we are talking about”.

It’s spelt “$_” explicitly in perl, but also many operations use $_ implicitly if no arg is given (e.g. regex/sub, print, etc). Also the looping constructs (for/map/grep) bind $_ to the ‘current element’. So you can:

The schwartzian transform (https://en.wikipedia.org/wiki/Schwartzian_transform) uses this, and also the convention/feature that in a block/lambda passed to ‘sort’, the two items under comparison are ‘$a’ and ‘$b’. Which are hence sufficiently magic that you should never use them for any other purpose in perl :-)

The jQuery library for JavaScript also supports a similar feature. In a function passed to $.each, this will be the current array element, and in an event handler, this will be the element that the event was fired on (which I think matches the browser’s DOM event handlers). The handlers can also take those same variables as optional function parameters if you want to name them.

As a semi tangent, I seriously think github should have an integration for paid support or ticket bounties that are only claimable by org members. Perhaps there would be some challenges, but I think there is a need to allow:

Developers to get paid for all this free work they dish out.

A way to give a carrot to projects to fix rare bugs. Sometimes a bug affects only one person, and it will never be fixed unless they do it themselves (which is not an efficient because of all the extra setup/learning).

Wow I couldn’t agree more with his assertions around e-mail. I’m seeing a generational divide happen, ADD youngsters are telling me “Email is awful!” on a fairly regular basis now. WHY? I’ve yet to get an actual, viable, useful answer.

This is a good point. Email and Slack are just communication tools. The workplace is full of low-quality communication because most workplaces are low in quality: inept management, no real desire to motivate people, stupid projects, and crappy ideas. The problem never was email itself. Nor is it Slack per se.

It’s like the common comment about dating sites: the sites are a solved problem, but people are broken.

Now, Jira is evil and should die in a taint fire. That’s just an objective fact.

I’m on board with your core sentiment here, and broadly characterizing a generation as suffering from a disability isn’t much better of a rationale than those “youngsters” are giving you for not liking email.

(Having spent a decade as a teacher and middle school administrator before venturing into dev work, I’m well aware of the very real challenges of keeping the attention of people younger than me…)

Not trying to poke you in the eye (metaphorically or otherwise). Just saying… 🍻

My main issue with email is that unless everyone uses the same email client and email client settings things become a mess. Some people add replies at the bottom of the chain, others at the top. Some people use HTML email, some don’t. Some people have signatures 8 miles long.

It’s just so darn messy.

What I like about instant messaging is that it is quicker, (to me) more organized, and most of his arguments against it are mostly due to not knowing how to set status. If you don’t want to be distracted set yourself to “do not disturb”. I haven’t worked with a team where this was a problem (assuming you do eventually answer questions).

It doesn’t have to be messy. HTML versus not should be transparent to you (I use mutt for work) - the top posting problem is a larger issue, and I blame Google and Microsoft. They’ve attempted to make mail act like IM.

There is only one true way to respond to email messages, and it was defined in RFC-1855

I’m not saying it has to be messy, I’m just saying it is in the real world. And while I could start sending mail that complies with RFC-1855, I still have to deal with everyone who sends me mail and doesn’t comply to any standard.

HTML versus not should be transparent to you

How? I use outlook at work because I need it for meeting requests, shared address books, etc.

Email has good properties, but I see many problems with email that other tools avoid:

With email, it’s harder to jump into an existing conversation. You can’t just visit a link and read the existing conversation. You have to wait for someone to post something new to the mailing list, or ask someone to forward you the discussion so far. And then you have to read the previous messages with a zig-zag path – read top to bottom within each message, but read the list of messages bottom to top.

The culture of email suggests that you surround your message with salutations and sign-offs. In most environments, every time you write a new email, you have to write “Hi John,” or “Greetings all,” at the beginning, and then “Thanks, Rory” or “Sincerely, Rory” at the end. It takes time away from writing the content of the message, time that is usually not worth the signaling it provides.

In some companies, emails have signatures at the bottom that repeat information you already know such as the contact information of the company. It requires more scrolling and mental filtering to see the actual content.

Emails have a sending delay and require writing subject lines. This makes them less appropriate for messages that should be sent in real time, because they are relevant to a real-time conversation. For example, if you are telling a coworker about a relevant blog post and why they should read it, it’s better if you can just paste the URL into a message with them and they get it instantly.

Emails can’t be edited. If you make a stupid typo or forget an attachment, you have no choice but to either accept the error or to send another email with the correction. If you send a correction email, all readers have to manually apply in their heads your described patch to the original email – no one can apply the fix so the others don’t have to. And if someone else sends an email with a subject line that is revealed to be irrelevant, you can’t change the subject line to focus future discussion – the best you can do is send a correction email.

Though this article was published recently, the author is out of touch with the current versions of software.

Chat, at least on slack, isn’t grouped or threaded.

Slack supports threads now. Any top-level message can be replied to in that messages thread. People aren’t notified of new messages in a thread unless they are following it.

My company, which has about 35 regular users of Slack, uses that feature often. I find it easy to keep track of the current conversations.

I agree that rooms don’t provide much separation of topics, but at least there is the #random room by default, so people are discouraged from posting funny links to the work-related rooms.

SO has become relatively shitty now, and replaced docs for a lot of OSS libs.

I don’t see the relevance of the official Stack Overflow website, which still supports the same features it used to, when the context is about a hypothetical company-specific Stack Overflow. But this statement is out of date. Stack Overflow deleted their experimental Documentation section of the site, and migrated worthy Examples from there into normal questions and answers.

I’d argue that slack threads are even MORE annoying and distracting. They’re an unneeded and poorly implemented abstraction when the actual solution to room overcrowding and noise is to simply get your own room.

Happy to see people writing screensavers. In many ways, they’ve outlived their namesake purpose, but there is still something so charming about them!
I also recently wrote a mac os screen saver (for my first time) and unfortunately found that the fragment shader I wrote really heats up my machine.

Is a screen saver better than just turning the monitor off (i.e. turning turning monitor output off which makes the screen go into standby mode)? Are/were people using screen savers just to avoid the few seconds the monitor needs to turn back on or is there another reason?

Certain screensavers can help with burn in on OLED displays, turning the display off does not help. I don’t know the actual science behind it, I just know it worked on an OLED display I had that had burn in. ;)

Note that a screensaver is unlikely to have that property unless it was designed to. Those screen-healing screensavers usually use colored geometric patterns.

I remember one of the patterns in such a screensaver was a series of black and white vertical stripes that slowly scrolled sideways. I once had the idea of making a free clone of that screensaver, so I replicated that pattern in Quartz Composer, Apple’s visual programming tool for generating graphics. I never remade any of the other patterns though.

The slogan is that “the output of ls and ps are tables”. And the output of git log is a table. So Oil will be able to parse arbitrary data and store the “correct” values in memory. Then it can serialize them to any output format. So bash has the paradigm:

$ input | process text in a hacky and probably incorrect way | output

Oil will still allow that. You can play fast and loose if you want. But it will also allow:

I also thought of @dominicm’s solution, but you’re right, that solution has problems.

The simplest solution I can think of, while being obviously safe against adversarial input, would be a script in a scripting language. The key improvement over “the pedantic solution” in the blog post is that you don’t actually need a Git API. You just need a language that can easily call system commands. What’s more, you can fetch the information for just one commit at a time with something like git log HEAD~3 -n 1, which avoids having to stitch together git log’s output for multiple commits.

Using those ideas, here is how I would do it in Ruby, calling out to Git with system:

That book A Fire Upon the Deep sounds awesome. Reminder: Wikipedia pages about books are about 90% spoilers.

uh yeah you can get rooted by a PNG these days… When I was a boy, it was safe to download .exe files, so long as you didn’t RUN them before at least inspecting the visible strings inside… Of course, all that quickly changed as automatic parsing of incoming data became the norm.

I’d say those 2 novels are legitimate part of the SF canon at this point. Vinge got major props for being hip to Usenet back in the day (and who can say? Store-and-forward is probably going to be the best communication for interplanetary distances).

The thing that rubbed me the wrong way with A Fire… was the telepathic aspects of the Tines. But otoh this is a universe where for some reason technology works differently depending on how far you are from the galactic center so who really cares amirite?

I really want to like Firefox, but it feels increasingly clear that Mozilla doesn’t seem to consider anyone who wants to adapt any of the choices Mozilla made for him/her to be part of their target audience anymore.

I don’t really know what their target audience actually is to which they are trying to pull off a Gnome-like pivot, but given the fall in market-share it’s baffling that retaining existing users doesn’t seem to play a more important role.

Having tried the nightlies of Firefox 57, Mozilla has basically reset my browser usage to a vanilla install. All my extensions will stop working (marked as “legacy” – and I only have three: mouse gestures, an ad-blocker and tree-style tabs) and my theme causes tabs to crash on load (which I only use because the default theme keeps gradually eating more and more screen space).

While I’m positive that a solution can be found for mouse gestures and ad-blocking, it seems that tree-style tabs (or any kind of UI customization) is thoroughly dead. Even if they addressed the dozen of bugs that were filed to get tabs working again, it’s quite clear that the required level of visual integration to avoid making it look like a second-class citizen will not be supported anymore with WebExtensions.

The whole switch to WebExtensions feels like going from a positive, user-empowering stance of helping and encouraging users and extension developers to adapt their browsing experience to their liking, to a model where the possibilities of customization and extension is severely limited to protect the users from potential harm that seems to lurk behind every extension.

Performance. By restricting extensions to APIs we can ensure they will run silky smooth.

Compatibility. Old style extensions broke anytime the random internal thing they depended on changed, so developers would constantly have to be updating their addons. Web extensions are one last major breaking change for addon developers, and then they never have to worry about compatibility again.

Portability. Web extensions can be shared across browsers, so developers don’t need to write multiple versions of their addons anymore just to support Firefox+Chrome. Given a choice between supporting only one of Firefox or Chrome, 95% of developers were already choosing Chrome (I made that number up, but probably). This equalizes the gap.

Security. Like you mentioned, it will be very hard to write malware when that malware is restricted to known APIs.

There are a lot of really good reasons to make this switch. And while it will be frustrating to a lot of loyal users and developers, I think it will be the right decision in the long term. I’m feeling the pain too, a bunch of my extensions no longer work either. But I’m confident I’ll either find replacements in due time, or adapt my workflow to live without them.

Since I don’t see many people sharing this sentiment, I just want to chime in as a long-time Firefox user and say that I’ve been really pleased with the work in Firefox over the past several years. Performance has improved massively, and it seems like every time I open the developer tools, I find some cool new thing I didn’t know about before. I’ve also gotten a lot of mileage out of several of the experiments in TestPilot. All in all, I’m quite pleased.

As another random data point, I don’t remember ever even having a real problem with Firefox.

But now the new version worries me because there might not be a good mouse gesture plugin available.. soooo if you wouldn’t terribly mind implementing mouse gestures the way Opera v12 had them, that would be nice :)

As another random data point, I don’t remember ever even having a real problem with Firefox.

But now the new version worries me

Likewise, Firefox has always been great for me, but only because I use an extension which allows me to rebind the keys. This extension doesn’t exist for Chrome because Chrome hard-codes ctrl-n to “open a new window” for security theater reasons. (I can’t remember the last time I opened a new browser window on purpose, but it wasn’t in the past decade.) If Firefox starts copying Chrome in that regard I’ll be forced to choose between staying on the old version forever or spending half my day closing those seventeen windows that just opened because I was trying to scroll down.

Thanks for the note on uBlock. The dev channel thing was quite hidden, but I found it.

Well, all I can say is that I think it is sad to see that Firefox is switching from the software repository approach popular on Linux distributions to the walled garden approach of app stores (like on Windows/Mac).

I can understand why it is more convenient for developers this way, but I don’t try to be a developer of every technology I use. (Ok, I’m still sitting on this reproducible Firefox crasher and I installed the debug symbols to figure out where it comes from … but sometimes I just want to be a user.)

Currently my only hope is that the official roll-out of WebExtension gets delayed just enough for another Firefox ESR release based on the current code. This would give me another few years out of Firefox, but in the long term I really don’t see a future for me on Firefox. That’s kind of sad because I have been an user since it was called Netscape Navigator.

It’s kind of clear that vertical tabs will never be a first-class citizen with WebExtensions (even under the assumption that all of the dozen current bug reports get sorted out).

Firefox’ stance reminds me of the saying “if the government is unhappy with its citizens, it should swap out its citizens” and the CADT that happened with Gnome. (XFCE user ever since.)

Well, all I can say is that I think it is sad to see that Firefox is switching from the software repository approach popular on Linux distributions to the walled garden approach of app stores (like on Windows/Mac).

Would you mind clarifying? The distribution model for WebExtensions is the same as for non-WebExtensions. Or are you referring to the use of sandboxing?

I see. On the other end, every API exposed to extensions becomes something that Mozilla has to commit to maintaining into the future, imposing architectural constraints. This was most painfully evident in the long process of the e10s (multiprocess) roll-out.

Are you talking about Tab Center? That’s sadly not a tree style tabs extension, merely a vertical tabs extension. But yes, the point remains that you can write functional alternative tab bars with the new API.

holy hell, another tree-style-tabs-er - people don’t understand us. - I moved to vivaldi cos chrome had no capability to do vertical tabs (and always felt strangely icky on chrome). Vivaldi has vertical tabs but not tree style :(, is all chrome under the hood but with plenty of customizability and most of the “i wish i hads” from firefox. It started out buggy when i was using it but has generally gotten better. not OSS is the only thing that mildly annoys me.

I personally jumped away from firefox when i eventually got sick of it regularly slowing down after a few hours of use (to the point of barely scrolling while rendering another tab i had just middle clicked on)

that said, none of the news coming out of the ff camp is making me think “wow i should totally give it another shot”. Your comment only reinforces that - I hate not having control over other people’s stupid decisions on my system.

I tried them all. They are quite restricted in what they can do, and the mandatory tab header makes it pretty clear that stuff like this will always be a second-class citizen under WebExtensions.

Think about it: Why doesn’t the “official” tab bar get one of these headers, too? Because it is completely jarring and obnoxious. Firefox devs know it sucks, so they don’t follow these rules, but everyone else has.

It’s not “mandatory”. There are bugs open for a webextension API for removing it, and Firefox devs seem to be open to adding one. This API doesn’t exist now, but you’re painting it as if it will never exist.

This stuff is still new, and will improve over time as new APIs get added. Like I said, “it’s not as good, but it’s improving”.

This is a nice summary for someone who might have written JS a decade ago. It hits the main points in the field of ‘weird things you have to do to write JavaScript these days’. But there’s one major omission - package managers. I still have a hard time explaining to myself why we have bower, npm, and yarn all solving the same problem with varying degrees of success.

Well. I guess I have a different meaning of reproducible.. Previous versions of NPM would have variance in things like Makefiles that gyp puked out.. this meant that something that was “npm shrinkwrap’d” and then tar’d up, would be different every time. This is the reproducability I was hoping for.. guessing the lock file doesn’t give me that.. But I will play around and see.

If nothing else, it’s much more consistent. At my company I’ve been migrating our apps from using bower and npm packages to exclusively npm packages, and setting our build servers to use yarn instead of npm. It solved our issue with npm intermittently crashing our builds.

I’ve just tried deleting the node_modules directory in my current project with 780 packages and ran npm install- it took 53s. Then I’ve done this again and ran yarn install and it finished in 27s. It’s possible it’s something specific to my project or to the fact that I’m running under WSL (maybe npm hits some under-optimised part of it), but anyway in my particular case it’s indeed faster with yarn.

This one is a personal annoyance of mine. When in the history of software development has anyone browsed through a codebase and implemented a TODO that some other developer left?

The two main cases I see TODO comments seem to be:

The developer is acknowledging that they know the code could blow up under some circumstances, but are passing the buck of creating a more robust implementation to the poor sap who gets the bug report about it when it inevitably goes wrong.

The developer intends to actually do the work in the coming days and is using the codebase as a work tracking system.

When in the history of software development has anyone browsed through a codebase and implemented a TODO that some other developer left?

Er, a month ago, when I did this. I was adding a new string to the translations JSON file for some component. In the section of strings for that component, I saw a TODO to reorganize them by grouping the strings better. While I was there, I did that reorganization and put my new string in the correct place for that new organization.

I can’t say whether it was a good idea for that developer to leave that TODO there. Maybe they were being lazy, or maybe writing that comment was all they had time to do. But the comment did point me in the right direction by pointing out what area of code I might have trouble understanding, due to its bad organization. And that TODO did end up getting done, months later, thanks to that comment.