"First make it possible. Then make it beautiful. Then make it fast." Alas, the guy writing the checks all too often doesn't see past step 1.
This. I've yet to see a client development project that made it past step 1 on anything other than the most trivial features. Sucks, but I got paid. What can you do?
Suffering-oriented programming
41–50 of 64 posts
Re: Suffering-oriented programming
#42Re: Suffering-oriented programming
#43The biggest problem I have with this approach (and believe me, I love this approach), is that it makes it hard to finish things. For example, over Christmas, I built a small pretend-natural-language CLI controller for iTunes. I made a working version in something like four hours, spent a few days adding in crazy half-thought-out features like speech recognition and a web interface - and then I basically stopped devel…
"The problem, then, is that once the "suffering" is gone, or sufficiently lessened, there is no real reason to keep building." Then how is the project incomplete? If it's not a product that you're planning to sell, put your code on Github or the like and others will add any features that you're missing.
Re: Suffering-oriented programming
#44Suffering-oriented programming rejects that you can effectively anticipate needs you don't currently have. I do anticipate, however, I never do it in code. Rather, I find that just thinking through some scenarios helps me to see where the code might start evolving, and to make sure that that part of the code is isolated enough to change without having to change everything else, if the time ever comes. (Perhaps Nathan…
Re: Suffering-oriented programming
#45Suffering-oriented programming rejects that you can effectively anticipate needs you don't currently have. I do anticipate, however, I never do it in code. Rather, I find that just thinking through some scenarios helps me to see where the code might start evolving, and to make sure that that part of the code is isolated enough to change without having to change everything else, if the time ever comes. (Perhaps Nathan…
Re: Suffering-oriented programming
#46Re: Suffering-oriented programming
#47Earlier quoted context omitted.
Isn't it problematic that 11, 01 and 10 XOR together to get 00? And why not use a simple counter?
Random 64 bit ids are used in the process. So the probability of accidentally completing a tuple is very, very small (1 / 2^64 for every ack). Counters don't work because of the asynchronous nature of Storm. For example, consider a topology that looks like this: A -> B -> C \-> D Let's say A emits 2 tuples (+2 differential), B processed those and emits 2 to C and 3 to D (+3 differential), C processes 2 tuples (-2 dif…
Which means, due to the birthday paradox, that you should expect your first collision around 2^32 tuples. Process a few million tuples a day (that's only about 25 per second) and you should expect your first error within your first year.
EDIT: I'm wrong, see the explanations below.
Re: Suffering-oriented programming
#48"First make it possible. Then make it beautiful. Then make it fast." This mantra closely resembles the rule attributed to Kent Beck that one should "Make it work. Make it right. Make it fast".
Re: Suffering-oriented programming
#49Earlier quoted context omitted.
Random 64 bit ids are used in the process. So the probability of accidentally completing a tuple is very, very small (1 / 2^64 for every ack). Counters don't work because of the asynchronous nature of Storm. For example, consider a topology that looks like this: A -> B -> C \-> D Let's say A emits 2 tuples (+2 differential), B processed those and emits 2 to C and 3 to D (+3 differential), C processes 2 tuples (-2 dif…
"So the probability of accidentally completing a tuple is very, very small (1 / 2^64 for every ack)." Which means, due to the birthday paradox, that you should expect your first collision around 2^32 tuples. Process a few million tuples a day (that's only about 25 per second) and you should expect your first error within your first year. EDIT: I'm wrong, see the explanations below.
Re: Suffering-oriented programming
#50Earlier quoted context omitted.
"So the probability of accidentally completing a tuple is very, very small (1 / 2^64 for every ack)." Which means, due to the birthday paradox, that you should expect your first collision around 2^32 tuples. Process a few million tuples a day (that's only about 25 per second) and you should expect your first error within your first year. EDIT: I'm wrong, see the explanations below.
The birthday paradox doesn't apply. All that matters it the value at the time the ack is applied, so it's always 1/2^64 (because the xor of any number of random numbers is still random).
By the time you reach your 2^32 ack, your chance of having all successes is ((2^64-1)/(2^64))^2^32, which is EDIT: My test program seems to indicate that I'm wrong, but I can't see the flaw either in it or in my reasoning. Can you explain why the birthday paradox doesn't apply here?
EDIT': In the birthday paradox, it would be ((2^64-1)/2^64)) * ((2^64-2)/2^64) * ((2^64-3)/2^64), etc.