Is it any wonder that UX designers are getting a horrible reputation among some segments of the tech-savvy crowd?
The main reason for this is that people who self-describe as UX experts, as opposed to HCI experts, tend to be the ones that favour form over function and ignore the last 40 or so years of research into how to design useable interfaces. Most of them wouldn't know Fitts' Law if it dragged them to the corner of the screen and made them infinitely long.
There isn't much testing of the C bindings. They're also in the process of being deprecated in favour of machine-generated ones that are less API stable and have no ABI stability guarantees (precisely because most people don't actually use them from C, they use them from some other language with C bindings). For everything else, there's a bit regression test suite that works by feeding some code (source code when testing clang, IR or assembly when testing bits of LLVM) into one of the tools and then checking that the output matches. Bugs still slip in quite easily, unfortunately. The second tier of tests involves compiling and running a bunch of benchmarks and similar sample code and checking that they haven't got slower (by a statistically significant margin) and that they still produce the right answers. There's a network of buildbots that runs on a variety of operating systems and architectures that first builds and runs the regression test suite on every commit and then (less frequently) runs the executable tests. These catch most regressions, but not all - the rest are caught by users testing betas and filing bug reports.
There's been a lot of research work on improving this. The LLVM Miscompilation Detector, for example, had a semantic model of LLVM IR and would feed real and randomly-generated IR through the optimisation pipeline and then use a theorem prover to attempt to prove that the semantics of the before and after versions were the same. This could then be combined with the LLVM bugpoint tool to find the optimisation pass that performed an invalid transform.
It's a tradeoff. Blowing away the i-cache is a good way of killing performance, but so is having a load of function calls that do almost no work. If you had to do a virtual method call for comparing two unsigned integers and a different virtual function call for comparing two signed integers when inserting them into a set then you'd have a lot more overhead. In a typical std::set implementation, the compare operations are inlined and so the costs are very low.
The real problem with C++ is that the programmer has to make the decision about whether to use static or dynamic dispatch up front and the syntax for both is very different, so you can't trivially switch between them when it makes sense to do so.
his late father, Cyrus Vance, wasn't as big a schmuck.
He was an apparatchik himself, and he failed to teach his larva to respect the bill of rights, so fuck him too.
Apple complies with the relevant statutes in every jurisdiction in which they do business, and they report their finances on a regular basis. There is no fraud here, and Stiglitz can go fuck himself.
Exactly. I bought a fairly decent set of speakers, a projector, and a DVD player for a total of around £450 in 2003. Back then, a ticket at my local cinema cost £4.50 (it's gone up), so roughly the same as going to the cinema 100 times. Popcorn was another £4 or so (drinks another £2-3), so that brought it down to about 50 trips - one a week for a year. I split the cost of the projector with my housemates back then and we'd have friends bring a DVD and food / beer around. By the end of the year, it had more or less paid for itself. One of my housemates bought the other shares in the projector when he moved and I bought a new one and have replaced the bulb once, so I've spent a total of about £500 (plus electricity) over a period of 13 years. The up-front cost was a lot higher, but over 13 years it's been cheaper than going to the cinema once a month and not having anything to eat / drink there. And that's just the cost for me: for the first few years when living with housemates and for the last few living with my partner the benefits have been shared by multiple people. Oh, and we get to watch TV shows in the same environment.
I stopped buying DVDs for a while because renting was a lot cheaper, but as BluRay and streaming start to see adoption the second-hand market is flooded with DVDs so it's easy to pick up a film for £1 or a season of a TV show for £3-5.
The real answer to piracy? Give people the product that they want for a reasonable price. Give me a service that let's me download DRM-free movies in a standard format that will work on the FreeBSD media centre box connected to my projector, my Mac laptop, my old WebOS tablet and my new iPad and I'll happily hand over money. Until then, I'll stick to DVDs.
I look into the witness guy's background, he has UK security clearance FFS!
Having UK security clearance is not that hard. I did for a while (though it's long-since lapsed). Anyone who works on any defence-related project is likely to have security clearance. Remember when Snowden released all of the things he could access and it turned out that over a million people in the USA had security clearance? The UK isn't that much more restrictive in who it hands our clearance to.
Look at LLVM as an instructive example. It's a large complex beast written in heavy C++, but there are bindings for every language you'd ever want to seriously write a compiler in.
Not a great counterexample - The LLVM C bindings are maintained by hand and all of the other bindings are machine-generated from the C bindings.
Using C++ without templates is missing the point. One of the things I miss the most when writing C is the lack of efficient generic data structures. C equivalents of things like std::list, std::dequeue, and std::unordered_map all require lots of macros that cast things through void* (and therefore avoid any possibility of compile-time errors) and typically extra layers of indirection which hurt performance from d-cache misses more than templates will hurt from increased i-cache usage.
Apple's CoreFoundation is probably the nicest-designed C library providing core features, but it is a lot harder to work with than its Objective-C equivalent for similar performance and less efficient than a C++ version (though with stronger binary compatibility guarantees).
"Consistency requires you to be as ignorant today as you were a year ago." -- Bernard Berenson