caladri
Of course, I don't know how tarsnap names its blocks or stores them, so I don't know how feasible it is to have two blocks with the same name because they had the same hash but there was a byte-by-byte mismatch, or if that's even a problem.
I mean, blocks that have been moved to Glacier because there are no references to them from indices on S3 can be assumed to be less likely to show up in new archives. It's a trade-off, but my experience with deduplication is that it's often not much of a trade-off to get rid of old things even though the magical thinker in me is tempted to think "but what if that chunk happens to show up again somewhere else!?"
Which one thing is this doing and doing well? Merely being command-line and somewhat file-oriented does not make Unix orientation. The utility has numerous sub-commands, many of which are simply wrappers for other commands, like find(1) or tree(1). An encrypted file-system or some other way of encrypting the password hierarchy would seem to be exactly all the value this adds over simply using the extant set of Unix command-line tools. Most of this functionality simply duplicates the shell and cat(1).
It doesn't do one thing and well, it seems to do a small number of very general tasks in needlessly-specialized ways requiring arcane and unfamiliar incantations. The password generation stuff makes a fine stand-alone Unix utility. But git integration in the same program?
This is a front-end which brings with it a considerable number of ideas about policy, rather than simply providing a tool. Most of what it does could be handled much more simply by the filesystem and the extant tools it leverages or reimplements.
Other venues are much more reasonable about this sort of thing. I have a friend who is banned from all Microsoft buildings, including non-Microsoft events hosted by Microsoft. He was informed clearly in writing, and knew the reason for his being banned. That makes Microsoft-operated venues more appealing (on at least this axis) than Yelp ones, since organizers of an event can't be sure that attendees will actually be able to enter. In the Microsoft case, at least a person seemingly knows whether they can attend.
If they were giving a paltry reimbursement to everyone who worked in an Amazon warehouse while taking classes, that would add up to something much more significant than the big companies I've worked for that employed people who already felt set-for-life and who could've gotten an advanced degree on the company dime if they felt like it, for example.
There are many programmer cultures, and even cypherpunk culture is very complicated. There are some very different strains of cypherpunk thought, i.e. the divide between those whose primary mode of action as being exposing the scariest actor around and those whose effort is centered in hiding from the scariest actor around.
Is age an issue in its own right, or is it what informs what you perceive as a poor implementation that precludes the implementation of "modern" features? Also, I wonder if you perceive any possibility that progress might actually occur in the form not of accumulating more features on top of the modern fashionable designs but of starting from an earlier base and pursuing an alternate path of evolution to that of extant runtimes — do you?
For example, is it possible that there is some innovation which could occur on top of C which would not be possible in the context of some modern language and its modern runtime which would make it a more desirable platform than the modern alternatives? As someone who works primarily in C (and is a little tickled by commentary elsewhere on this item about C programmers in the '80s and '90s that suggests everyone moved "up" from C to C++; very Microsoft!) I would say that's certainly the case, because there are already things that make C more appealing than C#, Java, etc. An extension to the type system to do optional, minimalistic reference counting rather than having to use GC in a modern language or the STL's reference-counted containers (or something home-grown) in C++ would be a huge step forward for example. The locking annotations available with Clang and GCC have removed much of the value-add for using a language which does more hand-holding around synchronization.
If it isn't that age precludes the possibility of progress, then what's the problem with age? Code rot is an illusion.
I'm not sure about the original poster's statement that that site isn't accessible. I haven't tried applying a stylesheet from my browser to it, and I don't use anything to enhance contrast of text in web pages, as my vision is not impaired in that way. There's an argument to be made, though, that modern websites use coloring, layers, and a bunch of other things to achieve layouts, looks and feels to the extent that if you want to see content as it is presented, or to even find it readable or usable at all, you'll have a hard time with applying styles using your browser.
Believing that just because the web can be used differently to black-type-on-white-paper in a wide variety of ways means that every way of using it differently is virtuous is pretty mid-2000s web 2.0 logic. Contrast is useful, and its proven track record for rendering text is no mark of antediluvian shame, of irrelevance or datedness.
That also isn't higher-order programming as such. Can you create new functions from doing that? There are ways to compose functions in C by hand, but the distinction is that it cannot be done elegantly. (One could always just do higher-order programming in C by constructing an abstract syntax tree, after all.)
A good first effort in that you did correctly handle calling functions without requiring them to fetch their arguments in an unusual way, which is what most people would try at first. With a varargs apply function, you can handle the case of passing values larger than a register and passing pointers without having to cast them to a list, too. Consider the case of an apply function which takes an unsigned integer as the size of the following argument. If it's zero, then the argument list is finished. Otherwise, it then fetches an argument of that size from the va_list and goes on to the next one. So then your apply function is slightly uglier (int j = 42; apply(printf, sizeof (const char ), "Hello, %s! %u\n", sizeof (const char ), "world"), sizeof j, j, 0) but perhaps more flexible, and at least avoids relying on a few nasty implicit casts.
Also, function pointers should not necessarily be cast implicitly to void *, but on only a few architectures are function pointers so strange that you'll have any trouble with your approach.
As it is, you could even avoid writing or generating any assembly by just having the apply routine be a static inline function that does a switch on the argument count and then casts the function pointer to a function pointer that takes the right number of arguments. The compiler could do constant propagation for the number of arguments and you'd have little overhead in your function calls. You couldn't handle arbitrarily-large argument lists, but it would work pretty well.
Keep at it!
Additionally, I'm not sure that the implementation of the hard reliable case sounds very mature or even well thought-out. Having a syncer running at 20hz and waiting for it even in the synchronous path seems a bad idea. That's kind of like adding an anchor to your anchor so your speedboat can crawl while it crawls. Or was that a misrepresentation?
And who cares if the tone is serious? The criticisms seem to be valid, and ones that anyone releasing software making bold claims should expect. Statements about performance need to be qualified. Out-of-the-box behavior is not a reasonable point of comparison if (1) that's not what people do in the real world (2) the tests you use are ones that one piece of software is tuned for and the other is tuned against. Some kind of sorted index by field is necessary for some very common and desirable queries. Some of the performance gains come at an unacknowledged cost. The durability just isn't there (and for trivial reasons that could be fixed by making a few more parameters tunable, it sounds like), but is implicitly lauded by claiming to be ACID.
I don't know if you need to go looking for praise in that article. It really seems like there are some criticisms it would be beneficial to take seriously, even if you object to the author's tone or lack of praise. Even-handedness is not a marker of honesty, and honest criticism is worth the headaches it causes and the growth it spurs if you're willing to take it seriously.
It may not be accurate and complete and without flaw, but it is a reasonable reduction of the reality of Apple hardware to an understandable and useful form. The difference in thickness is profound, and would have been compromised itself, or have forced a compromise elsewhere in the design of the base hardware platform, without the removal of the Ethernet port due to physical space constraints that arose from the level of space reduction that was possible with this revision of hardware.
I think that's a pretty interesting point. The Thunderbolt adapter is a design compromise and a crappy one, but it is a general-purpose one (i.e. there is a consistent peripheral platform) and one that will not impact the vast majority of users. Copper Ethernet is not at the top of Apple laptop users' desire, as one might note conversely design is. There's a sort of elegance in systematizing the edge cases and making the base case streamlined, minimal, satisfactory, beautiful and shockingly-thin.
Yes, if that's what he's doing, then in the event that his assets utterly evaporate he'll be in a spot of bother. But it's a pretty well-trod path, and probably some non-trivial portion of his assets are quite stable and reliable and not terribly volatile. I won't pretend to know the precise details of his situation, but living off a line of credit isn't at all uncommon and perhaps isn't even unreasonable (from the perspective of financial self-interest alone) for a person in his position.
I do also wonder how it impacts organizations that have used internal TLDs to manage their intranets, e.g. the FBI's .fbi. There have to be collisions at some point, right? And as the amount of fanfare with each new TLD falls, it seems likely that some of those things could get missed, and lead to some interesting vulnerabilities.
His father was willing to go on the record questioning his son's sanity and trivializing the stresses of his son's life. The tech community can do better for one of our own than that.
I find it not a little jarring that the kernel has been pasted together from code from other systems, not just inspired by code from other systems, in places. Is there a clear license statement I've missed? I'm assuming it's GPLv2, since it includes code directly from Linux, but it's hard to say even for those files since the license statements have been stripped.
Still, at least as neat as all of the excitement about the shocking new news that is a game including an emulator for a trivial, fanciful, microprocessor, and other things that Hacker News goes nuts over at great length and in a sustained way. If this is too old news for you, perhaps you'd like to read another iteration of how to hire software engineers (answer: don't), whether culture fit is racist (answer: probably), or how best to cloud your cloud cloud cloud Ruby cloud cloud bro cloud.