What every computer programmer should know about floating point, part 1 - <AUTHOR> http://blog.reverberate.org/2014/09/what-every-computer-programmer-should.html <comment><USER3> Here is a fun little anecdote you may consider incorporating into part 2:

The default Excel number format (known as General) draws numbers with up to 11 characters, granular enough to mask the ulps in common numbers like 0.1+0.2. Excel also supports fraction number formats. The format "?/?" writes the closest fraction whose denominator is less than 10.

The algorithm used to calculate the fraction seems to agree with the Oliver Aberth paper "A method for exact computation with rational numbers". Based on this algorithm, 0.3 is represented as "2/7" and any number slightly larger than 0.3 is represented as "1/3".

Try setting A1 to 0.3, A2 to =0.1+0.2 and change the cell format to Fraction .. Up to one digit. Both cells appear to be 0.3 when rendered under the General format. However, when using the fraction, the cells differ.

Google Docs renders both numbers as 2/7, but the XLSX export correctly preserves the IEEE754 numbers. Unfortunately, LibreOffice clobbers the last few bits, leading to incorrect results.

<comment><USER4> Fun fact: to find the fraction closest to a number with a denominator that doesn't exceed a certain amount can be generated using the following algorithm:

(1) Find the N/1 rationals corresponding to the closest integers on either side of the number.

(2) For rationals a/b and c/d, calculate (a + c) / (b + d). This is not a common operation, but you read it right. It'll be between a/b and c/d, and be the number with the smallest denominator between them.

(3) Reduce the range to the segment from above containing your number. If the new denominator exceeds your limit, choose the smaller-denominator value. Otherwise, go back to step (2).

[There are some delightful proofs of this using tessellation that I strongly encourage you to try to figure out, one of the most interesting puzzles I got from a guy named Anton, the first user of MathOverflow and current Googler.]

<comment><USER3> That's commonly referred to as the Mediant algorithm [https://en.wikipedia.org/wiki/Mediant_(mathematics)](https://en.wikipedia.org/wiki/Mediant_\(mathematics\)) \-- GDocs, LO and other programs use this algorithm when rendering.

Shameless plug: our JS fraction library [https://github.com/SheetJS/frac](https://github.com/SheetJS/frac) implements the mediant as well as the Aberth algorithm.

<comment><USER4> I did not know this! :) Thanks for sharing.

Another thing I heard, but have not been able to prove (and is not in the Wiki article), is that if you record whether you take the Left or Right segments in the algorithm, you can construct a continued fraction for any real number as int(N) + 1 / (1 (L -> -, R -> +) (number of times you took that direction before "turning around") / 1 (L -> -, R -> +) (#direction) ... ))).

My inability to prove may be primarily because I never really got the flavor of proofs about continued/infinite fractions -- considering the source I'd say it's likely true (or I misremembered).

You don't happen to know where I'd look for hints on the proof there, do you? :)

<comment><USER3> I'm sure it's hiding somewhere in Concrete Mathematics (knuth/graham/patashnik), and I'm sure there are more elegant proofs, but it's not too hard to work out this proof yourself. Here is a hint:

Suppose you were at a point in the mediant algorithm where the two terms were a/b and c/d. Taking the left segment transforms this to [a/b, (a+c)/(b+d)] and taking the right segment transforms this to [(a+c)/(b+d), c/d].

Represent this as a matrix of the form [[a,b],[c,d]]. In this form, what does "take the left segment" look like in terms of a matrix operation? what does "take the right segment" look like? Can you find any useful properties (for example, how do you repeat)

A convenient root matrix is [[0,1],[1,0]]

</comment></comment></comment></comment></comment><comment><USER5> For the really ambitious, there's always Knuth's treatment in _TAoCP volume 2: Semi-Numerical Algorithms_. It runs about fifty pages, covers such interesting topics as the statistical distribution of floating point numbers in order to determine average running time, and of course, includes exercises like _[42] Make further tests of floating point addition and subtraction, to confirm or improve on the accuracy of Tables 1 and 2._

[http://www.amazon.com/Art-Computer-Programming-Volume- Seminu...](http://www.amazon.com/Art-Computer-Programming-Volume- Seminumerical/dp/0201896842)

On the more social side, Dr. Chuck's interview with William Kahan on the history of the IEEE standard is a good read:

[http://www.cs.berkeley.edu/~wkahan/ieee754status/754story.ht...](http://www.cs.berkeley.edu/~wkahan/ieee754status/754story.html)

</comment><comment><USER6> re: "As long as they are small enough, floating point numbers can represent integers exactly."

I recently discovered a wonderful floating point bug in the Apple A7 GPU (fragment shader). I would pass a float from the vertex shader to the fragment shader, that was either 0.0, 1.0 or 2.0 and use that as an index to mask color channels.

As such, I would convert to int and use it as an index. Problem was, the GPU would sometimes, on some random region of pixels, decide I didn't pass in 1.0, but 0.99999999999. Perform an int truncation, I have 0.0, I get the wrong index, my app starts flickering, I want to rip my hair out...

Even on desktop machines, I had similar problems with large sets of tests that would produce different results depending on which (modern desktop) processor they ran on.

Lesson: floating point is certainly dangerous for consistent representations that "matter". Regardless of a compiler decision or what the spec says.

<comment><USER7> It's hard to understand how such an error could occur. Due to the nature of the floating point format, it seems very difficult for a bug to transform 1.0 into 0.999999.

Floating point 1.0 has a sign bit of 0, an exponent of 0 (after bias), and a significand of 1.0. It's hard to imagine a sequence of transformations that could somehow result in getting 0.999999999 after conversion.

I made a little "floating point binary explorer": [http://ideone.com/61L4V6](http://ideone.com/61L4V6) (Apologies for the awful code quality; it's just a quick hack.) It prints each bit of a 32-bit float, which for 1.0 is "00111111 10000000 00000000 00000000".

The first bit is the sign bit, the next 8 bits are the exponent, and the remaining 23 bits are the significand. So, sign=0, exponent=127, significand=0. The significand is actually 24-bit, not 23, and the leading "hidden bit" is always 1 (nitpick: unless the floating point value is 0.0 or -0.0). That means the significand in this case isn't actually zero, but "1 followed by 23 zeroes," so it's 2^24.

The final value for a 32-bit float is:

      (significand / 2^24) * 2^(exponent - 127)

That comes out to (2^24 / 2^24) * 2^(127 - 127), which is 1.0 * 2^0 which equals 1.0.

For representing 2.0, everything is exactly the same, except the encoded exponent is 128 instead of 127. That comes out to (2^24 / 2^24) * 2^(128 - 127), or 1.0 * 2^1 which equals 2.0.

Shader programs often use half precision floats (16-bit total, with 1 bit for sign, 5 bits for exponent, and 10 for significand) but the concepts should be exactly the same. 1.0 and 2.0 should always be 1.0 * 2^0 and 1.0 * 2^1 respectively, regardless of whether we're using half/single/double precision.

I'm having trouble figuring out how your program wound up with 0.999999, even if there was a bug in the conversion. 32-bit floating point 0.999999 is "00111111 01111111 11111111 11101111" which is very different from the binary 1.0 float value: [http://ideone.com/Qlqu4W](http://ideone.com/Qlqu4W) It has an exponent of 126 and almost the highest possible significand, which comes out to 1.9999 * 2^(126 - 127) = 1.9999 * 2^-1 = 0.9999.

So in order for 1.0 to be erroneously transformed into 0.9999, the bug would need to invert all the bits of the significand, but subtract 1 from the exponent.

Is there anything in particular that I should watch out for on the A7 GPU? I was just hoping to hear about any details you may have left out for simplicity, or any other factors that could've triggered the bug.

 _> Even on desktop machines, I had similar problems with large sets of tests that would produce different results depending on which (modern desktop) processor they ran on.

> Lesson: floating point is certainly dangerous for consistent representations > that "matter". Regardless of a compiler decision or what the spec says._

Are there floating point bugs on desktop processors? The only one I've heard of was the infamous Pentium FDIV bug [http://en.wikipedia.org/wiki/Pentium_FDIV_bug](http://en.wikipedia.org/wiki/Pentium_FDIV_bug) and the only reason that wasn't hotfixed to match the spec was because the logic was hardwired into the chip rather than implemented in microcode, making a patch impossible.

It seems like any deviation from the floating point standard in a modern desktop CPU would be noticed almost immediately, because there is a lot of code which relies on the exact IEEE floating point standard in order to function properly. There was recently a hash algorithm featured on HN which used floating point, and the only reason such an algorithm can be trusted is if every desktop processor properly adheres to the spec.

<comment><USER8> I also suspect the 0.9999.. was an actual number in the commenter's inputs to the fragment shader. Unless he checked the binary representation of the numbers in question (in the input) he could have missed what's actually going on. Formatting and printing the number in base 10 hides the only real thing, which is the actual bits that represent the number.

<comment><USER9> It's not rare for GPUs to be pushed so close to the boundaries of what the underlying hardware can do that you'll see little bits of noise like this.

For 'consumer' stuff this usually does not matter, but I think it is one of the reasons (besides revenues) that Nvidia has a 'compute' line and a 'display' line. Even if they're based on the exact same tech it would not surprise me one bit if the safety margins were eroded considerably on the consumer stuff and if it wasn't tested as good before shipping (on the chip level).

<comment><USER7> ATI would probably be a better example. Nvidia has historically been more precise and has implemented specs pretty faithfully. ATI has of course become AMD, and the reputation of modern AMD graphics cards among developers seems to be pretty great.

It would surprise me if sending the value 1.0 from a vertex program to fragment program ever resulted in anything except 1.0 on a desktop GPU. It's not unusual to truncate a float in a fragment program and the use the resulting integer as an index. I think Nvidia has a fairly rigorous battery of tests which they use to ensure compliance with specs. The tests check to make sure that values are being interpolated correctly, to check for off-by-one errors at the edges of triangles, and other such corner cases. The tests are automated, because once you implement a graphics spec correctly, you can generate an output image which should be the same every time it's generated. That way, if an error creeps into the driver, it should be caught pretty quickly, since it will cause a deviation in the rendered output examined by the test suite.

I'm not sure how often a problem occurs in an Nvidia consumer card but not their 'compute' line. Nvidia tries to use the same driver codebase across as many of their products as possible.

Here's an interesting thread where someone points out that certain OpenCL code was giving the correct result on x86 and Nvidia cards, but not AMD cards: [http://devgurus.amd.com/thread/145582](http://devgurus.amd.com/thread/145582)

In that thread, it's suggested that the reason Nvidia gave the correct result was because their CUDA compute specs had better error margins compared to OpenCL specs. So in that case, it would appear that Nvidia's compute line actually enhanced their accuracy in other contexts such as OpenCL. Rather than implement a different driver for OpenCL, CUDA, and consumer graphics, it seems that Nvidia uses the same driver to power all three, which seems to enhance accuracy rather than hinder it.

While writing up this comment and researching this, I stumbled across this interesting paper from 2011 that details exactly what programmers can expect when programming to an Nvidia GPU (in this case using CUDA): [https://developer.nvidia.com/sites/default/files/akamai/cuda...](https://developer.nvidia.com/sites/default/files/akamai/cuda/files/NVIDIA- CUDA-Floating-Point.pdf) ... It's a pretty fun read which helps to solidify the impression that Nvidia cares deeply about providing accurate floating point results.

I also came across this article which was too awesome not to mention: [http://randomascii.wordpress.com/2013/07/16/floating- point-d...](http://randomascii.wordpress.com/2013/07/16/floating-point- determinism/) ... It's not really related to GPU floating point, but it's an excellent exploration of floating point determinism and the effect of various floating point settings.

For mobile graphics stacks like those in cellphones / iPads etc, I share your skepticism. I'm not sure how rigorously tested mobile GPUs are, or how faithfully those stacks adhere to specs. I was hoping to get more info from the original commenter about how to reproduce the bug in the A7 to get a better idea of what to watch out for on mobile.

</comment></comment></comment></comment></comment><comment><USER10> The more you learn about floats the more you realize you don't know. God damn floats are ever surprisingly fickle bastards.

Bruce Dawson has at least 12 posts on floats. There are quite a few more after this series as well. [http://randomascii.wordpress.com/2012/02/25/comparing- floati...](http://randomascii.wordpress.com/2012/02/25/comparing-floating- point-numbers-2012-edition/)

<comment><AUTHOR> The goal of my article is to make them seem a little less fickle and mysterious. I'm trying to focus on what _can_ be understood, and not the parts that defy easy understanding. :)

<comment><USER10> My current favorite float fact is that taking a valid integer and casting it to a float and back to int can cause an integer overflow. Alternatively the final value could be either less than or greater than the original!

Floats are dumb. I use them every day but they're dumb and I hate them! <grumble>

<comment><USER11> The round-tripping behavior is certainly cool, but my favorite float-fact is still this one:

double pi = 3.14159265358979323846; printf("pi = %.33f\n + %.33f\n", pi, sin(pi));

sin(double(pi)) is equal to the error in the double(pi) constant. If you manually add the two you can easily get pi to about 34 digits. Useless, but cool. I discuss this in more detail here: [http://randomascii.wordpress.com/2012/02/25/comparing- floati...](http://randomascii.wordpress.com/2012/02/25/comparing-floating- point-numbers-2012-edition/)

<comment><USER10> if I didn't encounter it personally it can't possibly be my favorite

</comment></comment></comment></comment></comment><comment><USER12> Great job Josh. I wrote a version of this too[0], but yours is much much better and in depth. I enjoyed it a lot more too :)

[0][http://blog.chewxy.com/2014/02/24/what-every-javascript- deve...](http://blog.chewxy.com/2014/02/24/what-every-javascript-developer- should-know-about-floating-point-numbers/)

<comment><AUTHOR> Thanks! I will have to read yours too and see if it will cover things I don't yet understand.

</comment></comment><comment><USER13> "What every computer programmer should know about floating point, part 1.00001"

<comment><USER14> Technically that'd be part 1.000010000000000065512040237081237137317657470703125

</comment></comment><comment><USER15> No floating point article is complete with a reference to the Fast Inverse Square Root [1].

1: [https://en.wikipedia.org/wiki/Fast_inverse_square_root](https://en.wikipedia.org/wiki/Fast_inverse_square_root)

<comment><USER16> Home of my favorite line of functioning code in any shipping product:

i = 0x5f3759df - ( i >> 1 ); // what the fuck?

</comment></comment><comment><USER17> Years ago there was a triangle problem on an ACM Scholastic Programming Contest. It looked simple. Given three lengths, output whether that forms a triangle or not and whether it's a right triangle or isosceles triangle. Simple right? A^2 + B^2 = C^2.

Most programmers that were naive about floating-point got burned. One item in the test data set (which they kept hidden and ran against your program and you only got a pass/fail result) would fail the simple equality case if you used a double-precision float but would pass if you used a single-precision. Lots of learning took place.

<comment><USER9> When doing tests for equality with fp you should always test against a difference and an epsilon. like this:

      // in C

      if (fabs(v1 - v2) < epsilon) {
        // equal
      }
      else {
        // unequal
      }

And epsilon should be chosen with some care, as in: understand your problem domain and run exhaustive tests to make sure you got it right. Test cases should include 'just below', 'on' and 'just above' cases.

Even better if you convert your values to some non-floating point numbers. As they say, if you need floats you don't understand your problem (yet). Obviously that doesn't always apply but it applies more often than you might think at first.

<comment><USER18> > understand your problem domain

It sounds like the article's explanation of how precision erodes as the number increases would help a lot when thinking about this. A good epsilon is a function of the size of your numbers.

I've been writing a lot of money-related code lately in C with long doubles, so floating point has been on my mind, and this article is timed perfectly. According to my tests I can get past $36 billion before I see $0.000001 error, which I think is good enough for me, but I should revisit my reasoning now that I understand things better!

<comment><USER19> You may want to use a more intuitively behaving datatype for currency, even if just to avoid flame on certain community sites on the web. Consider an integer representing ten-thousandths of a penny, if guaranteed to stay in USD or GBP, or a dedicated currency library otherwise. Currency's just one of those things that makes some people very emotional when the notion of any kind of error or rounding is mentioned.

</comment></comment></comment></comment><comment><USER20> If you do accounting instead of games, floating point is NOT your friend. (some game devs might argue that floating point is not your friend there, either, if your "universe" has a convenient "quanta" and scale/size)

Use fixed precision / "binary coded decimal" instead.

[http://roboprogs.com/devel/2010.02.html](http://roboprogs.com/devel/2010.02.html)

<comment><USER21> Binary coded decimal is horrible. It blows away a lot of useful representations, and you don't really gain anything. It also doesn't actually have a direct any relationship with fractional amounts. Fixed precision can be used with any denominator while keeping a binary representation.

<comment><USER20> BCD is slow. But it's trivial to make the number any size you want. If I have a library that "glues together" multiple 32 bit or 64 bit integers, great, but if what I get works with 4 bit chunks, oh well.

Yeah, BCD would suck for a game, but for a biz app, most of your time is going to be spent churning in and out *ML text (or JSON, or CSV, ...) anyway.

<comment><USER22> I've been in this game for a long time. BCD was a scheme to avoid the cost of binary-to-decimal conversion at display time, when processing was much more expensive than it is now. Obviously using binary storage of integers, you now can get the same display of integer values that you could then, but you have to convert from binary to decimal on the fly. The change is that the conversion is much easier and faster than it was then.

That means the storage differential of 100/256, i.e. the loss of bit real estate, is the reason BCD isn't used any more.

<comment><USER21> _" That means the storage differential of 100/256"_

In terms of "number of representable values", it's 100/256 to the power of the number of bytes in packed BCD rather than binary. Alternatively, with BCD you're only using about 80% of your bits.

(Clarifying, more than disagreeing - up-voted).

</comment></comment></comment></comment></comment><comment><USER23> ` As long as they are small enough, floating point numbers can represent integers exactly. `

Is this true? For example, if I want to do integer + floating point addition the CPU might dump the floating point into a 80bit register resulting in a form which does not play as expected with integers.

<comment><USER24> If your machine uses 80-bit floating point, then those extended-precision floats can exactly represent any 64-bit integer, provided that your language's standard library/runtime correctly converts without an intermediate step using 64-bit floats (53-bit mantissa).

<comment><USER25> Yes. You can see the compatibility between 80-bit floating points (long double in C) and 64-bit integer (long long int) with a code like this:

      long double x0,x1,y0,y1;
      x0 = 18446744073709551615.0L; /* 2^64 - 1 */
      x1 = 18446744073709551616.0L; /* 2^64     */

      y0 = x0 + 1.0L;
      y1 = x1 + 1.0L;

      printf("%d\n", x0 == y0); /* false (with enough precision) */
      printf("%d\n", x1 == y1); /* true  (precision being lost ) */

</comment></comment></comment><comment><USER26> How often do programmers deal with floating point?

I deal with business math, which while there are positions to the right of the decimal point we have very well defined numbers and such.

What languages other than javascript have issues such as described in this article?

<comment><USER27> I'm a game programmer so I end up dealing with lots of floating point numbers no matter what language I'm working in because physics and graphics engines just love their floats. C#, C++ and Typescript are my most frequent languages but I would expect to encounter these same issues whatever language I'm working in.

I did some pretty cool work on a fixed point physics engine once - <USER2> integers to represent individual millimeters, so the game field was limited to a mere 4294.97Km! But the graphics engine was still all floats, there's no escape :'(

</comment></comment><comment><USER28> This video may also supplement the knowledge about floating point: [http://www.youtube.com/watch?v=jTSvthW34GU](http://www.youtube.com/watch?v=jTSvthW34GU)

</comment><comment><USER29> Using arrows in both directions on your diagrams is _very_ confusing. Only keep the right ones. Good write-up by the way.

</comment><comment><USER30> Very interesting. You've clarified a lot of points I had floating around in my head about this topic.

<comment><AUTHOR> That is exactly what I was going for -- glad to hear it! :)

</comment></comment><comment><USER31> this needs to be taught in 1st year of any comp sci class

</comment><comment><AUTHOR> I've worked for a few months on this article as I've learned more about floating point. I hope this helps others gain the same understanding. Please let me know of any errors!

<comment><USER32> Title seems like a blatant rip-off of the classic article.

<comment><AUTHOR> Hmm, it certainly wasn't my intent to be a rip-off.

The "What every computer programmer should know about X" seems to be a somewhat established genre, sort of like "X considered harmful":

What Every Programmer Should Know About Memory: [http://www.akkadia.org/drepper/cpumemory.pdf](http://www.akkadia.org/drepper/cpumemory.pdf)

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!): [http://www.joelonsoftware.com/articles/Unicode.html](http://www.joelonsoftware.com/articles/Unicode.html)

Latency Numbers Every Programmer Should Know: [https://gist.github.com/jboner/2841832](https://gist.github.com/jboner/2841832)

While it's true that an article about floating-point already exists, it does seem more aimed at Computer _Scientists_ than Computer _Programmers_ (as the difference in title would indicate). And I link to the existing article in the second paragraph and explain the distinction.

But if it's confusing or seen as disrespectful to the original work, I will consider changing the title.

<comment><USER33> Well, here's my 5 year old attempt to do exactly the same thing: [http://floating-point-gui.de](http://floating-point-gui.de)

<comment><USER34> I prefer your version by far over the overly verbose and overly simple new haberman guide. Knuth and Goldberg made fantastic and precise overviews, and there is a need to terse it down for programmers, but not too much, down to ground school level.</comment></comment></comment></comment></comment>


If Everyone Knew - <AUTHOR> http://www.ifeveryoneknew.com/

<comment><USER2> Interesting, but it needs more recent outrages.</comment>


Probabilistic Filters By Example - <AUTHOR> https://bdupras.github.io/filter-tutorial/ <comment><USER3> Cuckoo filter is used in the upcoming Cache Digest HTTP Standard:

> HTTP/2 frame type to allow clients to inform the server of their cache's > contents. Servers can then use this to inform their choices of what to push > to clients.

[http://httpwg.org/http-extensions/draft-ietf-httpbis- cache-d...](http://httpwg.org/http-extensions/draft-ietf-httpbis-cache- digest.html)

[https://github.com/httpwg/http- extensions/pull/413](https://github.com/httpwg/http-extensions/pull/413)

<comment><USER4> Speaking of which, does anyone know of any HTTP/2 servers that make use of this feature? Are clients making use of it?

<comment><USER3> Not this standard, but the H2O server can use client cache aware HTTP2 Push:

[https://h2o.examp1e.net/configure/http2_directives.html#http...](https://h2o.examp1e.net/configure/http2_directives.html#http2-casper)

</comment></comment></comment><comment><USER5> Strange coincidence, just this morning I was reading a paper [0] from 2008 about Bloom filters. Specifically, their false positive rate is higher than what is usually advertised - even on Wikipedia.

Edit: also as is written in the document, Cuckoo Filters and Bloom filters are not adapted to unbounded streams. Better options may include, for instance, Stable Bloom Filter[1] and block-Decaying Bloom Filter[2]

[0]: [http://cglab.ca/~morin/publications/ds/bloom- submitted.pdf](http://cglab.ca/~morin/publications/ds/bloom-submitted.pdf)

[1]: [http://webdocs.cs.ualberta.ca/~drafiei/papers/DupDetExt.pdf](http://webdocs.cs.ualberta.ca/~drafiei/papers/DupDetExt.pdf)

[2]: [https://link.springer.com/article/10.1007/s11390-008-9192-1](https://link.springer.com/article/10.1007/s11390-008-9192-1)

<comment><USER6> I've only glanced at [0] but I'm skeptical on the face of it. Everything about Bloom filters falls right out of the binomial distribution, provided you follow the assumptions for optimal number of bits and hash functions. Given those,

        n = 1, k = 2, m = 2

from the top of page 2 isn't even a valid configuration. Among other things, filters in which more than half the bits are set (within some tolerance) should be rejected. In this example a third of the filter's possible states are completely saturated and have to be tossed out. Otherwise you have a 100% false positive rate for that filter.

I.e. if a saturated filter were acceptable, there are 3 states: 01, 10, 11. These have, respectively, a 1 in 3, 1 in 3, and 3 in 3 false positive chance, for a total of 5 in 9 (I assume the 5 in 8 from the paper is a typo). But actually there are only 2 valid states: 01, 10. The valid inputs are still 01, 10, 11, though, so the real false positive chance is 1 in 3.

Maybe I'm missing something.

<comment><USER5> "Valid" configurations do not exist, there are only optimal/suboptimal and saturated/unsaturated ones. The classic FPR makes no assumptions about this (indeed optimality is derived from FPR minimum), and as such should apply as well to suboptimal saturated configuration, were it correct.

However looking at theorem 3 in [0] I think the difference between "classic" and "real" FPR is small, especially for larger n and m. At the end of [0] is mentioned a study in which the authors could not reach the classic FPR in their simulations, but attributed this result to bad pseudorandomness of elements. [0]'s author claim that the difference may instead come from the real FPR value (which is actually very hard to compute, so it's hard to be sure).

The 5/8 probability mentioned is indeed correct. First element has four equiprobable possible outputs for its two hashes: (0,0), (0,1), (1,0) and (1,1). Same for the second element, which yields 16 different cases. Out of these 16 cases 10 will lead to a false positive.

<comment><USER6> > The 5/8 probability mentioned is indeed correct. First element has four > equiprobable possible outputs for its two hashes: (0,0), (0,1), (1,0) and > (1,1)

Thanks, that makes sense. I was thinking of states the filter could be in and ignored the different paths to get there. Now that I've had a chance to look at [0], it's interesting, but doesn't seem to matter for Bloom filters used in the normal way.

> "Valid" configurations do not exist

Sure, you can use any numbers you want, even negative ones. I take a more practical view, since Bloom filters make assumptions about choice (or derivation) of parameters. Given those assumptions, the formula criticized in [0] seems to work. Specifically:

> [0]'s author claim that the difference may instead come from the real FPR > value (which is actually very hard to compute, so it's hard to be sure).

We know the FPR of any Bloom filter that actually exists. For a load factor _l_ and number of hash functions _k_ , it's _l^k_. The problem is that the FPR for the expected load factor of a set of parameters is lower than the expected FPR for those parameters, _iff_ the expected load factor is greater than half. But the whole point of a Bloom filter is to have half the bits set; that's the magic that minimizes size and FPR.

In practice you won't often have an expected load factor of exactly half, due to rounding. Depending on how you handle that, and whether you use asymptotics or an exact calculation, some drift in FPR makes sense. It'll be negligible as long as you're targeting half, though. _n = 1, k = 2, m = 2_ is noticeably off because at 3/4 it has a much higher expected load factor.

</comment></comment></comment></comment><comment><USER7> I'm familiar with both cuckoo hashing and Bloom filters but had not until now seen a demonstration of cuckoo filters; they look very useful. But there is one stated fact that I'm finding hard to believe:

> Cuckoo filters improve on Bloom filters by supporting deletion

The page implies that this is achieved by removing the fingerprint from the hash table, but presumably one cannot guarantee that another key doesn't share the same fingerprint. This would result in a false negative for that key and violate an essential characteristic of the data structure.

Perhaps there's a nuance of the implementation I've missed.

<comment><AUTHOR> I had the same thoughts and checked the paper[0]. They address it under 3.3 Delete

>Deletion does not have to clean the entry after deleting an item. It also avoids the "false deletion"....

[0][https://www.cs.cmu.edu/~dga/papers/cuckoo- conext2014.pdf](https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf)

<comment><USER7> Having quickly read the paper, the deletion guarantees seem slightly weak.

An item's position in the table is derived from two things: a fingerprint (a constant-sized hash) and second hash (ranging over the table). Nothing prevents two or more items from colliding on both hashes and therefore being indistinguishable from each other.

If the number of items in such a collision exceeds twice the fixed bucket size then deletion may result in false negatives.

In most practical applications there will be no useful way to bound the number of collisions. The paper shows results with bucket sizes of 4 and 8, but I don't know what the real-world probabilities of breaching these limits would be.

<comment><USER8> Hashing items that present themselves as equivalent is a very old problem with plenty of literature. It can be a pain in the butt to fix retroactively but it does tend to get fixed when there are big enough performance or correctness concerns in play.

</comment></comment></comment></comment><comment><USER9> I was trying out the javascript example, but managed to get a case where there is a negative conclusion but this goes against the introduction where it says negative conclusions are always definite.

My multiset was:

       a, b, c, d, e, f, g, h, j, abc, def, asd, asds, 3g46stb6vy6vsyosyvosfsdfsdsah, oooooooooooooooo

Then trying oooooooooooooooo a second time, the bloom filter correctly says it might be in the set. The cuckoo filter says it is not.

I assume this is just a javascript bug in implementation, because previously the filter said it might be in the set, actually adding it to the set then gave a false negative when trying it again.

<comment><USER10> Yeah - pardon the crappy javascript and UX. Notice the colors on the cuckoo filter when you insert this sequence. When you try to insert `3g46stb6vy6vsyosyvosfsdfsdsah`, the fingerprint entries in the cuckoo turn red indicating an unsuccessful entry. All possible fingerprint slots in the cuckoo for that entry were already occupied, and the recursive rearranging of entries was unable to free up a slot.

This is a down-side to cuckoos (and counting blooms) - even when the filter has reasonable capacity remaining, an entry can be denied due to collision with previous entries and saturation of their slots.

The UX on this demo could be better - e.g. not insert into the bloom unless the cuckoo insert is successful (to keep them from diverging). Also, a message indicating an unsuccessful insertion would be nice.

<comment><USER11> I wish this was something that people brought up more prominently when discussing cuckoo filters. They fail catastrophically. A bloom filter gradually fails as the number of items inserted increases and the false positive rate tends to one. But a cuckoo filter that fills up the buckets for a fingerprint has to reject an insert meaning that either you start to have false negatives or to guarantee that you don't have false negatives you have to immediately return true for any query, which is a false positive rate of exactly one with a sharp discontinuity in behavior from before the failed insert. I think the salesmanship of cuckoo filters has been a little overdone and in most applications a bloom filter is a better choice.

<comment><USER10> Yes, cuckoo filters and counting bloom filters can start rejecting insertions before the filter is loaded - cuckoos because of the inability to find an open slot, and counting blooms because of saturation of a counter. Note that this is only the case if deletion or counting support are required.

In some cases, like the when there's a high likelihood of duplicate entries, this can represent a catastrophic failure mode. This is a good point, and when I get around to updating the tutorial, I'll make note of this.

Regarding the failure mode, an insertion can be knowingly rejected without mutating the filter, so the filter remains useful for subsequent insertions and all reads, retaining all its guarantees. The only loss is the rejection of the item - in our case we used this as signal to rebuild the filter at a larger size.

</comment></comment></comment></comment><comment><USER12> "These filters can claim that a given entry is definitely not represented in a set of entries, or might be represented in the set."

unless the Cuckoo filter has any two filled buckets, right? Which is a pretty critical failure mode not mentioned here. (What do you do then, accept the small new false-negative likelihood? start over with another filter?)

<comment><USER13> If both buckets are filled, one of the existing occupants is evicted and reinserted at its alternate location. If there is an item already at that location, it is likewise evicted and reinserted. This process continues until an open space is found or a loop is detected. If there is a loop, the hash table needs to be rebuilt with more capacity or new hash functions.

<comment><USER10> chronolitus did jetrink's comment answer your question? I'm happy to further clarify if needed.

<comment><USER12> ah, I understand. The website demo had me confused. thanks for your help!

</comment></comment></comment></comment><comment><USER14> Add five "a", now remove four "a" Cuckoo claims there are no "a" in the multiset...

<comment><USER15> There is a comment elsewhere from the creator I think that explains this. The 5th "a" never gets added, you'll see that the cells turn red. After you remove 4 "a"s then you're back at 0 and it is correctly reporting that there aren't any.

<comment><USER14> well the demo then is broken indeed it shows still an "a" inside the multiset. Having say that I would never use a cuckoo in a multiset, indeed it becomes a bounded multiset. Also about the K-hashing for a bloom filter is not exact. You just need need a K-bit hashing function. If the goal is to support deletion then I would go for a Counting Bloom filter

<comment><USER10> Yeah you're correct in saying that the demo is broken - sorry for the confusion, I stopped working on this when it was good enough for an internal talk at my company.

Re multisets, yes cuckoo filters and counting blooms are bounded - cuckoos by entries or bucket x 2, and blooms by bits per counter. Cuckoo's counting capability is more a side effect of the design. It's really only interesting in that you get limited counting in roughly the same bit space as a non- counting bloom. I suppose you could add counting bits to a cuckoo to support higher bounds in a similar manner to counting blooms.

I'm curious to hear more on your point on K-hashing in bloom filters - <USER2> you expand on your statement about only needing a K-bit hashing function? I'm happy to update the text on the tutorial to be more clear/exact.</comment></comment></comment></comment>


17-Year Old Scams Thousands of Android Users With Fake AV App - <AUTHOR> http://www.dailytech.com/Texas+17Year+Old+Scams+Thousands+of+Android+Users+With+Fake+AV+App/article34668c.htm

<comment><USER2> Don't want to open the iOS vs Android box here, just pointing out that for all the downsides and problems with App Store reviews (I am an iOS developer, believe me, there are many) this sort of scam happens far less with iOS because of the reviews.</comment>


Uncle Sam's $2.5B/year Startup Fund - <AUTHOR> https://www.fogmine.com/blog/2015/01/11/2-billion-a-year-for-startups/

<comment><AUTHOR> The US Government has a $2.5 billion per year set-aside fund for U. S. small business and yet many startups do not participate. We, as taxpayers, need more talented and ambitious companies competing in this and similar programs.</comment>


The World of Subversive Garfield Spinoffs - <AUTHOR> https://theawl.com/the-weird-wonderful-world-of-subversive-garfield-spinoffs-8d5d7a5bad99#.al1qfk1sw <comment><USER2> No, this is the best Lasagna Cat, complete with FF6 mod:

[https://www.youtube.com/watch?v=yELOiYgR2aI](https://www.youtube.com/watch?v=yELOiYgR2aI)

<comment><USER3> What ever happened to the guy who made those? These were so well done. Got me into the GI Joe parodies too. I honestly haven't run into anything on YouTube this good in over 5 years.

<comment><USER4> They were made by FatalFarm which has done a lot of really great stuff in the last few years, including some absolutely brilliant work for Key & Peele.

Most of their work is online: [http://fatalfarm.com/](http://fatalfarm.com/)

They have a series of "alternate TV intros" you need to watch right now:

[https://www.youtube.com/playlist?list=PL92CAF6B8AE655C2C](https://www.youtube.com/playlist?list=PL92CAF6B8AE655C2C)

The "Ducktales" one is the best. Probably NSFW.

<comment><USER2> The Ducktales one is definitely the best, I can no longer hear the theme music without thinking of it.

The Robocop one has got to be the absolute boundary of what is allowed on YouTube.

</comment></comment></comment></comment><comment><USER5> PVP did a sendup of the whole industry [http://www.pvponline.com/comic/2009/03/02/ombudsmen](http://www.pvponline.com/comic/2009/03/02/ombudsmen)

<comment><USER6> That was brilliant, thanks for posting!

</comment></comment><comment><USER7> Surprised no one has mentioned Rick and Morty yet [https://www.youtube.com/watch?v=YM_XPZH6QE0](https://www.youtube.com/watch?v=YM_XPZH6QE0)

<comment><USER8> In a video I never would have expected to be on topic here, see also "Gazorpazorpfield Minus Gazorpazorpfield": [https://www.youtube.com/watch?v=R56aB9GxAzM](https://www.youtube.com/watch?v=R56aB9GxAzM)

The mere fact that somebody did it is more amusing than the final result.

</comment></comment><comment><USER9> Even if Garfield Minus Garfield is a little weird, I think it's fascinating how the absence of the cat creats such a obscure melancholia. Some of the stripes even become philosophical.

<comment><USER10> Or conversely shows how easy it is to make non-sense that can be interpreted as deep or meaningful. Makes me think of India's guru culture or the US's new age stuff. Its like our minds are hardwired to trip a fuse when we see something on the level of zen koan or similarly weird or meaningless. Another example is 'cut up books' where you randomly paste together strips of sentences from other books or newspapers and eventually get something interesting.

Maybe its a side-effect of being a novelty seeking species. Who knows.

<comment><USER11> I think it's more than that. The Minuses have a definite air that the others, more randomized, don't. I think it's a little Andy Kaufman like - much humor is ultimately malicious, and when you strip out the punchlines, you're left just with the setup in which Jon's loserdom can't be ignored.

</comment></comment></comment><comment><USER12> I'm surprised Silent Garfield wasn't mentioned: [http://www.silentgarfield.com/](http://www.silentgarfield.com/)

<comment><USER13> Weird, Garfield minus Garfield has the same premise, and was mentioned.

[http://garfieldminusgarfield.net/](http://garfieldminusgarfield.net/)

Wonder which came first?

<comment><USER14> Silent Garfield was invented first, on a forum called Truth and Beauty Bombs, which was the fan forum of a webcomic called Dinosaur Comics, though the discussion thereon tended to be only tangentially connected to Dinosaur Comics.

The thread in which it was invented became a big deal and "went viral". I think Garfield Minus Garfield was also invented later on in the same thread, as well as some other variants. But Silent Garfield is funnier and has a better rationale than Garfield Minus Garfield, so it's always to my chagrin that Garfield Minus Garfield is better-known. (That "better rationale" being the fact that in the original, Garfield's "speech" is always shown in thought bubbles, so removing those thought bubbles should theoretically how the strip's events would appear to an outside observer/Jon/anyone without access to Garfield's internal monologue.)

Source: I was there. The PhpBB for the old forum seems to be busted, and I don't think the thread is accessible any more.

<comment><USER15> DC being what it is, this makes a lot of sense. I only showed up on the xkcd forums, which can go from full of cool people to full of assholes at any moment. It's better now some of the particularly bad trolls have left. Criticising the strip is cool. Being an idiot douchebag isn't.

</comment></comment></comment></comment><comment><USER16> There's also this crudely drawn but shockingly engrossing series:

[https://www.youtube.com/playlist?list=PLHKuF51aPFaq-2UvU- HkS...](https://www.youtube.com/playlist?list=PLHKuF51aPFaq-2UvU- HkSMbOKhWdHy7Dw)

As well as all the follow-ups and side stories by the same person (check their channel for the rest).

</comment><comment><USER17> Why even bother, when Jim Davis himself is already as existential-despair as you can get?

[http://youtu.be/mMz-2oUDSas](http://youtu.be/mMz-2oUDSas)

<comment><USER18> Jesus H. Christ that was horrifying and I'm not sure why.

</comment></comment><comment><USER19> This reminds me of The Dilbert Hole, a profane take on Dilbert's watercooler mirth.

Scott Adams didn't take too kindly to it.

<comment><USER20> I ran across The Dilbert Hole strips embedded in some guy's weird webcomic where he took photographs of Plasticine animal characters and pasted them over photographs of the real world. I can't think of the name of the strip, the only title I remember is "Winter Pageant". At one point the Dilbert strips got replaced with redrawings of them (probably when SA "didn't take too kindly to it") and then I totally forgot about it until today.

<comment><USER21> That sounds similar to leisure town [http://www.leisuretown.com](http://www.leisuretown.com)

<comment><USER20> That was it! Thank you!

</comment></comment></comment></comment><comment><USER22> And of course, the XKCD: [https://xkcd.com/78/](https://xkcd.com/78/)

<comment><USER23> And Kate Beaton: [http://www.harkavagrant.com/index.php/index.php?id=134](http://www.harkavagrant.com/index.php/index.php?id=134)

</comment></comment><comment><USER5> What's with the starting diss of Charles Schulz?

<comment><USER24> Some people (myself included) find Peanuts insufferably boring and not all that funny.

<comment><USER8> There's a decent 5 years of strips in the run of 50 years, scattered but mostly front-loaded, though you also have to skip the first couple. But even the decent strips are low-key and subtle, and you may have needed to be able to connect to some of the characters more than you may have been able too. (I wasn't "Charlie Brown" as a kid per se, but I connected more than others might have.)

I know this because I read them when I was younger, pre-internet. Peanuts can't compete in a world of abundant webcomics. They range from the top to the bottom of quality, but given their sheer quantity, that means there's an awful lot of the "top" out there. The only syndicated strip I know that can stand up next to the top webcomics is Calvin and Hobbes.

(And even then, while the line art stands up, many webcomics' coloring blow away what Mr. Watterson was capable of doing in newspapers. Please note my phrasing on that; I'm blaming technical limitations, not Watterson's ability. IIRC he had some watercolors or something like that he'd done in the back of some of his books... his skill was beyond what newspapers of the day were physically capable of showing.)

<comment><USER24> I liked Calvin and Hobbes a lot, but it all depends on one's tastes; I make no claim that any of them are objectively 'good' or 'bad'. I do think C&H seems to have a lot more effort and thought behind it than Garfield or many of the Peanuts strips.

<comment><USER25> Calvin and Hobbes's creator really liked Schulz's work: [http://www.wsj.com/articles/SB119214690326956694](http://www.wsj.com/articles/SB119214690326956694)

<comment><USER24> Yeah, I know, but I guess I don't share his view on that.

</comment></comment></comment></comment></comment></comment><comment><USER26> I read Garfield when I was a kid. I have some books. It's strange but there were characters, a roommate, a dog (odie),a cute kitten that was resented, trips to a farm. Those things were written out, and it became sameness all the time. I'm surprised it's still being written.

I love the remixes. Garfield minus Garfield is fascinating..

<comment><USER27> It's still being written because Jim Davis's chief motivation in starting Garfield was to do something about the struggling economy in his home town of Muncie, Indiana.

The strip's mediocrity is a secure source of income for two dozen people in a struggling town, and thus also a source of income for everyone who pumps their gas, buses their diner tables et cetera.

<comment><USER28> > and thus also a source of income for everyone who pumps their gas, buses > their diner tables et cetera.

I'm not sure, and I have other things to think about right now, but this smells of a broken-window fallacy.

<comment><USER29> This is pretty much the basis of any discussion on jobs creation. In this case there is no destruction of property stimulating economic activity, which to my understanding is the crux of the broken window fallacy.

<comment><USER28> > In this case there is no destruction of property stimulating economic > activity, which to my understanding is the crux of the broken window > fallacy.

You have a point there. I think what I'm getting hung up on is that it's not so much a creation of value as a redistribution of value (from the comic strip workers to the gas station attendants, and to the government collecting taxes). Of course, there should be _some_ creation of value involved for the buyers and sellers of the gas pumping service, other wise they would abstain from it, and maybe it is this value that the parent comment referred to, and all is well.

> This is pretty much the basis of any discussion on jobs creation.

Actually, I'm uncomfortable with many discussions of "job creation". It often seems that the number of people hired, i.e. the number of "jobs created", is all that is considered, even if the work done is not useful, meaning that a job-creating action is seen as a success even if it comes at a cost greater than that of just gifting the same people the money and leaving them available for useful work.

</comment></comment></comment></comment></comment><comment><USER30> And of course, Hetfield the Cat, [http://hetfield-the- cat.tumblr.com/](http://hetfield-the-cat.tumblr.com/)

</comment><comment><USER31> The best musical analog I can think of to this would be Simpsonswave (as compared to the whole of the vaporware genre).

<comment><USER32> retest

</comment></comment><comment><USER33> Amazing- someone found a way to post memes on HN and get upvoted :)

(Garkov is very HN, I admit)

</comment><comment><USER34> This seems like perfect fodder for an RNN.

</comment><comment><USER15> Cool, but if you've seriously been on the web for about 5 years, this is nothing new.</comment>


Ask HN: Startup a company or a department? - <AUTHOR>

Recently, I talked with my sister. She wants to start a company and hates corporations. I love corporations and I would like to have my own department there.
Let's say you have a job and you have a good business idea. You can do one of two:
* Quit your job, create a business plan, work on a prototype, get funded by VC, hire people, grow to become a corporation or become a department in some corporation
* Stay, propose a plan to your CEO, work on a prototype, get funded by your CEO, hire people, become a department with its own budget or form a subsidiary company
Do I have it "more or less" right? Why there seems to be an advantage of creating a startup company over creating a new department if eventually your "core" idea becomes a department in a company one way or the other? I also notice that most advices for a company founders apply also to department founders. <comment><USER2> The real question to answer is whether "are you willing to go into a business with your sister", and "is the relationship strong enough to withstand problems in business."

Remember, if the business runs into trouble and the two of you argue, then you will have lost a business and a sister.

Also, if you work very hard and your business becomes successful, are you still willing to share the rewards with her.

Here are some general thoughts:

1\. Is your sister an "ideal investor"? Does she have sufficient knowledge in the are of business you want to enter. Does she have contacts, potential customer lists?

2\. What will happen if your idea fails? Is she able to sustain the losses? Most angel investors lose money on 80% of their investments.

3\. Does she have any experience herself? Do you see her as a wise person? Can she act without emotion.

<comment><AUTHOR> We have two separate business ideas. She is an artist. I'm a computer nerd. She lives in a different country now then I do. But we want guide ourselves. Share problems and help out. The thing is that I advise her to execute her idea within a corporation since it can minimize the risk somehow. That's how I want to execute my idea. Although, before I do that I want to understand what is the benefit of a company startup versus a department startup. Maybe my sister is right. Maybe some ideas are good for spinning new department while other for spinning new companies.

This is naive but if there was someone at IBM that would see great value in Steve Jobs's idea wouldn't it make sense to execute it there? Isn't that a win-win situation?

<comment><USER2> If you execute two businesses in a single company, you subject each other to increased risk. Somebody suing her company will go after your assets. My advice is to set up separate companies. You can share facilities etc. But don't ever run them under the same company if they are run by two different people, doing two different businesses - unless cost is important and you want to save $1 of legal fees keeping them separate.

Steve Jobs: it doesn't make sense. In a company every idea will have to fight for funds and resources. If your idea is funded on its own merits then there will never be this issue.

Anyway, you are putting the cart before the horse. Go and sell something.

</comment></comment></comment><comment><USER3> The big advantages to the startup in this case are the following: 1) More potential for upside since you own it yourself and can potentially reap the financial benefits more easily. 2) Potentially less oversight and freedom to pivot/pursue different directions (depends on how your startup is financed). 3) Freedom to use different technology, personnel, and office space than in the parent corporation.

I think #2 and #3 are the main things that are driving people to start companies today.

<comment><AUTHOR> Thank you. I understand that office space, personnel, and financial benefits are big advantages in startup company. The other points you are making might become disadvantages, especially for those that do not have good outside guidance.

My understanding is that organizations like YC help you "trim" your ideas and stay focus. One might even think that YC is something like a board of trustees or senior management. Obviously, without the part where if everyone thinks your approach is really bad idea they will not let you do it.</comment></comment>


How Signal Beats WhatsApp - <AUTHOR> https://theintercept.com/2016/06/22/battle-of-the-secure-messaging-apps-how-signal-beats-whatsapp/ <comment><USER3> Personally, I only want to send messages regarding harmless stuff. Being able to send my location in-line (or even share live like WeChat) is a feature I'd drop any privacy protection for.

On top of that, I'm not going to get my parents to switch to the messaging app du jour. I'm going to hope that the one I use adopts good technology.

Maybe Signal is awesome. But privacy from law enforcement is not a killer feature. The US Government has substantial leverage over me in other ways. If it's come to the point that they want my communications, I've already lost.

<comment><USER4> This is why the Signal team spends time working with other messengers. We want to help enable Signal Protocol in the products that everyone is already using (like WhatsApp), rather than expecting everyone to switch to our app.

<comment><USER3> And thank you for that.

</comment></comment></comment><comment><USER5> The article says that Signal hashes contacts etc.

I was under the impression that this had been reverted because it is "hard". Has that decision changed?

[https://whispersystems.org/blog/contact- discovery/](https://whispersystems.org/blog/contact-discovery/)

<comment><USER4> Nothing has changed. The premise of that blog post is that we'd like to do _better_ than ephemeral intersection requests using truncated hashes of contact identifiers, but that we don't believe it's currently possible to do better.

<comment><USER5> So to confirm, the current version of Signal now transmits contact data in the clear.

<comment><USER4> I don't know what you mean by "in the clear," but Signal has always done contact intersection with an ephemeral query of truncated hashes of phone numbers.

</comment></comment></comment></comment><comment><USER6> I feel like the metadata collection argument is overrated here. It's a nice promise, and it's not that I don't believe them, but at the end of the day it's just that: a promise. We've got messengers with E2E crypto because we don't want to just take someone's word that messages won't be read/intercepted, so the same logic should be applied to metadata: Either the protocol guarantees that metadata cannot be collected, or we should assume that it's being done.

Signal being open source is still a very good argument in favour of it. It's also great that they're careful about not including features that could make it easy to shoot yourself in the foot (online backups). We can do without the whole "just trust them" dance.

<comment><USER7> I think this is an important point. The article says WhatsApp doesn't collect metadata as normal course, but it can and will where legally required.

Then it says Signal doesn't collect metadata, and stops there. I'm pretty willing to bet they're just as governed by NSLs as WhatsApp, and if legally required, can and will collect said metadata and hand it over.

The only way to not do so is to go the Lavabit route.

</comment></comment><comment><USER8> No messaging service is going to beat another messaging service purely on technological grounds. The "network-effect" is just too strong.

<comment><USER9> Exactly. I have Signal installed, but none of my contacts have it installed on their phones.

And Signal's "helpful" banner at the top that allows easy invitation of contacts will (rightly) be treated as spam by most of my contacts - <USER2> secure/encrypted chat apps keep coming and going, with some people saying "just use Whatsapp, it is now encrypted", others complaining that it is closed source, etc. I can't keep changing my recommendations every few months and expect my contacts to do the same. In fact, it is only through hn that I even heard of yet another protocol: [https://matrix.org/](https://matrix.org/).

Practically speaking, WhatsApp works best wrt security for me due to these network issues - essentially all of my Indian contacts have it for some reason, likely again some positive feedback loop due to network effects in India. And there is no such dominant app among my US contacts, hence I fall back to plain old SMS.

</comment></comment><comment><USER10> I'm trying to figure out what chat method is considered superior. What about Matrix? Should I use that or Signal?

<comment><USER11> The premise of the article --- and it's a good premise --- is that the secure chat applications you should consider are those that implement Signal Protocol. Matrix does not.

<comment><USER12> do you have any resources for building a secure chat application, or maybe more accurately, implementing secure chat as a feature of an application?

<comment><USER13> That's not an undertaking that should be taken lightly. At minimum, you should have a team wherein one of the people making the final design decisions is a cryptography expert.

And I don't mean "I learned how to do textbook RSA in college", I mean more of, "Can tease a previously undiscovered cache-timing side-channel out of a crypto library". (For example, the recent libgcrypt advisories.)

If the words "padding oracle" or acronyms like AEAD sound strange and foreign, that person is not qualified to fill that role.

I would wager most developers lack the background to make a messaging service that is _actually secure_. (To anyone reading this: Please don't let this fact magnify any sense of impostor syndrome you may have. You're _far_ from alone. Even the experts won't embark on this endeavor without peer review.)

<comment><USER12> to be clear, I was hoping to build it casually on top of a protocol or library. I would not be planning on rolling my own crypto or anything like that. I want a feature of my application to be encrypted chat which given the large availability or apps & libraries, I was hoping could be more of an integration than a build out.

<comment><USER13> In that case, the Signal protocol is open source.

[https://github.com/WhisperSystems/libsignal- protocol-c](https://github.com/WhisperSystems/libsignal-protocol-c)

[https://github.com/WhisperSystems/libsignal-protocol- java](https://github.com/WhisperSystems/libsignal-protocol-java)

More generally (i.e. not for messaging apps), libsodium is great for application-layer cryptography:

[https://download.libsodium.org/doc/bindings_for_other_langua...](https://download.libsodium.org/doc/bindings_for_other_languages/index.html)

<comment><USER12> thanks, I did a cursory look a little while ago and have been thinking of signal. Thanks for the resources. Will check out.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> I love Signal and they're responsive to requests or bug reports in a way that Google or Whatsapp can never be, and it seems, don't want to. I don't care if it's missing a few features. Most of the features added to messaging are pointless fluff anyway. So what they're 3 people, when I reported an unusual bug it was fixed in a couple of days. Try that with Google.

What does impact me is the userbase. I've tried, and generally failed, to get lots of friends using Signal. I get to use it with just the small subset that are privacy aware and techie.

Given they use the same protocol, it's a shame we can't message whatsapp or allo users. Yes it compromises my privacy compared to staying native, but less than having to install their whole app.

<comment><USER15> I dislike a bit how they have ignored community requests to support alternative transport systems to Google Cloud Messaging [1]. This has even led to a fork [2].

It'd be also great to have a desktop client for Linux. Even a simple CLI would do.

If those 2 things were fixed, it'd be an awesome messaging platform.

[1] [https://github.com/WhisperSystems/Signal- Android/issues/1000](https://github.com/WhisperSystems/Signal- Android/issues/1000)

[2] [https://fdroid.eutopia.cz/](https://fdroid.eutopia.cz/)

</comment></comment><comment><USER16> Does anyone have thoughts on Wickr? It comes with extra features like expiring messages/media.

<comment><USER17> Though the argument is that it's closed source, there's a level of trust I have for Wickr and team. There's even less meta involved with Wickr since no phone number is collected and the app forensically deletes messages. Nico Sell has a pretty awesome reputation of standing up for privacy.

</comment></comment><comment><USER18> Has anyone tried running a "private" Signal cluster? I'm sad that Signal is so centralized. I wish they had built a federated protocol instead. :(

<comment><USER19> At this point why not jabber?

<comment><USER18> It looks like Conversations has implemented the Axolotl ratchet for XMPP as "OMEMO". I need to do more research to see how I can get support for that on all of my devices.

[1]: [https://conversations.im/omemo/](https://conversations.im/omemo/)

</comment></comment></comment><comment><USER20> I'm disappointed that telegram wasn't on this list!

I'm curious about signal but their with service just seems to hang for me.

<comment><USER6> Telegram uses homegrown crypto with known weaknesses[1] and doesn't do end-to- end encryption by default (your messages are stored on their server _in plain text_ ).

[1]: [https://news.ycombinator.com/item?id=10713064](https://news.ycombinator.com/item?id=10713064)

</comment></comment><comment><USER21> How WhatsApp beats Signal: Almost everyone I know uses WhatsApp, I don't know of anyone that uses Signal.</comment>


A millennial dream, a Fed nightmare - <AUTHOR> https://www.linkedin.com/feed/news/a-millennial-dream-a-fed-nightmare-4507891/ <comment><AUTHOR> So how would one retire early? Could I quit my job today? What exactly would that look like? My thoughts to explore this further is to help people make the jump away from working for someone or a company that they do not enjoy - <USER2> hopefully to better pursuits.</comment>


Ask HN: What's your advice for someone who's raising capital for the first time? - <AUTHOR> I'm a noob founder raising Angel/VC for my startup, what are the common pitfalls and other things that I need to be aware of? <comment><USER2> Speak softly and carry a big stick.

VCs constantly talk about supporting entrepreneurs through tough times, enabling creativity, building amazing companies, etc. They're not lying -- they really believe it, and it's an important thing for them to believe.

But while they say all this stuff, they're also human. And humans follow their incentives. They do that before they do anything else. So your job is to make it easy for them to act ethically.

That means talk the talk -- you want to build a great product, scale it to an amazing company, hire a great team, etc. That's the only thing you care about. Building a great company that builds amazing products and makes everyone lots of money. But _act_ game theory. Have lots of great alternatives to negotiated agreements with any given VC. Put yourself in a powerful position where you can get favorable terms. Don't give up power/equity on the assumption that "it doesn't matter", or that they'll act magnanimously, or anything like that.

It's way, way easier to have a lovely relationship with people when you're in a position of power. Put yourself into that position.

(There are some investors you can unequivocally trust to act their talk -- notably YC, winfunding, and a few others, but don't rely on that as a general rule)

<comment><USER3> This. So true and extremely well framed.

The only thing I can add: At the beginning of a relationship, everybody is kind. Background checks not just help, they are essential, do them.

Getting into conflicts and power plays with VCs, or just any person at some point, should be expected but there are still huge differences in how people deal in messy situations in terms of morale and ethics. You will find everything between feeling uneasy and facing a nuclear war.

<comment><USER4> >>> there are still huge differences in how people deal in messy situations in terms of morale and ethics.

so true. Problem is that in my small business experience, those in power are there because they have very flexible views on morale and ethics (i.e. they think they have morale/ethics, but they actually forget it when their company is at stakes). Being the ethical guy I'm of course totally biased. But the parent post is so right : having ethics/morale can be extremely damaging for you because you'll have to work with people who absolutely don't get how you think and that'll be super exhausting. Know yourself before going into that game.

</comment></comment></comment><comment><USER5> Keep everything incredibly simple. Follow the standard 10 slide deck pattern. Focus on the value your service provides in concrete terms. It's not the time for subtlety. Spell things out explicitly in big font.

Set the price of shares at $0.10 or a round number. Raise a normal amount of money like $150k or $250k at a normal valuation like $1M (depends on industry etc). Get someone close to you to put in any nominal amount like $10k and tell investors you already have committed funds. If possible use a SAFE contract to accept funds faster.

Hire a freelance designer to clean up the deck and website home page if that is an issue. Ask friends to review both deck and home page. If possible make a product video walkthrough.

In meetings keep things friendly. Stick to the plan. Pitch and then ask if they are interested. Answer questions truthfully but in line with expectations. Never complain or give excuses for anything. Follow up frequently because investors are often busy and literally might forget they agreed to invest in your co.

Source - closed $250k seed round this month. Woohoo. Back to work.

</comment><comment><USER6> I've started a few modestly successful companies over the past decade. Most of them were bootstrapped, but for one of them I went the VC route. I raised $16M over 4 years, starting with Angel, then VC, then "top-tier" VC.

 _Taking VC funding made the experience of owning and operating a business worse in almost every way._

There are many reasons why I wouldn't recommend raising VC money, but I'll focus on just two right now. First, once you take VC funding, it's no longer your company. Think about that - this business that you created from nothing, sacrificed so much for, know inside and out, and poured years of your life into - now you share control with someone who you've spent maybe 8 hours with. And you're going to have to do that again and again over the years.

The second reason is the disparity in the invested interest between the VCs and you. You have EVERYTHING riding on this startup. The VC has almost nothing riding on your company. It's not their money, they get a great salary either way, and they are expected to have most of their investments fail.

There seemed to be more worldly prestige running a VC backed company, but that's probably because we bought press coverage. :-) In terms of my own personal happiness, I've never been happier than when I was running my own bootstrapped company...and I also made a ton of money.

<comment><USER7> How do you know what type of company to start and how much of your own money did you invest when bootstrapping a company.

I heard about startups that do something like make medical insurance billing easier. That raises a lot of questions, actually.

* How does one even learn that is an issue?

* It seems like something where getting started is driven entirely by having contacts in the industry.

* There has to be a ton of prohibitively expensive red tape to cut through. Would you just pay a lawyer to figure all that out? Lawyers are expensive!

* It doesn't seem like something that really makes the world better although I'm sure you could tell yourself that it does if it was your business. Is having your business do something you consider positive important?

* Where do you get the knowledge you need to get started in an industry. Say you're really only good at programming and want to start a ...fashion business. How do you even start? It can be hard to use Google when valuable information is buried under an ocean of click bait articles.

<comment><USER8> Become a technical co-founder for someone with a deep knowledge of some valuable business, who has a great idea for a startup but lacks the technical skill to make it work. There are lots of them.

<comment><USER9> Be careful: signal/noise ratio is extremely low here. There are lots of people, particularly in SV, with vague ideas and a general desire to be a "non-technical cofounder", but far less that have the deep, valuable domain knowledge being discussed here.

<comment><USER8> Well, yeah. Vet your partners. They need to have a realistic and achievable idea that makes sense to you. "Business plan" becomes their responsibility, and it needs to be better than "collect underpants, ???, profit!", or "Facebook for cats" or whatever.

</comment></comment></comment></comment></comment><comment><USER10> 1\. First figure out plan B - what happens if you are not able to raise funding in the next 6 months.

2\. Assume a position of power - you will make this company big even without funding because plan B is in place.

3\. Talk to investors from this position. You are smarter than them. You know more about this business. You don't need this particular investor to invest because others have already signed up.

4\. Treat investors like shit. Dont look too eager to setup meetings. Schedule meetings a week out atleast. When you drop into a meeting do NOT spend more than half an hour to 45 minutes. Do NOT answer all questions for investors - be selective about information you disclose - push answers to next meeting - make yourself scarce.

5\. Do bullshit padding around your entire story. If something doesnt sound too good dont disclose that information. Make up stuff to make things look good.

There are people who will find the points above ethically questionable. These people most likely dont know what it takes to raise money.

<comment><USER11> I agree with most of what you wrote but:

> Make up stuff to make things look good.

That's gonna backfire.

<comment><USER12> Theranos is a good example of why that doesn't work.

<comment><USER13> I'd say the opposite. It actually worked for about 15 years... that's a pretty good run and shows you just how susceptible to bullshit some of these guys are...

</comment></comment></comment></comment><comment><USER14> \- Do you actually need to raise? If so, is now the right time? If you don't have a product with any users, it may be more valuable to prioritize this. Raising money is a huge distraction. Approach with caution.

\- A clear, succinct, well-designed deck _does_ make a difference.

\- Talk to your users. How do they use your product? How often? Include this in your deck.

\- Venture Deals and Mastering the VC Game are helpful books

\- Read early slide decks of now successful companies. Many are available online (e.g. Airbnb).

\- Warm intros help. If you know someone who knows a VC and can intro you, ask!

\- Different VCs have different investment strategies. Your TAM might not move the needle on a 1B fund, but it could on a 20M one.

\- The best story is a growth curve that's up and to the right.

\- For later stage: not to sound demeaning, but VCs often act like lemmings. An offer on the table makes rallying others easier — reach out to those who gave you a "VC pass" (ie nevder responded to your email, or didn't follow up after a meeting) and see if they're interested now.

\- If possible, get feedback on your deck from someone who has successfully raised.

\- Don't tell VCs which other VCs you're talking to. You'll be tempted, but don't.

\- Take notes after each meeting. What were the objections? Stumbling points? Use this feedback to improve your deck.

\- Giving a range for your valuation or amount you want to raise makes you appear indecisive and lacking in confidence. Give specific figures.

\- Be capable of justifying why you want to raise X. How'd you come to this figure?

\- Stories help. How'd you come to this idea? If you have direct exposure to the problem you're trying to solve - especially if it's a business problem - incorporate this into your pitch.

\- Make sure you're talking to people who can make a decision within the firm.

\- Don't copy and paste cold emails. Personalize them.

\- This can be a discouraging process. But it's a numbers game. You only need one yes to get the ball rolling.

\- Multiple offers help with negotiation :)

\- Good luck!!

</comment><comment><USER15> Ask yourself if you actually need the capital.

Between the ubiquity of pay-per-minute cloud computing for every imaginable service, tools to enable extremely productive remote employees, and thousands of software companies ready to handle the complexity of payments, email, ecommerce, hosting, etc, starting a tech company is easier and cheaper than ever.

<comment><USER16> This is great advice. The further you can get on your own dime will save you equity and get you better terms when you really do need capital investments. Early on, the biggest expense will be your time.

</comment></comment><comment><USER17> Hi certainstartup. Please reach out to me if you want to have a deeper discussion. Notes:

1\. Be certain that you want to raise capital. By raising you're irrecoverably giving up leverage to investors. You will always be beholden to investor expectations going forward. If you're a mission-motivated founder, you will inevitably reach a point where investor motivations will be at odds with your motivations. This isn't necessarily a bad thing, but it's important for you to go into this eyes wide open.

2\. If this is your first round, this will likely be the point where CEO, board, shareholder rights get defined (e.g. what needs to happen to approve an acquisition? fire the CEO? issue more shares?). Make sure you have a good legal team that can help walk you through all of the minor consequences of the structure.

3\. Make sure you're educated regarding share classes and different treatment for classes. Make sure you understand "preference" and "participation". Make sure you're getting favorable terms on these points. Having a good legal team helps a ton here.

4\. The best way to create leverage is to increase demand. Optimize your process so that it culminates in an auction dynamic - where multiple interested parties are bidding to win. This requires intentionally shepherding parties through a gated process, pulling back people who are trying to move too fast and pulling forward laggards.

Having been through this several times, I've been bitten by all of the above. I'm happy to have a deeper discussion if you would like. Please reach out to me at advait at goguardian dot com.

</comment><comment><USER18> Find a way to get to profitability before raising, even if you're only making $1.

</comment><comment><USER19> Yoo

Ok.. first thing you'll hear from blogs, interviews on Youtube, and everyone else in the echo chamber is about growth. Growth growth growth growth.

Just for a moment, forget growth.

Think about engagement. What VCs and investors realllly care about is stickiness ie how often are people using your product. This is true across B2B + B2C. (yes there are examples of low touch point high revenue businesses, but let's forget about those for a second).

What you want to prove in the early days is how good your product is for a small subset of people, not how good your product is to everyone. (this is where the (in)famous saying "do things that don't scale" comes from.. partly anyway)

Instead of saying to an investor that you acquired 100k users.. tell them:

\- 30% of our users acquired in the first 7 days return back to the platform every day for 10 days \- 20% of users acquired within 3 days of a company key event sign up and make a 'revenue' transaction \- 20% of users refer their friends with a 80% conversation rate \- time on site is X minutes and users typically return 4 times per day \- social media / community engagement on your main channels \- site traffic is split 30/70 new vs returning users

There's that thing that Paul Graham from YC said to Brian Cheksy from Airbnb. "Go out and find 10 people that absolutely love your product, and go from there"*

Also.... one of the biggest pieces of advice with VCs I can give you:

Make sure you set the agenda and set deadlines to work to.

Don't let investors lead this.

This is your business, don't suffer fools or people that are 'too busy'.

*Might not be an exact quote :).

</comment><comment><USER20> This is one of the least asked questions that I learned today. If you are raising a seed round from VC, please check the size of fund. If you can make a case of return 20% of their fund during the exit after series A, go for it. e.g. you have raised $1m from $10m fund for 10% equity and your company gets an acquisition offer for $20m. The VC would favour your acquisition because you would contribute 20% to his fund. However if you raise $1m from a $100m fund, the $20m exit wouldn't excite your VC and instead he would ask you to raise a bridge round and push you to aim for $100m exit in the future. A 20m in hand is better than $100m in bush.

P.S: I am not suggesting you to become short sighted at series A but it was a context to help you understand my point. Just wanted to remain grounded and help you understand with achievable targets.

</comment><comment><USER21> Prepare for the process to be draining, frustrating, and to take a lot longer than you expect. As the owner/operator of your start-up, it's like adding another job to your list of responsibilities. Also prepare yourself for a hundred no responses to get to a yes. Eating rejection is more often than not a hefty part of the process. Try to not get upset at the rejections, waste minimum amounts of time on that aspect; spending unnecessary amounts time dwelling there is dangerous to your start-up, it'll eat your valuable time and mental health (which is already being heavily taxed by the start-up itself).

<comment><USER22> So it's like going to job interviews! :)

</comment></comment><comment><USER23> Some basic things I've learned along the way:

1\. be authentic. 2\. don't sell. 3\. explain your vision of the future in simple terms

</comment><comment><USER24> Make sure you actually need capital. When I worked on my startup I noticed I was more busy finding investors than building the software. One day I was done with spending so much time on funding, and started to spend my time programming on the actual project, which was a great relief.

</comment><comment><USER25> For my startup, I went to hundreds of VC Web sites, saw their stated interests in leading edge, disruptive, etc. technology. I sent hundreds of pitch decks, polished to close to perfection, following lots of rules, e.g., only 10 foils, large fonts, total of only about 300 words and other alternatives, etc.

My foil decks promised everything short of Pluto in the solar system. From the VCs I heard back next to nothing. Net, I wasted huge amounts of time.

So, I had to ask, what was missing from my pitch? It became clear: The VCs want most of all traction, significant and growing rapidly. They want more, but traction is the biggie. So, they want at least real users, hopefully real revenue, hopefully real after tax earnings. Basically the VCs want to buy part of an airplane already at 5000 feet up and at Mach 0.5 and gaining altitude quickly. They wouldn't buy into a Boeing 787 still on the ground.

But for information technology startups, the world has changed a LOT since the start of Google, Facebook, Microsoft, Cisco, Apple, etc. Now, for lots of startup opportunities, by the time you have the traction the VCs want, you can very well no longer need the VCs check and certainly not want the VCs term sheet, BoD seats, or much of anything else.

VCs are not for all startups. My joke is that the VCs are looking for traction significantly high and growing rapidly where there are five co-founders, each with credit cards maxed out, and each with a pregnant wife.

True, some startups will need a big shot of equity capital, but that's nearly impossible since such a startup will have a tough time getting the traction for an equity check for even 10 cents.

IMHO, at this point, information technology VC is a goofy thing that has to find some really strange situations. Instead of strange situations, now often or usually, a startup with the required traction won't need or want a VC equity check.

One way to handle VCs at low effort is to follow the Hollywood advice, "Don't call us. We'll call you.". Really, if your startup has the traction the VCs want to see, then they might notice you and call you. So, get on with your work. If some VC calls, maybe listen. Otherwise waste no time contacting VCs.

</comment><comment><USER26> Oh man, where to begin. Here are a few things I learned the hard way from my first time fundraising in 2011 (3 months full time, a few all nighters working on the deck, closed $1M+).

It's a power game. Every single aspect of it. The typical situation is they have power over you because you need money and they have money. Your job is to convince them that they need you more, because money is easy to find but future billion dollar startups are actually quite rare. In order to do this, you need to create a reality in which they are losing out on a limited time opportunity by not meeting you and then handing you a big check.

Borrowing a term from poker, the best way to walk out of the meeting with a firm commitment or big check is to walk in with "position" on the investor. Ways of having position include: \- warm intro from another investor who already put money in \- any chart showing a core metric (revenue, users, deals) going up and to the right \- any press

Basically anything that conveys a sense of momentum. Momentum is a huge part of the game as well. It's critical to create a sense of urgency. Investors are pack animals. Getting the first close or "lead" is at least half the battle. After one person commits, it becomes much easier for others to fall in line due to social proof. Do whatever it takes to generate momentum and communicate that to investors. The train needs to be leaving the station by a certain date, are you in, yes or no.

Try to find a good candidate for a lead investor. You _could_ do a "party round" of $1M with a ton of people all writing smaller checks from $25-200k. But in my experience this is a bad idea, because none of the investors have enough skin in the game to really dig deep and help you out if the shit hits the fan. And if this your first funded startup, the chance of shit hitting fan approaches 100%. You want at least one investor who is deeply, deeply committed to your vision and most importantly to you. This will help you navigate pitfalls and avoid a situation where, say, you raise a convertible note (debt) and after 1-2 years when you're still trying to find product market fit, some disgruntled investors try to ask for their money back.

Don't use a convertible note with a due date. Use a SAFE if you can get away with it. If the investor doesn't want to use a safe, get a very specific and detailed explanation why.

Do treat all the investors with respect. But don't let them get away with power tripping. This is one thing infuriatingly common especially among big names. If you take their shit, they won't respect you. But you also can't blow your cool. Call them on it, explain that you're serious and don't want to play games, and be prepared to walk out of the meeting if necessary. Don't walk out unnecessarily or be a dick yourself. But be prepared to show you mean business, and if they don't, then you have better things to do.

Do listen to investor feedback, especially if they are ex founders or have domain expertise. But don't lose sight of your vision or try to shift your entire strategy bass on one person's feedback.

Make sure you take time for self care and have strong support networks during fundraising. It is very emotionally intense to pitch your heart out, the stakes are high, and not everyone is nice. Take time and space to recover and recharge emotionally. Remember that you're selling investors first and foremost on you and your team. And mostly you. If you seem tired or stressed, or anything other than happy, alert, comfortable, and crushing it, that is a bad signal.

Don't be afraid. Remember why you're doing what you do. Realize that even if you get destroyed in the next pitch meeting, nobody is going to die. You'll sleep it off. Tomorrow is another day and another chance to try again. Every pitch is an opportunity to practice and to improve your craft. Celebrate every success, even if it's just learning one tidbit from a VC who decided to pass. And embrace the failures, because you will have them. It hurts to get rejected when you have so much on the line. But if it was easy to close seed rounds then everybody would be doing it.

Don't worry too too much about valuation, at least compared with investor quality. Better to have a committed lead investor who backs you 100% at a $3M valuation than some rando coming in $5M.

Finally, after you close the big bucks, shred your pitch deck and don't use it to inform your next product plan. The exciting part of the pitch deck is typically big picture vision stuff. Don't lose sight of that, but focus on the next step of product. Go back to being scrappy even with $1M in the bank.

Good luck!

</comment><comment><USER27> There is a book out there that is short and underrated:

[https://www.amazon.ca/Funded-Entrepreneurs-Guide-Raising- Fir...](https://www.amazon.ca/Funded-Entrepreneurs-Guide-Raising- First/dp/1491940263)

</comment><comment><USER28> Be wary of raising too much too fast/having too many investors to deal with early on.

</comment><comment><USER29> Make a good pitch [https://blog.ycombinator.com/how-to-pitch-your- company/](https://blog.ycombinator.com/how-to-pitch-your-company/)

</comment><comment><USER30> You're better off spending the time improving your product.

</comment><comment><USER31> First, read "Pitch Anything" by Oren Klaff[1]. No seriously, read that book cover to cover, you can do it in a weekend.

Next do everything @coffeemug said :-)

[1] [https://www.amazon.com/Pitch-Anything-Innovative- Presenting-...](https://www.amazon.com/Pitch-Anything-Innovative-Presenting- Persuading/dp/0071752854)

</comment><comment><USER32> * Know your audience so you can use appropriate language

* Think about it from their point of view. How clear is your message?

* Take advice on how much to ask for so you don't sound too green

* They will care about ROI but also the quality of the team. Theory is great but only a good team can deliver the theoretical ROI.

* Try and back up claims with facts e.g. We have a market of X billion - according to whom?

</comment><comment><USER33> Focus on sales growth to the exclusion of (almost) everything else. If you focus on the product, change the features to increase sales. If you hire a new tech person, you do it because you need a feature that was asked for by a customer. As you set prices, aim for the highest revenue growth.

</comment><comment><USER34> Anything other than a yes, is a no.

<comment><USER35> Anything other than a signed a term sheet with wired funds is a no.

</comment></comment><comment><USER36> Read everything in the fundraising section here: [https://www.startupschool.org/library](https://www.startupschool.org/library)

</comment><comment><USER37> If you are in EU consider the new ICO rules... Up to 8 million within eu countries.

Have MVP if you want to limit dilution.

Draw a small salary... Don't work for free.

<comment><USER38> _If you are in EU consider the new ICO rules... Up to 8 million within eu countries._

What rules? Could you elaborate?

</comment></comment><comment><USER39> I suggest you reading Venture Deals.

</comment><comment><USER40> Ask yourself:

1\. Do you really need an investment.

2\. GOTO step 1.

</comment><comment><USER41> Startup School had a video about it last week. By Geoff Ralston.

[https://www.startupschool.org/videos/48](https://www.startupschool.org/videos/48)

My tl;dr:

\- be honest, don't exaggerate facts

\- find a shared vision, find the right investor

\- get it done and get back to work

</comment><comment><USER42> Don't

</comment><comment><USER43> Apply to YC.

</comment><comment><USER44> I run a $30M early stage venture fund. Here's what I wish first-time founders knew:

• Don't bother cold emailing me, you'll end up straight in the trash. Don't even think about reaching out on LinkedIn, I open it once a month to mark everything as spam. Instead, find someone we know in common and ask for a warm intro. I receive way too much inbound, and a referral from someone I trust is one of the best ways to skip the line.

• Have a good deck, and make sure I see it before I talk to you. For the majority of new startups, a deck is the best way to share your story, and I will make my decision of whether to spend time talking to you in person while reviewing a deck.

• Understand what I'm looking for: (1) solving a real problem that matches my investment thesis (look it up on our website), (2) a team that's worked together before and is uniquely qualified to solve this problem, (3) a market that has the potential to build a billion-dollar monopoly, and (4) a real business model and a realistic path from zero to a billion.

<comment><USER45> This almost reads like a parody of the entitled God-complex VC mentality.

I wonder how long it will be before people feel some shame advocating for overtly classist and exclusionary network-only policies in public at least.

<comment><USER44> Getting into YC is a great way to jump-start your network. Ultimately, having a strong network is key to building a successful venture business. Expecting otherwise is unrealistic.

VCs aren't charities. Seed investing is a business with very high quantity and low quality at the top of the funnel. Any investor who tells you they aren't giving more weight to a lead that comes recommended vs. one that doesn't is lying to you. It could be as simple as 5min to review the initial pitch vs. 1min.</comment></comment></comment>


Why you should use make and write Makefiles - <AUTHOR> http://andreypopp.com/posts/2013-05-23-why-you-should-write-makefiles.html

<comment><USER2> On Windows you have "nmake" that comes with VS:

[http://msdn.microsoft.com/en- us/library/dd9y37ha(v=vs.71).as...](http://msdn.microsoft.com/en- us/library/dd9y37ha\(v=vs.71\).aspx)</comment>


Sugar Coma - <AUTHOR> http://www.slate.com/articles/technology/technology/2013/07/candy_crush_saga_the_most_addictive_game_since_angry_birds.html

<comment><USER2> This article doesn't even mention the part that prompted me to quit fairly quickly - the overbearing virality. In order to advance, you must convince other people to "assist" you. If you aren't willing to bully your friends into playing the game, you get stuck after a few levels.</comment>


What does the future of software engineering hold for engineer not into ML/AI? - <AUTHOR> Is the transition from Software Engineer to ML / AI engineer necessary to sustain in the industry in the near future? Will it become mandatory for engineers to learn ML/AI for getting higher pay. <comment><USER2> I don't see this to be important, definitely there is a growing demand for researchers and engineers but that doesn't change the fact that there is way to much hype that's shadowing a lot of the good things with software engineering in general! I myself was very much surrounded by the hype untill I stopped looking through a key hole. There are amazing things coming up, serverless applications exploiting services like Lambda, Progressive Web Apps with the availability of frameworks like React and Vue (My personal favourite), Decentralised applications.

</comment><comment><USER3> AI won't be able to replace most engineers until general AI is on the horizon, probably a long time from now</comment>


Y Combinator Challenge #9 - Photo/video sharing services - <AUTHOR> http://astartupaday.wordpress.com/2008/07/31/y-combinator-challenge-9-photovideo-sharing-services/

<comment><USER2> Okay, I'm seeing all these posts here, is this guy actually creating anything or is he just talking about what he would do about these startups?

<comment><USER3> Hi Dave - There are actually two sides to this project. A Startup A Day is a brainstorming excercise where myself and occasionally others throw out ideas that we think might be interesting. As you might expect from any brainstorming excercise, most of the ideas typically have some major flaws and probably aren't worth investing the time needed to do a prototype or beta (especially when you have a fairly demanding full-time job).

However, a few months ago we kicked off a new site called "A Startup A Week", which is a video series where we brought together small teams and gave them one week to build a prototype. At the end of the week, the teams would then present their ideas to a panel of judges (including angel investors). We're still playing with the format, but the ultimate idea is that the best ideas generated from the Startup A Day site would then feed into the Startup A Week show. Full disclosure - while the Startup A Day site is my own personal site, the Startup A Week show is sponsored by Microsoft (where I work) and features sites built primarily (but not exclusively) with MS web technologies.

<comment><USER2> Thank you very much for clarifying that :) And I Think your "Startup A Week" idea is great.

</comment></comment></comment><comment><USER4> Wow, that actually sounds really good. Scrapbooking is big business and this could really generate some cash.

</comment><comment><USER5> Convert Blogs to books!

all those baby blogs are crying out for it!

</comment><comment><USER6> FWIW it's in our model...</comment>


The tech world rejoices: A Congressman who can code - <AUTHOR> http://www.cnet.com/8301-13739_1-9892829-46.html

<comment><USER2> Is this actually a first? I was under the impression that Zoe Lofgren (D-CA) also has some basic geek skills. I might be wrong though.

<comment><USER3> There are also two other physicists already in congress, Rush Holt (D-NJ) and Vernon Ehlers (R-MI).</comment></comment>