Apple. Apple Please
digipres.club
digipres.club
NAME
codesign — Create and manipulate code signatures
SYNOPSIS
codesign -s identity [-i identifier] [-r requirements] [-fv] path ...
codesign -v [-R requirement] [-v] [path|pid ...]
codesign -d [-v] [path|pid ...]
codesign -h [-v] [pid ...]
codesign --validate-constraint path ...
The first argument to codesign has to be one of -s, -v, -d, -h, --validate-constraint and in reality it's closer to a subcommand (similar to how git as pull, push, merge etc). After that "-v" works as a regular option.EDIT: I read the man page even further, and I was slightly wrong: It appears to be possible to pass regular options before the operation, but you're required to have one (and only) one operation.
It's kinda whacky to think about that every sufficiently complicated CLI app out there implements its own ad-hoc, informally-specified, bug-ridden, slow implementation of half of common lisp _just_ to prepare running the actual program payload...
it’s understandable if you find it different/jarring but that’s the price of maintaining a consistent style - you don’t change tools that are already working fine just to chase fads.
From the BSD perspective it’s like you’re coming in and shouting about rewriting everything in rust on your first day, especially since BSD does place a much higher emphasis on interface stability etc. For example unlike linux, BSD offers ABI stability, and that is one of the selling points for building something on top of it. Nor is there any systemd or upstart - or a million different directories and styles for conf files. rc.conf basically does almost everything you need for OS conf.
One net benefit is that it’s actually possible to write and maintain documentation, and it doesn’t bitrot in every single major release. Those FreeBSD forum posts from 2007 are still valid. And if you need to build some appliance that will be running unattended for years… BSD doesn’t churn like that.
But the price is you have to learn new syntax (really, the old syntax) for a half dozen system commands. Or just install the gnu version of those packages (“brew/portmaster install findutils gtar greputils” mostly covers it). It’s pretty much the first speedbump everyone hits on their first Unix, and it’s ultimately a trivial one, but yeah, there’s no desire or real reason to churn it either.
It’s the bazaar vs the cathedral, and the cathedral has some advantages too. You’d say code smell, I’d say fine patina. A lot of Unix code has had 30 or 40 years to work out the bugs and edge-cases in a controlled manner. It’s not worth losing that so newbies can have a little easier time their first week. Use gnu versions if there’s a pain point.
Brew has transitioned into primarily bottled (pre-compiled binary). Compiling with the local march sounds great and it is quite difficult to find one consistently do that. On top of that, I’m trying to look for one that can be installed on arbitrary prefix too and recently I’ve been eyeing on pkgsrc, gentoo prefix, and spack.
Why are core util programs different?
Seriously! I know it's BSD based, but let's be real, you _should_ be able to use a command one-to-one from linux to OSX. That should be the goal. These are __core utils__! And you're gonna tell me that flags are different? Brittle AI features with obviously insufficient testing
I'll be fair, Apple isn't alone in this. But have you all heard about augmentations? Do you all dogfood? Seriously, I'll consult because when my partner is on the train I don't want her voice suppressed and the train sounds amplified, I want the opposite. This is a solvable issue... But your features are doing the opposite of what they are intended to. To all AI production people: augment the shit out of your data, scrutinize the shit out of your data, don't throw it at the wall and see what sticks.Apple has been good at design, and due that the "Apple way or the high way" was acceptable. Because at least the "Apple way" made some sense. But now the Apple way isn't about making the product better, it is about making it thinner. I know that's easier, but that's the cost at being on top. Don't abandon what got you there.
I'm not sure what your noise cancellation point is, because that works absolutely fine here between myself and everyone else I know. As for the rest of the AI stuff, I don't use it so I can't comment.
Edit: on the first point, I'm not really a fan of some of the GNU stuff. I'd rather use FreeBSD than Linux for example. That is more logically consistent.
I do agree and acknowledge the point. But yes, I do find it frustrating that there are such differences in core utils. I guess the frustration is more about not working harder to find consistency. I many of the man pages it is not uncommon to find flags and options that exist simply for historical reasons. But many of the frustrating points are addressable in similar ways. An example might be with `du`. The OSX implementation has no `--max-depth` flag, despite `-d` being supported. Unless I am missing something, there is no downside to incorporating the long version of the flag. I can understand some other choices, but even `grep` is different enough.
> I'm not sure what your noise cancellation point is, because that works absolutely fine here between myself and everyone else I know.
In part, this is my point. Finding where generalization fails is non-obvious and non-homogeneous. So when it fails, it typically fails in a sub class of problems. These are of far more concern than edge cases[0]. Generalization is VERY hard. It is why dogfooding is so important as well as listening to the userbase. Because it helps you identify where you're lacking.
And maybe I caused confusion by my choice of words, thinking it would be simpler and context would clarify. I specifically mean sound isolation when speaking. As in she can ride the train, call me, and hear me perfectly fine (that side is working as expected). But what sound is being sent to me is not her voice (this is clearly suppressed as it has that same format as what background noise often sounds like), but the train itself. And worse, the train is amplified. So there is a identification in what is noise and what is speech. It may help to specify that this is happening when she is not in America. There are no issues with Bart, and that should tell us quite a lot. (I'll also add that augmentation is one of my niches as a researcher)
[0] The common approach to this is by using more data. Crude, but effective. Though it can exacerbate your issues if you don't expand the distribution you sample from, since you'll just reinforce your local density.
Mastodon isn’t a text only site. It’s a multimedia social media service.
Those can be made to work just fine without using Javascript, that's what all those fancy tags are for after all.
Basic functionality that users expect from social media needs JavaScript. Endless scrolling is a simple example. Adding a comment reply or liking a post without reloading the page is another one.
HN is a wonderful place but it’s a niche industry-only forum. The barebones nature of it works fine for the people here but products like Mastodon are attempting to be a much more broadly adopted general purpose product.
JS can add to the core and turn paging into infinite scroll, or not require a page reload on an interaction but it should be enhancing, not fundamental. All core functionality should work without JS.
This was just a given for professionals in the industry less than a decade ago. The fact it isn’t anymore speaks loudly about the lack of mentoring and the low bar we have dropped to…
Before you say "Bash can autocomplete flags" I don't think I've ever encountered a single third-party shell command that actually packages proper completions.
(Some Rust commands that use `clap` for argument parsing do something to install completions after the first run, but in my experience this is not particularly reliable)
- PowerShell has Ctrl+Z
- Bash has Ctrl+/
- Fish has Ctrl+Z and Ctrl+/ both
not sure about others, surely if you're using busybox ash this won't work (no line editing will work), but I'm sure most shells have some sort of undo, as long as they have any line editing at all.
Hopefully I’ll remember that next time I need it.
I know that approaches like Powershell which has understanding of all the Microsoft commands and the ability to define a structure that defines the options ... but how would bash figure out the structure of the arguments for dd or tar or that a.out that I just compiled?
Applications already come with lots of metadata: man pages, icon, readable name, ... adding formal shell-completion information is just another one.
Besides that, the built-in command line tools already have auto-completion for their arguments. Though I think they do it by running scripts at shell startup, which isn't exactly the mechanism I would have used... but it works.
In your case, "that a.out I just compiled", this metadata would be missing, so no shell completion for you. But that is a niche use case anyway, and not at all what this post is about.
This has a fair bit of code that goes in and examines the .git directory when present.
Additionally, the shell has been programed to be aware of the git sub commands.
But is it aware of... say... svn sub commands? The same amount of effort would be need to be done to have bash aware of .svn and its sub commands.
This is special tooling written for one suite of commands.
It doesn't work for arbitrary commands or arbitrary data structures. Even well known ones.
tar -zxvf <tar filename> {specific file}
That doesn't do tab expansion for the specific files that are within the tar file. Nor does doing --f show the expansion options for --file --format --fflagsSomeone wrote special case tooling for one shell for one command named git.
You don't have to on the command-line, but if you're writing a script then the unwritten rule is that you use the full option name.
(Too bad this isn't enforced)
Not really?
while ((opt = getopt(...)) >= 0) switch (opt) {
...
case 'v':
if (!action) { action = VERIFY; break; }
verbose++; break;
...
}
(A followup post clarifies that a -v before a different action flag does not retroactively turn into “verbose”; in any case that’s also not hard to do. To be clear, both possibilities suck, I just disagree they’re difficult to implement.)Used to be in deep in the ecosystem. Now have been winding down significantly, hardware hasn’t been upgraded since 2017. Various iDevices aging out until bust.
Services reduced to bare bones iCloud. Whatever the 200G plan is for keeping basic backups. Otherwise, have self hosted most of their services
- iTunes/Music/TV transitioned to media server accessible via VPN
- no longer use @icloud.com/@me.com email. Have own mail server with unlimited aliases. No more dealing with hide my address bs
- password/credential management migrated to proton pass
- cloud storage migrated to self hosted with other providers as backups to the backups (“3-2-1”)
Am I now paying for these services that were once “free”? Yes, but I also learn more about the protocols, set up processes, and able to customize for my own needs. No more DRM, lawyer bs that takes away your “paid” (licensed) media, no more Apple wall.
What? They switched architecture to an amazing new chip series since then. I’d go even further and say that the era before then was the lost era of rubbish keyboards and strange gimmicks (looking at you, touchbar).
It was interesting. I put it in the "you don't know if it works until you try it... and for most people it wasn't useful."
It might have been something that would have caught on more if they had a Touch Bar only USB device that could fit reasonably with a 109 key 3rd party keyboard (yea, heresy) and be used independently.
Something that could be used like a stream deck ( https://www.elgato.com/us/en/p/stream-deck-mk2-black )
There is utility for a special purpose keyboard... just not the way the Touch Bar was done (and in so limited a way). It is something that was designed for professional workflows (like IntelliJ, Final Cut Pro) but it was only on the laptop and I use my Mac Pro for more "professional" uses and it wasn't there.