Programming error invalidates US Diversity Visa lottery results
dvlottery.state.gov
dvlottery.state.gov
U.S. law requires that Diversity Immigrant visas be made available through a strictly random process. A computer programming error resulted in a selection that was not truly random.
They maybe should be careful with their wording, since "not truly random" would basically disqualify any code based random generator.
Overview of PRNG, TRNG for reading if you're unfamiliar: http://www.random.org/randomness/
If the law had said instead that each PERSON must be equally likely to be selected for the jury, then the PRNG would have been fine since the number of people is much lower than the seed space.
I don't believe this was the issue here, but it's interesting.
Reference with more examples: http://portal.acm.org/citation.cfm?id=769827
>"...[a programming error had caused] more than 90% of the selectees to come from the first two days of the registration period ..."
The registration period was 30 days, and had "many" entries each day. That's... shockingly bad.
randWinnerID = (int) Math.random();There is no reason they shouldn't do this on a Linux system, using published code, under a published procedure. Had they done that, they would't have screwed it up in the first place.
How does one get so bad at using random numbers? Surely selecting random entries from a list isn't hard. `entries[rand*entries.count]`
If not, I'd roll a 10,000 sided die, and type it in by hand. (edit: or cow pie bingo. That has a long tradition of unbiased results.)
That said, it sounds like a definition of random is clearly specified and it was not met, so precedent isn't important.
I think their definition of true randomness is flawed. It does not matter whether it's truly random, rather it should about whether it's random to a point where it's out of the operator's control and ability to predict.
In practice, such precise conditions are completely impossible, and the end result is unpredictable as long as it tumbles enough times. Shake it around in a cup to randomize the starting location, and you're as good as you can get.
Perhaps the bug was something like "bool choose_this_applicant = random() < 1/total_applicants_received_so_far". It would have similar behavior, might appear correct at first glance (at least to the sort of programmer who settles for a government job) and would be utterly, completely wrong.
Bad: How can the State Department be so incompetent as to fuck this up? Also, why does it take months to generate this? I could do it with 15min and a simple script. Granted, any code generator is never truly random (Newtonian laws of physics pretty much forbid randomness,) but for all intents and purposes they're more than capable of handling a simple lottery.
This is dwelling into philosophy, but some argue that the universe is deterministic. With absolute knowledge of every particle in the universe, you could predict the entire course of everything that would happen in the future.
The key is not to find true true randomness, which can reasonably be argued not to exist, but rather to find a system that is chaotic enough to be beyond control or predictability, and use that to generate random numbers. Weather systems, radioactivity, etc. are examples of this.
Now I don't know much about quantum physics, and I hear that that might be an alternative to that—but my point is that I don't think it matters. A generator doesn't have to be truly random, it should just be random enough.
That's not possible, as stated by the Heisenberg uncertainty principle. The more you know about a particle's position, the less you know about its momentum, and vice-versa. This property is largely agreed upon to be an inherent property of the universe, and not just a technical limitation.
At that point, you're seeing the mechanics that makes the HUP work, the formulas that govern everything, the forumulas that make things un-formulable... Basically, beyond comprehension :)
Actually, this is impossible. There's an elegant proof of this statement based on Cantor's diagonalization argument which shows that the computational device required to perform such an analysis cannot exist in the universe, via contradiction.
I suspect that is it like the problem of choosing values randomly from a sparse hash table. Choosing a random slot and scanning forward to the next empty slot results in a bias where closely spaced entries have a much lower chance of selection than entries preceded by a wider gap.
It is easy to make that same mistake when trying to pick a random record number when record numbers have been assigned in chunks (like social security numbers).
The purpose of an immigration policy is to serve the citizenry. Only the most useful and "profitable" people should be let in, period.
Meanwhile, red necks scream in anger, teir took uor jobs!!
Do you remember that time when the sons of immigrants (because in america everybody is the son or the grandson of a immigrant) were not angry at the newcomers? Neither do I, because it is always been this way.
Over ten million people each year apply through this program for only 50,000 green cards. In a nation of 300 million people, I think we can manage this.
Is this not plainly insane?
Why?
I'm not advocating a racist immigration policy, as the US was founded on, just one that serves the people living here. After all the purpose of the constitution is to "secure the blessings of Liberty to ourselves and our posterity". That means the country is for citizens and their bloodlines, not foreigners.
I suppose, technically, that's not what this country's Constitution has written on it; but, perhaps I'm an idealist and would like to think that, in the hearts and minds of the founders, they were intending to create a confederacy of freedom, and of equal opportunity. Why would the bar for entry into the country be any different?
[edit: finished my thought, then changed wording slightly]
my mom also got a chance to actually apply her computer science degree (which she couldn't do before because of the explicit sexism which meant women were generally employed as, perhaps glorified, receptionists), and now works as a senior software engineer at a large company. I imagine her true potential would also have been difficult to estimate prior to the move, as she'd done very little actual programming after college - but she effectively got a fresh start here, and was able to quickly advance in an environment which allowed her to be judged solely on technical competency.