C – Preliminary C2x Charter - <AUTHOR> http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2021.htm <comment><USER2> This is cool!

I'm a pretty hardcore C programmer (been using it as my absolute main and favorite language for over 20 years), yet I find it hard to come up with some wishes for what I'd like to see.

Not sure how to interpret that, perhaps it's just indicative of a certain ... conservatism common in old people? :) Scary thought!

To be brutally concrete, I sometimes wish I could write someting like this:

        do {
          const bool flag = do_something();
          ...
          ...
        } while(!flag);

That'd be very useful, but of course in current standards it's not possible since 'flag' isn't valid outside the scope it's declared in. So now we have to pre-declare 'flag' before the loop, breaking const-cleanliness too of course. This is obviously not a show-stopper, it's a minute thing. But it would be so nice! :)

Some support for automatic type inference would be nice, since most right- hand-side expressions have a type anyway it would be cool to be able to write

        auto x = 3;

and have the type of 'x' be 'int' since that is the type of the literal '3'. Of course re-using "auto" like this would break their guiding principle, but it would look great (and, I think, somewhat mimic what C++ has done to that keyword).

Does anyone have some better ideas?

<comment><USER3> > Does anyone have some better ideas?

gcc's C extensions have some good ideas [1], particularly:

1\. typeof(e) operator: great for use in macros

2\. labels as values: used in just about every language interpeter

3\. statement expressions: great for use in macros

4\. fixed point types: who wants to hack their own fixed precision arithmetic?

5\. vector extensions

6\. arithmetic functions with overflow checking

I think all of the above would make good additions to the C standard.

[1] [https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html](https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html)

<comment><USER4> TR 18037¹ defines fixed point arithmetic, but it does not seem well supported.

¹ [http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1169.pdf](http://www.open- std.org/JTC1/SC22/WG14/www/docs/n1169.pdf)

<comment><USER5> As far as I can tell, a programmer can't specify the number of fractional bits. The type "unsigned short _Fract", for example, has a number of fraction bits determined by the implementation within limits imposed by the standard. There's no way to ask for a type with, for example, 12 integral bits and 4 fractional bits.

Do hardware constraints make, for example, an 8.8 bit format easier to handle than a 12.4 format?

Compare Ada's fixed-point types, which let you specify the range and delta:

        type Fixed is delta 0.0625 range 0.0 .. 4095.9375;

<comment><USER6> > Do hardware constraints make, for example, an 8.8 bit format easier to > handle than a 12.4 format?

Sometimes they do. For example, the ARMv7 DSP extensions support signed Q0.31 and signed Q0.15 arithmetic much faster than any other fixed-point format.

</comment></comment></comment></comment></comment><comment><USER7> C needs to cut down on the instances of undefined behavior. Mostly these should become implementation-defined with some restrictions that the implementation should do one of the expected things.

For instance, if you overflow an integer, the compiler should not be allowed to assume that code branch is unreachable, or to conjure nasal demons. Instead the result should be an implementation-defined integer or a jump to an implementation-defined exception handling routine.

C should be predictable!

<comment><USER8> > C needs to cut down on the instances of undefined behavior

As someone who's worked on compilers a good bit, I disagree (and this is my favorite meme to argue against lately). You need that undefined behavior for performance.

> For instance, if you overflow an integer, the compiler should not be allowed > to assume that code branch is unreachable, or to conjure nasal demons.

You need to be careful to not destroy loop trip count detection.

> Instead the result should be an implementation-defined integer

Not good enough. Loop trip count detection destroyed.

> jump to an implementation-defined exception handling routine.

Unacceptable for performance. Probably a 3x loss.

<comment><USER9> I'm curious to learn more about your position -- have you written it down in more detail elsewhere? Rust doesn't have this kind of undefined behavior AFAIK? Are you arguing that C and C++ should have it, but Rust doesn't need to even though it's competing perf-wise with C and C++ in this space?

<comment><USER8> > Are you arguing that C and C++ should have it, but Rust doesn't need to even > though it's competing perf-wise with C and C++ in this space?

Yes. Other languages like Swift generally don't need it either.

The big wins from exploiting undefined behavior in C come from mistakes that C's designers made in 1978: signed int being the easiest thing to use for loops over array indices, the any-pointer-can-alias-anything-else style, the uselessness of const for optimization, and null pointers. Rust (and e.g. Swift, for the most part) made none of these choices, and so they can reap the benefits of aggressive compiler optimizations without the undefined behavior.

(Digression: I can't blame C's designers for these mistakes, of course: it was 1978! But I think that in 2016 we should just accept that there were things we didn't do right in 1978, because we didn't know as much then as we do now. In most other engineering industries the idea that we made mistakes 35 years ago and that modern designs are better is uncontroversial, but for some reason in computing we have rose-colored glasses for the early days of Unix. Everyone wants to blame the compiler authors because they don't want to admit C has flaws!)

These issues don't necessarily apply to other languages. I believe that if you design a language optimally you don't need to fall back on undefined behavior to get good performance. But I don't believe C is that language, and I think attempts to dial back undefined behavior without changing C are missing the point.

<comment><USER9> Wow, if what you say is true, that's even more of a benefit for a language like Rust. Memory safety is awesome, but keeping the same performance while removing undefined behavior is huge.

Another question: how do "unsafe Rust" (ie. Rust inside unsafe blocks) and C compare in this sense? If satisfying the borrow checker for some bit of code is too hard, is writing in unsafe Rust better/safer than C?

<comment><USER8> Currently, the aliasing rules for unsafe code are "any pointers can alias"—i.e. no type based alias analysis (TBAA), a.k.a. strict-aliasing. (This is because LLVM has no concept of TBAA at the IR level; it's something the frontend supplies explicitly.) There is an open question as to how much this will affect our ability to perform alias-based optimizations, given that a lot of our primitives are implemented with unsafe code under the hood. I'm optimistic that it can be solved (although some others on the team, like Niko, are less optimistic).

</comment></comment></comment></comment></comment></comment><comment><USER10> My #1 desired feature for a future C standard is statement expressions, like the GNU extension. They make it much easier to avoid issues like multiple evaluation when writing macros. Typeof would be nice too - combined with statement expressions, it adds some capability for type generic macros without having to explicitly list all the types ala _Generic (which was standardized in C11 but which nobody uses).

More broadly, while I'm not sure if it really fits in C, it would be cool to see some kind of lambda function support, along the lines of Apple's "blocks" extension.

<comment><USER11> Agreed on both statement expressions and typeof; those seem like they could and should be standardized exactly as currently implemented.

I'd like to see blocks/lambdas standardized, but I'd want to see a second implementation first. I also hope for better properties than those of the Apple blocks extension; I realize C does manual resource management, but the lifetime issues in blocks seem particularly worse even by C standards.

</comment></comment><comment><USER12> __attribute__((cleanup)) please. It's used by systemd now and is supported by gcc and clang. It makes a real difference to code, avoiding masses of cleanup along error paths.

<comment><USER13> When you start needing/wanting stuff like that, wouldn't it make sense to just use a C++ compiler and a simple RAII type or two?

<comment><USER12> Really it doesn't. If you add C++ to the mix, you lose the clear relationship with code as written to what runs (is this operator overloaded?), and you have an open invitation for people to attempt to use more and more C++ features, many of which are not well thought through.

Instead of moving to C++, I'd rather allow mixed objects in a more sensible language (eg. linking with objects written in OCaml).

<comment><USER14> I'm not convinced by this argument. It's perfectly possible to stick to a well defined subset of C++ if you're scared by certain features. Just write a coding standards document and enforce it.

Operator overloading is very important for generating the fastest code possible, too. It would be hard to get the benefits of a library like Eigen which can automatically use SSE to optimize maths expressions in C.

</comment></comment></comment></comment><comment><USER15> It would be nice if they incorporated some suggestions from the Cerberus project to make it clearer what is defined and undefined behavior.

[https://www.cl.cam.ac.uk/~pes20/cerberus/](https://www.cl.cam.ac.uk/~pes20/cerberus/)

<comment><USER16> [http://www.open- std.org/jtc1/sc22/wg14/www/docs/PreLondon201...](http://www.open- std.org/jtc1/sc22/wg14/www/docs/PreLondon2016.htm)

>N2012 2016/03/10 Sewell, Clarifying the C Memory Object Model

>N2013 2016/03/10 Sewell, C Memory Object and Value Semantics: The Space of de facto and ISO Standards

>N2014 2016/03/10 Sewell, What is C in Practice? (Cerberus Survey v2): Analysis of Response

>N2015 2016/03/10 Sewell, What is C in practice? (Cerberus survey v2): Analysis of Responses - with Comments

</comment></comment><comment><USER17> I don't understand why these committees are so dead set on maintaining backwards compatibility with existing code when most compilers will support flags for compiling with old standards anyway. As long as you don't break binary compatibility I really don't see the issue.

<comment><USER18> Because your new code wants to use old-code libraries.

<comment><USER17> But if you maintain binary compatibility can you not just compile the old code with --std=c89 and then link the new code compiled with --std=c2x ?

<comment><USER19> Unfortunately, because of header files, no.

</comment></comment></comment></comment><comment><USER20> One minor thing that should hopefully be considered... a %b/%B conversion for printf et al.

It's useful to print binary representations of things (debugging, conversion, etc...). A number of libc implementations support it as an extension. Forcing people to re-implement it outside of printf is a bit obnoxious considering how simple it is, and that there are already hexadecimal and octal conversions.

<comment><USER5> And "0b11001001" constants.

</comment></comment><comment><USER5> Old-style (non-prototype) function declarations and definitions have been officially "obsolescent" since 1989. Perhaps C2x can finally get rid of them.

<comment><USER21> This would break the mandate of allowing C90 programs to run "largely unchanged" (see text)

<comment><USER5> True, but none of the 14 listed principles is absolute. C2x compilers probably would (and could be encouraged to) accept old-style declarations and definitions in some non-conforming mode. They could even be accepted in conforming mode as long as the compiler warns about it (only a diagnostic is required).

</comment></comment></comment><comment><USER22> I was curious about this statement:

> The Standard is currently written in troff, which is subject to increasing > bit rot as the tools for formatting it evolve.

What exactly is bit-rotting? There are multiple maintained troff's out there, and if they are breaking backward compatibility regularly it's news to me.

<comment><USER23> Using formats which became less popular and well supported can be considered bit-rotting.

For example, having .PCX files in some project today instead of .PNG could be considered a form of bit rotting, because less and less tools support .PCX

</comment></comment><comment><USER24> I'd like a standardised function to clear a block of memory that is guaranteed to not be optimised out, and a constant time compare function.

</comment><comment><USER20> Another minor thing I think belongs in the C standard is _bswap_. For such a common operation that's necessary for portable code, I personally don't understand why it hasn't been defined in either the C or C++ standard.

Currently, the only compiler I'm aware of that optimizes a _bswap_ correctly is LLVM, which leaves a lot of code in the cold Aside from requiring people to write their own _bswap_ , which is fairly maligned [1] for good reason, It leaves out a reasonably important optimization or potentially requires excess maintenance (platform libs, intrinsics, etc...) for people who do need portable code (the main reason for _bswap_ ).

I think languages are starting to take the place of platform independent interfaces, and my personal opinion is that _bswap_ is fairly low hanging fruit. Given that one of the stated goals of C is portability, I think it fits well within the mandate.

[1] [http://commandcenter.blogspot.com/2012/04/byte-order- fallacy...](http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html)

</comment><comment><USER25> Remove VLAs from the language. They were a mistake.

<comment><USER26> They were made optional in C11. Compilers for DSPs or whatever where VLAs aren't practical don't have to implement them.

Just because an _optional_ feature is impractical on a few niche architectures doesn't mean it's a mistake.

<comment><USER5> Yes, but that could have been addressed by making them optional for freestanding implementations but mandatory for hosted implementations.

Are there any hosted systems (systems that can support the standard library) on which VLAs are difficult to implement?

<comment><USER26> Not as far as I'm aware. POWER, x86(_64), even Itanium all just bump a stack pointer[1]. SPARC has a funky stack, but I don't know enough about it to say how hard VLAs would be. (It's a darn cool architecture though. I wish acquiring a modern SPARC processor wasn't ridiculously expensive.)

The thing that makes VLAs hard to implement is that on some embedded and special purpose processors the stack is actually a physical, fixed-size location on the chip. I recall, but can't seem to find, some architecture that didn't use an explicit stack pointer.

1\. Itanium has 2, but for purposes of VLAs it may as well have a conventional stack.

</comment></comment></comment></comment><comment><USER27> All I really want is C89 with stdint.h and safe(r) string handling routines (strncpy, snprinf, etc.). Hold the VLAs and the stdbool.h and the what-have- you.

<comment><USER28> (a) [https://randomascii.wordpress.com/2013/04/03/stop-using- strn...](https://randomascii.wordpress.com/2013/04/03/stop-using-strncpy- already/) (b) Can't you just use the parts of c99 that you want.

<comment><USER27> (a) I'm aware, but thanks.

(b) Use? yes, but only when I'm not using a library that relies on the parts I don't want. Implement? not really, since users expect their compilers to conform to the standards. Rely on for portable code? no, since not all compilers support C99 and many of those that do actually only support some subset.

For now, I'm using C89 with my own safe string routines and a configure script to generate the bits of stdint.h that I need.

<comment><USER29> which compilers aren't supporting C99 now? I keep hearing this argument but I haven't had that issue at all in recent years.

<comment><USER27> MSVC and a lot of embedded compilers. Not to mention, I still have to support systems that are using rather old compilers.

<comment><USER29> I've got 25+ years experience in realtime/embedded work and I have to disagree with you there. all compilers I can think of have been C99 compliant for a number of years now. MSVC is compliant now also.

<comment><USER27> Hmm, that's all news to me. When did MSVC add full C99 support? I totally missed that. Also, which compilers are you using for your embedded work?

Anyway, like I said, I'm often stuck supporting older compilers, too. So it might still be some time before I can "upgrade" to C99.

</comment></comment></comment></comment></comment></comment></comment><comment><USER30> What about templates for C? Has this been proposed before? I'd love to write function templates, and templated structs would make implementing generic code so much easier and cleaner.

</comment><comment><USER31> I'd just like something better than _Generic and (void *) as our only ways to do generics. That's my one feature. Too bad that's not likely to happen, ever.

</comment><comment><USER32> The part where I see that after 1999 events have finally unfolded such that internationalization is only NOW considered important is... disappointing.

<comment><USER4> Internationalization _was_ considered important for C89… which yielded regrettable inventions like trigraphs and wchar_t.

<comment><USER32> Umm... wchar_t was not part of C89. It was added later. I think it was a supplement rolled out half way between C89 & C99, mostly as a consequence of a lot of platforms embracing native unicode interfaces (I seem to recall it was released just as Unicode 2.0 was coming out and making it so fixed width glyphs were no longer a thing).

...and digraphs & trigraphs had to do with different terminals/text editors that didn't have keys/characters for certain language symbols. Last I checked it wasn't really about internationalization, but rather the rather insane variance of character sets just for english (like EBCDIC).

<comment><USER4> Really? I'll have to check my paper copy at home, but Wikipedia seems to agree, with a quote from the standard: [https://en.wikipedia.org/wiki/Wide_character#C.2FC.2B.2B](https://en.wikipedia.org/wiki/Wide_character#C.2FC.2B.2B) Maybe it was in C90 (ISO) but not C89 (ANSI)?

For trigraphs see the Rationale at [http://www.lysator.liu.se/c/rat/b.html#2-2-1-1](http://www.lysator.liu.se/c/rat/b.html#2-2-1-1)

<comment><USER32> It's entirely possible I'm misremembering, but I could swear it was in Amendment 1/C95, not in C90. I have this distinct memory about making jokes about how C95 and Windows 95 were both outdated technologies the day they were released. ;-)

I thought C90 was essentially just a reformatting of C89. Interestingly, the ANSI C page agrees with me: [https://en.wikipedia.org/wiki/ANSI_C#C95](https://en.wikipedia.org/wiki/ANSI_C#C95)

<comment><USER4> Ah, got it. C89 had wchar_t, defined in <stddef.h>, but <wchar.h> and <wctype.h> didn't show up until '95, so it wasn't very useful. Hence my vestigial memory of it being a prematurely standardized checkbox feature.

</comment></comment></comment></comment></comment></comment><comment><USER33> support binary literals with 0b prefix. Also include rotate ,count leading zeroes,count trailing zeros and popcount as functions.

</comment><comment><USER34> I've become a heavy user of a number of clang extensions,

      __attribute__((cleanup))
      __attribute__((overloadable))

… are now indispensable to me.

 _Cleanup_ I use for both object lifetime management (when it fits that model), and lock management. Typically a "get access" type of function will take the lock and return the pointer to the object. Then when that pointer goes out of scope the lock can be freed.

 _overloadable_ is perfect for keeping names under control. Consider if you have a bunch of structs for encoding various bit arrays. Maybe 32, 64, and 1024 bit long. Each has functions for working on it, so you either prefix all the functions with bit32_, bit1024_ or you pick a letter suffix, e.g. bitset(), bitsetl(), bitseth() (huge?), and try to make the programmer remember them all. With overloadable functions I get to use the same simple name for the operation and which implementation you use underneath is irrelevant.

I think I'd like to go one step further and sugar up the syntax so…

      variable.func(a,b)  <----> func( variable,a,b)

… but Mr. Stroustrup might call me names. But darn it, sometimes you want to think of your objects in different ways. I'd be using lisp if I wanted everything the same. (Actually, I suppose Kernel, and laughing at the lisp users who think they have uniformity.) It doesn't have to be ".", go ahead an create an "=>" notation if that helps with the ambiguity of structure reference. (No dynamic dispatch here. Just leverage _overloadable_.)

And here is the big one: Thread Safety Analysis. This has the potential to eliminate huge swathes of runtime problems in multithreaded code and even calling convention problems in single threaded code.

In a nutshell, you can annotate your program to make statements about objects. You can say an operation ACQUIRE's an object (takes a lock), and that another operation RELEASEs an object. Then you can declare that other options REQUIRE that the object be in the ACQUIREd state. There is more, such as declaring that a the execution is currently in a state and then restricting its ability to perform operations based on that.

The current implementation is probably bit rotting in gcc, and the clang version seems to be missing some important bits to making it useful. The C++ end of it apparently works for Google with their Android coding conventions, but the C end of it doesn't quite do it for me. I think with perhaps letting a function declare that its return value is ACQUIRE()d I might be able to put it to use. (And fixing the bit where it doesn't play well with __attribute__((cleanup)) ).

But the working group has a '2' in the name. We have 4 years.

And one more huge one: _PLEASE_ add a paragraph to the spec that says:

 _" undefined" is NOT license for some language lawyer compiler writer to kill your dog, burn your garden, erase your disk and return 42 from the main program._

Undefined should mean "we understand different architectures and compilers might prefer to do this differently, implement something SANE and warn the user that they are on squishy ground".

<comment><USER34> If they decided to hand out flying ponies…

• blocks are pretty spiffy.

• nested functions, by which I mean I don't need access to the parent's variables, I just want to tuck this little function inside the namespace of my existing function because darn it, it's two lines long and I can give it a tiny name, and I don't have to stick it above my giant function comment header where I can't see it while I'm in the code that is using it. I just want to abstract these two lines that I need to do three times in this function. gcc has these, clang thinks it's hard in their world.

<comment> david-given gcc nested functions _do_ have access to their parent's variables. Obviously only until the parent exits --- they're not closures.

I would love for this to be in the standard, particularly if they come up with a nested function literal syntax. Having them would make things like mutation callbacks and foreach() so much cleaner.

<comment><USER35> Nested functions are convenient, but when you take the address of a nested function that refers to surrounding variables, GCC puts a small trampoline function on the stack. To do this it has to disable the no-execute flag on the stack, which makes it significantly easier to exploit stack overflow vulnerabilities in your program.

Since the implementation is somewhat complex and system-specific, depends on memory that is both writeable and executable, and requires disabling security features on modern OSes, I doubt GCC style nested functions will make it into the standard.

</comment></comment></comment></comment><comment><USER36> Namespaces please!

</comment><comment><USER37> (f) Make support for safety and security demonstrable

"Demonstrable" seems to be a bit of weasel-wording there, but for the life of me I don't see how you make C demonstrably safe and secure without ending up with something that is almost, but not quite, entirely unlike C.

<comment><USER8> Well, "safe" and "secure" can be relative terms, and C definitely could be _safer_. For example, null pointers could be defined to trap and -fwrapv could be blessed by the Standard as a mode that all compilers must support.

I agree with you of course that C will never be memory-safe either in theory or in practice while still remaining C. (The same goes for C++, despite popular belief.)

</comment></comment><comment><USER38> Cyclone-style never-NULL pointers and bounded pointers would be interesting, especially if completely optional. They could be incrementally added to sub- trees of a risky codebase (like a parser) but not poison your ultimate ability to do pointer arithmetic.

</comment><comment><USER39> I'm sorry but open-std is a terrible, terrible name.

</comment><comment><USER40> If I could change C, I would look closely at Go.

To be more precise, I would

\- Quit separating definition and implementation (.h & .c vs. the singular .go)

\- Implement multiple returns

\- Replace #include with something a bit closer to Go's import (Package name and in-body identifier are decoupled)

\- Methods on any user-defined type

\- Finally, something namespace-like because

      library_thing_return_t *library_thing_doing_something_else(libraty_thing_param_t *in)

seems unsustainable to me.

<comment><USER41> .h and .c separation is important for shared libraries (you know, that thing that you can't really do in Go). I would like it if headers had some stronger requirements (since you can put any code in a header, which is quite bad).

<comment><USER42> > .h and .c separation is important for shared libraries

No it isn't. That's a completely orthogonal issue. The compiler is perfectly capable of generating the equivalent of a public header if the implementation has a way to specify visibility.

<comment><USER43> It's a bit more than that. You'd have to compile a lot of fluff in to the ELF. We'd be talking something closer to Windows COM, which allows extracting IDL from a type library.</comment></comment></comment></comment>


Microsoft's Edge browser is crashing if you have Google set as default search - <AUTHOR> https://www.theverge.com/2020/7/30/21348923/microsoft-edge-crash-address-bar-google-search-browser-issues <comment><USER2> What this probably shows is, that Edge makes a difference between search engines or websites and how it handles them, which it shouldn't. They should instead be rendered like any other website. There is a chance, that it is a mere coincidence, that it happens on the Google search engine website, but if that is what anyone argues in favor of, I would like to see a technical explanation of what Google does, which no one else does, to justify Edge crashing.

</comment><comment><USER3> This happened to me tonight, but by this morning it was fixed. I had to go back to Firefox for a few hours; I'm still shaking. I'm considering legal action against Microsoft.</comment>


Android Reaches 900k Daily Activations - <AUTHOR> http://www.reastech.org/android-reaches-900k-daily-activations/ <comment><USER2> This is not even the full article, just an aggregated snippet.

The article can be found here: [http://www.informationweek.com/news/mobility/smart_phones/24...](http://www.informationweek.com/news/mobility/smart_phones/240001809)

</comment><comment><USER3> What version of Android, I wonder?

Having a large existing set of users with old versions of Android is one thing, but the fact that a ton of new users are still getting 2.x devices... baffling.</comment>


Ask HN: How do HN comments get negative point values? - <AUTHOR>

I've been on HN for a while now, but I still can't figure out how comments get negative scores. Only upvotes are supported, so what contributes negatively to a comment's score? <comment><USER2> From the FAQ:

        Why don't I see down arrows?

        There are no down arrows on submissions.
        They only appear on comments after users reach a certain karma threshold.

<comment><USER3> Maybe this will be clearer. Downvotes are supported, but only people with a certain karma (I believe its 200 now) are able to downvote to help prevent flamewars and other problems.</comment></comment>


Two Men Charged With Hacking About 120,000 Apple iPads Via AT&T Servers - <AUTHOR> http://latimesblogs.latimes.com/technology/2011/01/two-men-charged-with-hacking-about-120000-apple-ipads-via-att-servers.html

<comment><USER2> are the days of one machine being cracked and then being big news over?</comment>


Giant mysterious empty hole found in universe - <AUTHOR> http://www.telegraph.co.uk/news/science/space/11550868/Giant-mysterious-empty-hole-found-in-universe.html

<comment><USER2> These are the kinds of observations we need to find the gaps in our current understanding of physics.</comment>


Ask HN: Is it weird to do a friends/family round after doing an accelerator? - <AUTHOR> My startup was in the first batch of the Intel Education Accelerator. Our demo day had a bunch of VCs and very few angels. Because of this, it feels weird to me to consider doing a friends and family round — like it's somehow a failure. But none of our other startups in our cohort raised VC money coming out of the accelerator, which makes me wonder if I'm being irrational.
I've spent quite a bit of time talking with VCs that aren't a good fit, often because they want to write bigger checks that we're looking for. I have half a dozen friends and family who have expressed strong/repeated interest in investing, and it would be a lot faster to close a round than courting angels/VCs that I don't know.
Does anyone know what's "normal" for a startup coming out of an accelerator? Would it be a red flag for future investors if we raised from friends/family at this point? <comment><USER2> The most successful company will raise $0, in theory. Raising more money from bigger names is _not_ a metric of success. It's not an indicator that you're going to succeed or not. In fact, it may indicate that your goal is harder, since your product doesn't immediately generate revenue and prove itself to be profitable.

If you want to raise a friends/family round (the size and terms work for you), then do it. Stop thinking about whether your round looks like success or not. Again, you'd be better off if you were cash-flow positive and didn't need to raise at all.

I would say, though, that friends/family rounds are a great way to destroy relationships with friends/family if they're not absolutely loaded. Startups are one of the worst and riskiest investment vehicles, and you don't want someone with < $1M in assets to lose, say, $50k on your startup.

<comment><AUTHOR> Good points, thanks! I'm not concerned solely with signaling (also important to work with investors with relevant expertise and connections, of course), but I would be more reluctant to do a f/f round if it were going to be taken as a strong negative signal in future rounds.

Appreciate your and brudgers mentioning the personal relationship aspect of taking f/f investments. That's definitely a consideration also.

<comment><USER3> If your friends/family want to support you they could offer you free accommodation (living at their place) as long as you work on your startup.

</comment></comment></comment><comment><USER4> The big question to me is not 'what does it signal?' The big question is do the friends and family really understand they are investing in a vehicle where the profits come from spreading risk across a portfolio of companies and all their eggs are in one basket.

Professional Venture Capital understands that and have sufficient capital to diversify their risk. It (hopefully) has the experience to project how much money a company is likely to actually need in order to have a chance at successful startup growth. It will tend to hard push the upside rather than protect against the downside more so than individual investors.

To me, the business decision should be a business decision. Which investors would you choose based on track record and the ability to add value?

Good luck.

</comment><comment><USER5> > Does anyone know what's "normal" for a startup coming out of an accelerator?

Most startups I've seen out of YC get the bulk from accredited investors

> Would it be a red flag for future investors if we raised from friends/family > at this point?

The only true red flag is a product that users don't love or no growth

Amazon's first funding came from Bezos' parents. Friends and family funding won't kill your company

<comment><AUTHOR> This was my sense regarding YC as well, but I wonder about other accelerators, since the vast majority of accelerated startups come out of something other than YC (and I realize that HN skews YC, but hope there are some folks with other expertise to share).

I realize that Bezos and many others have gotten funding after doing a friends/family round; I'm wondering if there are ever red flags associated with f/f rounds, such as if they happen after completing an accelerator.

<comment><USER5> Short answer is investors will question it (they may or may not ask these questions, they will be thinking them) "why did they raise from f/f and not institutions then" "what did those investors who presumably said no know that i didn't" "are they better now?"

but it's not a massive red flag unless there are scary answers to the above qs

</comment></comment></comment><comment><USER6> I think you should take a step back and personally consider it a red flag if, after strong exposure through an accelerator, you're unable to get substantial interest from institutional investors. That's what accelerators are for.

The "checks too big" problem doesn't really fly IMO. If some strangers really want to give you a check for $X million for something that is currently worth $0 million, you should do it. Worrying about maintaining equity is silly, because you can just think of it as reducing future fundraising needs.

Also, if the checks are really too big, surely these professional investors would find another way to make it work with a smaller check, or introduce you to smaller professional investors downstream in their pipeline. Most likely, "checks too big" is their way of letting you down gently.

Do you really want to ask F&F to put money into something that professionals are not that enthusiastic about? They are most likely unsophisticated investors and you risk damaging your relationship with them. Accordingly, your confidence in the startup should be quite high to take their money.

I think the signaling risk is irrelevant. If you take the F&F money, either it will be enough to get you to the next level needed to raise more or it won't. (Or you won't need to raise more, so again it's irrelevant.)

<comment><AUTHOR> Thanks for the candor. If we were the only startup in our cohort not to raise from VCs, I'd certainly have some concerns. I think the accelerator had some flaws (it was their first cohort), and we ended up not actually being exposed to suitable potential investors, which is why no one raised coming out of demo day. You make a good point about introductions to smaller investors — that's certainly something to think about.

I agree that in most cases a startup should open to taking large checks, but we're a bit of an anomaly in that we're a licensing business with relatively light expenses. So we're only looking to raise around $300k, which doesn't make sense for most of the VCs we met through the accelerator. I understand that they have to put cash to work, and that if they prefer a 5x return on a $10M check than a 10x return on a $250k check. With such a small investment, there's basically no chance that we materially impact their fund's overall return.

</comment></comment><comment><USER7> Not that I'm any expert but I would always try to stay away from a "friends/family" round regardless of other factors.

I know it's not what you want to hear but statistically you are setting yourself for trouble. When you can try to prevent the effect of your work from leaking into other areas of life.

</comment><comment><USER8> Yes, it is weird.

<comment><AUTHOR> Thanks for weighing in! Are you a funder, entrepreneur, or other?

<comment><USER8> I'm just a dude who likes to build simple web apps. I only use the term 'entrepreneur' when someone has had significant impact.

I don't think you should worry about 'what is weird', try to do what you think best regardless of how it may look.</comment></comment></comment>


Gdgt raises $3.2m in series A round - <AUTHOR> http://blogs.wsj.com/digits/2010/04/07/gdgt-raises-new-financing-with-new-concept/

<comment><USER2> Interesting. I wonder what they are going to use this money for? It doesn't seem like the website itself should be that big of a drain on their initial $500K fund.

New feature coming?

<comment><USER3> They have 18+ staff, and are still hiring. Great people are expensive.

<comment><USER2> Wow, I didn't know the staff was that large. Thanks for the clarity; I can definitely see how talent can get expensive...

</comment></comment></comment><comment><USER4> GDGT is a decent site, but is it really worth investing in? Maybe I'm missing something, but is it that different from Amazon user reviews?</comment>


Why businesses fail at machine learning - <AUTHOR> https://hackernoon.com/why-businesses-fail-at-machine-learning-fbff41c4d5db <comment><USER3> This article really resonates especially cooking innovation vs cooking appliances innovation analogy .

I've been working with a buddy on some analytics service products for biotech/life sciences (one is called Yukon Data Solutions). What we've found looking at other products in the space is they often require the customer to focus a lot on processes, tooling, infrastructure - and so some degree algo research - in order to use the product.

What is key, we believe, is a focus on the analytics recipes and available algo ingredients in order to support decisions: how are the analytics recipes and resulting reports going to help decide on the next steps for the customer's business?

Whats seems to be background / secondary? explaining the tools, libraries, languages, cloud infrastructure, automation, data lakes etc that a service may or may not use behind the scenes to achieve the goal. Are these needed - <USER2> at different levels and different times depending on the customer - but focus on the recipe, ingredients and decision support seems key.

edit: I found Eugene Dubossarsky's thoughts on Decision Support interesting in this podcast : [https://anchor.fm/datafuturology/episodes/1-Dr-Eugene- Duboss...](https://anchor.fm/datafuturology/episodes/1-Dr-Eugene-Dubossarsky ---Chief-Data-Scientist--Principal-Trainer-e1fedo)

</comment><comment><USER4> Great post from a bigwig at Google about the difference between building the infrastructure of machine learning and applying that infrastructure. I think that just like the vast majority of companies shouldn't run server infrastructure, the vast majority of companies shouldn't be involved in building the nuts and bolts of ML systems. Instead, use one of the big cloud providers or open source frameworks until your needs exceed the offering.</comment>


Ask HN: Business owners/managers, what are you doing to prepare for coronavirus? - <AUTHOR> <comment><USER2> Currently watching to see how things develop. We've been passing general guidelines on to employees (follow CDC guidelines, wash hands, stay home if you're feeling sick.. etc) and making hand sanitizers and tissues available in the office.

In the event things go south, and given we are NYC-based it's not unlikely, we're planning on expanding our WFH policy as necessary. Most of our customer contact is via phone/email so shouldn't be a huge disruption there.

We're also keeping an eye on employee travel to events/conferences, trying to keep it to the absolute minimum.</comment>


Educational: Worlds Worst Website - <AUTHOR> http://www.angelfire.com/super/badwebs/main.htm

<comment><USER2> This would be more educational as a collection of pages that each get one or two things wrong.

<comment><USER3> But that would be an improvement....which would cause them to lose the right to claim being the world's _worst_ website...

<comment><USER4> Happy families are all alike; every unhappy family is unhappy in its own way. - Leo Tolstoy

Hard to be the absolute worst, so many ways to be bad.

</comment></comment></comment><comment><USER5> Flagged for the surprise soundtrack.

Thanks for that.

<comment><USER6> What did you expect when clicking a link to the "world's worst website"?</comment></comment>


The Librarian's Bequest - <AUTHOR> https://www.insidehighered.com/news/2016/09/15/critics-question-spending-librarians-donation-scoreboard?utm_source=Inside+Higher+Ed&utm_campaign=c72eec25d2-DNU20160915&utm_medium=email&utm_term=0_1fcbc04421-c72eec25d2-199444225&mc_cid=c72eec25d2&mc_eid=5a987e3d6d <comment><USER2> tl;dr: University of New Hampshire decides that the best use of a million dollars of a librarian's bequest is a video scoreboard for its new $25 million football stadium.</comment>


House Democrats unveil bill promoting online voting - <AUTHOR> https://www.vox.com/policy-and-politics/2018/11/30/18118158/house-democrats-anti-corruption-bill-hr-1-pelosi <comment><USER2> > online voting

I hope they realize their error.

Online voting or voting from home by other means undermines the freedom to vote.

It opens avenues to vote buying and group pressure and all kinds of shenanigans. All the convince or increased voting arguments should be weighed against current and historical evidence of how voting actually works.

For example, women from traditional family structures will lose their ability to cast an independent vote at once. Even here in Finland where women received the right to vote very early (second after NZ) it's very common for electoral officials to see old sweet couple coming in and the man trying to check the woman's vote and throwing a angry hizzy fit when it's not allowed.

Being alone in the voting box is essential part of voting in democracy.

</comment><comment><USER3> I thought the Democrats wanted elections to be less hackable. Did that change now that they (partially) won?</comment>


Google makes an aggressive move to steal Microsoft Office customers - <AUTHOR> http://www.businessinsider.com/google-apps-gives-microsoft-enterprise-agreement-customers-a-way-out-2015-10 <comment><USER2> Pfft, good luck. My 65 year old mother nearly died from stress overload when Office 2007 was released. Good fucking luck getting her to transfer to Google. It's not free to transfer to Google when you need to retrain your entire workforce on it.

Microsoft has it good with Office; they have an entire generation of Luddites dependent on them.

<comment><USER3> The biggest problem with SaaS for seniors is that they expect the buttons to not move. Anything with continuous deployment like Google anything, basically sucks for seniors.

I get a call from an old lady every time the AOL website moves a button, for serious.

<comment><USER4> I feel like this is as often the fault of the designers as the user, though. Of course it's going to confuse people if you change the design; and often, such changes are arbitrary and unnecessary.

<comment><USER3> The key point is that if you own software on your PC, it doesn't change at all. It only changes when the user allows an update to occur.

Web software changes spontaneously and breaks your workflow on a regular basis. Seniors' understanding of how computers work is rarely flexible enough to adapt to this.

</comment></comment></comment></comment><comment><USER5> Watch out with Google Apps - I transferred my domain's email over to Google Apps. Now that I've moved my email out, apparently I need to continue paying for the service otherwise I lose my Google Play library.

</comment><comment><USER6> Wow, that's a tough one on many fronts. As someone mentioned, the change in UI when Office 2007 came out was more painful than most care to admit. I personally went from feeling like a power user to a complete moron crying like a little baby. Horrible move on Microsoft's part. Not sure we've gained anything at all. But, now years later, it is what it is.

Then there's "Office as a Tool", which, to me, means mostly Excel.

Another big huge part of the MS ecosystem, at least for us, is the fact that you can automate and create custom solutions using VBA (or Python). I don't have any data to indicate this is commonplace but I'd like to think large companies have such things as highly customize Excel spreadsheets doing all kinds of interesting stuff.

As an example, we developed an Excel application to design Helmholtz resonators for acoustic treatment of mixing rooms and high-end movie projection rooms. It would calculate various room resonant modes, use a database of materials to determine damping across the desired frequency ranges and spit out Helmholtz resonator build parameters for low to mid-range acoustical treatment. It worked like a charm and could be installed and loaded by anyone with Excel.

Yet another tool was used to simulate FIFO timing for a frame buffer to be implemented within a Xilinx FPGA for an image processing application. It would allow faster verification of various parameters than running a Verilog simulation and spit out a bunch of Verilog code based on results.

Another tool was a really neat state machine generator for embedded systems using multi-line text LCD displays for a menu. You could build the menu in Excel, click a few buttons and out would come a full state machine with callback function definitions for full navigation through a menu as well as dealing with screens where user adjustments could happen (think "volume up", "volume down", "set temperature", etc.). If you've ever written and maintained LCD menu code for an embedded system you can appreciate the advantage of entering your menu into Excel and having cut-and-paste C code you can paste into your Keil compiler (or whatever).

Another tool was created to help design Power Distribution Systems (PDS) for high speed boards. In designing electronic boards operating at high frequencies PDS integrity is a big deal. We wrote an Excel tool that encoded all of the required knowledge (for our work) and allowed the engineer to explore various PDS integrity topologies and configurations with graphs, etc.

A tool I really like helped with the time consuming task of creating land and schematic patterns for Altium Designer. Rolling-up to your desk to create schematic symbols and a pcb pattern for an FPGA with 1152 pins is, well, a nightmare. And it is worst as a design is modified during development stages. Our tool was able to take a process that consumed 10 to 12 hours and shrink it down to 30 to 45 minutes.

We created a Powerpoint presentation that made heavy use of VBA to simulate a full control panel, complete with a dot matrix LCD display. This tool was used to both demonstrate functionality and train people on the system without much more than a laptop running powerpoint.

I have a lot more examples like that. The point being that, in the right hands, these Office tools are far more useful and capable than out of the box.

And then there's the financial side. Google tools cost money. We upgraded our Office 2003 licenses to Office 2007 and we've been using that version ever since. There's nothing in the new versions that is compelling enough to upgrade. This means that the cost of Office becomes insignificant and non- recurring, which can be very important.

Note to Microsoft: Want to get me (and others) to upgrade again? Make Python a NATIVE alternative to VBA.

<comment><USER7> > Another big huge part of the MS ecosystem, at least for us, is the fact that > you can automate and create custom solutions using VBA (or Python). I don't > have any data to indicate this is commonplace but I'd like to think large > companies have such things as highly customize Excel spreadsheets doing all > kinds of interesting stuff.

[https://www.google.com/script/start](https://www.google.com/script/start)

</comment></comment><comment> sudo-i Is Google scanning/reading emails as to do advertising with Enterprise customers? If so, I'd imagine a lot of companies have qualms with that practice.</comment>


The Kindle is Back in Stock at Amazon - <AUTHOR> http://www.centernetworks.com/amazon-kindle-in-stock

<comment><AUTHOR> I hate books because I'm left-handed and they're designed for right-handed readers. The Kindle is likely not perfect because the scroll is on the right- hand side, but that's much better.

<comment><USER2> You may be right--I'm right-handed and would have no way of knowing--but aren't books symmetric?

<comment><USER3> The book is symmetrical but the writing - hence, pages - proceed from left to right. It's most evident when using the thumbs to flip through a book or magazine. Being left-handed as well, I always flip through magazines backwards.

<comment><USER4> Move to Israel or Japan.</comment></comment></comment></comment>


Quantum Cryptography - <AUTHOR> http://en.wikipedia.org/wiki/Quantum_cryptography

<comment><USER2> Interesting wiki page. Thanks for sharing.

Side note: Quantum is in front of everything. e.g. quantum eating.</comment>


Is your startup constantly zig-zagging? (like mine) - <AUTHOR> http://hippoland.tumblr.com/post/26983440093/is-your-startup-constantly-zig-zagging-like-mine

<comment><USER2> Very powerful analogy. However, with a small team I've always felt it makes sense to have one, maybe two "rafts" at a time. You need to execute something completely to know if its effective. I've found if you are splitting your time between too many rafts, they're all going to prove to be unfruitful, regardless of their potential

<comment><AUTHOR> completely agree! we're in the same boat as you (pun intended) :)

</comment></comment><comment><USER3> I think the key point that this article is missing, and maybe it's just assumed by the author, is that when you're sending out the life rafts in an uncharted direction you get enough user feedback to either work the feature into your product or not.

<comment><AUTHOR> good pt -- yep, I didn't spell that out well, but yes, that's the pt of the rafts.

<comment><USER4> I think the point came across pretty clear. Thanks for the great analogy to think about these things.</comment></comment></comment>


Sega Saturn couldn't natively do polygons so instead displayed 100's of sprites - <AUTHOR> https://www.youtube.com/watch?v=VutzIK3DqZE <comment><USER2> The part from the title starts at 3:35. Sega Saturn used quads (distorted rectangular sprites) rather than triangles as the basic unit in 3D rendering.

I think that approach is not that unusual for that early era of 3D graphics. Somewhere around that time I wrote a software 3D engine for PCs that was based on a similar principle. Using rectangles allowed for some simplifications compared to triangles, but it did limit the kind of shapes you could have in your world.</comment>


Bye Bye NullPointerException - <AUTHOR> http://blog.objectteams.org/2011/02/bye-bye-npe/

<comment><USER2> IMO Java's worst design choice was to allow any object-typed value to be null. By making different design choices, it would have been perfectly feasible to not allow null objects in the language at all, but rather make some sort of nullable/maybe/optional type there is in many other languages. After all, a program that crashes with a null pointer exception is not much better than one that crashes with a segfault.</comment>


WebGL2 Fundamentals - <AUTHOR> https://webgl2fundamentals.org/ <comment><USER2> This is really a fantastic resource - it doesn't hide too much away behind "helper" libraries so you understand where everything is coming from. It's the only beginner resource I've found that covers drawing _multiple_ things: that was always my stumbling block with WebGL!

When you've exhausted this and are looking for next steps to try, I recommend this youtube series by Sketchpunk Labs: [https://www.youtube.com/watch?v=LtFujAtKM5I&list=PLMinhigDWz...](https://www.youtube.com/watch?v=LtFujAtKM5I&list=PLMinhigDWz6emRKVkVIEAaePW7vtIkaIF)

<comment><USER3> Shameless self plug: You should check out my Youtube channel. I have a playlist that I cover Webgl (not 2) [https://www.youtube.com/watch?v=oDiSqQT_szo&list=PLPqKsyEGhU...](https://www.youtube.com/watch?v=oDiSqQT_szo&list=PLPqKsyEGhUnaOdIFLKvdkXAQWD4DoXnFl). I've done 108 WebGL screencasts, everything is built up slowly over time from scratch (so nothing is hidden away), and covers a lot for beginners to include covering drawing multiple things. Cheers!

</comment></comment><comment><USER4> Can someone explain why the API design is such that it takes roughly ~100 lines of code and understanding of many different concepts (buffers, vertex/fragment shaders, uniforms, attributes, etc.) to draw a monochrome triangle on a canvas?

I'm not trying to be snarky or say WebGL sucks (I have very little experience with it), I'm just wondering why the design choices have culminated into such an API?

<comment><USER5> Because this is what a modern programmable pipeline looks like. You can go from that same ~100 lines of code to 80,000 triangles and have it still run well.

You need:

1\. A way to send opaque data to the GPU (this is a buffer)

2\. A way to programmatically transform that data (this is a shader)

3\. A way to specify input parameters to those transforms not found in the data (a uniform)

4\. A way to decompose that opaque data into tangible (an attribute)

With not much more code, you can go from that to something like e.g. [http://magcius.github.io/pbrtview/](http://magcius.github.io/pbrtview/) using the same exact primitives. This is an example of a custom WebGL2 engine (not using three.js) in action. Leaf through [https://github.com/magcius/pbrtview/blob/gh- pages/src/models...](https://github.com/magcius/pbrtview/blob/gh- pages/src/models.ts) and you'll still see the same createBuffer, bufferData, drawArrays. There's not much more that I added on top.

<comment><USER6> You seem to have a good grasp on modern 3D programming -- Do you have any books recommendations that provide a solid overview of the topic?

<comment><USER5> My two biggest shelf pulls are Real-Time Rendering [0] by Akeine-Moller, Haines and Hoffman. 3D Math Primer for Graphics and Games [1] by Dunn & Parberry

[0] [https://www.amazon.com/Real-Time-Rendering-Third-Tomas- Akeni...](https://www.amazon.com/Real-Time-Rendering-Third-Tomas-Akenine- Moller/dp/1568814240) [1] [https://www.amazon.com/Math-Primer-Graphics-Game- Development...](https://www.amazon.com/Math-Primer-Graphics-Game- Development/dp/1568817231/)

I also read a ton of presentations and papers. Highly recommend the famous PBR SIGGRAPH course notes [0], especially the intro to light & physics by Naty Hoffman. GPU-Driven Rendering Pipelines [1] is another recent goodie.

[0] [http://blog.selfshadow.com/publications/s2013-shading- course...](http://blog.selfshadow.com/publications/s2013-shading-course/) [1] [http://advances.realtimerendering.com/s2015/aaltonenhaar_sig...](http://advances.realtimerendering.com/s2015/aaltonenhaar_siggraph2015_combined_final_footer_220dpi.pdf)

</comment></comment></comment></comment><comment><USER7> See [https://webgl2fundamentals.org/webgl/lessons/webgl2-whats- ne...](https://webgl2fundamentals.org/webgl/lessons/webgl2-whats-new.html) for an overview of new (well, to WebGL at least) features.

Direct texel lookups and the expanded texture formats has been amazing for using WebGL 2 for GPGPU purposes.

</comment><comment><USER8> WebGL has been around for quite a while now, but I never see any websites using it. Surely they exist somewhere? What have I been missing? Anyone have a good source of links to things using WebGL?

<comment><USER9> Most browser games not written in Flash are most likely taking advantage of WebGL[1]

My personal favorite is the Canada Banknote[2]

[1] [http://www.pixijs.com/](http://www.pixijs.com/)

[2] [https://www.bankofcanada.ca/banknotes/banknote150/](https://www.bankofcanada.ca/banknotes/banknote150/)

<comment><USER10> From that I learned about Nunavut, this was not on the maps I had as a kid.

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

Fascinating.

</comment></comment></comment><comment><USER11> The text on the main page is difficult to read with random 3D text on its background.

<comment><USER12> i agree -- couldn't bare trying to read, closed tab immediately.

</comment></comment><comment><USER13> This is really awesome, I will be going through this for sure.

</comment><comment><USER14> Does anybody know what are the penetration numbers for WebGL and WebGL2?

<comment><USER15> According to webglstats.com, WebGL is at 97% and WebGL2 is at 39%.

Unfortunately neither Safari or Edge support WebGL2 by default yet.

<comment><USER16> And their support it pretty lame in most mobile devices.

It might be supported, but fast is it not.

My Asus, LG, Nokia and Samsung devices don't have any hiccups with OpenGL ES 3.x games, however most WebGL demos are janky on them.

<comment><USER15> I wonder how much of that performance difference is due to "Three.js vs Unity/Unreal" rather than "WebGL vs Native GLES".

AFAIK Three.js is still missing standard optimizations that are taken for granted in a "real" engine, like batching and occlusion culling, and some optimizations it does support are scarcely used due to poor tooling. Pre-baked lighting and compressed textures are technically supported but there's no easy workflow to pre-generate the necessary data.

<comment><USER17> Are there any other libraries that aren't Unity/Unreal that are better than Three.js?

<comment><USER15> I think PlayCanvas is the most robust engine that's built specifically for the web. Only the core runtime is open-source though, to get the full benefit you need to use their proprietary editor and asset pipeline.

</comment></comment></comment></comment></comment></comment><comment><USER18> I would actually just recommend diving into THREE.js.

It's truly one of the best documented and most "obvious" codebases out there. If all you've got is a solid understanding of JS, you can just start hacking up something nontrivial on THREE.js and you'll come out of it knowing most of WebGL.

And in doing so you'll eventually realize that even WebGL itself is quite "high level" \-- there is a _huge_ amount of abstraction that you take for granted in the browser.

<comment><USER19> > you can just start hacking up something nontrivial on THREE.js and you'll > come out of it knowing most of WebGL.

Sorry, but this is wildly untrue. I don't really know where to begin, but you wouldn't even need to touch shaders to accomplish that, so no, you wouldn't know most of WebGL. THREE.js is very much a thick abstraction over WebGL.

> And in doing so you'll eventually realize that even WebGL itself is quite > "high level" \-- there is a _huge_ amount of abstraction that you take for > granted in the browser.

Also not accurate. WebGL is a -very- thin wrapper over OpenGL ES, which is itself as low level as you can go without stepping into something like Vulkan. There's almost no abstraction.

<comment><USER20> > WebGL is a -very- thin wrapper over OpenGL ES

This is true. From experience I can say that the core experience of using WebGL in JS is very similar to using OpenGL ES in C.

That being said, WebGL and the browser do a little more work for you than the GL API does in C, things you'd otherwise need a helper library for. In particular, there's no shared library or header file hell, context creation is easy, image import is easy, and JS will handle memory allocation for you. It eliminates a lot of the annoying stuff needed to get to writing the actual GL code, though you still have to go through the state machine hell of GL itself :)

<comment><USER16> While true, only beginners actually use raw GL calls, even in C.

Anyone with experience quickly builds up their mini-engine to handle loading shaders, images, fonts, models, handling everything together for each model, in a mini scene graph way, handling driver and GPU specific bugs...

</comment></comment></comment></comment><comment><USER21> Seriously, we are having immense trouble with securing CPU virtualization and now we are talking about GPU virtualization for unreviewed, unaccounted, automatically downloaded and executed code? Stop this madness.

Use native code and native APIs like OpenGL or Vulkan.

<comment><USER22> Care to explain how GPU virtualization is somehow worse/harder than CPU virtualization ?

<comment><USER21> I didn't say that. It's more oil to the fire.

<comment><USER23> Brb, turning off all my cpus and gpus, can't be adding more fuel!

<comment><USER21> You seem to misunderstand. It's not about not using CPUs or GPUs, but about what code runs on them, and how that code is accounted for. Who vetted for it and who is responsible for it?</comment></comment></comment></comment></comment>


Google to launch an open and common API for various social networks - <AUTHOR> http://www.techcrunch.com/2007/10/30/details-revealed-google-opensocial-to-be-common-apis-for-building-social-apps/

<comment><USER2> Very cool. Just one more reason why Facebook is doomed.

<comment><USER3> It's a bit early to say that, I think, but this sounds like an interesting development, for sure.

I'm a little confused, though - from what I can tell, these are API's that access information from social networks, iGoogle, etc. That's pretty cool, now people can make applications for the users of those networks.

Still... those saying this competes with Facebook don't really get what the point of Facebook is, at least for college kids.

<comment><USER2> Well, as a "college kid" myself, and a heavy facebook user, and a total social software dork, I think I know just about as well as anyone the value of Facebook to college students. I can sum it up in two words: Social Capital.

I'm not saying this "competes" with facebook,per se. Rather, it's just an alternative to the idea of an "open (proprietary) API" that has failed in so many ways (uselessness of applications, nagging app requests, lack of universality for things like classes, etc). I'll be writing a blog post on this very topic soon.

I hope that clears things up a bit.

</comment></comment></comment><comment><USER4> This is exactly the kind of 'open garden' that people have said they wanted from social networks. It only makes sense that it wouldn't be any specific social network that made it happen. I wonder if we'll see Facebook and MySpace participate in this? I'm sure it will just depend on what apps make it to what platforms.

</comment><comment><USER5> What really matters is how distribution works. Will it be as easy as "Add This Application" and will they list my app in a high traffic directory somewhere? If so, I'm 100% in.</comment>


Harvesting Energy from Aircraft Wings - <AUTHOR> http://www.thebetterindia.com/25081/5-young-indian-innovators-steal-show-unesco-airbus-fly-ideas-competition/

<comment><USER2> This is why I put windmills on my F350</comment>


Show HN: Memes As A Service - <AUTHOR> http://maas.rohits.me

<comment><AUTHOR> It's down! I think this hit Imgur's API limit.

It was my first ever app. This was more fun than I thought! Thanks HN!

</comment><comment><USER2> Seems like fun! Do you have a public git repo?

Also I get a "We're sorry, but something went wrong." error when trying your demo link on the page.

EDIT: It's working! Maybe you should lower a little the shadow on the text.

<comment><AUTHOR> Thanks! Not yet, it was my first time with Ruby and I hacked something in one night. Will clean it up and make the repo public.

</comment></comment><comment><USER3> I think it would be better if you didn't return the "Memes As A Service" header with every request but otherwise I think it's a cool idea.

<comment><AUTHOR> You're absolutely right. I'll get rid of that next time the page goes down.

And Thanks!

</comment></comment><comment><USER4> [http://memegenerator.net/instance/30817716](http://memegenerator.net/instance/30817716)

</comment><comment><USER5> It's not working...</comment>


Ask YC: Starting today, how would you most quickly earn $1M in profit? - <AUTHOR>

I know this is not the typical direction for YC startups. You'd normally want to build an app or service that could eventually generate tens of millions of dollars. But what if you could be satisfied with just one million?
i.e. would it be a new SaaS website, an iPhone app, an Android app, a multiplayer game, or what.
The more details the better, but if you have an idea that you'd like to keep on the downlow, maybe just mention the app/service type. Thanks! <comment><USER2> If you are satisfied with 1M, here are some good bets:

\- Take up a high-paying corporate job. I would join a pre-IPO company such as LinkedIn where you'll get a competitive salary, stock options that will likely be in the money and probably a good deal with the employee stock purchase plan.

\- Join one promising startup per year as an early employee. Vest enough stock to be over the cliff, exercise your options and leave. This is essentially similar to what an angel investor does, except that you cannot do it in parallel.

\- Start a "traditional" business. In the US making $1M in 5-10 years of running many kinds of businesses is pretty straightforward if you're willing to make the effort and can stick to it. I actually did this: my former consulting business made seven figures over four years.

If you want to create a new product or service, 1M is a completely arbitrary number. You should aim to build a business first, and once that's done think about ways to keep growing it until you're satisfied.

</comment><comment><USER3> My parents always told me: If you chase after money, you will never catch it. But if you stop chasing, it will come to you.

In context: You should be focusing on doing what you are good at, and money will come. I crossed the 1M line in finance, but there are many places to go. You would need to give more information about yourself to give a detailed answer.

</comment><comment><USER4> You start with two million ...

</comment><comment><USER5> Work hard and show up enough times to get lucky.

</comment><comment><USER6> I'd start by asking the right question.

Hint: It is not "how do I most quickly earn $1M in profit".

</comment><comment><USER7> craps table in vegas.

Partly joking here, I too think this is the wrong type of question to ask. So many times I get approached from people who have the next facebook/twitter/fucking-annoying-I-know nothing idea.. do they ever mention the implementation details? No. It's always about going viral and making millions. What do you end up with? Something as spammy as "honestly.com"

Seriously just find an interesting problem to solve, solve it well and see how you can expand on it. The money will come when you aren't focused on it!

</comment><comment><USER8> not really a fan of all of these "magic bullet" posts lately. everything you mention can be turned into a real business, do some homework first before asking for the time and thoughts of people who have their own lives.

i guess my first piece of advice would be to stop being lazy. nothing you mention will come before that.

</comment><comment><USER9> well doesn't some of those iOS developers make a huge amount of money when their app somehow makes it to the top 25 or something and then get featured? Just have a fantastic idea for anything, an app or website or whatever and soon enough if your lucky you might make that random number of one million.

</comment><comment><USER10> make 100 apps that rakes in 1000 per month and have it run for 10 months each. From the last $$$ post this seems to be the easiest method.

</comment><comment><USER11> Sell drugs.

</comment><comment><USER12> Promote the latest affiliate offers with large media buys on demographically targeted high traffic volume niche sites.

</comment><comment><USER13> Start my own religion.

No, really.

<comment><USER14> So does Kevin Rose: [http://www.youtube.com/watch?v=lLyFUyZJ5ek&feature=youtu...](http://www.youtube.com/watch?v=lLyFUyZJ5ek&feature=youtu.be#t=27m)</comment></comment>


Ask HN: What did you do to comply with GDPR? - <AUTHOR> Most of products are not 100% compliant with GDPR but what changes, if any, did you make to what you are working on in response to GDPR? <comment><USER2> We decided that we didn't need to collect the data in the first place, so we sidestep the issue entirely.

In reality, the amount of data an application _needs_ to collect is very small. Everything else is mostly for marketing purposes. Eliminate the latter and it's very easy to comply with GDPR.

<comment><USER3> IMHO, this is a great insight and result!</comment></comment>


The Hazards of Nerd Supremacy: The Case of WikiLeaks - <AUTHOR> http://www.theatlantic.com/technology/archive/2010/12/the-hazards-of-nerd-supremacy-the-case-of-wikileaks/68217/1/

<comment><USER3> I agree with a lot of what the author said, but some parts read like the worst sort of pseudo-intellectual post-modernist pap.

 _The Internet as it is, which supports the abilities of Anonymous and Wikileaks, is an outgrowth of a particular design history which was influenced in equal degrees by 1960s romanticism and cold war paranoia. It aligned the two poles of the bit to these two archetypal dramas. But the poles of the bit can be aligned with other things. The Internet can and must be redesigned to reflect a more moderate and realistically human-centered philosophy._

That paragraph attempts to say so much, it says almost nothing at all. What does the author mean by "equal parts 1960s romanticism and cold war paranoia"? Does he have any evidence that these ideological considerations actually influenced the design of the Internet, or is this fanciful thinking that draws patterns where none exist?

 _One problem is that information in oceanic magnitudes can confuse and confound as easily as it can clarify and empower, even when the information is correct. There is vastly more financial data set down in the world's computers than there ever has been before, including publically accessible data, and yet the economy is a mess. How can this be, if information is the solution?_

The emphasis on small visible harms caused by greater information serves to obscure the larger, less visible good that information technology has brought us. The increased flows of information brought about by widespread computer networks have made life much, much easier for both consumers and producers. Goods, both in commodity and finished form can be compared nearly effortlessly. What's easier, going to four different physical stores, or opening four different shopping sites in your browser? Focusing on the edge cases of network overreach obscures the much larger benefits that access to information brings us.

 _They are, however, potentially consequential to American diplomacy, which is often, if we are to believe the cables, both trickier and better intentioned then we might have feared. The contents might be extremely consequential, even deadly, to a hapless individual on the ground -- and we'll once again invoke the canonical unfortunate fellow in Afghanistan who translated for a US diplomat and counted on the USA to keep it secret. I don't know if he exists, but it seems to me that there must be analogs to him, at least._

That's awfully weak language to support an awfully strong conclusion - <USER2> Wikileaks is _bad_ for releasing this data. Most people accept some version of "no harm - no foul". That is to say, if an action doesn't cause demonstrable harm, then the action isn't bad, even if the benefits are dubious. I'd say that rule, rather than any precautionary principle applies in this case.

 _But it did use all of the cables for blackmail. Encrypted copies were sent around the world, creating what is known as a "dead man switch." It was claimed that the encrypted cables contained genuinely dangerous information._

How does the author know? Has he managed to break the 256-bit AES encryption on the insurance file? If not, any speculation as to the files contents is speculation and should be stated as such, rather than know fact.

I'm disappointed in the article. I like its conclusion. I do believe that Julian Assange's actions harmed the United States, and were counterproductive towards his stated aims. However, the structure of this article is so rambling and its arguments so weak, I can't support the author's reasoning process.</comment>


[Backed Up] Freelancer.com stole from me and ruined my life - <AUTHOR> https://web.archive.org/web/20190426163107/https://www.trustpilot.com/reviews/5cc32fe1a8436908c40f60eb <comment><USER2> That's the problem with a platform-as-a-middleman-service that uses a commission business model: they have to aggressively, and I mean _aggressively_ , take measures to ensure neither the providers nor the recipients of the service cut them out of the loop.

<comment><USER3> I think there is no way around it, good freelancers and good clients will cut the platform leaving there the naive workers and problematic clients.

They survive by making you work for cheap when you enter the platform (kind of unwritten rule to earn "reputation") but once you start commanding better fees they will kick you out under any pretext - they know professionals with good portfolios are going to leave the platform anyway.

Freelance marketplaces are a race to bottom. They have a deleterious effect on your career turning you into a low-fee/shitty-client magnet.

</comment></comment><comment><USER4> Besides Toptal (which focuses on the 'elite programming' aspect to the detriment of all else), is there a vetted platform for businesses to look for consulting agencies to do projects for them (anything 10K and up), and for independent consultants/consulting agencies to look for work? There are state run vendor boards like [https://eva.virginia.gov;](https://eva.virginia.gov;) but I haven't seen anything comparable in the private sector.

<comment><USER2> I know our consulting firm has a "director of market development" in part because there is no place we could just hang our sign and get business.

It's mostly networking and word of mouth.

</comment></comment><comment><USER5> This is the warning I give people: Do not let your livelihood depend on a free service.

<comment><USER2> It's not even free though.

<comment><USER5> Nothing's really free. That's true. By "free service", I mean a service where you or other part (or both) don't pay some sort of subscription fee and/or have a contract with the service provider. But I thought I keep it brief for brevity's sake.

<comment><USER2> But they take a percentage of transaction, and the "freelancers" do pay a monthly fee, I believe... Admittedly I just googled "Freelancers.com business model" and found a Quora answer, so I don't know how accurate it is. But that makes it sound _very_ not-free.</comment></comment></comment></comment>


Step-by-step code execution on the Toshiba FlashAir SD card - <AUTHOR> https://docs.google.com/presentation/d/13OJNOb2IMwp79SDrbxSLF3i7StTgWLdD7QlYpic39r8/edit#slide=id.g3d28bb72e8_5_74 <comment><USER2> Very good writeup, I like the documentation of the thought process and the open source tools shown in action.

What really amazed me though was both the persistence of this hacker (looks like the project took more than 3 years from first playing around to RE) and the ubiquity of the (I)TRON operatings system that's super hard to find anything out about, especially in light of its worldwide use.

</comment><comment><USER3> would it be feasible to use this technique to modify the SD card so that instead of broadcasting an SSID, it attempts to connect to an SSID and (upon successful connection) pushes the contents of its filesystem to an HTTP endpoint?

i'm imagining an SD card that automatically empties itself onto my private server when i get home... rather than an SD card that i can manually access wirelessly.

<comment><AUTHOR> The card can already do that. It can connect to an AP and you can already push files thanks to Lua.

</comment></comment><comment><USER4> See also the Transcend cards ( [https://hackaday.com/2016/06/30/transcend- wifi-sd-card-is-a-...](https://hackaday.com/2016/06/30/transcend-wifi-sd-card- is-a-tiny-linux-server/) )

They're super easy to mess around with

<comment><USER5> Also the PQI Air Card, which is a microSD to SD adaptor!

I use it with an SD-to-microSD ribbon inside an iFlash adaptor in an iPod. That lets me share SD cards over WiFi to an iPhone.

</comment></comment><comment><USER6> Question - I have a device that can record video files to SD, but can't stream the it's video feed. Could I use this SD card to stream the feed to a server?

<comment><USER7> Theoretically, yes. Practically, I think you should dedicate a few months or even years to writing code to get that working... The OS is very basic, you don't get much RAM, the TCP/IP stack seems very primitive, and you don't have the source code...

<comment><USER8> There are other wireless SD cards that already run a Linux OS.

The main problem would be to figure out how your camera saves the files (it might not save them in a playable format right away - for example it could save most of the data but keep the key frames - necessary every so often - until the end or so, or do more processing on the video file only after recording is finished). Unless you reverse-engineer all that and work out a way to generate a playable stream out of the intermediate file, you're out of luck.

</comment></comment></comment><comment><USER9> These things are pretty interesting but they are quite slow/unusable in terms of transfer rate.

I wonder if that tiny antenna could be enhanced with a wire.

<comment><USER7> They're slow because the CPU is really slow, and all wifi communication needs to go via the CPU.

The antenna is unlikely to be the cause.

</comment></comment><comment><USER10> Is there a video of the talk somewhere ? (if that was the support for a talk)

<comment><AUTHOR> The video will likely be online soon.</comment></comment>