HNHacker News
TopNewBestAskShowJobs

drostie

4,724 karma · joined January 19, 2012

Hi, my name is Chris Drost. I'm an application developer at U.S. Engineering Company in Kansas City, MO. If you're a talented software engineer in the KC region, hit me up -- we may be hiring.

I am @crdrost on Twitter and Facebook. I almost never check my Facebook.

I have an M.Sc. in Applied Physics from the TU Delft in the Netherlands. I am from Ithaca, NY originally.

You should listen to more Troubled Hubble.

    Don't you forget the, the image in your retina
    To foresee the future, and find a use for
    Them telling me, everything, 
      that would happen to me anyway.

    If it isn't science, it doesn't exist;
    We make our own problems and blame them on
    Birds and bees, but we ain't seen nothin' yet:
    and don't you ever forget it.
Also, more Glaze.

    Every night I wake up,
    Thinking there's something missing in my heart:
        a canvas for the art.
    Every day I hear the sound of whirring fans,
    But nothing more:
        another scene yet to be scored.
    
    You're the empress, I'm the king:
        together we will rule this world
    You'll paint the scene, I'll write the melody:
        we will rule this world.
Maybe also some '90s stuff.

    And of course you can't become, 
    If you only say what you would have done:
    So I missed a million miles of fun.
Email me by my HN username @zoho.com or my twitter handle @gmail.com.
submissionscomments
drostie··on Cisco’s Network Bugs Are Front and Center in Bankruptcy Fight
There's lots of hate for Peak Web here, which I totally understand, but it sounds to me like the problem really stems from Machine Zone shopping around for the cheapest possible contract. Maybe I'm just biased because I know that the game in question was basically just trying to sell desperate men discreet shots of Kate Upton's and Mariah Carey's cleavage.

I don't know the details of the countersuit, but that one exists at all is pretty telling. It suggests one of many things: it's possible that the contract did not guarantee any amount of uptime; or maybe Peak Web was not adequately informed of the load that the game was going to take on their servers and therefore they want to argue that the level of downtime was reasonable given that they weren't told to expect those kinds of loads; or maybe the contract had a termination procedure and Machine Zone decided to violate that procedure and just drop the company -- which is not something you can just do.

I mean, lawyers will argue anything for cash, but it sounds like Peak Web isn't exactly rolling in the cash they'd need to do this on a whim. I don't know what the chances are that the lawyers in question are working on contingency, but it seems plausible.

drostie··on CA:WoSign Issues
It's slightly better because at that point presumably you've failed auditing standards for many browsers, not just one. We're talking about "you tried to deliberately compromise security and get away with it by deliberately lying to take advantage of the loophole we'd provided you." With proof of that level of malfeasance, especially if it's widespread for new certs, it is plausible that Chrome and Firefox will both remove your certs, with Edge or Safari possibly coming up quickly behind. Presumably all of this would be "we are publicly announcing that we are dropping this CA in a month" to allow graceful switching...
drostie··on Infinite Noise – Simple, Open-Source TRNG
That's not what was being asked; what was being asked is "why wouldn't you want to persist some bits from a previous emission to a current one?" and the answer is "you do; it helps you in threat models where the attacker is somehow able to blast some hardware for a tiny time such that they can control an N bit-chunk of seed material, but not what came before or after." If you don't persist some bits between the calls, then this lets them determine entirely a few outputs of your RNG -- albeit scrambled by SHA3, but for some security expectations that's sufficient. On the other hand if you persist a seeding block between hash invocations, you block these attacks rather easily.
drostie··on Infinite Noise – Simple, Open-Source TRNG
They're using something very similar to your second algorithm, but the structure is in fact baked into SHA3, and in fact your second approach essentially takes their literal suggestion and modifies it by, every round, zeroing some of their PRNG state bits. I don't need to tell you why that's less preferable than what they're doing! (Your approach also has something in the range of 1-2 times more memory usage, but that only matters for embedded applications since neither one has high memory demands.) But yeah, this is definitely not your first algorithm.

Details: during a hash, SHA3 at all times is keeping a very large state block of 1600 bits. It defines a pseudorandom permutation (think of a block cipher with a block size of 1600 bits and a fixed key) of those 1600 bits as its round function. To run the hash, you pad your message and then break it into N blocks of size `rate`; starting from a zeroed state you XOR in a block to the first `rate` bits of the state, then permute the state with the round function, repeat until all blocks are consumed. Afterwards you read the first `rate` bits, and if that's not enough, you permute the state and repeat until all the output blocks you want are generated. (The magic number of 1600 was chosen in part so that you wouldn't generally need to do this; for SHA3-512 the rate is still 576 bits with 1024 bits of "capacity" in the sponge, so one read is enough to pull out the 512 bits of output.)

Now that you understand the hash, to use it as a PRNG, you just reseed it with the XOR-then-Permute operation and read it with the readout-then-Permute operation, interleaved. Each readout that you get is therefore formally equivalent to a SHA3 hash of

     initial_seed_bytes + 
         repeat(zeros, number_requests_before_first_reseed)  +
         first_reseed_bytes +
         repeat(zeros, number_requests_before_second_reseed) +
         (...)
which proves that getting the PRNG to return a specific random string X is no easier than a preimage-attack on SHA3 for that string X. (This is why the researchers involved invented the sponge construction as an alternative to Merkle-Damgard; it was easy to prove security properties about it.)

Since an N-bit hash generally needs a 2N-bit state anyway to avoid nasty meet-in-the-middle attacks and such, the SHA3 PRNG is better than generic constructions purely because it can avoid a pointless R+C => R bit state reduction, which (since SHA3 starts from a 0-state and XORs in the first R bits as your seed block) is exactly same thing as zeroing all of the reserved C bits that aren't normally attacker-writable.

drostie··on How Quaternions encode rotations: derivation and sample code
Thanks for that first link, it looks very promising. My problem is that I already idiosyncratically try to understand spacetime in terms of spin-vectors,* so this is going to take a bunch of trying to map out a Rosetta stone to translate between them!

* In brief, you can convert a world vector v^μ into a Hermitian 2D complex matrix V by adjoining σ_0 = I to the standard Pauli matrices σ_{1,2,3} and then V = σ_μ v^μ, when you do this you find that actually det V = v_μ v^μ under the (+ − − −) signature. This means that for nullvectors det V = 0 and therefore V is a projection V = φ φ^†, else V is merely Hermitian with eigenvalues v_0 ± √(v_1² + v_2² + v_3²) (because it has trace 2v_0) and there's not much more you can say. Lorentz transforms are linear and preserve Hermitianness and the determinant, with the parity-reversing stemming from V → -V and V → (det V) V^{-1} and the rest being V → L V L^† for some L such that det(L) = 1. The special case where L^† L = 1 (which is SU(2)) of course corresponds to 3D rotations because it preserves trace hence v_0, so if it's also preserving det V then it must be preserving the eigenvalues and hence the Euclidean metric √(v_1² + v_2² + v_3²). In turn L can be seen to act directly on the φ of the null vectors, φ → L φ, so call those "spin vectors" and confirm that they are spinors by finding out that L = -I for any 360-degree rotation. This is the most direct way I know of to see that the Lorentz transforms are the group SL(2, C) with this nice SU(2) group embedded in there. Then you can square-root the metric into an orientation tensor on the C^2 vector space as [0, -1; 1, 0] and build up the rest of the algebra in reverse from that starting point.

drostie··on Thinking at the Margin: It's Revolutionary
I mean, yes. I'm evaluating the teaching industry as a whole as being more competitive than the sports industry. I think you're mistaking different measures of competition, though, and we're possibly talking about the same thing in exactly opposite terms.

To get us back on the same page: Entering a new field is best thought of as a graph of how much you've been paid overall (the integral of your wages) minus job-related costs (student loans etc.) over time. Probably this time-axis is not "real time" but "time invested," as you may well be working for tips while trying to "break into" either teaching or acting. Now, there is some graph overlaid, which represents the amount you could have made doing other stuff (again in integral form, total profit you could have expected to make by that time pursuing other avenues). This is called an "opportunity cost" and often subtracted off of the original graph in some circles but I prefer to plot them side-by-side. In any case, find the t-position where these two graphs first cross and that (time, profit-to-date) break-even point is the "barrier to entry" into a new field. By the mean value theorem, sometime before you hit that point, the slope of your new career will have the slope of your old one, which is probably the definitive time when you "became a teacher" or "became an actor," rather than simply aspiring and doing stuff-on-the-side to break into the field. And sharper concavity on the curves suggests that this is closer or further from the break-even point.

OK, now that we've got the same picture in our heads: you're either measuring "cutthroatness" as either the time to become a teacher or that total break-even profit, and then you come to a natural conclusion that teaching, being a more gradual path to the point and having a lower point, is less cut-throat of a profession. I totally get that, and it's pretty persuasive.

However, what's salient for the economic theory is competitiveness for people who are already in the relevant industry. And that is where we cross terms, either inexactly (if you meant the first one) or exactly the reverse (if you meant the second one).

In standard macroeconomic theory, the magnitude of that break-even (profit, time) is the major factor determining how competitive the field is for the people who have already made it: a huge break-even investment means that the actors who have made it are going to make better wages.

One easy way to see this is to imagine a profession with no barriers to entry at all, something which anyone can just decide to go and do. (The stereotype of "fry cook" comes to mind.) In the long run, those are necessarily the least profitable professions, because anyone in a less-profitable profession will effortlessly switch to those professions, which will dilute profit in those professions and concentrate profit in the professions they're leaving, tending to equilibrate the two. Barriers to entry, whether those of copyright and patents or that of needing to fight for years to be recognized for your acting prowess, are the only things stopping the unwashed masses from coming in and making sport of it; it stands to reason that the bigger the barriers, the more of them are stopped.

In that sense, teaching is much more cutthroat than acting or sports or being a doctor; once you've made it as an actor/actress or an athlete or a doctor, you're now in the industry and therefore you're getting paid well, even if it cost you a lot to get in. You can enjoy a healthy security now that you've made it, precisely because it was so hard to make it, and everyone else needs to climb that mountain, too.

But if you're a teacher, your chance of having your school close or getting fired -- erm, "not asked to return" -- the next year is much higher, and you (a) know it and (b) often don't have the safety margin to easily afford it. You are much more replaceable than a professional athlete, therefore you have much less negotiating power at the table.

drostie··on Thinking at the Margin: It's Revolutionary
Probably the most substantial difference is iteration. A footballer gets many games per year with many moments per game to potentially shine or fail publicly, with stats that can be evaluated year after year. Your success as a teacher can somewhat be evaluated via testing, but that seldom tracks something close to what you're really supposed to be doing: making a difference in your kids' lives. At best that's an evaluation that has to be made by the now-grown child themselves, several years after the interactions which occurred.
drostie··on Thinking at the Margin: It's Revolutionary
Yeah, I would have expected that a domain called "Cafe Hayek" and a post title of "Thinking at the Margin: It's Revolutionary" would have noticed that it's not a supply-side surplus that drives down these wages, but a complex interaction of how the demand-side works.

First off, we have the layers of oligopolization, like you've said: carefully marketed and individuated products for sports, film, and music ensure that there's a substantial profit margin there. It's not that there aren't indie films or small sports teams; it's that these companies have convinced people that this is their team and that their identity is mixed in with it, just the way that my girlfriend drinks Diet Coke and not pop.

Teaching is simultaneously much more cutthroat, with tons of schools that are constantly shifting composition and competing for the same slice of some dearth of public funds which first gets siphoned off by the occasionally-corrupt bureaucrats at the top, superintendents and such, who don't have nearly the accountability that the teachers do. Then there is a competition among the teachers, ameliorated somewhat by unions, but there is also a competition between the unions too. All of this ensures that there's money to spare for the pop cultures that's not there for the educational infrastructure. UNTIL... you get to colleges, where there are some colleges which have distinct identities; I still name-drop my undergraduate work at Cornell rather than my Master's at the TU Delft, even though the latter is a much greater achievement. There's a bit more pie around for the professors, and they enjoy much more cushy arrangements like tenure.

If you average over athletes in general, athletes get paid crap. Most of them are teenagers playing in exchange for being taken out for pizza afterwards; then there are adult amateurs and college-level play... You take the typical inner-city basketball player and evaluate his chances of making it to stardom, you're going to be talking about winning the lottery. Even if he has big dreams. Same with actors. But what you're actually seeing in these celebrities is a carefully-played oligopoly causing a great demand for a scarce product, and the scarcity drives these commitments to finding the best-of-the-best that allows stars to leverage that monopoly that all of us have in a free society, our monopoly on our own labor.

drostie··on Contemplating the possible retirement of Apache OpenOffice
Right, the problem is that the generic term for what you're building is an "office suite." It's almost a cliche for these to have had "office" somewhere in the title; I know "WPS Office" is a thing in some places; I remember WordPerfect being bundled with "Borland Office" which I looked up now and apparently it's "WordPerfect Office" these days... and I have a Zoho account and I believe theirs is also called "Zoho Office." I think there was also something called "EasyOffice" once upon a time.

Apple as usual bucks the trend with iWork, and Google with Docs. There's an active KDE project called Calligra, too, and half of the academic world just uses a piecemeal built around LaTeX. Those names are different, but they don't necessarily say anything, either.

Part of the problem is that there's not a nice simple word to say "simple data-set crunching plus pretty authorship tools for both presentations and long-form documents." These are kind of three very different domains which happen to combine together into reporting information. Perhaps a nice open-source project could be named Rapport due to its community vibe and its linguistic tie to "report", but then again, that sounds like an open-source composition/looping software for anyone looking to spin a sick beat.

drostie··on “Baffling” “signal” “from HD 164595” is probably none of the above
The problem is that you don't want to be the kid who cried wolf, you don't want to be endorsing crying wolf, and you in fact maybe even want to punish the newspapers who cried wolf and said you were responsible for the cry.

SETI wants to have the ability to say later, "guys, we have a signal, and this time we think it's real." The best way to have that credibility is if your members are the most likely to say "hey, I know the media is really interested in this but we're really hard-nosed skeptical bastards who aren't going to fool you, this is probably nothing." Then when those people actually say "this is probably something!" you're like, "woah, even the hard-nosed skeptical bastards are throwing in with it."

Depending on your perspective this is either undermined or enforced by the way climate change has been approached. Climate change has been an indisputable fact compelling so many hard-nosed skeptical climate scientists for so long, that now the deniers no longer believe that the scientists are hard-nosed or skeptical. So maybe this is misguided and "haters gonna hate" anyway. But I can understand why it's the default attitude in a tenuous field like fusion research or SETI.

drostie··on Everything I Am Afraid Might Happen If I Ask New Acquaintances to Get Coffee
My uncle Guus has been playing viola with an orchestra in the Netherlands for many, many years; he gave me a great way to describe some of this:

> When I was young, and my beard was not this gray, and someone at the orchestra was angry with me—could be personal, professional—I would ask myself "what's wrong with me, how do I fix myself?" But I have noticed that now that I am older, and my beard is very gray, when someone is angry with me, I wonder, "what's wrong with him?"—and I don't try to fix anyone.

drostie··on The lambdaway project, a small and coherent language dedicated to the web
I'm pretty sure that was intentional. Choices like that can sometimes keep a certain sort of person out of a budding community, and even though they are a localized pocket of worldsuck, may decrease worldsuck globally.
drostie··on Happy 10th birthday pandoc
Happy birthday!

Pandoc is one of those things that I only recently discovered and totally fell in love with: I wrote a bunch of code in literate Haskell for work, so that I could have the logic right, and then ported it to JS to reduce the bus factor of the project. When I discovered pandoc I just ran it on my literate Haskell and the resulting PDF was so beautiful I had to print it out and tack it up on a cubicle wall, like a "this is what they pay me for" type of reminder.

drostie··on Hello from Orkut
I mean, the people who have adopted Pokemon Go are now connecting with each other outside in their cities' public spaces, often reconnecting with old friends to go out together. I'm not sure this was intentional on the app designers' part (maybe "go outside" was, but the residual social effects of getting so popular so fast in combination with "go outside" probably wasn't so well-appreciated, since they deployed v. 1.0 as a mostly-egocentric game).

There is the definite potential for a device to change the way we hide behind devices into an opportunity to meet people and connect.

drostie··on Preliminary NTSB report on Tesla crash
In fact they're both right. Indeed this is at the bottom of a hill, but the intersection in question happens to be behind a small hump in the road, conveniently covered in a shadow in Google Street View (whereas the road behind it is brighter, sunlit):

https://www.google.com/maps/@29.4119817,-82.5444142,3a,60y,1...

If you squint or zoom-in, the light square on the right hand side of the road is in fact a vending-machine-stocking truck parked at a gas station on the other side of the intersection where this all happened, serving as a useful feature-height comparison; the semi was probably a little larger than that but similarly its wheels were likely underneath the horizon provided by the hill of the road. You can therefore imagine that more than half of the trailer might have been under the horizon of the hill, including wheels etc. -- frustrating any sort of machine visual inspection, 'cause that's even difficult by human eyes.

This Google Map image is 440m away from the actual crash site, which at 74mph corresponds to about 13.3s of reaction time. (The extra time from going at 65mph would would have only been an extra 1.8s.) It was intentionally chosen to be like "here is where a driver travelling East would have had no idea that there was a semi beginning to turn, pulling out onto the road in front of him."

The other data point needed is "here is where an attentive driver would have had no excuse for not knowing there was a semi in front of him;" that's about here:

https://www.google.com/maps/@29.4115366,-82.5429196,3a,60y,1...

This is 360m away, giving at least 11s of advance notice to the oncoming driver. Even with 5s of reaction time before he slams on the brakes, that should have been plenty of time. Clearly the inattentive driver is therefore a huge problem here, and the driver was presumably inattentive because he had been goaded by the ease of the driving system.

It's much harder to tell whether the semi should have seen the Model S and yielded right of way with this setup; as mentioned at 440m or so the Tesla should have been likewise invisible to a truck-trailer, so that's presumably when he would have started turning; it's not clear to me whether he would have then seen the car before his truck-trailer entered the oncoming traffic and he would have had no better option than stepping on the gas.

But it does sound like the Tesla's road detection is based on a visual algorithm rather than something more obvious like radar, and certainly both when you are too far from this sort of truck it can be nondistinct (as the road curves too much for you to see its wheels) and if you get too close it probably also becomes nondistinct (the closer you get the larger it is in your digital field)...

drostie··on [dead]
I can't help but think that that executable could have been much smaller, like < 50 lines, in Haskell. First stab at it, with less-rich command-line arguments:

    import Prelude hiding (getContents)
    import Control.Exception
    import Control.Concurrent
    import System.Environment -- for getArgs
    import Data.ByteString (getContents) -- for strictness
    import System.IO hiding (getContents)

    spin :: String -> Handle -> IO ()
    spin s h = sequence_ $ cycle [p " \\", d, p " -", d, p " /", d] where
        p c = hPutStr h ('\r' :  s ++ c) >> hFlush h
        d = threadDelay 100000

    main = do
        prompt <- getArgs
        let actualPrompt = if null prompt then "Loading" else head prompt
        sThread <- forkIO (spin actualPrompt stdout)
        getContents
        throwTo sThread ThreadKilled
I mean there are some serious problems with the above, like that I can't guarantee that Haskell will see the `ByteString.getContents` by itself on one line and use constant memory knowing that the resulting bytestring will not be used... maybe I need something more like `catchIOError (sequence_ $ repeat getChar) (\e -> if IO.isEOFError e then return () else ioError e)` to consume the stream with fixed overhead without blocking... but it seems like argument-handling, printing out usage information, and getting O(1) memory usage can't possibly quintuple this thing's length.
drostie··on Search the DNC email database
I do not know if you are aware of how little sense this comment makes. For example, it is in the very structure of the words "disingenuous" and "consider" that the sentence "X is disingenuous; consider Y" is nonsense for all X and Y; you cannot prove that someone is being insincere by asking them to think about something that they've not thought about before. This is ignoring the bigger issue that people forget things all the time and that it does not usually mark a lie, and that even if someone is lying about some statement somewhere, it doesn't change the basic Bayesian fact that yes, you do need to consider an event in the context of all of the probability-weighted candidate explanations for it, if you want to know whether it's reasonable for a person to conclude it.

I respectfully yield whatever last words are in this exchange to you.

drostie··on Search the DNC email database
Ugh. Internet arguments are the worst.

1. I did not say that you said that those emails were about Bernie; I said that those emails could be about Bernie, because it's something that I do regard as a live possibility. I was just being honest about how little content there is there; it could be about Bernie or not. (Also the "I didn't mention Bernie so why did you think it was about Bernie?" card is extremely lame; we're talking about a WikiLeaks leak and WikiLeaks in parallel with this leak has announced e.g. via Twitter that they interpret this as being about Bernie. Of course it's neither my nor your innovation to read the emails that way; we both received it.)

Like, you say "the emails refer to two upcoming primaries." I am simply saying that this is too assertive for my tastes. It doesn't say anything about primaries; it says "KY" and "WVA" and those can be primaries, they also might not be. (I'm afraid I don't understand your "by the way" here -- you might be trying to point out the disambiguation link up-top, but of course acronyms may also refer to things that are not on Wikipedia. For example, Brad Marshall has a lot more emails from before this time mentioning the HVF; but have fun trying to find that on https://en.wikipedia.org/wiki/HVF .)

So, I mean, there's a lot that we're reading into this thing to come to that conclusion. Getting fussy and treating it like it's not a conclusion is not a great idea. It might well be a correct conclusion. But it's a conclusion that we're presently coming to off of limited evidence, and you shouldn't be all like "you cannot possibly be serious!" when someone points out that the evidence is limited, when it is.

2. You have a messed up definition for "clearly" then. That's OK, it seems like a lot of things seem a little muddled in your worldview. For example, you're right that "that is clearly saying that knowledge that Sanders is an atheist would hurt him in KY and WVA," as long as we weaken the word "knowledge" to "belief" (because it would be easy to misread what you said as drive-by-asserting that Bernie is an atheist, whereas Bernie has disclaimed this a few times, even though he has repeatedly asserted that he's not very religious in any organized way).

But it's not "clearly suggesting to use the question against Sanders." That's another conclusion. It might be right, but it's not like the email says "My Southern Baptist peeps would not vote for him if they knew the truth." In fact the whole case for this hinges on the word "skate" (you used, in quotes, "skate by", but that is not even what the email said).

That word by itself is not clear. It is implicitly suggestive via a negative connotation.

3. I am not doubting that the bigotry exists and I am not stating that the DNC for sure acted ethically. However, we would need to know a lot more than this email to know if that were true.

For example, you're treating this as a serious suggestion rather than some banter among friends. The email thread ends on an "AMEN!" which suggests that nobody in this thread considered it a starting block for some sort of conspiracy to actually ask Bernie the quetion to get him to be unelectable. In fact, that earlier thread about the "HVF" I mentioned, there was an official DNC denouncement of claims that the Bernie campaign was making; it came on the backs of a lot of back-and-forth in order to write a formal press release which is not present here... But one of the more interesting (and very hard to interpret) emails comes from Hillary's general counsel, Marc Elias, who was CCed on the question apparently independent of his work on her campaign. https://wikileaks.org/dnc-emails/emailid/5740 . It seems they might, having known him personally, sent him some examples of what Bernie is saying and solicited his legal advice on whether they could meaningfully speak against Bernie, even though they're supposed to be formally unbiased.

So it seems that on serious matters they approach it with sincerity and gravity, whereas the one you're calling a "conspiracy" might also just be a private sharing of personal bigotry, rather than an attempt to exploit it publicly.

Again, I'm not saying that this is surely what happened. Maybe it was a serious suggestion, too. We're on HN, we're both more mature than that; we both know what uncertainties are, and I'd hope we both have a practical knowledge of Bayes' theorem. I am merely saying that you're very convicted based on a conclusion drawn from very little evidence. We may get more evidence, and better evidence, which vindicates you. But the evidence as we have it right now is relatively brittle, as such things go. You multiply the odds ratio by the probability that he would have sent that email if he was trying to conspire against Bernie (relatively high, but he'd probably have been more explicit about it and his listeners probably wouldn't have treated it with such a lack of seriousness) divided by the probability that he would have sent that email if he wasn't trying to conspire against Bernie (which is probably not a tiny negligible probability the way you're making it out to be).

drostie··on Search the DNC email database
I was talking in particular about the use of profanity in a working environment, of course.

I do not know what you are reading into those emails but speaking purely objectively, there is remarkably little content in them to go off of. It could potentially have to do with Bernie Sanders in the Kentucky and West Virginia primaries (which were in early May), but that seems somewhat unlikely given the timestamps -- the West Virginia primary was only 5 days after the email was sent, which is almost no time for one to ask the question, get whatever answer, and launch a smear campaign. It could also be not about Sanders at all--WVA is an odd way to refer to West Virginia when WV will work as well, and the name "Sanders" doesn't appear anywhere in the emails themselves.

Even if it's about Sanders, the email doesn't even say whether the guy is rooting for or against Sanders: it could just as easily be "Hey, I heard this rumor that Sanders is an atheist, can we get someone to ask him so that he can squash that rumor like a bug?"

It doesn't strike me as a "civil rights violation" to ask about someone's religious views. I mean, maybe the US people not voting for politicians based on their religious affiliation is a larger civil rights violation that you fear will be triggered if this question is asked, but that seems like several steps away from a sure thing, since it's quite possible that Bernie will play a different political card.

drostie··on Search the DNC email database
None of them are particularly interesting, though. So far I'm pretty surprised with how pedestrian it is.

Even looking for the word "fuck" reveals few internal communications which use it. In one thread, some guy seems to have gotten a sub-optimal time slot for putting out Democratic-leaning news on CNN, since it's at 6AM rather than closer to near 8:20AM when, it turns out, Obama was going to deliver some statement. They asked him if he thought it was possible to move the thing forward a couple hours, and suggested that if he couldn't then they might have to withhold the news completely for a later time. And he replied with a bit of lip about how crummy that is: "They structured their whole show on that we’ll make news in the 6am hour. We told them a time. They took care of us. Now they’re all asleep. Are we really going to screw them over on our mistake???" and he follows it up with a couple more replies which are similarly irreverent but not outright bad, making a valid case (which the higher-ups seem to eventually agree with) that alienating someone who's doing you a favor is a really bad idea and they should just bite whatever bullet they're biting with the worse time-slot. They basically tell him, "You're right, we'll listen to you, but fuck off with the attitude." And that's the scope of the thing. Relatively minor.

In another one, someone admitting that they're writing for FoxNews.com invites comments from them about some hit piece he's thinking about writing on the subject of Hillary Clinton maybe protecting Bill and trying to silence his accusers during his sex scandals... an internal email discussing this "opportunity" (to, presumably, have whatever their words might be, twisted) one emails to the other people in his office, "Is there a Fuck You emoji?". After some laughs they decide not to respond at all; but the guy is persistent, so the person who handles the forward says, "The asshole from fox emailed us again. I did some research and there’s still no “fuck you” emoji, unfortunately."

It's pretty tame stuff so far in my browsing. Relatively professional.

drostie··on Maths notation is needlessly complex [video]
If people around here are interested in this idea, I would just like to point out that this is basically what embedding miniKanren (a super-simple logic programming DSL) in your programming language lets you do. You write "give me all q such that 2^q = 8 with an expression like `find q. PowEq(2, q, 8)." Also since the asterisk is sort of "loaded" it may be more helpful notation-wise to use an underscore, PowEq(2, _, 8) standing for the above.

The most obvious problem here is that you have to think about the composability of relations the way you do with functions, because PowEq(3, PowEq(2, _, 8), _) makes sense (find me the number that you get when you raise 3 to the [whatever number you'd have to raise 2 to, to get 8]), but the very similar-looking PowEq(3, PowEq(2, 3, 8), _) is actually a type error, the function is being called on a statement rather than a value.

drostie··on Fresh work on the mathematics of bicycles in motion
There's also a sort of "common sense" explanation relying on really basic physics:

Let's say you want to turn left. We know from experience that you will be leaning left when you turn: meaning, your weight is going to be on the left hand side of your wheels. (The common-sense explanation works really well because I'm not going to explain why you need to lean left to steer left, I'm just going to take it as a given.)

The basic-physics question is: if you're starting totally vertical, how the heck do you get your body mass to be on the left hand side of the wheels in the first place?

You can get a little bit of effect, of course, by simply leaning over left: but that leans the bicycle to the right because you can only lean over one way by pushing your bicycle the other way... and when you do this the bicycle briefly opposes you in the way it's leaning before your gravity can win out. That's less good.

So what your brain has actually learned to reflexively do is, to send your wheels going off to the right while your body continues in a straight line, hence your mass is now over the left-hand side of your bicycle and there is no competition. You then steer into the turn and complete it normally.

drostie··on Ethereum hard fork successful with mining majority
I mean, from what I understood it was more complicated than just pure profit-seeking. (Disclaimer: I'm not a user of Ethereum.)

My understanding was that the DAO (and organizations like it) was the whole point of people signing up to use Ethereum, and the hard fork basically says "The DAO never existed, you're all getting your ether back" with an understanding of "now that you know all of the attendant risks of hacking, start your own autonomous organizations with a bit more prudence." It is not very realistic to expect further forks as every fork produces a new cryptocurrency; furthermore it is not very realistic to expect a mere 51% majority to sway the blockchain (as I understand it the change is code-level). If each decision only gets 80% approval then after 3 such decisions you have your community split across 4 cryptocurrencies: {20%, 16%, 13%, 10%, 41%} and you've lost over half of your users; furthermore if the power of a currency is proportional to the square of the users (as it likely to first-order has to do with how many ways they can interact with each other, which goes with the number of handshakes they can make), you've cut down your value proposition to only ~16% of what it was. It sounds like this might have gotten 90-99% adoption by the community in terms of hashpower, but some of this is doubtless amplified by miners who will go wherever the wind takes them.

It reminds me of my environmental science teacher in high school. Between counting the bugs we caught at local streams, one day he taught my class about the Tragedy of the Commons. He said, "tomorrow, if you want to play a game to illustrate this, bring a quarter and we'll play it for real cash." Most of us brought quarters. "Okay, if you still want to play this game after I explain the rules, put your quarter in this jar and I'll give you a card. You're going to write on that card your name, and then either 'use' or 'leave': for whether you're going to use the common resource or leave it alone for a while. You have to keep your decision secret, if anyone else sees what you wrote then you're getting your quarter back and it's like you were not in the game at all. You can SAY anything you want to people, but nobody's allowed to see what you're DOING. After 5-10 minutes I'll call time, and you'll give the folded cards back to me. If everyone says Leave then I'll give everyone who participated two quarters. If one person says Use and everyone else says Leave then I'll give them the jar of quarters: and, no being mean to them, they won the jackpot fair and square. Or if two or more people say Use, then I win all of the quarters. Who still wants to play?"

A lot of us put our quarters in, and I being a petulant teenager wrote Use (with the intention to give everyone back their quarters afterwards! I wasn't greedy, just a smartass) ... but while almost everyone else wrote Leave, this did not include one kid who didn't understand English so well and meant to write Leave but instead wrote Use (or else that was just what he told everyone afterwards). The teacher won all our quarters, but he returned them like a good sport and offered to let us play again, this time FOR REALS. This time I voted Leave, but multiple people voted Use just to somehow "punish" me, which was even more what the teacher was trying to teach: "if you can't guarantee that everyone else is going to leave it alone, hey, you might as well try to get in on this sweet sweet resource while it still exists, right? So that's why the tragedy of the commons happens and we're all pretty much doomed. I'm gonna win your quarters every time." He gave back the quarters anyway, of course, after making a big show of "No, the second time was FOR REALS, you all knew it, didn't you? Would you have paid ME back?!"

It's probably just the feeling of a bunch of kids being like "that wasn't fair, give us back our money and let us try again!" from the first time we played the game, and the more sober discourse of the second match where we understood better that our money was on the line and we had to find a way together to steal our teacher's money.

drostie··on Cloudflare ReCAPTCHA De-Anonymizes Tor Users
That's because this is a speculation; e.g. "this obvious opportunity is not the proof" is admitted in the text itself. As mentioned, the requirement is the ability to correlate two different traffic signals: from your computer to Tor, and from Tor to the exit. So, the agency trying to trace you needs to be listening at both of those points. Their approach is simply to have one of those be the ISPs (presumably this ranges into the hundreds of thousands if not millions of computers) of US citizens (foreign ISPs would seem much harder to monitor), and the other being the CloudFlare servers (only maybe hundreds or thousands of machines needed to log this?).

Actually, watching the entrance and exit nodes in this fashion is probably more expensive than simply hosting your own entrance and exit nodes. It would be within the NSA's power to, say, host or monitor 500 of the 1000ish exit nodes by now, collecting 50% of the exit traffic at almost no real cost. Entrance traffic is harder as the network is larger, but if you hosted (or, again, captured the traffic to) another 2k non-exit relays you might be able to capture 10-20% of the entrance traffic. The basic points I'm making here are: (1) that there are way fewer relay nodes to monitor than there are ISPs, if you would prefer surveillance; and (2) you are not restricted to surveillance or even to your own nation--there's literally nothing stopping the NSA from purchasing VPSes in the Netherlands and Germany and Sweden and running Tor on them, and it'll seem like a very geographically diverse set when you're looking at it with Vidalia.

Combined together the NSA can maybe deanonymize about 5-10% of the Tor traffic to the Internet right now with a much cheaper method, and this is where it gets interesting: the Tor default is to have 3 hops, which means that in addition to correlating traffic patterns you get to correlate on the IP address of the hop in the middle, even if that hop is not colluding with you. So even in the face of network jitter you have a 32-bit identifier which links together packets above and beyond simple network traffic into or out of Tor. And you only need to operate a few thousand computers to do it -- far fewer than you'd need to monitor the US ISPs in general.

You can also try to watch specific popular exits like Cloudflare, but doing this removes this awesome IP address that you get for the middle hop, and you still need either a relay node or else to be tapping a given user's IP, to try to deanonymize them.

drostie··on Executing non-alphanumeric JavaScript without parentheses
I mean, that's certainly a great ideal. The real world is somewhat less-than. I don't fault anyone for having to maintain a legacy codebase developed by people who rolled their own, say, JSON-parsing functions. (If you want to see what this sort of exploit mitigation looks like in practice, see https://github.com/douglascrockford/JSON-js/blob/master/json... ; think that this was the most popular JSON parsing library ever. Thank goodness IE8 is a goner.)
drostie··on Executing non-alphanumeric JavaScript without parentheses
Ctrl-F template strings... yep, there they are.

So if you didn't know, ES6 added template strings, which are these really awesome things because they have multiline and string interpolation capabilities (and they're safely far away from JSON, which in my opinion shouldn't have such capabilities). They are very pretty and incredibly handy; you write

    console.log(`
    I'm so ${scared} in case ${ I.fall.off() } my chair
    And I'm wonderin' how I'll get down the stair
    `);
and this gets converted into

    console.log("\nI'm so " + scared + " in case " + I.fall.off() +
        " my chair\nAnd I'm wonderin' how I'll get down the stair\n");
Except for one thing: they're called "template strings" because actually this is a sort of "default behavior" which can be metaprogrammed. There is a default interpreter which could be written:

    function interpret(text_segments, ...split_segments) {
        var out = "";
        for (var i = 0; i < split_segments.length; i++) {
            out += text_segments[i] + split_segments[i];
        }
        return out + text_segments[i];
    }
but... you can write one of your own, if you want, and put it on the beginning. Therefore:

    > console.log(`abc ${[1,2,3]} def`)
    abc 1,2,3 def
    undefined
    > console.log `abc ${[1,2,3]} def`
    [ 'abc ', ' def' ] [ 1, 2, 3 ]
    undefined
Notice that the side effect of console.log has happened with the arguments given to it, allowing for code execution.

As for mitigation... add detection of backticks to whatever code was detecting parentheses. It's not a very widely used symbol in any context other than shell scripting and LaTeX anyways, so you're probably good to go if you just outlaw that character before calling eval() on the whole.

drostie··on A Single Div
IE and Edge never actually "passed" Acid3 either; as I recall they typically got to scores of 100 but would lag on two numbers, I want to say they were 25 and 69, whereas the test explicitly says that the animation needs to be fluid.
drostie··on Harmony Explained: Progress Towards a Scientific Theory of Music
His criticism of Helmholtz is probably spot-on but I haven't encountered the folks that he has, claiming that Helmholtz is the "agreed-upon authority on this subject."

A bunch of the material available in this paper is sufficiently common knowledge to appear e.g. on Wikipedia: https://en.wikipedia.org/wiki/Equal_temperament .

The most major novelty here appears to be an attempt to hand-wave some general aesthetic principles for what humans like, and apply these to the brain via some sort of fuzzy "computational approach" (which never, y'know, broaches the point of an actual computer program). A lot of the overarching explanation can be ignored to the benefit of the theory in many cases: for example, it is likely more helpful to a neurobiological understanding of harmony to steal his insight that the minor chord probably sounds "good but off" because it has the right intervals in the wrong order, than to couch it in the author's full explanation with computational assumptions etc.

drostie··on Coconut – Pythonic functional programming language
They just mean "this language looks in general like Python." You're overthinking it.

It's like saying that JavaScript looks C-ish or Java-ish. It definitely doesn't look exactly the same; if you see e.g.

    var result = [].slice.apply(vals, 0);
then you can be highly certain that that's JS and not Java or C. But the idea of having blocks of code enclosed in curly braces, which are formed out of statements usually delimited by semicolons (except for special forms like if-statements and for-loops which don't need to be followed with a terminal semicolon), etc. is very much a C-style thing.
drostie··on Coconut – Pythonic functional programming language
Python 3 at least changes the semantics of map and filter so that they are generators.

Lazy sequences are the sort of thing that you don't care about until you need to process a ten-million-line file (or whatever) and suddenly find that your program is slowing down for pointless memory allocations up-front -- then they become unbelievably important.

← PreviousPage 7 of 34Next →