Ice Cream Sandwich runs (surprisingly?) well on Nexus S - <AUTHOR> http://www.extremetech.com/computing/106307-ice-cream-sandwich-runs-well-on-nexus-s

<comment><USER2> This is a bit premature; there is no official build yet of ICS for the Nexus S, and so explaining that it's choppy when running a custom, hacked-together build doesn't really mean anything at all to probably 90% of Nexus S owners.

I'm very interested to see how ICS runs on my Nexus S, but the only real way to see it is to have it come from Google; why else would I have a Nexus S, if it weren't to get updates directly from Google? Running a custom, unsupported ROM is completely awesome but makes for a very poor OS/product review.

And then to suggest that it should run fine 'cause Windows can is ridiculous! You've never seen regular ICS _actually_ run on a Nexus S yet, so stop making statements like "It's slow".

<comment><USER3> I've been running Koush's builds of ICS on my Nexus S, and I honestly feel like it runs _faster_ than Gingerbread/CM7 did before. The biggest factor is that ICS responds _so much_ more quickly/sensitvely to touch movements than Gingerbread or Honeycomb did, and that goes a very long way to making the entire experience feel smoother and more responsive.

Between that and the new interaction features in ICS, I'm never going back to Gingerbread on my phone again, and I'll be flashing ICS on my tablet as soon as someone releases a stable build for it. It really is phenomenally better than previous versions of Android, hands down.

</comment></comment><comment><USER4> One advantage of custom ROMs is that they can get away with shipping light or stripped down versions of things a lot easier than Google could. If you're using a ROM that doesn't come from Google you aren't as surprised that you aren't getting the full Google experience. The other thing custom ROMs can do is ship with a requirement that 'you must have a 1Gig or larger μSD card inserted and that it must be formatted ext4'.

This makes me hopeful that us Nexus One owners will soon be able to experience the Ice Cream Sandwich tastiness even though our phones are crippled with only 512MB of core flash.

<comment><USER5> _This makes me hopeful that us Nexus One owners will soon be able to experience the Ice Cream Sandwich tastiness even though our phones are crippled with only 512MB of core flash._

it's worth noting that google has dropped support for the nexus one as of android 4.0, so there will be no official build or drivers for the nexus one. i'm sure 3rd party rom developers will hack together something eventually, though.

</comment></comment><comment><USER6> I'm more interested to see how well ICS runs on a Kindle Fire. We already know the Nexus S is getting ICS, it still has decent specs compared to the newest phones, and there's really no reason why it shouldn't run well.</comment>


Camlistore: a new project from Brad Fitzpatrick - <AUTHOR> http://camlistore.org/

<comment><USER2> Looks like a pretty neat project, though I didn't have a very good sense of what they're trying to do until I read the use cases page: <http://camlistore.org/docs/uses>

Too bad they mostly seem to be focusing on go (for local) and google app engine (for remote) implementations. That's probably a serious barrier to excitement for most people I know, even if they plan to encourage other implementations in the future.

<comment><USER3> What Brett said. Also, as the project matures we will provide binaries and downloads but for now the barrier to entry is probably convenient.

Go isn't the project's choice. It's my personal choice as I continue to love the language. The project encourages all languages.

<comment><USER4> It sounds more like Tonido (<http://www.tonido.com>).

At least, the broader principles:

        * Disk is cheap and getting cheaper

        * Put the user in control. Own your data.

        * Privacy and paranoia

        * Decentralization is important, but..

        * End users won't be dorks. Must also be possible to be easy, hosted.

        * Content-Addressability has so many awesome properties (validation, cachability, etc). Use it as much as possible.

        * Redundancy and over-explicitness is fine. Compression will help. Redundancy and over-explicitness will be convenient for future digital archeologists, too.

</comment></comment></comment><comment><USER5> I was about to submit this myself - one of the most interesting Google 20% projects I've come across in a long time.

If you don't look through the whole website, at least skim their vision for use cases: <http://camlistore.org/docs/uses>

The single feature of being able to keep a private store of different web services could make this really take off for a lot of people.

</comment><comment><AUTHOR> My three-word summary would be "application strength Dropbox"

</comment><comment><USER6> I was thinking about how proxying would work. You could get very cool proxying, similar to the way AptProxy works, where you instead of accessing <http://camlistore.org:3179/camli/hash-1>, a client would access [http://localproxy?url=http://camlistore.org:3179/camli/hash-...](http://localproxy?url=http://camlistore.org:3179/camli/hash-1). It would parse the URL and see if a blob is being referenced that a local camlistore has cache, and serve out of that.

Then I looked at the camlistore sharing model. The proposal involves storing private data in blobs camlistore, protecting it behind a 401, and requiring the client to append a ?via=hash-2, where hash-2 is a claim that says "ok, let this data through". I'm not a big fan of that, because proxies won't reproduce your security model, and private data is stored in the clear.

What one should do, really, is store private data encrypted. Then, you can reference a "phantom blob", which is not actually an object in storage but represents the cleartext of the private data. Your claim could now be a recipe on how to reconstruct this phantom blob, i.e. get chunk X of ciphertext and decrypt it with this key.

Now, dumb proxies won't just store sensitive stuff in the clear (although, they would store enough data that the plaintext could easily be reconstructed), but at least your security model is preserved.

<comment><USER7> Encryption should occur higher in the app layer. For cache privacy everything should be over https and avoid proxies. There are uses for fully public blobs too and those do not have these issues.

</comment></comment><comment><USER6> Sounds like git for personal storage in the cloud.

<comment><USER8> Right. At least, there is a blob server in the architecture and a blobref in the reference document. In Camlistore, they have something called "schema blob" that looks more a generalized version of the specific "tree", "commit" and "tag" in Git. I hope they could have a sample skeleton in their schema to support the Git Object Model. In that scope, they could host standard git repository in their store and maybe benefit from existing git tools...

<comment><USER3> We could (and kinda expected that somebody _would_) but I don't quite see the existing tools working. I'd love to be proven wrong, though. I suppose it could be done with some remapping front-end, but I think that front-end would also need to maintain maps between as-git-computed blobrefs and Camli blobrefs.

</comment></comment></comment><comment><USER9> If you look at the docs for the Signed Claims[1] perhaps the most interesting part of this is the safe way to share content. Being able to cryptographically verify a claim of access to or ownership to content sounds pretty awesome to me.

I spoke to Brad and Brett at OrdCamp[2] here in chicago this weekend and it sounded pretty interesting. They plan to make the tooling around this hide the difficulties in dealing with public private keys from the average user. I suppose if it's done right this could do for sharing content what SSL did for Commerce on the web.

[1] <http://camlistore.org/docs/json-signing> [2] <http://ordcamp.com>

</comment><comment><USER10> meta: their schema seems to be JSON instances plus comments. [http://camlistore.org/code/?p=camlistore.git;a=tree;f=doc/sc...](http://camlistore.org/code/?p=camlistore.git;a=tree;f=doc/schema;h=d36db16e00901fb9a1e1115b7347bfc47efe8192;hb=master)

This is probably just a temporary notation, but perhaps it's clear enough for ongoing use?

Optional/required is handled by comments; JSON "[ ]" syntax indicates lists - but it's unclear if the contents represent a repeated group, like (abc)* , or alternatives, like (a|b|c)*; alternatives in general don't seem to be handled - in general, alternatives could also appear as the value of a field, not just in a list.

</comment><comment><USER11> This reminded me of Venti. <http://en.wikipedia.org/wiki/Venti>

<comment><USER12> They mention it in their list of influences.

I've been working on a distributed, Venti-like archival filesystem, too. While plan9 never really caught on, it had many great systems within it that really deserve wider exposure.

</comment></comment><comment><USER13> I wanted to give it a try, but you need enabled Billing to use at least the blobserver on Appengine.

<comment> space-monkey I believe you can enable billing and leave your cap at $0.

</comment></comment><comment><USER14> Ok, that is awesome. You had me hooked at "Apache License".

</comment><comment><USER15> Very interesting project. Brad, are there any similarities with your previous work on brackup? Perhaps with how the files are tracked?</comment>


As a hacker, many things don't depress me. This does. Can we please solve this? - <AUTHOR> http://www.vice.com/read/eric-garner-and-the-plague-of-police-brutality-against-black-men?utm_source=vicefbus

<comment><USER2> Any ideas on how technology could help?</comment>


Fizzbuzz, Interviews, And Overthinking - <AUTHOR> http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html <comment><USER3>
      cases = (
        (3, 'Fizz'),
        (5, 'Buzz'),
        (7, 'Bazz'),
        (11, 'Boo'),
        (13, 'Blip'),
      )

      for i in range(1, 101):
          out = []
          for c in cases:
              if i % c[0] == 0:
                  out.append(c[1])
          if out:
              print ''.join(out)
          else:
              print i

Edit: not to detract from the post's point, I think it's valid. Monoids are cool and all but simple counting arguments can take you a long, long, long, way when case analysis fails you.

<comment><USER4> This can be edited down to six lines with a simple trick: a Python string multiplied by True will return itself, and multiplied by False will return the empty string.

      for i in range(110):
          pr = ""
          pr += "Fizz" * (i%3 == 0)
          pr += "Buzz" * (i%5 == 0)
          pr += "Bazz" * (i%7 == 0)
          print (pr if pr else i)

I iterated over range(110) to show that it handles the "FizzBuzzBazz" case correctly.

EDIT: Or we could use lambdas as OP's Ruby code did; this might be more maintainable...

      cases = [
          lambda n: "Fizz" * (n%3 == 0),
          lambda n: "Buzz" * (n%5 == 0),
          lambda n: "Bazz" * (n%7 == 0) ]

      for i in range(110):
          pr = ""
          for case in cases:
              pr += case(i)
          print (pr if pr else i)

That's nine nonblank lines.

<comment><USER5> Just for fun, another variant - separating logic from data and trying to be pretty stock python.

        cases = [(3, "Fizz"), (5, "Buzz"), (7, "Bazz")]

        for i in range(110):
            pr = ''.join([v[1] * (i % v[0] == 0) for v in cases])
            print pr or i

<comment><USER6> It should be possible in a single line of Python..

      pip install fizzbuzz

And then:

      import fizzbuzz
      print fizzbuzz.fizzbuzz()

Or for the second solution:

      print fizzbuzz.fizzbuzzbazz()

<comment><USER7> A tweetable (140 character) single line of Python:

print '\n'.join((lambda x:(''.join(x) if x else str(i)))([w+'zz' for (n,w) in ((3,'Fi'),(5,'Bu'),(7,'Ba')) if i%n==0]) for i in range(1,100))

</comment></comment></comment></comment></comment><comment><USER8> I understood from near the very beginning that this wasn't really about Fizzbuzz. All the way through the post, I was waiting for the author to get a real world example instead of Fizzbuzz. Yet, I got to the end of the post and realized it was already pretty long.

I think in talking about programming, we are often hindered by the fact that it is much more complicated than our brains can handle. Our only choices are to write novel length treatments of real programs or short story length posts about a toy program, or just the tiniest piece of a real program.

Which is all to say, as sick of hearing about Fizzbuzz as I am, I'm glad there are silly little examples like it that we all know. Even though it was ostensibly about interviewing, that was a much clearer introduction to monoids than most. I think it was largely because it was in reference to Fizzbuzz: something very concrete with which we're all familiar.

Too many introductions to Haskell's abstractions are too abstract. Good on the author for finding away around that.

<comment><USER9> Thanks!

What sort of surprised me as I shopped my copy around and showed people the python-add-one-factor example is that even programmers I consider experts didn't realize how quickly the conditional cascade blows up. It's easy to miss. And I looked around for people to mention this in blog posts, but almost no one does. So I feel like there's a bit of life left in the old fizzbuzz yet.

<comment><USER10> I think the non-blown cascade is exactly what makes fizzbuzz aggravating. With three noises, the linear solution clearly dominates. With two, the exponential is actually shorter -- but feels unclean.

<comment><USER11> I've been programming some game servers, and I have the same problem with guaranteed two-player games; I feel dirty hard-coding the logic to assume two players, yet making it general enough for N players makes it absurdly more complex for no gain, which is a net loss.

(And yes, before anyone pops in, these are _guaranteed_ two-player games. Of all the rules of the games in question which have changed over time, that is the one rock-solid constant which will not change in this application.)

</comment></comment></comment></comment><comment><USER12> Forget Fizzbuzz, we get candidates that cannot reverse a string (in their language of choice). A friend of mine just told me he uses the question "What is the hex number that comes after 'F'" as his first "weed-out" technical question. It boggles the mind.

<comment><USER9> Because I tend to get really nervous in interviews and consequently don't interview all that well most of the time, I try to be sensitive to people like me. I prefer to start very simple and sort of gradually increase the pressure until I can find a backing off point.

<comment><USER13> If you cannot reverse a string under pressure, you are likely unqualified for the job you are applying for. At least in my job, there is often more pressure than "write a string reverse function in any language you like in 10 minutes."

<comment><USER14> What a load of bollocks. If your job is to write methods to reverse strings then you are unqualified, otherwise I wouldn't give a shit whether a candidate can reverse a string. Why would I want to know if someone can reverse a string if the job is to maintain a web app?

A few questions for you. How old are you? Have you hired developers before? Truthfully, have you ever had to reverse a string under pressure at your current job.

<comment><USER15> Are you kidding? reversing a string in your language of choice is far too trivial. If you can't do it you really aren't ready to be working in the industry.

<comment><USER14> It's not about whether they can do it or not. It's about why knowing a skill that will take even a non-developer ten seconds to Google makes someone incapable of functioning as a developer.

More often than not the people that spout that kind of nonsense are twenty- something junior developers that read a bit of HN and have decided that they know better than everyone else about what makes a good programmer.

Why would you test if someone can reverse a string if you're hiring someone to maintain and build on some shitty web app?

<comment><USER16> It takes someone who doesn't speak English ten seconds to look up the past tense of the verb "bring" - this doesn't mean you'd want to hire as a journalist someone who seems to think the answer is "bringed"

Doing a string reverse is so trivial that it's not about needing that skill, but rather what not being able to do that speaks about the candidate's general aptitude and skill level.

<comment><USER14> "Why would you test if someone can reverse a string if you're hiring someone to maintain and build on some shitty web app?"

If that question can't be answered then your opinion on someones skill level is irrelevant. Also, if you've got time, answer the questions in my first post:

"How old are you? Have you hired developers before? Truthfully, have you ever had to reverse a string under pressure at your current job."

<comment><USER16> Because anyone who can't do this almost certainly doesn't have the ability to program any software system well, some shitty web app or otherwise. You're not trying to fill out a remedial CS course in community college, you're trying to get someone to program real things real people use.

The only way this question wouldn't be useful is if you had a good filter such that almost everyone who gets to that point would answer that question correctly. But apparently, this is not the case. There are people who fail such tests (despite apparently good paper qualifications and ability to talk BS). It's fairly important that you not let through such imposters.

And yes I've hired people and all of them have had to answer much more complex algorithmic questions to get the job and all of them turned out to be competent. And "have you ever had to" questions are ingenuous - <USER2> settings are never going to be replicated exactly in a work setting, unless your job is to go around to be interviewed for different jobs. Good interview questions don't simulate work setting - they extract most critical work- relevant information about the candidate without wasting time.

<comment><USER14> "Because anyone who can't do this almost certainly doesn't have the ability to program any software system well, some shitty web app or otherwise. You're not trying to fill out a remedial CS course in community college, you're trying to get someone to program real things real people use."

So...I'm hiring someone that can reverse a string because this demonstrates that they can program real things that real people use?

"And yes I've hired people and all of them have had to answer much more complex algorithmic questions to get the job and all of them turned out to be competent."

Out of interest, what did this job entail? I assume that you quizzed them on their knowledge of basic algorithms because they are required to write them, right?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> I agree that Fizzbuzz can be a more interesting example of how to write code without repetition. While the author suggests that languages such as Haskell provide a unique advantage, the deciding question seems to be the availability of pre-built abstractions. Consider the following solution in Python:

      for i in xrange(1,101): print (('' if i%3 else 'Fizz')+('' if i%5 else 'Buzz')) or i

or the even more general:

      mapping={3:'Fizz',5:'Buzz'}
      for i in xrange(1,101):
        print ''.join(['' if i%x else mapping[x] for x in mapping]) or i

We can even do this in C though to write something as extensible as the second would require writing more helper functions than I can justify for this brief comment:

      #include<string.h>
      #include<stdio.h>
      int main(){
        int i;
        char s[4];
        char n[3];
        for (i=1;i<101;i++){
          sprintf(n,"%d",i)
          s=strcat((i%3)?"":"Fuzz",(i%5)?"":"Buzz")
          printf("%s",(strlen(s))?s:n)
        }
        return 0;
      }

<comment><USER18> My "I'm going to hell, but that's okay" C version:

      #include <stdio.h>
      #include <stdbool.h>

      #define when(mod, msg) do { if((i mod) == 0) { fputs(#msg, stdout); *hit = true; } } while(0)
      #define through ; i <=
      #define engine(range) \
      void rules(int, bool *);\
      int main(void) { for(int i = range; ++i) { bool hit = false; rules(i, &hit); if(!hit) printf("%d", i); putchar('\n'); } } \
      void rules(int i, bool *hit)

      engine(1 through 100) {
        when(% 3, Fizz);
        when(% 5, Buzz);
      }

Super extensible!

<comment><USER9> I'm not sure even hell will take you after doing what you just did. There is no metaphysical consequence great enough save to have experienced the writing of that.

</comment></comment></comment><comment><USER19> I recently challenged people to codegolf fizzbuzz ([http://swizec.com/blog/fizzbuzz-without-ifs-in-90-char-i- wil...](http://swizec.com/blog/fizzbuzz-without-ifs-in-90-char-i-will-buy-you- a-beer-if-you-can-do-better/swizec/5276))

The Haskell solution was really cool:

[max(show x)(concat[n|(f,n)<-[(3,"Fizz"),(5,"Buzz")],mod x f==0])|x<-[1..100]]

This is much simpler and it looks easier to extend as well.

<comment><USER5> Python: under 90 characters and no explicits if statements

        for i in range(100):print ''.join([s*(i%m==0)for m,s in[(3,"Fizz"),(5,"Buzz")]])or i

<comment><USER20> 66 characters:

        " ".join(i%3/2*"Fizz"+i%5/4*"Buzz"or str(i+1) for i in range(100))

</comment></comment></comment><comment><USER21> The Ruby example that you recommending hiring because of, is overkill. Here is a better Ruby example:

        (1..100).each do |i|
          o = ""
          o.concat("Fizz") if i % 3 == 0
          o.concat("Buzz") if i % 5 == 0
          o.concat("Bazz") if i % 7 == 0
          o.concat(i.to_s) if o.empty?
          puts o
        end

</comment><comment><USER22> Great article. The title is a bit misleading though. I thought this was sort of a counter-argument to the 'programmers cannot program', but introduces monoids right at the end.

Anyway, FizzBuzz and the like are the kinds of questions you would probably ask to a new graduate because frankly, there is nothing else to ask from them. They have no related experience for the most part.

For experienced ones, the way our company (<http://aelogica.com>) identifies good candidates is via a day of pair-programming. Technical knowledge is just part of the package, and any kind of problem solving will not address that.

</comment><comment><USER23> For more on monoids, see Brent Yorgey's paper _Monoids: Theme and Variations (Functional Pearl)_ at <[http://www.cis.upenn.edu/~byorgey/pub/monoid- pearl.pdf>](http://www.cis.upenn.edu/~byorgey/pub/monoid-pearl.pdf>); (there's also a video of his talk at the Haskell Symposium at <[http://www.youtube.com/watch?v=X-8NCkD2vOw>](http://www.youtube.com/watch?v=X-8NCkD2vOw>)).

</comment><comment><USER24> "When you really boil it down to its implementation, FizzBuzz is something of an irritating program. I'm not sure how much the author of the problem really thought about FizzBuzz, but it turns out it's difficult to express well with the tools available to most imperative programming languages..."

Nonsense.. you call a simple loop with a couple conditions difficult?

</comment><comment><USER25> I was waiting for a Java solution with an AbstractFactory somewhere.

<comment><USER26> No AbstractFactory here, but there is XML! And 411 lines of Java: <http://pastebin.com/TyNrvRmB>

</comment></comment><comment><USER27> This seems overcomplicated. Why wrap String (which is already a monoid) inside Maybe? You can just use concat; if the result is the empty string then print the number. If you want it to work for any monoid, then use mconcat, and test for equality to mempty.

And why introduce monad comprehensions if you're just introducing monoids?

<comment><USER9> > Why wrap String (which is already a monoid) inside Maybe?

Because it's a bit easier to write the tail end of the logic in generic terms. You can go talk to c_wraith on Freenode#haskell if you want.

> You can just use concat; if the result is the empty string then print the > number. If you want it to work for any monoid, then use mconcat, and test > for equality to mempty.

You can find other discussions about why flexibility is important.

> And why introduce monad comprehensions if you're just introducing monoids?

Because it's a really nice syntax? Compared to explicitly using guard, anyways.

</comment></comment><comment><USER28> I've always liked the \r-trick:

        a=b=c=d=(e=1..100).each do |num|
          print num, ?\r,
            ("Fizz" unless (a = !a) .. (a = !a)),
            ("Buzz" unless (b = !b) ... !((c = !c) .. (c = !c))),
            ("Bazz" unless ((d = !d) .. (d = !d)) ... (e = !e)),
            ?\n
        end

</comment><comment><USER29>
        subs = {3 => "Fizz", 5 => "Buzz", 7 => "Bazz"}
        (1..100).map{|n| subs.keys.inject(nil) {|a,k| n % k == 0 ? (a||"")+subs[k] : a} || n.to_s}

Kind of boggles the mind sometimes to realize the crappy code people will write without thinking things through.

</comment><comment><USER30> In CoffeeScript:

      divisors = {Fizz:3, Buzz:5, Bazz:7}
      for i in [1..100]
        alert (name for name,divisor of divisors when i % divisor == 0).join("") || i

</comment><comment><USER31> Monowha?

for(var i=1;i<=100;i++) console.info(((!(i % 3) ? "Fizz" : "") + (!(i % 5) ? "Buzz" : "") + (!(i % 7) ? "Bazz" : "")) || i);

</comment><comment><USER32> First of all a modulo is ultra expensive, one does not simply modulo 15 when they already modulo 3 and 5.

The proper structure is if(3){if(5)}elif(5){}else{},unless anyone has a better proposition. While of course it is possible to define abstractions that handle fizzbuzzing anything for any number, it's clear that the monoid way is a bad overweight bloated approach.

Second the example written is code bloat à la java, writing tons of stuff for no reason.

Third Ruby is a beta prototype language that doesn't have any production ready implementation.

Lastly functional and procedural programming enable you to work at the highest level of abstraction you can think of, whereas OO tends to lock you at a specific abstraction level, which is pretty low and not adapted to most cases.

I have to admit it's impressive how such a simple test can show so many failures in people's deep understanding of programming.

<comment><USER9> This is another example of someone who I think looked at my code examples but didn't read the post. Fair enough, I guess.

> While of course it is possible to define abstractions that handle > fizzbuzzing anything for any number, it's clear that the monoid way is a bad > overweight bloated approach.

Why? It is not computationally expensive, and it avoids excess modulo operations. All the dispatching work gets figured out at compile time and you end up with pretty much the same sorts of string concatenation costs you get in every other implementation.

Do you mean to suggest that it is conceptually expensive?

> Lastly functional and procedural programming enable you to work at the > highest level of abstraction you can think of, whereas OO tends to lock you > at a specific abstraction level, which is pretty low and not adapted to most > cases.

I actually agree with this, although I sort of question procedural's place on the totem. I suppose stuff like Forth suggests you're right.

<comment><USER32> Bloated, as in, takes way too much space for what it is.

Additionally, it does _not_ avoid excess mod operations, _and_ the implementation is _broken_ because it won't print fizzbuzz for the 15.

Lastly, using lambda's and whatnot's just because you can is yet another form of inefficiency and completely obfuscates what the machine will do.

I mean to suggest that 1) it should be a much shorter read 2) it's inefficient, and wrong 3) one does not simply lambda everything.

<comment><USER9> > Bloated, as in, takes way too much space for what it is. > Additionally, it > does _not_ avoid excess mod operations, _and_ the implementation is _broken_ > because it won't print fizzbuzz for the 15.

If we're talking about the Haskell version here (I can't tell?), you're wrong on all counts.

• It is about as short as any reasonable impl I've seen of FizzBuzzBazz. Not long at all.

• And it _does_ print out correctly for 15.

• And it does NOT do excess operations. It does exactly one modulo per factor.

Do you not understand how it works? I detail it pretty closely in the post; please look again.

The second ruby version _is_ long, but does not perform excess operations (unless you're complaining about Ruby's implementation of lambdas, which is out of scope). As I said both in my article and in this discussion; coding during an interview is tricky and that's not a bad effort.

Fianlly, the naive if-chain extensions are deliberately wrong to extend, but my initial research and experience is that most programmers don't realize that until they try it once. But then, they're lifted right from Rosetta Code so they're hardly unrepresentative of what people consider an "unacceptable" version of Fizzbuzz.

</comment></comment></comment></comment><comment><USER33> We're five years into this, and here's yet another weekly column from a person who has just heard about it and is champing at the bit to prove both he can write FizzBuzz and all the other implementations are not as good as his. It will be a miracle if this thread doesn't turn into a chain of "even better" solutions, like all the other threads that came before it.

In this week's installment, the variation where it is claimed that common production languages are inadequate for a problem of this complexity, and the tool stack should be shifted to languages supporting monads... er monoids? Sigh.

<comment><USER34> I would prefer to force candidates to implement FizzBuzz in a language invented solely for purposes of that interview (and which will never be used again). This places all candidates on the same level.

It's probably a good thing I don't interview people for programming positions...

<comment><USER11> You have so little time in an interview to learn so much you can't afford to lose the time to both learn whether they can do FizzBuzz (or whatever other problem) and whether they can manipulate some language of interest, when you could be learning both

The purpose of an interview isn't to be abstractly "fair", it's to find the best candidates for the job. You choose what "best" is (which is to say, please don't put words in my mouth about "only interviewing for the exact skillset" or whatever... _you_ choose what is best, whatever that is). My preferred approach is to give the problem, then let the candidate write in whatever language they choose. If they flail in their putatively favorite language with which they've putatively been working for 4 years... well... I've certainly learned some very important things in those few moments.

<comment><USER34> I thought it was pretty clear based on the second sentence that the comment was intended as a joke. Do I really need to start adding /jk to the end of my comments?

<comment><USER11> Sorry. I've heard the idea seriously proposed elsewhere.</comment></comment></comment></comment></comment>


How to Write a Malcolm Gladwell Book - <AUTHOR> http://www.theweinerworks.com/?p=1497 <comment><USER2> Malcolm Gladwell, who has said in an interview that he writes to try out ideas

<http://online.wsj.com/article/SB122671211614230261.html>

"Q: Do you worry that you extrapolate too much from too little?

"A: No. It's better to err on the side of over-extrapolation. These books are playful in the sense that they regard ideas as things to experiment with. I'm happy if somebody reads my books and reaches a conclusion that is different from mine, as long as the ideas in the book cause them to think. You have to be willing to put pressure on theories, to push the envelope. That's the fun part, the exciting part. If you are writing an intellectual adventure story, why play it safe? I'm not out to convert people. I want to inspire and provoke them."

is good, while trying out ideas, at crediting his sources. Any reader of a Malcolm Gladwell book (as I know, from being a reader of the book Outliers) can check the sources, and decide from there what other sources to check and what other ideas to play with. Gladwell doesn't purport to write textbooks, but I give him a lot of credit for finding interesting scholarly sources that haven't had enough attention in the popular literature. He is equaled by very few authors as a story-teller who can tie ideas together in a thought- provoking assembly.

<comment><USER3> That is a clever way of saying he just makes shit up.

<comment><USER4> I'm not quite understanding all of the hate on Galdwell, in the parent, the OP, and generally.

You (parent) have glossed over one of the GP's points: Galdwell shares some credible scientific research via the popular press. Yes, there is undoubtedly some spin on it, but chucking out the entirety of Gladwell also dismisses, as just one example, implicit cognition research done at Harvard.

As techies and scientists we can gloat all day that we know correlation doesn't equate to causation, but exploring the stories behind correlations can help uncover the causal chain.

Goodness knows a great deal of qualitative academic research (in top journals, no less) suffer some of the same criticisms Gladwell is enduring. Social sciences accept different ontologies and epistimologies [e.g., 1], and postivism is only one such, albeit the most common. Properly done, interpretivism, too, is accepted.

I think my biggest frustration with the Gladwell-bashing is that even though Gladwell's connections between research and anecdote are sometimes tenuous, those engaging in the critique don't first demonstrate an understanding of the epistimological/ontological standards in social research.

1: <http://misq.org/misq/downloads/download/editorial/25/>

<comment> saint-loup Oh please, don't go all epistemelogical on us. The debate on the good approach to study human and social phenomena is barely relevant here.

</comment></comment></comment></comment><comment><USER5> It's plainly evident that as journalists and pop- social- science writers go, Gladwell is spectacularly successful. This article posits that the reason for that success is that he has hit on a formula of catchy titles and appeals to lucrative audiences.

Do any of you actually believe this? If so, square that belief with the fact that the author of this blog post could clearly apply the same formula. Why isn't he spectacularly successful too?

My guess: however easy this blogger thinks it is to come up with the theme of a Gladwell book, it is far, far harder to write that book as compellingly as Gladwell does. Put differently: Gladwell is just an extremely talented writer.

Jab at him all you want for the superficiality of the ideas he's trafficking in, or for being beholden to corporate sponsors. I'm not sticking up for what he writes. But what he writes isn't the key to his success. Gladwell could write the phone book and it'd be more convincing than this post was.

<comment><USER6> > Jab at him all you want for the superficiality of the ideas he's trafficking > in, or for being beholden to corporate sponsors. I'm not sticking up for > what he writes. But what he writes isn't the key to his success. Gladwell > could write the phone book and it'd be more convincing than this post was.

Maybe this will seem snobby, but isn't such success a problem itself? That is, I wouldn't be particularly proud of writing something that succeeded almost entirely because of its style and _despite_ its subject matter (or truth or information, however you want to put that).

Being a great writer is a tremendous skill. No question. But don't you find it weird to be _defending_ someone while saying his ideas are "superficial" and he's "beholden to corporate sponsors"?

<comment><USER5> No? I don't? I listen to Wilco, and their music is being used in Sprint commercials. Do they need "defending"?

<comment><USER7> For that matter, do I have to defend Beethoven and Mozart? They wrote most of their music for money. Is it somehow purer to make art designed to appeal to an audience of rich aristocratic patrons and their friends than to make art designed to appeal to rich corporate patrons and their friends? Because I can't really tell the difference. [1]

The text and subject matter of Beethoven's seventh symphony's are not merely "superficial": They're entirely absent. The work has no words. Therefore it doesn't express any ideas but abstract musical ones. I guess I should feel ashamed for liking it?

Of course, a musicologist would insist that Mozart and Beethoven's stylistic and formal innovations were anything but "superficial". But to be fair we must apply the same standard to Gladwell, and note that he is himself a gifted stylist and a master of his own form.

\---

[1] Actually, this isn't quite true: I tend to prefer corporate art to aristocratic art. A lot of corporate art gets _reproduced_ and spread around; that's what most of it is for. Even non-aristocrats get a chance to enjoy Wilco albums, and we even get to hear their Sprint commercials for "free". Whereas history is replete with great art that was written for aristocrats, but then was kept out of public view, and sometimes even lost entirely, for decades or centuries. A fine example is Bach's Brandenburg Concerti:

<https://en.wikipedia.org/wiki/Brandenburg_concertos>

…"widely regarded as among the finest musical compositions of the Baroque era", composed by Bach, gifted to a margrave in 1721, who apparently never had them performed. The scores sat around in his library. When the margrave died the manuscripts were sold for about $20 (in 2008 dollars). They were eventually rediscovered in Brandenburg's archives in 1849 and published in 1850. Mozart never heard them. Beethoven never heard them.

How I digress. Let's drive this footnote back towards the point: I, for one, would rather have my life's work superficially glossed by Malcolm Gladwell in an artfully-written and wildly popular book than have it sit in a trunk unread until someone throws it away.

</comment></comment></comment></comment><comment><USER8> Hilarious and accurate.

The biggest benefit to constructing Gladwell books is that everyone is able to discuss the book at cocktail parties even if they haven't read it. This means that people can put the book on their shelf and feel as if they've read it, without actually having to do the work of reading it. Genius, really.

<comment><USER9> Not only that, but the concepts as stated are 1) so bad that people can already hate the books without having read them - so it's not only part of the conversation at parties, but also the loudest, most contentious conversation at parties, and 2) so vague that they have to be referred to by their short, pithy names, loudly and repeatedly, or else everyone would forget what they were arguing about, and 3) those names are also old tropes that everyone has heard or the essential words in old tropes that everyone has heard, so people feel like the books or concepts must have been around longer and have more basis than they actually do.

Of course, this is really the list of the biggest benefits to _publishing_ Gladwell books:)

</comment></comment><comment><USER10> I bet you could go through the same process with Thomas Friedman:

1\. Come up with a principle long-since scientifically proven false.

        "Hmm, how about 'The World is Flat'"

2\. Write a book called "My Dull, Platitudinous Travel Diary"

        "Indians in call centers can talk with Americans! Amazing!"

3\. Now change the title of that book to the long-since disregarded principle.

        "Everyone will want to read this because the editors at the NYT are
        inexplicably required to keep me on staff, offering me undeserved
        credibility for the rest of time!"

<comment><USER11> The Friedman process goes like this:

1\. Take a massively complex, world-historical economic process.

2\. Ignore it.

3\. Write a story about a shoe factory in Bangalore that massively oversimplifies, but overturns conventional thinking on, #1.

4\. Profit!

<comment><USER12> Overturned conventional thinking? Friedman?

Maybe his conclusions seem unconventional (or at least, mildly inhuman) because Friedman always oversimplifies with the view from the boardroom. Never the street. Otherwise your formula could well apply to Chomsky or Taibbi, on their worst days.

</comment></comment></comment><comment><USER13> I'm glad to see that someone commented his S.H.A.M.E project link in the comments down under the original article, to the point that it's worth re- linking here: <http://shameproject.com/profile/malcolm-gladwell-2/>

I read the Tipping point and found it quite an interesting book, but I've not bought anymore of his books after I had read his profile/sources linked above.

<comment><USER14> I never saw the Shame Project, but after reading the above link I think they're over-reaching way more than Gladwell's worst stories.

For example they say, "In 1990, a Gladwell article in the Washington Post warned that laws banning cigarettes could "put a serious strain on the nation's Social Security and Medicare programs.""

I read the article (as they link to it), and frankly it's not as inflammatory as their quote would lead one to believe. Gladwell brings up a reasonable point that smokers tend to die younger and hence may reduce total costs in the health care system. And he, rightly IMO, says that we should move the anti- smoking movement as a health issue rather than a cost-cutting issue (And 22 years after this article was written his position has been borne out. Few people view smoking as a cost issue.)

Regarding the American Spectator -- this was apparently one of the few places he was offered a job. This "3rd Party" list he's on also includes Penn Jillette and I suspect many other names we know. Being an open ear isn't the same as being a shill. John Gruber is a shill, while Nilay Pital is an open ear.

<comment><USER15> Not to comment on Gladwell specifically, but it seems to be well-accepted that lifespans in excess of the average retirement age are a huge cost to the system, particularly because of the disproportionate sums used in the very last few years of treatment.

It may be cruel to say so, but it is logical that longer lifespans are costly.

<comment><USER16> I dont believe that. It all depends on _how_ you die, not how long you live. My grandfather died at home at 96 years of age, no nurse, no equipment. Just my grandmom and him, at home. I'd bet his medical cost of passing away is far lower than a type-2 diabetic in their mid-60s hospitalized for 5 years before passing, or a lung cancer patient (vis a vis Gladwell's example) going through chemo for 5 years before expiring. His analysis needs much more rigor, imo.

</comment></comment></comment></comment><comment><USER17> This was pretty funny. The concept of his books are pretty cheesy but I think what makes him successful is that he actually writes the books vs. sitting around and poking holes in it.

<comment><USER18> I could not agree more. I'm pretty sure the author of this post spends the day patting him/her self on the back.

<comment><USER19> The author of this post writes smbc [1], an extremely popular webcomic, among a variety of other things.

[1] <http://www.smbc-comics.com/>

<comment><USER20> Just browsed some of the comics, and between Gladwell's popularity and smbc's, I take the former.

</comment></comment></comment></comment><comment><USER21> This reminds me of The Malcolm Gladwell Book Generator: <http://malcolmgladwellbookgenerator.com/>

</comment><comment><USER22> It's disappointing to have this as #1 story in HN. Hacking is about doing stuff, not putting down (or hyping) people who do stuff. I never had any trouble simply avoiding Gladwell when I wanted to.

<comment><USER23> I completely agree with this sentiment. If you don't like him - then don't read him!

<comment><USER24> If only that was the limit of his nefarious influence it would be a fine recommendation.

</comment></comment></comment><comment><USER25> Pro tip: pretty much all of Gladwell's books started as an article in the New Yorker. If you read the article, you can pretty much skip the book.

<comment><USER15> Pro-tip: virtually all non fiction books start off as articles, though the New Yorker has a much higher rate than other news orbs.

Typically, in a long form story, the printed matter is directly dependent on just about 1% of the body of research and interviewing you actually did.

To put it another way, think of how much the LOTR movies left out.

<comment><USER25> I was talking about Malcolm Gladwell specifically.

</comment></comment></comment><comment><USER26> Gladwell says himself, in his own books, that he writes not to change the minds of his readers, but to make his readers think.

The stories he presents alongside the ideas he presents are just illustrations. Every situation, whether it's Bill Gates' success, the problem of choosing NFL Quarterbacks, or the rise of Hush Puppies has an incredible amount of variables that can never be fully grasped.

The common theme of Gladwell bashers seems to be that they take every idea presented as if he were presenting it as unilateral truth. I mean, just take a look at this Quora page: [http://www.quora.com/Malcolm-Gladwell-author/What- are-some-c...](http://www.quora.com/Malcolm-Gladwell-author/What-are-some- claims-by-Malcolm-Gladwell-that-are-incorrect)

If you look at the top answer there, the writer is clearly missing the point of Gladwell's writing on a number of issues. The one complaint about his writing I've seen the most often is about the 10,000 hour rule. The writer of the Quora answer puts it this way: "[Gladwell is wrong in saying] That 10,000 hours of practice will turn you into a genius on the order of Mozart or Michael Jordan".

He never says anything like that in Outliers! The main arguments that I got out of the 10,000 hour rule is that the most successful people of any area tend to follow a similar trend: born into an exceptional situation to lead to greatness in that area, dedicated practice for thousands of hours, above average IQ (but IQ past ~120 is not too important). Saying that dedicated practice alone will turn anyone into the top 0.001% of a given profession is absurd, and Gladwell doesn't say that at all.

Maybe if Gladwell bashers stopped taking everything he writes as if he were prescribing ideas of thought, they could enjoy his compelling writing and thought-provoking ideas.

</comment><comment><USER27> Amazing how you could change a few phrases here and there and turn this straight into a Michael Lewis how to.

Just trade business for high finance with a pinch of major league sports and spend your anecdotes on overwrought descriptions of your main character's idiosyncrasies.

<http://en.wikipedia.org/wiki/Michael_Lewis>

</comment><comment><USER15> I had never heard the last aphorism in the OP before; it got the biggest laugh out of me:

 _Remember the old joke among social scientists – "Predict the future? It's hard enough to predict the past!" However, those social scientists haven't realized that it's easy to predict the past as long as you're talking about one story at a time._

</comment><comment><USER28> I /kind of/ respected Malcolm Gladwell until I found out he is just a shill for big tobacco.

<http://shameproject.com/profile/malcolm-gladwell-2/>

<comment><USER29> Thanks for posting this. I was amused by the other conversations going on here, but this actually changed my mind about him.

<comment><USER30> I wonder what your friends would think about you if there were a website exposing inconsistencies between your public and private persona.

</comment></comment></comment><comment><USER31> I had my own hypothesis of a Gladwell recipe: he takes a well-executed research paper, and expands on the references, and their references, and then adds links to other pop-science books. The original idea could be told more precisely within 15 pages, as exemplified by the journal article, and his 300 page books give little glimpses of that clarity when they are verbatim from the original, and mud the water elsewhere.

</comment><comment><USER32> I liked outliers. It could have been more direct but I liked it.</comment>


How Turtl has no idea when you're sharing copyrighted stuff - <AUTHOR> http://turtlapp.tumblr.com/post/81222024691/how-turtl-has-no-idea-when-youre-sharing-copyrighted <comment><USER2> Please, for the love of counsel, do not use moments like these to advertise your service's viability for the distribution of copyrighted materials.

"We hold that one who distributes a device with the object of promoting its use to infringe copyright, as shown by clear expression or other affirmative steps taken to foster infringement, is liable for the resulting acts of infringement by third parties."

\- Justice Souter, writing on behalf of the Supreme Court of the United States in MGM Studios, Inc. v. Grokster, Ltd.

<comment><AUTHOR> Great point. It's worth noting that Turtl is a _storage_ tool, not a means of distribution. The article is not promoting infringement, but instead gives an overview of how it's just not an issue with Turtl, because Turtl has no knowledge of the data being stored.

<comment><USER3> law evaluates intent. i'm not a lawyer, but i'm not an idiot either and it's pretty easy to read between the lines here.

if the intent is to illustrate security and encryption, there is no reason to invoke "copyrighted material" at all.

<comment><USER4> Unless you are using it as an example of how your solution works differently. Which they are.

I don't see anywhere that they are claiming their business is for copyright infringement, in fact, it doesn't seem like it's for mass distribution at all unless you give out your key, and then you just defeat the point of the service.

<comment><USER5> They are not claiming you should use it for infringement. They are however advertising that it works great for infringement. "That's how [they] like it"

It doesn't really matter what you or I think anyway. If it came down to being sued by a copyright holder, a blog post like this is definitely not going to help their case.

<comment><USER6> Of course it's not going to help; but mostly because humans are driven by emotion.

Sharing copyrighted material is not a crime unless is an illicit sharing, that is, when you do not hold a license that allows you to do so. So there are many exceptions such as: when you download a song that explicitly allow copies for any of your own devices; the same applies when you are the copyright holder, or when the license does not cover the country where you live.

</comment></comment></comment></comment></comment></comment><comment><USER7> While I like the efforts you've gone to in order to hide what is inside the service, I hope that you also appreciate the level of force arrayed against you.

It seems that one of the challenges of these services is that in order to avoid the copyright goons _everyone you know_ , even those folks you only know by some IRC handle, have to be willing to go to jail for you. Because otherwise one of them will get turned, they will then be pressured to get you to indict yourself. This is how it worked against Anonymous, and how it works on most disobedience rings (civil or otherwise). One of your friends will share with you a folder that has copyrighted material in it, once they are sure you have accessed it they will re-iterate that some (or all) of the material there is copyrighted. At this point the most common thing that happens is that thinking they are 'safe', someone will say something stupid like 'don't worry, its our secret' or something like that.

And almost simultaneously the door will explode open as the SWAT guys come in and put them in cuffs and read you your rights. All because someone you thought you knew, was unwilling to spend time in jail rather than help the FBI with their investigation.

Law enforcement has a number of tools (many dubious like the CFAA) which they can employ against you, and they will.

The best you can hope to achieve is to keep a solid (and I mean solid, no slip ups anywhere) public front of respecting the copyright holders rights and your willingness to protect them. Otherwise you will be served papers to decrypt other buckets and you will be sent to jail for contempt if you do not facilitate rooting out copyright infringement on your service. Not even keeping your servers and company in a foreign country will help unless it is a country which doesn't care about its relationship with the US.

<comment><AUTHOR> I have to ask: why not just email someone a copyrighted file? Once the file is downloaded to their email client, they are in the same position as they would be in if you shared it via Turtl.

As a Turtl user, you'd have to be careful about who you share with (or accept shares from). We even outline this on our security page ([https://turtl.it/docs/security#when-is-turtl-not- secure](https://turtl.it/docs/security#when-is-turtl-not-secure)).

It seems at some point the app you're using becomes irrelevant and what you actually do with it becomes much more relevant (such as a bittorrent client).

<comment><USER7>
       > why not just email someone a copyrighted file? Once the
       > file is downloaded to their email client, they are in
       > the same position as they would be in if you shared it
       > via Turtl.

Not exactly, there have been a couple of ultimately unsuccessful cases which are similar (but not exact) with people getting mailed kiddie porn and the federal agents tried to arrest them when the mailman handed over the letter/package.

The successful prosecutions I've read about involved three things, 1) an opportunity, 2) an _awareness_ of the legality, and 3) the follow through even when there is no reasonable doubt.

Bittorrent is a good example here, and cassette tapes are as well. All of the outward facing material from these folks are focused on legitimate uses of the service, it doesn't keep people like cassette makers from being sued, but it gives them a pretty credible defense. In the linked article you mentioned using Turtl specifically to avoid copyright enforcement, a judge or jury reading that could be persuaded that you _intended_ to facilitate copyright infringement and that intent would make you liable for any copyright infringement that occurred by anyone using the Turtl service. The point I was trying to make is that you are doing the prosecution's job for them when you write

 _" So how does Turtl deal with copyrighted material?

We don't. We don't know what you're storing. Neither do copyright holders. Neither does the government.

That's how we like it =]"_

It will not be difficult for a prosecutor to use your words to a Jury and show that you _like_ that people can violate copyright with your service and that you _made_ the service so that they could.

And once the prosecution has made the jury understand that, you will be convicted of abetting copyright infringement and either broke for the rest of your life paying off an infringement judgement from hell, or serving time in prison.

All for stuff _other_ people did using your service, because you _made_ it so they could. See how that works?

<comment><USER8> I find your point (2) very weird.

Child porn is strict liability (meaning, there's no requirement to show you did anything on purpose). The law generally doesn't require that you be aware of the _legality_ of what you're doing ("ignorance of the law is no excuse").

Now, it's easy for me to believe that if you can show affirmatively that you received child porn by accident, for example through the unknown-to-you malicious actions of others, the judge might let you off, but that's not actually encoded in the law; the federal agents you mention have an accurate view of things.

Can you point out a case where someone knew they were in possession of or receiving child porn, but got off because they were under the impression it was legal?

<comment><USER9> Sounds like you can get people easily arrested by mailing them child porn without a return address and anonymously tiping off police.

Kind of like destroying someone's reputation via sybil attacks, on an app like lulu or yelp or whatever. The NSA had slides on how fake victims could write blogs about being raped or mistreated or whatever.

<comment><USER10> Yes, that's actually happened before. It's never turned out well for the actual perpetrator.

The mail service has a remarkable ability to track mail packages, even those not sent by certified or registered mail. Additionally, police stations log all calls received--there's no such thing as an anonymous call. The use of a pay phone, prepaid cell phone, or online burner number is a huge red flag--it supports the recipient's defense that someone is attempting to ruin their reputation. Plus, almost all child pornography cases are coordinated with a special DOJ task force, due to the international scope of this offense.

Once it's been established that the recipient is being framed, the police--and the FBI--turn their attention to finding the actual perpetrator. The use of the postal service makes the frame-up a federal crime.

This is actually how the FBI actually cracked one of the more infamous child porn rings a few years ago--some idiot tried to frame his neighbor over some stupid dispute and they traced it back to him quite easily.

</comment></comment></comment></comment></comment></comment><comment><USER11> You should probably avoid saying "We are a _wink_ _nudge_ plausibly deniable file locker!" until you have asked your lawyer "What does contributory infringement mean? Are US judges typically very lenient with parties who attempt to evade the law with wink-and-nod mechanisms that can be seen through by the average tadpole?"

</comment><comment><USER12> For now. Host a "mystery file" that gets 100,000 downloads with all referrers coming from a site that posts download links to copyright infringing movies and things may change quite suddenly.

</comment><comment><USER13> Even if they do not 'know' what you are storing, posting that will pretty much label your company as a 'kiddie cesspool' by anybody who values their data.

I'm not in need of their service, but they will never have me as a serious client after a blog post like this.

</comment><comment><USER14> Been using turtl (free) for a little while now and love it so far. It's made huge leaps and bounds over the past several months and I'm excited to see where it continues to grow.

<comment><AUTHOR> I'm glad you've been having a good experience! It's been fun building it and I'm excited to to keep growing it and making a viable platform for the more privacy-conscious.

</comment></comment><comment><USER15> And it's written in Common Lisp! What's not to like?

</comment><comment><USER16> I honestly think this is one of the best times to advertise something like this.

There have been posts here before about alternative services getting a 51% customer increase on days where a breach in security or general trust is broadcasted to the world.

</comment><comment><USER17> On the phone is there a way to get to your main site from the blog? Was curious on your service but no easy way to jump to the main site, but maybe I missed it?

<comment><AUTHOR> There should be a link on the top left (a logo of a turtle shell). If you click that it will take you to the main site.

<comment><USER18> The shell is centered on my iPhone; tapping it takes me to the blog homepage. There doesn't seem to be any way for me to get to the actual service without Googling the name myself.

<comment><AUTHOR> Thanks for the heads up, apparently I have a mobile template I didn't know about/check before publishing the blog. I'll fix this shortly.

</comment></comment></comment></comment><comment><USER19> I don't know anything about how Dropbox or Turtl handle data and when they do their encryption but it would still be possible for Turtl to do hash level checking even with client side encryption. They could just hash the file and encrypt it all client side and then send both back to the server. It seems that this article is insinuating that Dropbox has full access to your data (which I dont know is true or not).

<comment><USER20> How will they know the hash coming back from the client hasn't been manipulated?

<comment><USER19> The request can be signed and then checked for authentication on the back end. Using public key encryption it would be sent safely to the server and checked for authenticity.

<comment><USER21> Signed by whom? The app running on the client's machine? One should know better than to trust that.

</comment></comment></comment></comment><comment><USER22> I mean, is not being able to take action on illegal file sharing when the feds come knocking really something to be proud of? It's a liability from a company perspective, not a strength IMO.

<comment><AUTHOR> I'm proud that I'm building something that combats the unconstitutional spying of American citizens, and also helps others around the world avoid surveillance.

This app is largely a response to the overreach of the US government. While I believe in fighting for our constitutional rights politically, private solutions are also a viable means of protest.

We probably _will_ have liability issues down the road. Nobody said this would be easy. However, being completely transparent and publishing all our code open-source will help mitigate a lot of these issues. On top of this, by making the clients able to secure their own data, the company itself can respond to any government information requests without actually revealing any customer data.

<comment><USER23> I'm not sure if I follow you, this seems a lot like attacking Iraq to me.

<comment><AUTHOR> Would you mind elaborating? Is "attacking Iraq" a metaphor/figure of speech that I'm not aware of? If so, wouldn't that imply the project is based on completely false grounds (ie, "WMDs" that don't exist)? It's been shown pretty clearly that mass surveillance exists and is a part of our every day lives now.

<comment><USER23> Mass surveillance and copyright have nothing whatsoever to do with each other. If you're going to attack copyright in order to rid us of mass surveillance that's like attacking Iraq in order to get rid of Al Qaeda.

<comment><AUTHOR> Thanks for clarifying. Admittedly, the article was a PR move to show the inherent security weakness in apps like Dropbox, using copyright as an example. I touched on the actual surveillance aspects of the app here because the original comment asked if doing what I'm doing is something to be proud of. Violating copyright holders' rights is not (and I don't condone it), but providing storage for people who need/want privacy _is_ something to be proud of.

<comment><USER23> Then don't position yourself as a mechanism to evade copyright law or as a champion against that. Those are different goals with different consequences and it opens you up to a whole pile of attacks that would otherwise be a non- issue.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> The pricing is not clear if files up to size 200MB are free, or you only get 200MB of total space for free.

<comment><AUTHOR> Thanks, I'll make that more clear.

</comment></comment><comment><USER25> I find bittorrent sync to be a vastly superior way to share files with people. ([http://www.bittorrent.com/sync](http://www.bittorrent.com/sync)).

<comment><AUTHOR> I'm actually very interested in the service (been hearing a lot about it lately). Does it require one of your computers to be on at all times? Or is there some sort of storage conduit that doesn't decrypt your data, but only acts to make it available to your other devices (mobile, desktop, etc)?

</comment></comment><comment><USER26> Quality PR move here and all around great article on security.

</comment><comment><USER27> I'm not too convinced about the plausible deniability here, could someone that has reviewed their tech comment on the following:

\- Encryption works by blocks and do not generally hide the size of the plaintext.

\- Once I get the encrypted material, I thus approximatively know the size of the original file within a few bytes (uncertainty is due to padding to block size).

\- I collect a few candidates files with size in the right range (There might be only one but it's still deniable).

Knowing your login information and the algorithm used to "derive the key from the login information", can't I encrypt the candidate and test against the encrypted material ?

<comment><AUTHOR> > Knowing your login information

I'm not sure how much more clear I can be. Turtl doesn't _know_ your login information, and doesn't know any of the keys derived from your login information. That's the point of the login...it's a familiar way people use to authenticate themselves with a service, but with the added benefit that it's actually generating a master key for them.

Also, not sure how many files there are floating around the internet (and off of it) but it's quite a bit, so comparing file sizes isn't going to give any real information (at least in regards to copyright protection).

</comment></comment><comment><USER28> What an example of "Make hay while the sun shines".

</comment><comment><USER29> My immediate concern is whether this could be construed as advertising the service of copyright violation. If so, there may be the same concerns that ultimately lead to the downfall of grokster.

If I were to launch a service like this, I would describe this issue in terms of general privacy, and the fact that the nobody else has any idea of what is going on. With Snowden, the obvious point is that it is private from the NSA.....

</comment><comment><USER30> Does anyone here have experience with turtl? Pros/cons? Confidence in security model?

<comment><USER31> The security model is broken. You can't securely do encryption in server side javascript.

<comment><AUTHOR> Incorrect, my friend! There's no server-side javascript. Turtl is a downloaded, self-contained app, and all encryption happens in that app.

<comment><USER31> Sorry, my mistake. I guess I just assume everything is a webapp these days.

</comment></comment></comment></comment><comment><USER32> So it works the same as Mega?

</comment><comment><USER33> Am I the only one who was totally onboard until I saw it was written in lisp? Can't trust non-pragmatic people.

<comment><USER34> You mean like the people who wrote HN, the site you are reading, right?</comment></comment>


Ask HN: Is it normal for tech companies to test for drugs? - <AUTHOR> I'm an engineer at a small-to-mid size Bay Area software company that recently began rolling out a drug testing policy.<p>The policy is to perform "random drug testing on a regular basis" as well as testing any employee "reasonably suspected of using illicit substances".  The messaging we're getting from senior management & HR is that this is a normal thing for a company to do, and is part of becoming a mature company.  This strikes me as odd and not true, but I haven't worked at that many tech companies.  Is this a normal policy in the industry? Is this a huge red flag?  I'd love to hear input from the HN community on this. <comment><USER2> Completely false.

I've worked at 6 companies and that never happened.

Never heard of other companies doing it either.

</comment><comment><USER3> No: hundreds of people, in New England, making computer boards with firmware

No: 550 people, in New England, with a bit of computer manufacturing

Yes: hundreds of people spun off from a larger company with thousands of people, in the southeast, with a bit of computer manufacturing

Never, but they reserve the right: hundreds of people, owned by a huge defense contractor, in the southeast, doing classified stuff

</comment><comment><USER4> Never heard of that for engineers... I think it's not normal.

</comment><comment><USER5> I've never heard of such a thing for engineers, but I have heard of it for production line workers. (eg. assembling servers and PCs)

<comment><USER3> I think this can become a matter of fairness or insurance demands. You have a forklift operator, so everybody must get tested.

They are afraid you might do drugs, hop on the forklift, and drive like Klaus...

Klaus with English subtitles: [https://www.youtube.com/watch?v=-oB6DN5dYWo](https://www.youtube.com/watch?v=-oB6DN5dYWo)

Dubbed to English, as "Chad": [https://www.youtube.com/watch?v=oPpwLCvPAME](https://www.youtube.com/watch?v=oPpwLCvPAME)</comment></comment>


Rate my startup: PocketPro for iOS - <AUTHOR> http://www.youtube.com/watch?v=zVgvigG_HNw&hd=1

<comment><USER2> I don't play golf, so I don't know if this is useful to a golfer, but I assume so =) It looks cool anyway.

1\. tghgolfdesigns.com - not memorable.

2\. Pocket Pro - does not tell me anything about the app (yes, I get Golf Pro buts it not instantly recognisable). Pocketgolfswing.com is available... buy that and create a product site.

3\. I don't even see the product in action until nearly 2 minutes in. Most of the stuff before is just dull. People who buy the product don't care about your circuit board.

4\. Use simpler language - you talk up your data frequency by talking about 60 frames per second on a video capture system and yours of 1000 times per second. Say "over 10x more accuracy" or whatever.

5\. Guy on our left - we can tell you keep looking down to read your script and it looks awkward.

6\. Get along to a golf club and find the club pro and persuade him to be involved. It will give it a bit more gravitas.

7\. Perhaps consider adding some titles. Eg whilst the swing data is downloading to your iPhone, put on a screen title of "Data transfers is under 5 seconds". It provides a little distraction of something for someone to read and the 'wait' doesn't feel as long. You could also use a title to show each view that your app offers. eg "1. Swing view, 2. shot view" etc. Because it's a tiny phone being demonstrated, it's not clear to see the UI and the title could reinforce what the user is looking at.

Your website

1\. In little text you finally explain what the product is. You waste 5 lines and 300px of height mentioning your company name and the product title and it still doesn't say what it does. Have a tagline - "introducing pocket pro - analyse your golf swing instantly" etc.

2\. E-mail sign up for release. Put this at the top, in the centre. Otherwise people will see that it's not released yet, forget about it and never return. E-mail means you can get them back again!

Looks a cool product though and nice visualisations. Wishing you every success

<comment><AUTHOR> Thanks for taking a look. You have provided some excellent feedback on both our product and the website. We have been focusing the bulk of our efforts on the actual device over the last 10 months and have had little time for website revisions and promotion. As development approaches completion we are now starting to spend some time on product identity. Your suggestions are a great start for this. Thanks.

With the help from a large USA golf accessory manufacturer- we hope to see the product hit shelves in 2011.</comment></comment>