spoondan
Joined 18 years ago
Joined 18 years ago
Japanese has many -mono words based on verbs: tabemono 食べ物 is food (eat-thing), nomimono 飲み物 is a beverage (drink-thing), tatemono 建物 is a building (build-thing), kudamono 果物 is fruit (reward-thing; the Japanese word for “to fruit” being related to the verb for achieving, similar to English “come to fruition”).
In contrast, the 2020 pandemic is presently not sharing the spotlight. Maybe something of comparable impact will happen. Or maybe it'll be forgotten regardless. But I don't know that the 1918 pandemic's status is all that illustrative.
This feature does not change the privacy story for WhatsApp in any way. You already trust users you are chatting with to not copy or screenshot private messages and share them. You already trust the app to not forward or store your messages without your consent.
[1] See bullet point "Your Messages" under section "Information We Collect" on https://www.whatsapp.com/legal/privacy-policy.
In fact, in committing only to "improve our process to avoid this from happening," it reads as if they take no meaningful responsibility for how they handled informing Jeremy. It feels as if they are sorry Jeremy was stressed out for a week but unapologetic for any of the numerous and hard-to-defend actions they took to cause that stress. They blame the process, as if it required them to inform Jeremy of a complaint they weren't ready and willing to discuss with him, to assure him they'd give him details the following day and then renege on that, to not give him adequate time to understand the accusation and formulate a response. And it is apparent, from the story as both sides tell it, that far from a "crucial miscommunication," the Committee was accurately communicating what they thought. Their error was in prematurely drawing conclusions and not giving Jeremy the benefit of the doubt.
They also don't address the confusion around having two differing codes; the serious and counterproductive issues with Codes of Conduct prescribing acceptable behaviors (instead of proscribing unacceptable ones), especially when such prescriptions are vague; or Jeremy's accusation that the Committee, itself, failed to follow their own Code(s) of Conduct and Enforcement Guide. And while I would not want or expect them to discuss the specifics of Jeremy's case (unless they have his consent to do so), I do think it's necessary to discuss the issue of whether they believe merely making someone uncomfortable through disagreement on relevant topics can (let alone should) be the sole/primary basis for a finding of misconduct, especially when the people made uncomfortable are not even the person that is being disagreed with.
Perhaps they've given Jeremy a more in-depth and sincere apology and explanation in private. But I don't think that suffices. Like Jeremy, I believe that Codes of Conduct can (and often do) play an important role in improving our communities and events. I'm sure the Enforcement Committee would claim to believe this as well. But the numerous mistakes they've made in this matter do serious harm, not just to Jeremy, but to the larger cause. The way to mitigate (if not remedy) those harms is by honestly admitting to mistakes
They are also bringing web content into the command line. They have a large number of console applications. For example, there's a command and REPL for tracking shipments.
Putting aside the misunderstanding of what this actually is, the premise of your question seems to be that "simply replacing" one technology with another can't be "liberating." I think that's wrong in general as well for the specific example of transforming a web app to a native one (though these seem to be Python, not C++). The web has constraining properties: browsers that provide rich interaction with modern web content are resource intensive; different websites have wildly different accessibility stories (and the lack of UI and terminological consistency in content is, itself, a hurdle for some people); ads, popups, and other distractions are harmful to load times, network usage, and user experience; and on and on. There's plenty of examples of transformations from one technology to another that trade out the source's constraints for the destination's.
It’s entirely possible that none of these users thought to use the menu bar for these tasks. I, for one, have never thought to use the “Go” menu to get to the enclosing folder. Why? I don’t know. Maybe I’m dumb. I guess it didn’t occur to me that such a frequently needed action would be provided and yet not given dedicated UI in the window frame.
Similarly, I “know” how to set the default program to open a file from the info pane, but I always end up re-discovering it because I do it so infrequently, and it’s not intuitive to me to find it under “Get Info.” I always doubt it until I find it there.
Nor does it matter where macOS inherited usability issues from: they still exist in macOS, they still affect macOS users.
I also think you’ve taken the wrong point. I don’t read the post as arguing that macOS has just as many discoverability issues as iOS or that it’s not in better in some ways. Instead, it seems to me the author is clearly arguing that macOS also has discoverability issues even for daily and power users, and thus we should re-evaluate both how good macOS’s discoverability is and how bad iOS’s is.
Similarly, an excess of popups doesn’t increase security. It annoys users to the point they stop thinking about individual security decisions.
There’s an important intersection of security research and HCI that doesn’t get discussed as much as it needs to be.
But you don't have to take academic studies or anecdotes to heart. Some back-of-the-envelope calculations suggest there are severe challenges to effectively and healthfully directly manage 30 people. Take the typical 40 hour week[2]. With 30 direct reports, that gives a maximum of 40/30 = 80 minutes/week to devote to each individual employee. If the manager does a weekly or bi-weekly 30 one-on-one, that leaves about an hour on average to deal with any issues.
Of course, not every employee has high priorities issues at the same time. But we've only considered the individual, one-on-one work of the manager. There is also the team-wide and cross-team work. And, it turns out, team size also dramatically increases the time and effort these other facets take.
Consider the typical daily stand-up (blech), used to keep the team aligned. If the manager allots (and strictly enforces) five minute slots per team member, that meeting still takes 2.5 hours. People won't be happy with that, and it will cut into the managers limited time to actually make progress on individual and team issues. Even if the manager splits the meeting (to spare team members for a super long meeting), the manager needs to attend each one to stay abreast of the big picture.
Likewise, we presume that if a team has 30 reports, it's because what they are working on is of critical business importance. There are more demands from sibling teams in the same org, more budget and staffer reviews with higher-ups, more hours spent with HR and recruiting. (Alternatively, the manager is empire-building. But that doesn't really help the calculation. The time that the manager would've spent on delivering business value is instead spent on politics.)
Even if you think you can keep all these balls in the air, it's hard to not conclude there are incredibly tight windows here. And the whole thing is very fragile. If you fail to identify, understand, and address a critical issue, it can quickly infect other team members.
[1] See, for example, https://knowledge.wharton.upenn.edu/article/is-your-team-too...
[2] I know. We often work more than that. The exact number doesn't really change the story, especially since we're talking about retaining our physical and mental health.
It was a complete nightmare to reason about and work with, even for me, and especially for newcomers. A natural way of trying to understand a system is to look at its entry point. With a system like this, it looks like a skeleton:
let di := DependencyContainer.make()
let moduleSystem := ModuleSystem.with_container(di)
di.register_singleton[IModuleSystem](moduleSystem)
moduleSystem.find_and_register_modules()
Where do we go from here? The next logical step is into `find_and_register_modules` or into the documentation for the module system (just kidding: I was a "senior engineer," I didn't write docs).We are left with a lot of questions. How does anything happen? It's somewhere inside the modules, but which one? Does the order that modules are loaded matter? The answer is maybe. Clearly, there are places where order of operations matter. For example, the main navigation should be ordered. How do we accomplish that? (The answer for my system was to have the interface for navigation extensions specify there was a `readonly weight: Float64` attribute. But then to actually understand why things are in the order they're in, and to get things ordered correctly, you need to look up the values for other navigation items. It's secret coupling.)
More recently, I saw a team at my previous company build a system like this. There were dozens of interfaces and implementation classes and code for composing all of this, and the end result was you couldn't just go somewhere and see what was happening. What we really want to see is:
match maybe_user
Some(&user) => nav.add(UserProfileNavItem.for_user(user))
None => nav.add("Login", "/login")
nav.add("Browse", "/browse")
nav.add("Search", "/search")
nav.add("Help", "/help")
Do you have to make a change here whenever something gets added? Yes. You do. But the idea that your program needs infinite flexibility in all areas is simply wrong. And, in fact, everything ends up secretly coupled and inscrutable.For this reason, my advice has long been to limit extensibility to specific, narrow use cases (for example, filters in an image editing program). Do not build entire systems around extensibility. You are not building an abstract system, so don't waste your time with unnecessary and obscuring abstractions.