Goroutines, Nonblocking I/O, and Memory Usage - <AUTHOR> https://eklitzke.org/goroutines-nonblocking-io-and-memory-usage <comment><USER2> It always struck me as odd that Go has select{}, but no way to select on a file descriptor such a socket. There's literally no way to poll a file descriptor: You have to read from it, and deal with the result.

That also means reads aren't interruptible (unless you count closing the descriptor as interrupting, which is a blunt hammer indeed). AFAIK the only way to do this is to set SetReadDeadline() on the connection to a smallish value, then let the interrupter block on a channel that's invoked when the deadline is reached.

Go's concurrency model is pretty friendly, but it's also unfriendly in many surprising ways. (Don't get me started on the whole nil channel thing, or the problem of channel closure/ownership, or channel performance overall.) It doesn't surprise me the least (while it did surprise the Go team) that Go fell flat among the C/C++ system programmer demographic.

Anyone want to chip in about how Rust, Swift and Nim compare here (regarding the article)?

<comment><USER3> > You have to read from it, and deal with the result.

They try to keep it simple. As with all I/O: it's blocking your current goroutine, so if you want it non-blocking you spawn a new goroutine to do this in, pass it a channel, the spawned routine proxies the result to it and your main routine does select on _that_.

The semantics for reading sockets are different from reading channels (compare the types; one is multi valued, the other single valued---EDIT: no they're not, exactly, see [1]), so it kind of makes sense you can't share the same construct.

I'm not a Go apologist by any means, I think it has a tremendous amount of flaws. But I/O, (a)synchronicity and concurrency are not among them. They are simple and consistent, and (most importantly) orthogonal building blocks which you can combine at your leisure to create more complex constructs.

(Besides, how do you interrupt a read, anyway? Or any syscall? You can't do that in C, either...?)

[1] edit: fair is fair, go channel reads are (of course) also multi valued. however, the types still don't exactly match, since you can't pass arguments (buffer) to a channel read. you'd need some extra hoops to jump through, as other commenters suggest, which starts becoming magic and breaking down the simplicity and orthogonality of the constructs.

<comment><USER4> Sorry for being unclear. You don't interrupt the _read_ as such. You interrupt the select.

The usual trick on POSIX is to use a self-pipe, since select()/epoll() only work on file descriptors and not, say, pthread primitives. Windows is slightly better here: WaitForMultipleObjects supports waiting on any primitive that supports blocking, so you wait on the socket + on an event object, and signaling the event object will unblock the wait. Windows also has completion ports, and the APIs are generally more extensive (not a fan of Windows, but they got this part very right).

I do understand why Go is the way it is. But it's important to recognize that it's a compromise in design that inherently reduces your flexibility — such as in this particular case. I don't think there's anything technically _preventing_ Go from supporting non-blocking I/O, though.

Channels and FDs/sockets are both conceptually multi-valued; what did you mean by that? One major difference is that reads can fail with an error, and channel reads can't.

Edit: Also, I didn't mean that select{} on a file descriptor ought to actually return data. It would be more appropriate for it to yield a true/false value to signal that the FD has data, so you'd do "case <-fd: fd.Read(bufSize)".

<comment><USER5> How is your "case <-fd: fd.Read(bufSize)" not a race condition?

<comment><USER2> Race condition? It's no different from select() followed by recv() in C. But I'm talking about semantics here, not suggesting that this would necessarily be how you'd write it. The main idea was allowing select{} to work on non- channel sources of notifications, such as file descriptors.

</comment></comment></comment></comment></comment><comment><USER6> This would be solved if the "select" keyword was also working on I/O objects. It could gain special io.ReadReady and io.WriteReady channels that return a boolean.

This would also simplify most of the code that tries to pull events from different sources, including I/O. Right now each I/O needs to be extracted in it's own goroutine (adding error handling makes it worse):

        fromIO := make(chan []byte)
        go func() {
           for {
              buf := myPool.Get()
              myIO.Read(buf)
              fromIO <- buf
           }
        }()

        for {
          select {
          case a := <-fromIO:
            // do one thing
          case b := <-fromOtherChan:
            // something else
          }
        }

After the change:

        for {
          select {
          case <-myIO.ReadReady:
            buf := myPool.Get()
            myIO.Read(a)
          case b := <-myOtherChan:
            // ...
         }

<comment><USER7> I/O isn't an object, it's an interface (Go has no objects). There is nothing magical about I/O or any interface--they are just functions--so this change would require extra magic to be implemented which I strongly oppose.

One of the beautiful things about Go is the designers carefully chose to confine language magic to only a few fundamental areas (channels, goroutines, arguably maps) and resisted going beyond that. Go approximates "C plus Concurrency and Better Data Structures" and nothing more.

<comment><USER8> On the contrary, the magic is required because things like select and channels and coroutines are implented at the language level in go. If they were a library with proper extension points and, sure possibly languge sugar on top, it would be doable.

<comment><USER9> That is very nearly what they are.

The compiler actually just transforms everything channel related into function calls within the runtime package. The majority (probably > 99%) of the implementation of channels and select is Go itself.

E.g., see: [https://golang.org/src/runtime/chan.go](https://golang.org/src/runtime/chan.go)

</comment></comment></comment></comment><comment><USER10> It's true goroutines waiting on the network are going to sit on a few KB (small stack, buffer, user-mode sched bookkeeping), and if you multiply that out by a million or something you're talking gigs. But I think much of the appeal of the standard Go way, and similar approaches in other languages, is you can write more or less as if you were doing simple synch I/O, and the runtime work that other folks have done gives you something decent with AIO, small stacks, user-space thread switching, etc. without you having to think much about it.

I think the author says something similar put differently in the first paragraph.

Something like rakoo's trick is interesting, with the caveat zzzcpan added that it takes at least a tiny buf, not zero-len, but if you don't actually hit this wall I'd charge forward the regular way.

</comment><comment><USER11> You actually can observe the same behavior in most async APIs which follow a "pull model". E.g. if you do "await socket.ReadAsync(buffer...)" in C# you would also need to have preallocated the buffer and keep it alive for the whole duration of the async operation. Same is true for C++ boost asio async reads. Even if you use the pure C WinAPI IOCP methods you have to preallocate the buffers.

The readyness model avoids this, as described in the article. But it will also lead to a more event driven programming model.

I think the preallocation might be a problem if the use case is a server that holds an enormous amounts of mostly inactive connections (e.g. websocket server). For most servers I don't see a problem with it.

This method also has a benefit for performance: You often can totally avoid dynamic memory allocation during runtime with this model. You allocate the receive buffer once for the connection and then reuse it for the whole lifetime. In the push model you either need to allocate a fresh buffer for the new data or retrieve one from a pool, which is still more expensive.

<comment><USER12> > This method also has a benefit for performance: You often can totally avoid > dynamic memory allocation during runtime with this model. You allocate the > receive buffer once for the connection and then reuse it for the whole > lifetime.

There is a security concern here; you'd better be sure to flush the buffers correctly or you could cause memory to leak between sessions.

If I were writing a server to handle a sensitive task such as executing payment transactions I'd probably take the less memory efficient approach of allocating a new buffer for every connection to lower the risk of data spilling between connections.

<comment><USER8> allocating a new buffer doesn't give any guarantee as you might be given back a just dealocated buffer by the allocator with its original content mostly intact. You need to explicitly scrub any sensitive data yourself before deallocating. At that point you might just reuse the buffer yourself.

</comment></comment></comment><comment><USER13> Read() being a blocking call, wouldn't some hack like that work ?

        _, err := conn.Read([]byte{})
        if err != io.EOF {
            return err
        }

        // we know there is something to read
        buf := pool.Get().([]byte)
        n, err := conn.Read(buf)

        // process n, err and buf as needed
        // if there is more to read, you may need to loop over conn.Read

        // after some inactivity timeout
        buf = buf[:0]
        pool.Put(buf)

<comment><USER14> No, it checks for zero-length buffers and returns immediately. You would have to read at least a byte and copy it into a new buffer.

Won't matter much though, as the memory usage of a single goroutine is quite significant and doubling it by having a buffer preallocated is not something to care about.

<comment><USER15> > Won't matter much though, as the memory usage of a single goroutine is quite > significant

2K as of 1.4 (was 4K before 1.2, 8K in 1.2 and 1.3).

But yeah it's a good point, the intrinsic memory overhead of goroutines means even if buffer pooling worked the memory use of the system would still mostly follow the "naive" estimate.

You may want to message the author to remind them of that, they may not have thought of that concern.

</comment></comment></comment><comment><USER16> > Suppose that typically 5% of the client connections are actually active, and > the other 95% are idle with no pending reads or writes.

I suppose the intent is to then use that 95% memory savings for other work.

So what's the point of making this optimization? The system is going to be hugged to death if the number of client connections approaches 100%, because the system will not have enough available memory.

If 100% client connections is causing memory problems, rather than keeping a pool of buffers so that inactive client connections have less footprint, it seems like a better solution is to decrease the number of available client connections. Then, provision more servers or more memory if more client connections are required.

<comment><USER17> Provisioning for the worst possible case is sometimes necessary (e.g. hard real-time use cases), but can also be very expensive.

Since HTTP connections are typically kept alive between requests, it's very common for them to be idle. It could be the case that 99.9% of the time, X bytes of memory is enough to avoid transfer delays, but to cover the 100% case, you'd need 10X that.

I think it's reasonable to decide that avoiding delays in the 100% case is not worth 10X the cost in memory.

</comment></comment><comment><USER18> Instead of supplying a buffer to each read call itself, you can use something like a sync.Pool which will give metered and concurrency-safe access to a buffer: [https://golang.org/pkg/sync/#Pool](https://golang.org/pkg/sync/#Pool).

<comment><USER19> I think you misunderstand. It's not that you can't get a pooled buffer in Go. The problem is that you don't know if/when you need that buffer without calling Read(), and the call to Read() requires a buffer that's ready to use.

<comment><USER20> Exactly. The sync.Pool will only be useful if net.Conn.Read accepted a Writer instead of []byte.

<comment><USER15> That wouldn't make much sense since the Reader interface requires []byte, but the specific connection could inherit WriterTo: [https://golang.org/pkg/io/#WriterTo](https://golang.org/pkg/io/#WriterTo)

(TCPConn implements ReaderFrom, but not WriterTo)

<comment><USER20> I wasn't very clear. A hypothetical conn.Read(w Writer) would call Write on w instead of filling a byte array. Write in turn allocates as needed. WriterTo is a cleaner way of doing this.

<comment><USER15> > A hypothetical conn.Read(w Writer) would call Write on w instead of filling > a byte array.

Yes I understand the purpose — hence suggesting WriterTo which is supposed to do that — I simply noted that conn.Read(w Writer) would make Conn not extend io.Reader anymore since it takes a buffer.

<comment><USER20> Ah right.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> Hmm, there will still be a buffer in the kernel, that the NIC DMAs into.

You will also need to buffer incoming data from a stream protocol like TCP to combine consecutive reads into complete application layer packets.

A better approach can be seen with Registered I/O on Windows, which lets user- mode programs register buffers with the kernel so that they can be locked for the NIC to DMA into: [https://technet.microsoft.com/en- us/library/hh997032(v=ws.11...](https://technet.microsoft.com/en- us/library/hh997032\(v=ws.11\).aspx)

<comment><USER22> Those DMA buffers are shared. You don't have a different DMA buffer for each of a million sockets.

<comment><USER21> You're right. But there will realistically still be some protocol-level buffering in user-mode for every socket. Although that might be a good use- case for a hash table of buffers, as most of the sockets will not have outstanding partial packets most of the time in typical (frequent small message) applications.

</comment></comment></comment><comment><USER23> Is this inherent in Go's concurrency model or just a limitation of the standard library? Couldn't the standard library provide a function that takes a buffer pool as an argument instead of a buffer?

<comment><USER24> It's a standard library limitation.

One could imagine a function that takes a set of net.Conns and returns the ones that are available for reading. You'd then pass those off to a goroutine for processing with blocking I/O as usual.

</comment></comment><comment><USER25> Since IO Multiplexing in go is based on Edge-triggered epoll, you always need to do a write/read syscall (it happens underneath) before blocking the goroutine to arm the epoll to poll that specific FD. Also this approach relies on parking/unparking the goroutine and there is no way around it, since it is part of the runtime.

One way go can make it nonblocking is to do the read/write and return the result immediately, but this kind of call requires a call back function to be provided, so instead of parking/unparking the goroutine, the call back function is called (either directly or by "go cb_function"), It can be tricky to make it work, since the initial goroutine might not be allowed to call read on FD anymore (maybe exit from the goroutine if the read was unsuccessful). In addition, you still need to provide a buffer to read from, the 1 byte trick works though, but the buffer management can be done either if the read was successful or in the call back function. Also this approach makes the programming asynchronous and similar to event programming.

</comment><comment><USER26> Golang already provides bindings for the polling syscalls (e.g. [https://gcmurphy.wordpress.com/2012/11/30/using-epoll-in- go/](https://gcmurphy.wordpress.com/2012/11/30/using-epoll-in-go/)). Someone can write a library to do what you describe.

</comment><comment><USER27> One way to solve the problem is to have read return a buffer instead of providing the buffer, so that the internal read multiplexing code can do the buffer-pool trick under the hood. As long as all your readers ask for the same maximum size for the read, the pool can be shared. Under the hood, the implementation makes a select and request a buffer from the pool of the requested size.

</comment><comment><USER28> This would help. [https://blog.quickmediasolutions.com/2015/09/13/non- blocking...](https://blog.quickmediasolutions.com/2015/09/13/non-blocking- channels-in-go.html)</comment>


Ask HN: Simple cluster self-healing system? - <AUTHOR> I'm looking for a Linux based solution that, like the simplest uses of kubernetes, can run, monitor to insure N copies of task is running somewhere on a specified cluster on reachable hosts. I'm getting to kubernetes, but need something simpler first. <comment><USER2> I would recommend you to consider the following "simpler-than-Kubernetes" containerized workload orchestrators: Swarm ([https://github.com/docker/swarm](https://github.com/docker/swarm)) and somewhat more complex Nomad ([https://github.com/hashicorp/nomad](https://github.com/hashicorp/nomad)). Perhaps, even simpler orchestrators exist. If you're OK with having some vendor lock-in, you could also consider Amazon Elastic Container Service (ECS) or AWS Fargate or Azure Container Instances (ACI).

<comment><AUTHOR> Thank you for suggestions

<comment><USER2> You're welcome. Happy to help.

</comment></comment></comment><comment><USER3> If you're planning to run your own cluster, throw out the word simple. If you want simple, pay GCP or AWS for their solutions.

<comment><AUTHOR> No, that's a simple throw away response

</comment></comment><comment><AUTHOR> To further clarify all I need is a system to:

\- ask for task heartbeat

\- make sure nodes in cluster pingable

\- run N copies of task on reachable hosts

That's it.</comment>


Warp, a fast preprocessor for C and C++ - <AUTHOR> https://code.facebook.com/posts/476987592402291/under-the-hood-warp-a-fast-c-and-c-preprocessor/ <comment><USER2> Walter here (author of Warp). AMA about Warp.

<comment><USER3> > warp is currently able to preprocess many source files, one after the other, > in a single command. [...] warp is set up/torn down only once for the entire > set of files, rather than once for each source file.

I'd like to learn more about this. I spend a fair amount of time building on HPC systems. Frustratingly, compiling on a $100M computer is typically 50x slower than compiling on a laptop due to the atrocious metadata performance of the shared file system. Configuration is even worse because there is typically little or no parallelism. Moving my source tree to a fast local disk barely helps so long as system and library headers continue to reside on the slow filesystem. A compiler system that transparently caches file accesses across an entire project build would save computational scientists an enormous amount of time building on these systems.

<comment><USER4> So your build speed is limited by metadata file accesses to network storage? Your network/storage must be really bad then. How about mirroring all the needed headers locally before building? You could establish that as a makefile rule.

<comment><USER5> On large HPC clusters a common setup is to have a distributed cluster file system, rather than disk set up as "local" and "network" volumes. All the cluster machines' disks are integrated into a distributed volume running a filesystem like [https://en.wikipedia.org/wiki/IBM_General_Parallel_File_Syst...](https://en.wikipedia.org/wiki/IBM_General_Parallel_File_System) or [https://en.wikipedia.org/wiki/GFS2](https://en.wikipedia.org/wiki/GFS2)

</comment></comment></comment></comment><comment><USER6> Must say facebook has quite the lineup of all-star programmers:

\- Carmack

\- Abrash

\- Alexandrescu

\- Kent Beck

Cannot say I'm not a little jelly of those who get to spend time with these fine gents.

[http://www.southparkstudios.com/clips/babjj8/jelly- school](http://www.southparkstudios.com/clips/babjj8/jelly-school)

<comment><USER7> I find it a bit weird that the top comment in this story fawns over several star programmers, but ignores the guy who actually wrote the tool that the story is about.

<comment><USER8> Those are the greats today, and with a talent pool like that it's likely that many _future_ greats will be created there. You have to do more than write good code to be legendary.

Maybe Facebook might end up being the Xerox PARC of our modern times.

<comment><USER9> I'm not sure you know who Walter Bright is. He's done a...few...things.

<comment><USER8> There was a time at Xerox PARC when you couldn't throw a book without hitting someone who was or would become an important pioneer.

I'm not trying to discredit what Facebook is doing, or the people there, but it'll take time to build up to that level of talent. Having a few remarkable individuals is a great start. Having an entire department filled with them is going to be hard work.

</comment></comment></comment></comment></comment><comment><USER10> Great line from the interview:

> WB: I can guarantee that you are wrong about where your code is spending > most of its time if you haven't run a profiler on it.

Definitely a good thing for all programmers to think about!

</comment><comment><USER11> So, to be clear, this is a reimplementation of cpp?

<comment><USER2> I have never looked at the source code to cpp.

But Warp is designed to be a drop-in replacement. It doesn't produce char-by- char exactly the same output as cpp, as the whitespace differs, and the decisions about when/where to produce linemarker records are different.

But the output is functionally identical (any differences are bugs in either Warp or cpp).

<comment><USER12> Interesting, I did not realize the standard left room for preprocessors to make implementation-defined decisions!

</comment></comment></comment><comment><USER13> Are precompiled headers and the performance increase from switching to clang[0] not enough?

[0]: [http://clang.llvm.org/features.html#performance](http://clang.llvm.org/features.html#performance)

<comment><USER14> Surely not.

I know of a project that takes around 3 hours to build with Clang when you do a "make all".

<comment><USER15> Sure, but is that using PCHs? And how much of that time is preprocessing? I don't think the parent question is whether clang can compile any project in less than 3 hours. I think the interesting question is if warp is more compelling than clang from a preprocessing perspective.

<comment><USER14> Yes with PCH and full build not just preprocessing.

</comment></comment></comment></comment><comment><USER16> Could any of this be used to improve comiling speed in other languages?

<comment><USER17> Which other languages use the C/C++ preprocessor? I've seen it used for generating data or other source code when a preprocessor comes in handy, but never as a full-fledged component of another language.

I also think that a modern language that uses includes instead of modules is just outright insane.

<comment><USER18> Objective-C(++). I don't think obj-c changes anything about how the preprocessor works, so presumably it'll work fine for that.

Using the C preprocessor in a non-superset-of-C language would be a pretty odd choice.

<comment><USER19> Objective-c introduced `#import`, which guards from double including by default. I would suspect and performance gains are tempered with a "pure" objc project.

</comment></comment></comment></comment><comment><USER20> One thing that really sped up my compiler was eating a ketogenic diet, and eliminating preprocessed foods.

</comment><comment><USER21> Does Andrei have a sticky D button on his keyboard? He seems to mention it in every other sentence, where as I thought this post was about C and C++.

I would ask if there are any improvements between using wrap or just using clang.

<comment><USER22> I would be shocked if there are improvements over clang (and if there were, clang would fix them) in the general case.

clang has a pretty optimized preprocessor (It even has things like using SSE2 to do some neat things with character processing).

GCC has a fairly modern one, but it's still beatable (and clang beats it handily).

<comment><USER14> Well, as I mentioned on a parallel thread, I know of a project taking around 3 hours to compile, that doesn't look very optimized to me.

<comment><USER22> You know of a project that takes 3 hours of time to _preprocess_ with clang?

I have serious doubts. Overall compilation time is kind of irrelevant to this discussion, because Warp is just a preprocessor.

While you can get some X speedup to gcc by replacing the preprocessor, X, as a factor of overall compilation time, is usually 0.2-0.5 in most cases, depending on size of file.

I expect the gains warp gets over gcc overall from preprocessing to be similar to those clang gets over gcc overall from preprocessing.

(Though it depends on the size of files being compiled, etc).

Most companies that want actual fast overall compilation and have the resources, build caching distributed compilation infrastructure (Google, Facebook).

As mentioned, if warp is really that much faster than _clang 's_ preprocessor that it mattered, clang would be fixed :)

<comment><USER14> Faire enough, I meant full build times.</comment></comment></comment></comment></comment>


Eric Schmidt: "We Know Where You Are, We Know What You Like" - <AUTHOR> http://techcrunch.com/2010/09/07/eric-schmidt-ifa/ <comment><USER2> Eric Schmidt is hard for me to figure out. On the one hand, some of the stuff he says is eye-popping, in or out of context.

On the other hand, I don't really feel like there's an actual "evilness" behind the words to match up with the "evil" sound of the words. Someone truly interested in leveraging the potential evil would hardly going around making gawk-inducing statements like this. It's almost cartoon villain-ish (and thus gets headlines).

I've tended to think that it's the "well-meaning but poorly-worded summary of what the engineers are saying that contains poorly glossed, uncomfortable truths" explanation that's behind these statements. But that seems a little weak; shouldn't the CEO be better at that than Schmidt is? (Or if he truly isn't, why is he still CEO?)

So it occurred to me reading this one, that what if it is that Schmidt is deliberately "bungling" to try to warn us to caution, in his positive-spin, pro-company, CEO kind of way? Maybe the "foot in mouth" is precise and intentional, designed to get press and shake people up on the topic?

To sidestep the (valid but long and out of scope) discussion of "well, why doesn't he fix the problem?", from a business perspective, he could hardly full-stop the company on data aggregation. Even if he did, Google isn't alone in its data aggregation and more companies are jumping in on the game all the time.

Maybe Schmidt is actually risking the flak to make the point. Maybe he's not as culturally different from "the Good Google" as many seem to think he is. Or maybe he really does have an anti-gravity ray with which he will steal the moon and Miss Penelope Pureheart, bwahaha.

<comment><USER3> _Maybe Schmidt is actually risking the flak to make the point._

That's how I feel: if he makes some hand-waving denial then everyone will assume he's lying, so it's better to admit what the potential reach could be openly, and then address what the positives could be. I think their biggest problem from a service delivery standpoint is the difficulty of working with Google in a domain-specific mode. For a while they were experimenting with letting you up/downvote search results, and I was hoping that was going to converge with some of their set/collection tools so that you could build very specific filters (more than would be practical using regex) and save them for later use.

</comment></comment><comment><USER4> I have no idea how this comes off as creepy in an era where hundreds of millions of people voluntarily broadcast their daily activity and all their interpersonal relationships on social networks. Shit, Hacker News knows "where you are" and "what you like" good enough for government work.

<comment><USER5> Privacy is not no-one knowing anything about you. Privacy is _being able to control what others know about you_.

<comment><USER6> Possibly. Maybe, privacy is about being able to control what others you care about know about you.

I wouldn't for example want Nazi Germany to know that I am Jewish. That of course is an example, I am neither in Nazi Germany nor Jewish. But I suppose if I were Jewish, I would not care that the Israeli government knows I am Jewish.

I do not care what Google knows about me. I do not care either that Google knows where I am. I too roughly know where most visitors to my website are. Indeed sometimes I know where they are precisely.

If google wants to offer a service to remind me to buy milk, I might use it. I do not think that machines are at such a level yet where they can control me and tell me what to do next. If it reminds me to buy milk I might or might not go and buy milk. Indeed, possibly having a little google robot to go and buy my milk would be the science fiction future.

If however google decides all the sudden to tell for example my employer that I have said that I hate them, that is an invasion of privacy. As it would be if they told my girlfriend I slept with someone, or if they told my friend I lied to them. Now that would be the fiction future, or possibly the non fiction past of 1984.

<comment><USER7> > I wouldn't for example want Nazi Germany to know that I am Jewish.

Then you can't afford to let the Weimar Republic gather records saying you're Jewish, not because they're untrustworthy but because collating pre-existing data (gee, thanks, IBM) is where the Nazis got their lists.

</comment></comment></comment></comment><comment><USER8> I found it curious to put these two side by side:

Eric Schmidt: "A near-term future in which you don't forget anything, because the computer remembers. You're never lost."

Evernote.com: "Capture anything. Access anywhere. Find things fast".

Both paint close to the same thing, but with different colors. A great illustration of how much the good perception matters. And being an underdog maybe too.

<comment><USER9> Keep in mind you're comparing an off-the-cuff quote to a carefully worded marketing slogan.

<comment><USER8> I meant to compare the end result, not just the wording - apologies if I did not express it clearly.

I think I found a way to put it differently: in one case it is the user that lets the company collect the data, in the other case it is the company that lets the user collect the data.

To make the data equivalently useful, I would want to make it the most complete - so asymptotically I would get the same data set collected in both cases. But if this all is done with my consent, I would feel more in control about it - even if "yes to all" is more efficient for me.

</comment></comment></comment><comment><USER10> > _While I'm sure Schmidt has the best intentions here, it's probably time he > got a PR person or maybe even a friend that can clue him into the fact that > statements like "We know where you are, we know what you like" can come off > a little creepy_

So he should get a PR person to rephrase that statement until it sounds good, but no one understands what it really means? I fail to see how that statement could be rephrased and TechCrunch doesn't offer any suggestions either.

</comment><comment><USER11> So evidently taking Schmidt's words out of context and putting them into inflammatory headlines is the new black.

<comment><AUTHOR> The statement as reported doesn't appear to have a different meaning than the statement when read in context; unless I've missed an obvious piece of nuance.

<comment><USER12> On the flip side, Google gathers data. It's part of its DNA. It's hard not to sound creepy. It will be officially creepy when he hits all the points of the Santa Clause song.

<comment><AUTHOR> I agree with you about this being part of Google's DNA. But really, they need to get a mouthpiece that doesn't sound so creepy every time they try to tell someone what they're up to. They need someone with some sense of spin doing these interviews.

</comment></comment></comment></comment><comment><USER13> And then God became Google. Self became Facebook. Man became Machine.

We Love Big Google!...wait, or is it 'Like' now?

</comment><comment><USER14> Its quotes like this that make me think that in his mind, Google's real slogan is "Don't Be Evil... until They Can't Stop You."

Schmidt seems so different than the rest of Google. I feel like there are at least 2 internal cultures going on over there.

<comment><USER13> hahaha. this should be THE top comment but i sense a google bias on HN. do you?

<comment><USER14> I don't think Google necessarily has a bias, but only drawing from my own experience - technology companies have two seemingly (even though they are _not_ ) independent goals. These are to create a great product/app/technology/service, and to make money.

Page and Brin are hackers. Schmidt, while decorated with a Technical past, is a CEO. There are enough articles going around right now that say what a CEO's job is.

I figure a lot of the hackers here may not have the direct experience hearing someone talk solely about making money - taking the product and the quality out of the equation completely. So my comment comes off as abrasive or inflammatory, even though its most likely the reality.

Schmidt doesn't say "how can we make G-Mail great?" in meetings. He says "how can we be synonymous with the web, how can we be the absolute end-point for users and their technology?"</comment></comment></comment>


Stop Watching Sophie's Choice (And Get Some Work Done) - <AUTHOR> http://yehudakatz.com/2008/11/25/stop-watching-sophies-choice-and-get-some-work-done/ <comment><USER2> "Claim 2. Ruby is the slowest thing imaginable. I've tackled this argument with some vigor before, but suffice it to say that real-life Ruby applications must be compared against real-life PHP or Django applications, and they perform quite well. Even Rails, not exactly the fastest Ruby web framework, beats out CodeIgniter in Hello World benchmarks, and is dead even with CodeIgniter on more robust benchmarks. Comparing it with CakePHP, which is a closer feature-for-feature comparison, Rails completely destroys Cake in all benchmarks."

Huh? The original argument is that the language is slow yet Yehuda is comparing framework speeds. Apples and oranges.</comment>


The Growth Of Collegiate Entrepreneurship - <AUTHOR> http://howtosplitanatom.com/news/the-growth-of-collegiate-entrepreneurship/ <comment><USER3> I was accepted to the Hinman CEOs program at UMCP (<http://hinmanceos.umd.edu/>). My impression so far is that this program, and others like it, are a good first step for aspiring entrepreneurs. They concentrate like-minded and motivated students -- a great way to find a co- founder. (Which is essentially what I'm hoping to get out of the experience)

<comment><USER4> I think finding a team is still the primary reason to join one of these programs. Around here (FL), the startup culture is still not such that our entrepreneurship program really gives deep insight into starting a web-based business.

There is a lot of cross-over between the web and more traditional markets, but a lot of the details still need to be culled from experience. As you said, the really nice thing is that you find a lot of like-minded, entrepreneurial people -- which is often one of the harder parts.

</comment></comment><comment><USER5> I'm just about to graduate from Babson with a degree in entrepreneurship. Not going to lie, it leaves me desiring more in the entrepreneurial field - <USER2> just don't teach it right here :(</comment>


What Does HN Recommend for Presentation Slide Creation - <AUTHOR>

I'm going to be making a presentation at the next LA HN meetup, and I just realized that I haven't had to make slides in ages. What software do my fellow coders recommend? I run Ubuntu, but would prefer something web based if at all possible. <comment><USER2> I usually use LaTeX with one of the presentation packages, but if you don't already use/like LaTeX or have significant math, it might not be worth the effort.

Prezi has lately been getting a lot of use at various conferences. Initially Prezi presentations got a lot of positive reception just for the novelty, but I think it's used enough these days that that part might be diminishing. <http://prezi.com/>

OO Impress and Google Docs presentations are fine for relatively simple things. OO Impress can probably do more complex things too, but I find it sort of clunky to use.

I actually did one presentation in just some hand-coded HTML with prev/next buttons. One advantage to that approach is that you can fairly easily include editable, executable .js code examples.

<comment><USER3> Yeah, I would use Latex with the beamer-latex package.

</comment></comment><comment><USER4> I have had good luck with 280Slides: <http://www.280slides.com/>

But, don't expect the site to be completely without quirks. Leave yourself plenty of time to put the slides together, and export a file before your presentation just in case. I did have a little trouble getting their software to work occasionally.

<comment><AUTHOR> I was trying to remember the name of this site, and my google-fu was failing me. Thanks!

</comment></comment><comment><USER5> I recommend slidedown - <http://github.com/nakajima/slidedown>. It processes markdown into great looking HTML slides that have code highlighting via pygments. I used it recently for a JavaScript presentation - <http://jpignata.github.com/jasmine-bkjs>

<comment><AUTHOR> This looks quite interesting, I just may try this.

</comment></comment><comment><USER6> Google Docs is really great for me. Might be too bare bones for some people though.

</comment><comment><USER7> The way to do a presentation has changed a lot. The way you do it today is with a image and a caption to explain the idea, when you are explaining the idea; and when you are describing a code snippet embed it.

Obviously you iterate over the process. If you do it in powerpoint or keynote, it sucks. Are you manually going to copy paste the code every time?

Use latex with beamer class. Even tho' it is old, when customized, it _is_ still the best way to do presentations.

<shameless plug>

I created a (what I believe is) awesome presntation: [http://www.slideshare.net/scorpion032/building-pluggable- web...](http://www.slideshare.net/scorpion032/building-pluggable-web- applications-using-django)

using Beamer class and here are the custom commands used: [http://github.com/becomingGuru/gids-django- ppt/blob/master/c...](http://github.com/becomingGuru/gids-django- ppt/blob/master/contents.tex)

</shameless plug>

</comment><comment><USER8> There's Scott Chacon's interesting approach to presentations called ShowOff: <http://github.com/schacon/showoff>

</comment><comment><USER9> If it's simple, then just about anything (including Google Docs) will do fine for you.

But if you have a complex presentation, or you're a stickler for detail, I recommend creating each of your slides in Inkscape or Adobe Illustrator, and stitching them together with something else. It's the only way to get the design _just_ right.

</comment><comment><USER10> What kind of presentation? _I_ would strongly recommend LaTeX-based stuff (specifically, powerdot), but my presentations tend to involve quite a bit of mathematics...

<comment><AUTHOR> There's going to be code, only JS and Ruby though. I'd rather not have to learn latex for this to be honest. I just need simple slides, with code, and maybe a picture or two.

Perhaps I'm over thinking this and should just use Google docs.

<comment><USER10> LaTeX is cool, but it's probably a bit more than you need. In this specific case, you may want to go with something browser-based - you could actually execute the Javascript!

</comment></comment></comment><comment><USER11> I've presented before using html/css files. Normally I'd have used Google Docs, but formatting the code separately was too difficult.

</comment><comment><USER12> I really enjoy Keynote, if you were on a Mac.

When I used Linux, I just used the Google Documents presentation maker.</comment>


Show HN: Pnyxter – a video app for debates and discussions - <AUTHOR> http://www.pnyxter.com <comment><USER2> The dependency on Flash will shape the market segment that is likely to participate. Overall, the linear nature of video means more substantial time commitments than a text based format: skimming video is hard, amateur webcam video of arguments is a use case for skimming, and people who produce high quality video probably have other options.

Maybe a Twitter like approach...20, 30, 40 seconds limit might work.

Good luck.

<comment><AUTHOR> Thank you for your feedback!

Video is encoded in HLS and we use Bitdash player that falls back to native players on Android & IOS etc. [http://developer.dash-player.com/supported- formats-devices](http://developer.dash-player.com/supported-formats-devices)

I agree that the main challenge for us is to get substantial time commitments from the users to create a quality video and post. Most people are not that vocal, but some are - specifically politicians and celebrities.

Twitter started with 140 characters and eventually had to remove the restriction - so not sure if limiting the video length would be helpful. Alternatively, I think 20 sec preview/trailer of the video would be useful in filtering out uninteresting videos.

I see some merit in doing video only based debates & discussions - reduces the chances of abuse & troll via anonymous and coward text comments. More often, useful comments are lost in sea of useless and irrelevant comments.

<comment><USER2> If two people are going to go back and forth on video, why not use YouTube or Google+ or Facebook?

Why not serve HTML video to everyone?

I wonder if scanning video for problematic content will be easier than text, e.g. 1/2 seconds of sexual content sprinkled in a five minute video may require watching the entire thing.

<comment><AUTHOR> Youtube used to have video responses which they discontinued due to lack of engagement - however, Youtube is a very generic video site and not all types of videos are meant to have video responses. And if you give an option of text comment, most people may tend to use it first because they are familiar with it.

Existing social networks such as Youtube, Google+ or facebook are not conceptually designed for video debates & discussions - i.e showing all video responses of that specific topic in one place. "Related Videos" section does help a bit, but not fully.

Today, people are extensively using facebook to posts video selfies where they talk on a topic or express an opinion, but the responses are limited to text comments and it does not give the feel of a proper debate like people do in real life.

I've provided a feature of tagging a video response as "for", "against" or "not applicable" \- thus giving it a Debate like feel.

Scanning for video content is a challenge - currently planning to do it manually till it becomes a scale problem, and also depend on the users to flag inappropriate videos.</comment></comment></comment></comment>


Associations of Egg Consumption with Cardiovascular Disease and Mortality - <AUTHOR> https://jamanetwork.com/journals/jama/article-abstract/2728487 <comment><USER2> Oh great, another one of those bs self reporting nutritional studies over super long periods of time. 17.5 years and they only followed up once from what I can tell. Can you accurately report what you ate over the last 17.5 years?

Even over the past week can be difficult as I realized when I started tracking my food in MyFitnessPal. Unless consistently tracking, it's pretty easy to be very far off from what you actually eat.

That's assuming people are even trying to be accurate. Many look on the past with rose tinted glasses and forget about indulgences and snacks.

These studies are plague on the industry and need to go away.

<comment><USER3> Are you suggesting that they didn't actually eat more eggs / cholesterol, but some other factor that makes people statistically significantly more likely to have CVD and die also makes people more likely to falsely report egg / cholesterol consumption?

<comment><USER4> An obvious factor to look at among the subjects would be body fat level.

Maybe many of those who consumed more eggs or cholesterol simply just ate more.

If the study simply tracked calories, maybe _calories_ would be found to be correlated with CVD risk.

Problem with that, you can't really track what some people eat for 30 years.

<comment><USER5> 100% this. They don't control for lean mass or anything like that, so it's hard to say if it's the cholesterol or simply overeating that is the problem. I want to see a study where Calories and Macros are held the same but one group eats more cholesterol than the other and see what those results look like. Sadly those kinds of studies are very hard to do in the nutritional space.

</comment></comment></comment></comment><comment><USER6> Choline is an extremely important element for health. Recent studies have shown that it has a dramatic positive effect on fatty liver disease, other ailments.

Egg yolk is a major source of choline. Fatty liver disease has seen a dramatic increase since people have removed eggs from their diets.

This study is questionable as other commenters have mentioned. I'm not buying the "eggs are bad" sentiment again.

</comment><comment><USER7> Eggs. Every decade 180° turn. If you don't like this paper just wait.

<comment><USER8> 180° is no exaggeration!

</comment></comment><comment><USER4> Eggs are often consumed with a heaping order of carbohydrates.

Are we talking eggs here? Or Egg McMuffins with side orders of hash browns, drizzled with ketchup?

</comment><comment><USER9> I wonder who funded this research?

Did it also account for frequent egg-eaters tendencies to maintain a particular kind of diet regarding other foods, and other similar associations?

<comment><USER10> Right? Sausage and bacon seem likely culprits.

</comment></comment><comment><USER11> "Associations of Dietary Cholesterol or Egg Consumption"

Yes, eggs are good way to ingest cholesterol, but in the classic American diet, they are certainly not the only way. It feels suspect for them to pull eggs, and only eggs, into the spotlight.

</comment><comment><USER12> Here's another study reaching the opposite conclusion: [https://heart.bmj.com/content/104/21/1756](https://heart.bmj.com/content/104/21/1756)

The key difference is "Among US adults..." versus "Among Chinese adults..."

Hmmm, maybe it's not the eggs?

</comment><comment><USER10> But I like eggs damnit.

Edit 1. My comment was made on a submission, which I did not think would gain much notice. Oops. Low quality comment to the fore!

Edit 2. Really though, I eat a couple of eggs a day. I should scale it back anyway, as a hedge, and eat non-traditional (In USA) breakfasts, like rice and beans.

<comment><USER13> How many times have they flip-flopped back and forth on eggs alone? It's easy to get the impression that the people running these studies are either biased or simply don't know what they're doing.

<comment><USER14> Beyond the prevalent bias, nutritional science is just hard. I doubt we'll ever really get a handle on it.

It isn't ethical to lock people up and feed them a steady diet of something we might thing is going to cause them to develop some disease. So we have to rely on mostly self-reported data collected over extended periods of time.

That being said, I think the first pushback against eggs had to do with their high amounts of cholesterol. It was original assumed that dietary cholesterol intake was related to blood cholesterol levels. Which is something we now know to be false.

However, eggs are very high in saturated fats. The American Heart Associate still recommends that these be limited (from all sources) because there is a good deal of evidence that saturated fat intake contributes to elevated LDL cholesterol.

I generally trust AHA recommendations, but they are not free from bias, as they have food companies as "corporate supporters."

</comment></comment></comment><comment><USER15> Totally commonsensical theory. Just have eggs and coffee together. The effects negate each other and while you are at it toss some garlic and olive oil in the egg scramble. No need to thank me.

<comment><USER16> So, wait...the theory, then is to have...breakfast?

Sign me up.

</comment></comment><comment><USER17> Amid the neverending diet controversy it seems safest to do low carb (non- keto), medium high-quality fat of which a majority is monounsaturated, medium protein - and be aware not to reduce saturated fat too much as it's not that scary after all, but also don't go overboard like some of the somewhat extreme saturated fat advocates that have appeared in the last few years.

<comment><USER18> Why low carb?

<comment><USER19> Carbs = Sugar. Period, end of story. The key to good body composition is a high protein, low carb (low sugar) diet. Avoid foods that spike insulin.

Anything else is hogwash, because calories are not calories.

<comment><USER20> [needs citation]

<comment><USER3> Most people seriously interested in this topic should already be familiar with the "insulin index" paper (was reposted to HN within the last couple weeks).

EDIT: Or maybe just 3 days ago? Seems like longer. [https://news.ycombinator.com/item?id=19369743](https://news.ycombinator.com/item?id=19369743)

</comment></comment></comment></comment></comment><comment><USER21> I call bullshit. Classic case of correlation != causation.

</comment><comment><USER22> I wonder if statins remove the additional risk.</comment>


Ask HN: I'm good at coding but bad at competitive coding - <AUTHOR> I'm a computer science student and I consider myself good at coding, that is,  designing the structure of programs, utilizing abstraction, managing states, and other OOP concepts(that's what I'm familiar with, I've started looking into functional programming). But I'm not very good at competitive coding.
Some of my classmate are good at competitive coding but the 'software' they create is just horrible (nested if/for/while blocks which are 5 levels deep, overly complicated code, stuff which can be simplified by just throwing in some POJO's).
Is the fact that I'm bad at competitive coding a symptom of something serious (weak foundations in algorithms/data structures)? Am I missing out on something? <comment><USER3> Here's an more pragmatic take. Being good at competitive programming means you: -have good problem solving skills -can operate under time pressure -have a good understanding of algorithms and data structures

If you are bad at competitive programming, it most likely means you don't truly understand algorithms/data structures, and you have a weak problem solving foundation. It's harsh, but it's most likely true. The good thing is that you can improve your problem solving skills depending on the time you spend.

Does this affect you? If you want to work at FB/Google/Microsoft or any Big 4/FAANG company, you will need to be at competitive coding to some degree since all the interviews are based on these types of questions. If you want to excel in your job/get promoted quickly/go into management, then obviously other qualities and skills, especially networking, are 10x as important. But at the same time you will need to jump ship periodically to advance quickly in your career, which will require staying sharp and constant interviewing.

Overall, if you're an ambitious person that wants to excel in SV, competitive coding skills are paramount for interviewing. Of course, there are other ways to "make it": start-ups -> getting acquired/IPO/becoming a VC. So you don't need to go to FAANG. For those things, skills like people selection/business prioritization are 10x more important. If you don't give a shit about status/money, then you don't need to care about competitive programming because lower-tier companies won't care too much about that.

The bottom line is that it's not hard to learn OOP concepts/structure/abstraction or fucking whatever other coding guidelines there are. It's just a bunch of best practices. If I had to say it in one line, it would be that if someone is good at competitive programming, they can get good at designing software. The opposite is not necessarily true, because problem solving isn't something you learn in a day. So there will be more demand for people that are good at problem solving, who will be valued higher. Hope this helps.

<comment><AUTHOR> Networking as in Social Networking or computer networking.

<comment><USER4> The former.

</comment></comment></comment><comment><USER5> Peter Norvig, director of research at google, made some observations on this topic: [https://www.reddit.com/r/programming/comments/44kpzk/peter_n...](https://www.reddit.com/r/programming/comments/44kpzk/peter_norvig_being_good_at_programming/)

I was somewhat involved in the programming Olympiads in high school and to a lesser degree icpc style programming in college.

And later when I founded my own startup - I thought these competitive programmer types would be great hires. But in reality it's been a bit of a mixed bag. Real world software engineering is about readabiliy, maintenance, extensibility, etc - the actual data structure and algorithm work is typically minimal (which these competitive programmers relish on) and even then you'd probably want to delegate to some battle tested open source library.

Of course I don't want to hold having a competitive programming background against the candidate but no longer prioritize that skill set.

</comment><comment><USER6> No, in work coding is anything but a competition, if you want to do well in the work place your track record contributing to a free software project will give a potential employer a better idea of how you would do on their team than whether you win coding competitions.

</comment><comment><USER7> Don't worry about it. Code competitions have different goals than what most people need/do with a CS degree.

As a metaphor, think of programming competitions as something like fencing. The best fencers have a good athletic ability.

There are jobs like fire/rescue which require a base level of athletic ability.

But that doesn't meant that a good fencer will be a good firefighter, or vice versa.

More specifically, there are ways to practice to be good at code competitions. You can get old tests and practice them. You can drill at writing some of the basic data structures so you can just crank them out. Some schools have programming teams where they do this sort of practice every week.

But these aren't part of the standard CS curriculum, almost certainly because it isn't that relevant to what most people want from a CS education - <USER2> for students nor for potential employers.

</comment><comment><USER8> Competitive coding signals that: * you can read (understand requirements) * visualise problem space * modify problem space * efficiently prune problem space is search of solution * have good understanding of DS and alorithms * command computer to help you finding solutions

I would say competitive programming is much more about math than software engineering.

I would say all these skills are useful to be good SE but you also need: * good code organisation * very good semantics skills (domain modeling, naming) * debugging skills (correlated to problem solving) * conversation skills (posing precise questions and answers) * beeing comfortable with ambiguity and change of requirements (especially startups) * being able to work with/fix shitty abstractions that less(sometimes "more") skilled people come up with

For average job even CS degree is overskill.

<comment><USER9> You tried to make bullet points by inserting a newline character before each asterisk, but it failed to generate the expected response. I wonder which of the aspects you brought up would have contributed to this problem from the HN engineer perspective :-)

</comment></comment><comment><USER10> I would hire you over a competitive coder.

Coding professionally is a long game with lots of human elements. Competitive coding is a short game where you only need to worry about the machine that's judging you.

<comment><USER11> It's a long game for the business. It can be a long or short game for the programmer.

<comment><AUTHOR> Are you trying to say that by writing clean code one makes himself disposable?

<comment><USER11> I'm saying:

It's the goal of some engineers to write clean code for the benefit of the business.

It's the goal of some engineers to slap together something new and shiny, present it to management and get it approved for the benefit of their careers.

Engineers goals sometimes align with the business and sometimes don't.

</comment></comment></comment></comment><comment><USER12> It's the difference between classical music & jazz.

You're a classical programmer, down to the book. Hit the keyboards just like you learned. It's sometimes good and very desirable.

However, when there's a party going on, and one is needed to freestyle, come up with new sounds and styles on the go, the preference is for a Jazzy programmer.

You can be both, and being one and the other is missing out. Sounds like you will thrive at an enterprise, but suffer at a start up. Now here's the crazy thing, even jazzy types can thrive at enterprise, they are usually the super heroes that wire up the core plumbing of the system. If they get into the ears of one of the high level Cs, they will be paid more than everyone else, they will come in fast with their cohorts, wire up the new system, and no matter how messy, the rest of the classical types get to play only on top of what they built.

Given the choice between being one or another. I rather be the competitive messy code, at least they can solve the problem. The worst thing I've seen is the classical clean programmer, who has "designed an amazing system, UML, nice code/directory layout" tons of clean code, comments, and the dang thing doesn't work.

<comment><USER13> I really like your classical vs jazz analogy, but I don't think it applies here.

You can "jazzily" improvise your way through higher levels of abstraction just as much as you can immediate control flow. The folks OP describes aren't really exhibiting a skill that's useful in production at all. They're just venturing out into the creative arts of coding. They break rules to do interesting things. Which is cool, and might _sometimes_ correlate with commercially useful boldness or cleverness, but isn't a particularly well- tuned signal.

The pressures of competitive coding can open up new ways of thinking about code and about problem solving. But there's still a big leap from there to any kind of good engineering, startup or enterprise or other.

Idolizing the OP's coders is only helpful if what they're doing (competitive coding) is what you want to do. It doesn'f speak to commercial value.

</comment></comment><comment><USER14> I remember someone posted an HN post about tips for competitive programming. Some of the code I saw in there is horrific and I would never approve in a PR but definitely makes sense when you're coding with a time crunch.

In general, I would say while there might be some useful concepts there, you are not missing out. It's an interesting form of programming but not the same as what you would expect to do at work.

Terrible analogy but I'll go with it: just like how you'd probably never be expected to Iron Chef your way in a formal restaurant. You don't have a bunch of random ingredients and present what you can as long as it fits the theme. The customer asks what they want and if you don't have it or can't have it, making something else isn't acceptable most likely so the proper way to handle it is to ask the customer what they want instead and you give them your sincerest apologies.

</comment><comment><USER15> I honestly forgot that competitive coding was a thing. I think I'd done it a few times in high school, but that was it.

If you weren't good at sprinting and running, would you be worried that you were a bad walker? Would you see it as a symptom of something serious? Of course not.

</comment><comment><USER16> Funnily enough, I was at a programming competition that started just after your post.

I'm not sure how relevant it is for work, but its fun. I think people generally grow to the level of competency their environment demands of them. If you need to work on your problem solving at work, you can just work hard at trying to solve more problems at work and self-study in whatever way you like.

One angle though: its fun to work on this stuff. If you want a job where you can do more fancy problem solving and less plumbing, who knows, maybe somebody would hire you for winning one of these?

</comment><comment><USER17> For me, what competitive coding, or practice of it, improves 2 skills: (1) solve an algorithmic problems and (2) translate ideas into code quickly and correctly.

The number 1 is not that essential. But the number 2 is somewhat essential for day to day work.

Being able to code faster for programmers is like being able to run faster for footballers. It's not everything obviously. But if you can code much faster, you will be a better programmer.

Being obsessed with coding speed is also like being obsessed with running faster. After a certain threshold, it's probably not that helpful.

Anyway, at first, I didn't believe that there would be anyone who could code like 5x-10x faster than me. From practicing a div-1 level-3 problem in topcoder.com, even if I read up the answer, it still takes me like 1-5 hours to implement a solution. A champion would take like 30 minutes including finding the solution.

It was like WTF moment. How could people be that different?

Be aware that somebody can code 10x much faster than you is probably what you might miss out. Once you are aware of that, you know you probably can practice, at least, to be 2x or 3x faster.

</comment><comment><USER18> Without seeing your code its hard to say. I will say that I have worked with kids right out of college that the "competitive coding" mentality when writing software. They come up with a solution really fast, but the code ends up being very clever. The clever code ends up biting you 6 months down the road when you figure out what actually needs to be done.

</comment><comment><USER19> > Is the fact that I'm bad at competitive coding a symptom of something > serious (weak foundations in algorithms/data structures)? Am I missing out > on something?

Maybe. Assuming equal practice/preparation time, they're smarter than you.

No big deal.

<comment><USER20> Do people actually think like this?

All it means is that they're better at what competitive coding tests for. There's nothing about being "smart."

<comment><USER19> What do you think being smart does for you, then?

<comment><USER21> Here we are thinking you're not very smart for making a comment like that.

The fact is that there is no single "smart". Instead there are many aptitudes, which combine and overlap to make people good or bad at specific skills.

Arnold Schwarzenegger was strong, but an average rock climber could best him at rock climbing. The average long distance runner could run laps around him.

We all understand this to be the case with respect to physical activities, but for some reason this idea of single-faceted intelligence persists.

<comment><USER19> I'm not positing single-faceted intelligence. (Which does exist, there are obvious kinds of brain problems that hurt you at every task.) I'm saying their intellectual talent is what makes them better than OP. Their natural ability. The stuff that's useful for programming contests, _obviously_. Low on geometry, high on logic and algebra, good for one-hour problems moreso than research, that sort of math.

</comment></comment></comment></comment></comment><comment><USER22> Competitive coding is not the measure or indicator of success.

Reminds me of competitive math contests in school, it didn't mean that the smartest people knew how to apply it to real life to solve problems for people that were valuable.

You absolutely have lots of value to learn, become, and add. Programming is about practice, practice, practice, so build, build, build.

Put in your time, never think you've arrived and you'll never stop arriving at cool things along the way.

</comment><comment><USER23> I too am in the same boat. Never did much competitive coding, but am pretty decent at software development.

My colleague is good at both of them. And somewhere I feel, being good at competitive coding helps you develop an approach towards solving a problem. It also comes in quite handy when you have to make performance optimisation. Atleast that is what I observed with my colleague.

You should try to develop the logic by solving these questions!

Cheers

</comment><comment><USER24> The data suggests that they are better than you at implementing some types of algorithms. Yes you are missing out in as much as they appear to possess skills that you don't.

Also competitive programming is tons of fun so I would say you're missing out by dismissing it.

<comment><USER25> Tone of OP's post doesn't suggesting he is dismissing it. He just isn't that good at it and doesn't have a natural interest. Of course he'd be well served trying to get better at it anyway for career reasons, but it's quite clear that there isn't a 1-1 mapping between Leetcode skills and actual software engineering as done by most organizations / companies out there.

</comment></comment><comment><USER26> One way to get better at coding on the fly is to just interview at many companies (that you have a genuine interest in). Practices makes perfect, as with everything else.

</comment><comment> letsgo-gb Why do you want to be a professional coder? Does everything have to be a competition?

</comment><comment><USER27> Depends on what you mean by bad (how bad it is). It is definitely good to know basic algorithms and it is useful to learn to think that way. Ability to write code quickly is good too.

However, note that people who are good at competition literally trained writing common algorithms fast - there is zero value in that. I knew people who could write graph search with closed eyes in various vatiations and that made them save time in competition. That is irrelevant anywhere else. They also learn and train a lot more and harder algorithms - there is some but still little value in that unless you like it.

Tldr; if you struggle with algorithms 101 (binary tree, graph search, minimal path, etc), then it is good to learn them. If you are very slow, it is good to practice to become faster. Anything else is hobby/interest - do it if you like it, do it if you want to do it in the future.

Ability to write readable code actually valuable.</comment>


What is a reflow? - <AUTHOR> http://dougt.wordpress.com/2008/05/24/what-is-a-reflow/ <comment><USER2> Wow, I love it. Brilliant visualisation of the browser's rendering process. This could even be useful in practice for working out how efficient your markup/CSS is. People with slower devices will appreciate shorter rendering times. Now if only there were instructions for how they came up with these. (I'm guessing it's some special debug mode for the developers, so you'd have to compile Firefox with some patches)

</comment><comment><USER3> I expected this article to be about soldering things in a toaster oven.

[http://www.instructables.com/id/Toaster-Oven-Reflow- Solderin...](http://www.instructables.com/id/Toaster-Oven-Reflow-Soldering- BGA/)

</comment><comment><USER4> CSS would become so much easier to learn (and teach!) with a tool like this.

Actually, "would" should probably be "will", since this tool is so useful.

</comment><comment><USER5> more reflow action: <http://gyu.que.jp/sjs2007/clip/M_reflow.wmv>

and the main page (linked from comments) <http://gyu.que.jp/sjs2007/></comment>


A font to make sparklines in seconds - <AUTHOR> http://aftertheflood.co/projects/atf-spark <comment><USER2> Oops, the site was hackernewsified and is intermittently down for me.

Neat idea, and I do like the OTF hacking, but why not use simple SVG?

        <svg viewBox='0 -20 85 40' style="height: 1.5em">

          <path d='m 0,0 L 10,5 20,8 30,6 40,3 50,-2 60,-8 70,4 80,6'
                fill='none' stroke='black'/>
          <circle cx='80' cy='6' r='2'/>
        </svg>

It has the advantage of using actual data, it is trivial to generate, is embedded into HTML without an extra fetch, won't confuse screen readers, doesn't require the normal web-font alternative file format dance, and isn't quantised to a set of precreated values.

Poor old SVG, it is constantly being reinvented.

<comment><USER3> > won't confuse screen readers

I don't disagree SVG isn't difficult and a lot more flexible, but I think in this case, the font has the advantage that it _is_ accessible to screen readers. 345, A screen reader is going to see an SVG element and I imagine at best it will use some alt-text or other "description" of the graphic. Versus if the data is literally `123{123,234,435}424` then a person without vision can get much more information about what's actually being conveyed.

<comment><USER2> You have to remap the data though, from the examples:

Alibaba: 93.89{40,27,69,58,44,42,52,39,27,8,40,45,33,37,24,20,30,36,36,29,40,60,50,40,50,63,87,100}152.11

Brexit: 5562{4,27,48,37,60,40,56,54,59,62,37,63,30,59,75,68,50,40,47,30,5,9,50,74,59,75,100,92}7501

It only accepts numbers in the range 0-10 (for a sparkline) or 0-100 (for the bar or dot plot), and because it performs no vertical normalisation, you have to remap to that. Making either your data gibberish, or your sparkline oddly offset and scaled (e.g. if you put in the brexit FTSE data / 100).

</comment></comment></comment><comment><USER4> There are several predecessors with the same idea of using a font that represents numbers as a graph: FF Chartwell [1], Chartjunk [2], Datalegreya [3].

[1]: [https://typographica.org/typeface- reviews/chartwell/](https://typographica.org/typeface-reviews/chartwell/)

[2]: [https://nsfmc.github.io/chartjunk/](https://nsfmc.github.io/chartjunk/)

[3]: [http://figs-lab.com/datalegreya](http://figs-lab.com/datalegreya)

<comment><USER5> The third one, datalegreya, looks amazing.

</comment></comment><comment><USER6> Ha, I dig the name `spark`. I did a tangentially related project years ago — also called spark — that did simple sparklines in shell: [https://github.com/holman/spark](https://github.com/holman/spark)

Just as a warning, though; over the years I've gotten 3-4 requests by media companies to write a book on Apache Spark, so, um, watch out for that one. (Regardless of whether you know Apache Spark or not, you should go for it. I believe in you.)

<comment><USER7> There also Spark for Java

[http://sparkjava.com](http://sparkjava.com)

</comment></comment><comment><USER8> I like the idea of sparklines and I have used them myself on occasion. But now that I think about it, I'm not sure I've actually ever found a sparklines plot insightful or useful.

<comment><USER9> (cynically) sparklines are awesome eye candy for flogging your product.

Any new HR product should have a hero page with:

\- a couple of sparklines

\- a mugshot of user/candidate

\- some important looking numbers in a giant-assed sans serif font

Throw in a social media-like feed down the side of the page for added oomph.

Things have moved on from the days when a pie chart was table stakes.

<comment><USER10> Every product only needs one sparkline anyway. 0% on the left, and bit of up and down (to make it look realistic) then a steep climb to 101% on the right.

<comment><USER11> My error metrics dashboard begs to differ.

Maybe we can just relabel everything in terms of "features discovered".

</comment></comment></comment></comment><comment><USER12> How does this play with accessibility? Sounds like a good idea, but is the HTML markup semantically understandable to a low vision user?

<comment><USER13> There is no HTML, it is literally text like: {1,2,4,6}

I'm not versed on screen readers, would wrapping that text in an HTML element (like a span) with a title attribute that read: stock price for last 5 years - solve accessibility issues? How do screen readers generally handle charts?

<comment><USER12> Usually a chart would be an SVG that contained a <title> and <desc> tags. Or an  tag with an alt attribute.

I haven't tried it, but perhaps aria-label would do the trick.

My point is, people create these fairly novel approaches all the time, but never think about the structure of the markup, and if the semantic meaning is at least usable for screen readers. Turning on screen reading functionality in Chrome, the first example in the article read as follows:

"1 2 3 left brace 10,20,30,40,50,60,70,80,90,100 right brace 7 8 9"

The semantic meaning is lost.

<comment><USER14> A quick check with ChromeVox confirms that, at least for that screenreader, aria-label works fine. e.g. {10,20,30,40,50,60,70,80,90,100}

<comment><USER15> Come to think of it, generating decent verbal description of graphs automatically would be a worthy (and probably hard) challenge.

</comment></comment></comment></comment></comment><comment><USER16> I have never seen a useful sparkline.

<comment><USER17> finance.google.com

<comment><USER18> Where is the sparkline on that page?

<comment><USER17> sorry you have to click on an actual stock

[https://finance.google.com/finance?q=NYSEARCA%3ASPY](https://finance.google.com/finance?q=NYSEARCA%3ASPY)

<comment><USER16> it is not useful.

<comment><USER17> lol ok, it is if you're trying to gauge whether a stock's behavior is local to itself, or signifies a trend in all the stocks in the same related sector .

</comment></comment></comment></comment></comment></comment><comment><AUTHOR> Github repo: [https://github.com/aftertheflood/spark](https://github.com/aftertheflood/spark)

</comment><comment><USER19> Can any with more knowledge of fonts offer some insight on how this actually works? I'm guessing they're doing something clever with ligatures?

The "how it works" section doesn't really explain anything, it's more of a "how to use it".

</comment><comment><USER20> This is cool, but I'm curious what makes this superior to just using javascript in a browser? Could still use the same input syntax. Bonus points for having a graphic that could easily scale up if someone right clicks to open it specifically.

<comment><USER21> I think where it excels is "dumb" Word docs, terminal, etc. since it's just text.

<comment><USER2> You're brave using custom fonts in Word. Fine for personal use, a nightmare if the document is ever shared. And what terminals allow you to change font from the program writing to stdout?

<comment><USER22> xterm

        $ printf '\e]50;%s\a' '-your-x11-font-spec'
        # for example:
        $ printf '\e]50;%s\a' '-misc-dejavu serif-*'

<comment><USER2> That's very cool, I had no idea.

</comment></comment></comment></comment></comment><comment><USER23> Reading those examples hurt my brain, but probably because I'm used to reading figures with labelled axes. My first gut reaction was, "great, figures with no x-axes," however, he had the x-axis in the text, which made my head hurt more.

First, my eye gravitates towards the figures. This forced me to look at the sparkline to get the shape, go back to the left to see the y-axes min-limits, then scan to the right to see the other limit. Then, I had to read around the line in the text to understand the x-axis, then look back at the sparkline again to understand the trend line in context. It caused more confusion for me than enlightenment.

<comment><USER24> I tend to like sparklines. They can be pretty useful on dashboards and for reports. But this implementation, in my opinion, is not as visually digestable as the JS implementation [1]

[1] [https://omnipotent.net/jquery.sparkline/#s-about](https://omnipotent.net/jquery.sparkline/#s-about)

</comment></comment><comment><USER25> Tufte is so 2000s; just include a huge ass stock photo every paragraph.

<comment><USER26> Maybe is Tufte so out that he is coming around the circle and is hype again.

<comment><USER27> I'm biding my time until the Cubist reaction to Flat UI.

</comment></comment></comment><comment><USER28> Nice idea! This approach could be useful for quick charting in data analysis tools like Jupyter Notebook and the like. It can even be embedded into Markdown.

</comment><comment><USER29> Doesn't appear to be working in edge.

<comment><USER30> Seconded.

</comment></comment><comment><USER31> This is amazing!

</comment><comment><USER32> Yessssssssss, love it!

</comment><comment><USER33> Very nice but I cannot get this to work in MS Word

<comment><USER34> Format > Font > Advanced > Use Contextual Alternates

[https://github.com/aftertheflood/spark#using-atf-spark-in- ms...](https://github.com/aftertheflood/spark#using-atf-spark-in-ms-word)</comment></comment>


FreeBSD support is coming to Docker - <AUTHOR> https://github.com/docker/docker/issues/13592

<comment><AUTHOR> The work can be observed here: [https://github.com/kvasdopil/docker/blob/freebsd- compat/FREE...](https://github.com/kvasdopil/docker/blob/freebsd- compat/FREEBSD-PORTING.md)</comment>


A response to people who ask: "How do I get into Movies?" - <AUTHOR> http://www.cineman.co.uk/ <comment><USER2> Encyclopedic. About all that is missing is contacts and that's probably not missing I just skimmed over it, but implicitly all these people are rehired because they know each other and have huge mutual trust based on experience.

I recall discussing with a stedicam operator how hard it is to get a union ticket from the media arts and entertainment alliance without a job, and how hard it is to get a job without a union ticket. Maybe thats changed. (I did a channel 4 funded 16mm film course in the 1980s in Leeds and did some focus pulling for a friend graduating from the BBC film school in cheltenham)</comment>


The Groupon Model - <AUTHOR>

I posted the below 48 days ago and got a lot of somewhat negative feedback. Then, google tried to buy Groupon. As a result of rejection, Google is now building it's own Groupon. BOOYA!
There is all this hype about Groupon and social buying. Why aren't advertising platforms doing this instead of buying platforms that do this?
Currently, the advertising platforms such as google adwords, facebook advertising, adbrite, buysellads.com, etc are all based on models that support "the highest paid advertiser will have the best placement." I know when I search, I want the best deals to show up - not who paid the most to give me the potentially worst deal for me. Opinions? <comment><USER2> Prediction: Google's coupon deals will not in any way affect their ranking of Adsense and Adwords based on profit (a function of bid price and clickthrough)

FWIW Targeted deal ranking is nevertheless something I'd be interested in exploring.

</comment><comment><USER3> familiar with Yipit? They are in the business of daily deal aggregation.

if you're doing an active search on google, i think that's different from the daily deal phenomenon. you might find deals online, but they're essentially the traditional coupons that have always been around. group coupons is something that finally took off in 2010.</comment>


The 6 Secrets to Getting Promoted (for Software Engineers) - <AUTHOR> http://fitfrnd.com/blog/2014/11/18/6-secrets-getting-promoted-software-engineers/

<comment><USER2> good secrets, but doesn't really apply well in my country, especially when they don't appreciate software engineers since they just outsource most of the projects to other companies, in which those companies would just outsource to another contractor and this chain keeps on going until to other countries.

In fact, rising is about boot licking and probably good soft skills

<comment><AUTHOR> in certain instances and with certain managers, boot licking might work. but it's not a good strategy, and doesn't work with good people as much as competence does.

Yes soft skills matter. You do not want to be seen as someone who's more disruptive than productive. You do not want to be 'tolerated'. Being able to persuade is a very important skill in a tech company. It's to be learned, rather than scorned :)

</comment></comment><comment><USER3> I think 4 is the most important one !! People start vouching for you then

<comment><USER4> I think a lot of the points apply to jobs in general. Who doesn't want a helpful and highly productive worker, or a someone who can be relied upon to do something well. Being obsessed about writing really good software does make you stand out. But knowing the architecture well is an uncommon skill, and I think starts making you eligible for a senior/architect type of role. Helping others succeed will help you make more friends than enemies in any workplace. 'The right kind of ambition' I think starts playing a major role as you move up - it makes you look like a 'company man' in a positive way, and not just an individual contributor. Cool headedness and standing up for the team are basic leadership qualities. I wish more managers had them. Mine doesn't.

<comment><AUTHOR> thanks, mostly agree.</comment></comment></comment>


Study: Twitter Is Not a Very Social Network - <AUTHOR> http://www.readwriteweb.com/archives/study_twitter_isnt_very_social.php <comment><USER2> Very apt point. Twitter is much more of a "social news site lite" than a social network.</comment>


How Alibaba and Baidu Hires Men with Men-Only Job Listings - <AUTHOR> https://www.theverge.com/2018/4/23/17272620/chinese-tech-companies-alibaba-tencent-baidu-gender-discrimination <comment><USER2> I would not exclude women from the candidate pool, for both moral and practical reasons, but if successful Chinese companies are doing this, it does cast doubt on the business _necessity_ of diversity in tech.

</comment><comment><USER3> I've worked in and out of the Bay Area. The Bay Area had by far the most diversity of anywhere I've been around this country as an employee and consultant. So they may not be perfectly diverse, it's a hell of a lot better than anywhere else I've seen.</comment>


James Watt: A Twelve-Year Flash of Genius - <AUTHOR> https://thonyc.wordpress.com/2015/06/04/a-twelve-year-flash-of-genius/ <comment><USER2> This subject is often poorly described, because it's usually written about by historians, not engineers. Here's a more realistic view.

1765\. Steel is rarer than titanium is now. Cast iron is available, but brittle and of variable quality. Welded seams are a long way in the future. Building a pressure vessel is hard, and building one that won't blow up is harder. Newcomen's engine is an incredibly inefficient one. It's not really driven by steam power at all; it uses steam and water to create a partial vacuum, so that atmospheric pressure pushes the very leaky piston into the partially evacuated cylinder.

Watt realized that cooling the cylinder on every cycle was just silly. Exhaust the steam for cooling elsewhere. (If you've got the water, don't even bother condensing it. Few steam locomotives carried condensers and thus required huge amounts of water.) He also used a little steam pressure on the cylinder; not much, only a few PSI. That was possible with machining no better than that used for Newcomen engines.

To go better than that, you have to have better boilers (ones that don't leak or blow up) and cylinders that don't leak so badly. One of the early specs for a cylinder/piston fit was that they should fit well enough that a shilling coin couldn't be pushed between them.

The next big breakthrough was when Wilkenson, who had a cannon-boring business and knew how to make a big accurate round hole in iron, got one of Watt's engines for his cannon foundry. Wilkenson saw how badly the thing leaked and how poorly the piston fit the cylinder. He realized that if he used his cannon-boring machine to make a steam engine cylinder, the engine would leak far less and do far more work. So he did, and cut a deal with Watt to make cylinders.

That made steam engines much more cost-effective and more widely useful, and launched the steam era. The next century was about getting the temperatures and pressures up without boiler explosions.

<comment><USER3> What resources should I consume to get a realistic view of industrial development ?

<comment><USER2> A good place to start is 1825, with the Stockton and Darlington Railway. Every railroad before that was a test or demo, but the Stockton and Darlington was 25 miles long, had several locomotives, and carried useful loads. They still had to use cable systems to get up some hills, though. Think of that as the public beta of railroads. The Liverpool and Manchester Railway (1830) can be thought of as the first production version - everything was moved by steam locomotives, and for the first time, there were tickets and schedules.

That's a key moment in history. Up until then, technology was a niche item - clocks, a few clunky steam engines here and there, some textile machinery. The life of most people hadn't changed much in the previous thousand years. Most people never got further than 50 miles from their place of birth. Suddenly, in 1830, that all started to change. Fast. Over the next 30 years, railroads went everywhere. Ordinary people could travel great distances. "Railroads will only encourage the common people to move about needlessly." \- Lord Wellington.

Next, steel. Read the history of the Bessemer process. Until the 1860s, steel was an exotic material, used mostly for knives, swords, and some gun barrels. The early industrial revolution and the early railroad era were built with iron, not steel. It's amazing how much was done with really crappy metal. Cast iron is strong in compression but weak in tension, and brittle. Wrought iron is reasonably strong in tension but easy to bend. Steel is isotropic, equally strong in compression and tension. The railroad industry adopted steel rapidly, and locomotives went from wimpy little things to monster machines. Other steel processes obsoleted the Bessemer process, and steel became widely available and cheap. Steel is about $100 a ton right now.

The history of the rolling mill is also important. No more banging out sheet from hot bar stock on an anvil with a hammer. With multiple stands of rolling mill, ingots went in one end and miles of thin sheet came out the other. It took a while to get that working right, but once it did, sheet metal was everywhere.

Then, machining. Few academics write about the history of machine tools. Lathes and drills go back to antiquity, but a lathe was not a precision machine until Maudslay built one in 1800 with a slide rest and leadscrew. He also came up with gauges and techniques for precision turning. This was the beginning of precision machining. The metal planer was developed around 1810. Now you could make precision round things and precision flat things. Casting was well understood, so you could make arbitrary shapes by hand-carving a wood master, using it to make a negative in sand, and pouring in molten metal. Casting isn't precise and won't get you a smooth surface, though; if you need a precision surface, you have to follow up with planing or turning.

Look at machines made in the 19th or early 20th century. You'll see cast or hammer-forged parts with a little finish machining, and the machining will almost always be a flat or circular surface. This is why steam locomotive parts look the way they do.

The general-purpose milling machine wasn't developed until 1932. The Bridgeport milling machine was such a great design that it's still manufactured and widely used. Now, you could make a huge range of shapes on one machine.

Along the way, cutting tools got better. You usually cut steel with steel, which requires clever metallurgy, cutting fluids, edge treatments, suitable speeds and feeds, and other details people don't think about much unless they do machine shop work. Getting that all worked out took decades, and all the details are in a thick book called "Machinery's Handbook", which can be found in any machine shop.

The first half of the twentieth century was when most of the clever tricks for making stuff in quantity were worked out. Stamping, progressive stamping, the automatic screw machine, the four-slide machine, and lots of other techniques were developed for making vast numbers of identical parts. For the first time in history, the ability to make stuff outstripped consumption. This is a key point. Throughout all of human history until then, the big problem was making enough stuff. During the 20th century, that problem was solved in a big way. Writers in the 1920s commented on the deluge of banal objects. (Sheet metal stamping had really taken off, and vast amounts of cheap decorative crap stamped out of thin sheet steel were everywhere. See a 1920s Sears catalog for a good selection.)

That's enough to give a sense of where to look for background. I'll stop at 1950, although manufacturing technology certainly hasn't. I've ignored the whole energy side (electricity, oil, etc.) because that's better known and well covered in Discovery Channel shows.

<comment><USER4> To put the history in context, it's nice to have some basic understanding of the physics/engineering involved in holding things together.

As no kind of expert myself, I really enjoyed JE Gordon's book _The New Science of Strong Materials_. It's a nice easy-to-read introduction, I'd guess about 250 pages long, and talks about not only iron and steel, but also wood, glass, etc. I also liked his later book _Structures_ , which is somewhat overlapping in subject but a bit longer, focused more on the engineering and less on materials per se or historical development.

The two books are from 1968 and 1978, respectively, but age pretty well. Used copies can likely be found for a few dollars.

[http://amzn.com/0691125481](http://amzn.com/0691125481) [http://amzn.com/0306812835](http://amzn.com/0306812835)

Someone who knows these fields better can probably recommend more recent sources.

</comment></comment></comment></comment><comment><USER5> I've been pondering a lot lately about the question: "what took them so long?". Why wasn't the printing press already invented/discovered by the Romans? Electricity? The Newton laws? The modern University? The steam engine? And on a related note, how come there are these "golden eras" where science advanced tremendously in certain regions at certain times (e.g. Germany 1871-1914 with Planck, Einstein, Röntgen, to name just a few) I have some ideas, but would welcome your comments/sources...

<comment><USER6> There was a precursor to the steam engine in ancient Greece [1]. Invention happened throughout history, but the context has to be there for the invention to be applied, the inventor to be free to invent and rewarded for doing so, and the flow of information to occur so other inventors can build on top of their work.

Case in point, no single individual invented the steam engine, it was a process that involved dozens of people across decades before a truly useful steam engine resulted, and the only reason those people could contribute is because of a society which didn't claim inventions as toys for a palace or required then to work all day every day as a farmer. See for example the difference between north and south Korea, same people, same starting point, different society and government, radically different outcome.

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

<comment><USER7> Not sure if the Korean peninsula is the best example, given the massive trade embargo going on.

Frankly we may be looking at a variant of learned helplessness on a national scale, in that if NK leadership is faced with a dilemma they can throw a proverbial tantrum and get the rest of the world to step in to calm them down "before the nukes start flying".

That is, the peninsula did not develop in a vacuum. they were part of a larger power struggle between ideologies.

</comment></comment></comment><comment><USER8> This criticism seems so odd to me. Does the author really believe that people reading that are going to assume that Watt knew nothing of steam engines, this idea hit him out of the blue, and he built a working model the next day? Of course he spent the previous years learning the problem domain. Of course it took him time to make his idea work.

But neither of those details changes the fact (I guess, the author does not try to dispute it) that on this stroll, Watt hit upon the key idea which eventually changed the world from muscle- and wind-powered to machine-powered.

<comment><USER9> " Does the author really believe that people reading that are going to assume that Watt knew nothing of steam engines, this idea hit him out of the blue, and he built a working model the next day?"

This is how many people who have never build or invented anything think these things happen.

</comment></comment><comment><USER10> At first glance I feared this was an article about [https://en.wikipedia.org/wiki/James_G._Watt](https://en.wikipedia.org/wiki/James_G._Watt)</comment>


.W3: Customize The Web By Writing Dot Files - <AUTHOR> http://github.com/azer/.w3

<comment><USER2> I like the idea, not the implementation.</comment>


Free Google Pixel3 XL if purchase via Google Fi Website - <AUTHOR> https://fi.google.com/about/device-promo-terms/#$200-fi-service-credit-with-compatible-phone-activation-on-google-fi-promotion-terms <comment><USER2> Looks like you get the money back in a travel gift card, thats only usable by airbnb, hotels.com and delta, etc.</comment>


Pushing Money to Debit Cards Using Balanced - <AUTHOR> https://balanced.crowdhoster.com/let-s-push-to-debit-cards

<comment><USER2> This would be a really big deal if it happens, essentially bringing Square Cash to the masses.

</comment><comment><USER3> I can believe there _is_ a market for this service, but that doesn't say much for the average consumer's savviness

Debit card numbers, designed to take money _out_ of your account, are what fraudsters _want_ and have compliance policies so strict even bank employees usually don't get access to the full string. Account details are less useful to fraudsters and generally printed all over communications from banks, including the checks and remittance advice handed to third parties.

So why would rational people prefer the latter, particularly if it involves paying a premium?

Is it another startup whose usefulness stems in a large part from the lack of ubiquitous free, same-day interbank payments between checking accounts in the US (unlike much of the rest of the developed world)?

<comment><AUTHOR> You can also take money from a bank account using an account number and routing number. That's why Donald Knuth stopped sending out checks to pay bounties.[1]

> Is it another startup whose usefulness stems in a large part from the lack > of ubiquitous free, same-day interbank payments between checking accounts in > the US (unlike much of the rest of the developed world)?

Partly but not all.

[1] [http://en.wikipedia.org/wiki/Knuth_reward_check](http://en.wikipedia.org/wiki/Knuth_reward_check)

</comment></comment><comment><USER4> What will the payout time be for it to hit the debit card? Is it instant? This is awesome by the way.

<comment><AUTHOR> I didn't list the payout time because it varies by bank. It is instant (24/7) when we're able to go through an ATM network like STAR or PULSE. We'll learn a lot more during the development.

... and thanks for the support!

</comment></comment><comment><USER5> A couple of commercial services exist like this today. Repayonline.com and adaptivepayments.com have similar services. I believe one of them is the engine behind square cash. How will this be different, other than price and the open source angle? Will it be limited to the same contract negotiations bank-by-bank or network-by-network?

</comment><comment><USER6> Should be lower friction for our users!

</comment><comment><USER7> I'm probably not the first to think of this, but it'd be awesome to be able to sell bitcoin and have the fiat appear in your account instantly.

</comment><comment><USER8> Could I push to my own debit card for budgeting purposes? e.g. push $500 every month

<comment><USER9> That's a cool idea. If you combined it with a Coin style card that allowed you to switch cards on the fly you could not worry about blowing your budget.

</comment></comment><comment><USER10> yes pleASE!~!!!!!!!

</comment><comment><USER11> Nice nice nice! Let's remember that Balanced was also part of YC, along with Stripe. Not sure why the title was changed to remove that fact.

<comment><AUTHOR> Thanks!

I want to stay away from anything on Balanced v. Stripe though. We're trying to move the market forward and innovate.</comment></comment>