How AI Training Scales - <AUTHOR> https://blog.openai.com/science-of-ai/ <comment><USER2> This is an exciting work.

Gradient noise scale would be interesting to compute individually for each weight/bias. I'm curious how it scales as a function of layer depth, for example -- it could well be that different layers require very different treatment in terms of learning rate. Supporting this is that gradient magnitudes are typically very different for different layers, although they evolve similarly in time. Here's something I just whipped up in Mathematica:

[https://imgur.com/a/HhCnlDL](https://imgur.com/a/HhCnlDL)

<comment><USER3> Author here— Yes, this is a great question! I think there's a lot more interesting work to be done here. It would be great if we could understand e.g. why layer-wise learning rates help with large-batch training of ImageNet ([https://arxiv.org/abs/1708.03888](https://arxiv.org/abs/1708.03888)), and maybe the per-component noise scale has something to do with it.

</comment></comment><comment><USER4> This kind of scaling was rigorously shown for a related metric called "gradient diversity" in [https://arxiv.org/abs/1706.05699](https://arxiv.org/abs/1706.05699)

<comment><USER3> One of the authors here. Thanks for the comment! Yes, we mention this work and number of others in the blogpost and paper. This isn't the first (or the last) paper on the topic but I think we've clarified the large-batch training situation significantly by connecting gradient noise directly to the speed of training, and by measuring it systematically on a bunch of ML tasks and characterizing its behavior.

<comment><USER5> Similarly I think the theory developed in the Three Factors paper predicts this scaling law, might be worth citing: [https://arxiv.org/abs/1711.04623](https://arxiv.org/abs/1711.04623)

</comment></comment></comment><comment><USER6> It looks like "gradient noise scale" will be a useful hyperparameter for distributed training. However, how do you efficiently compute it without training a network? Do you need to first train the network to compute it to find out the scaling factor for the network? Is there a more efficient way to compute it from a subset of a large dataset?

<comment><USER7> Author here — thanks for your interest! So far we do not know of a way to estimate the noise scale without any training. You can generally get a rough picture of the noise scale from a small fraction of a training run, but the noise scale tends to increase over time, so to get a fully accurate measurement you do need to do at least one full training run. You also need the hyperparameters (primarily the learning rate) to be reasonably well chosen, but the choice of batch size isn't important — and the batch size is what you're trying to determine.

We also show that it's possible to compute the noise scale as you train (without any extra overhead), and this can be used to adjust the batch size in real-time, so that in theory you can get it right the first time and in a way that adapts over the training run. However, those experiments are still preliminary (see appendix D of the paper).

<comment><USER3> Another author here– I'll add to Jared's comment above that for long-running experiments (like the ones our Dota team runs), it can be useful to track this statistic in real time to see whether or not it would be useful to scale up the experiment.

<comment><USER2> Whats a cheap and unobtrusive way to estimate the BSimple version of the noise scale in real time? Piggy back on ADAM's moving mean and variance estimates? Edit: I see that Appendix A has a method for the multi-device training setting, but I'm thinking of single device training.

</comment></comment></comment></comment><comment><USER8> This was a great read made even better by the simple yet high-quality visualizations. OpenAI does a great job of using UX to make their research more accessible, and I'd love to see more researchers follow suit.

</comment><comment><USER9> So this blog post posits that there is a growing upper bound to the effectiveness batch size. Is there a similar analysis on checking whether there is also a growing lower bound? Or does batchsize=1 training work for all these tasks?

<comment><USER10> batchsize 1 should always work. The trade off is always "bigger batch size/more efficient" versus "smaller batch size/better results". By using larger batches you are able to reduce overhead, take better advantage of memory caches, etc.... which can give very large speed ups. But mathematically it can slow down your training convergence (check out the plots showcasing how smaller batches converge in fewer optimizer steps). This is because when you average over an entire batch, you throw away a little bit of information that could otherwise be used to better learn your model. For intuition on this, imagine that you are doing homework, and you are forced to finish 1000 practice problems before being allowed to look at the answers; if you had looked earlier you may have been able to correct your mistake earlier and not gotten all 1000 wrong. However it would have taken you more time to go through those 1000 practice problems because you would have been looking up the answers and mentally adjusting your model for each problem you did.

<comment><USER11> I think you're confused about the benefits/drawbacks of increasing batch size. The training progress per optimizer step increases with batch size (otherwise the smallest batch would be always optimal). Increasing the batch size improves the quality of a single optimizer step but does not scale linearly. (i.e., larger batch training requires more samples to converge than small batch training even though fewer steps are required). Depending on the problem scale the computational efficiency of larger batches makes this tradeoff worth it because even though you need to process more samples to converge, it will take less wall clock time due to improved efficiency.

<comment><USER10> Yes, we're saying the same thing. It takes longer for the optimizer to converge when using larger batch sizes, in terms of number of samples pushed through the model. It takes less time in terms of wall clock time due to increased efficiency.</comment></comment></comment></comment>


The Intelligent Life of the City Raccoon - <AUTHOR> http://nautil.us/issue/18/genius/the-intelligent-life-of-the-city-raccoon?utm_source=tss&utm_medium=desktop&utm_campaign=linkfrom

<comment><USER2> > While both rural and city racoons readily approached familiar containers, > they dealt differently with unfamiliar ones. Where rural raccoons took a > long time to approach novel containers, city raccoons would attack them the > moment she turned her back.

I wonder if part of this could be due to differences between city and rural attitudes toward killing cute animals?

In cities, we tend to try to deal with a raccoon getting into our stuff by replacing the container with something harder for the raccoon to open, or moving it somewhere else. We try to stop the animal without harming it, even if this inconveniences us. If it is particularly troublesome, we try to trap it without harming it, and relocate it. It takes a lot to get us to go all the way to the kill it option.

In rural areas, we are much more likely to go straight from "there's a raccoon messing with my stuff" to "kill it".

<comment><USER3> I'm sure you didn't mean to, but that comment comes across as an easy stereotype that sees city-dwellers as respecters of nature and rural people as killers.

The other thing is, my own anecdotal experience contrasts with your own anecdotal experience. (For what that's worth, which isn't much, I admit.)

I've lived in big cities almost all my life and people around me have killed or otherwise sought to harm raccoons on numerous occasions. They're thought of as pest, and in cities, pests abound unless you do drastic things. I've heard raccoons killed outside my window, I've seen bunnies dead from being fed rat poison, etc. In big cities. There's the pests angle, but there's also a fear of animals that seems to be associated with a lack of familiarity with and experience around animals that rural settings are more conducive to having.

By contrast, the years I spent living in rural places I encountered much more sensible attitudes towards things like raccoons. I found that people who live somewhere that leaves one more aware of one's place in nature have more respect for it.

Of course, there were numerous exceptions to both dynamics. And again, just my experience, but I think the notion that city-dwellers are somehow friendlier to nature is a too-easy misconception that's fueled mostly by the us-vs.-them narrative that's being pushed on us by politicians and the media alike. Country-dwellers hate nature! City-dwellers love nature! It's just too easy, too lacking nuance.

And then there's the whole problem to get around of cities being the most subdued nature there is: pouring concrete and asphalt over a large piece of nature and then claiming some kind of moral authority is a difficult concept for me. Manhattan used to be populated by the Lenape...

I know that per-capita you could make a strong case that cities have lower impact per capita, but something about that just doesn't feel sufficient to me.

<comment><USER2> I wasn't thinking that city people are respecters of nature or rural people hate nature. It's more a consequence of what kind of activities take place in cities vs. rural areas.

For instance, rural raccoons are far more likely than city raccoons to have people in their territory that are keeping chickens for meat and/or eggs. This gives rural raccoons an opportunity to do more damage than their city cousins, and so also increases the chances they will draw a severe response.

Rural people also have more options for lethal force. Raccoons have been bothering your chickens? Go out the next night with your shotgun and blow the raccoons away. Try that in a city to deal with a raccoon trying to get into your recycle bin and you are likely to soon have far bigger problems than the raccoons.

Cities are also more likely to require permits or licenses to kill or trap an animal.

<comment><USER3> I understand you better now, but I still see it a bit differently. People with chickens tend to think ahead about how to keep them from being eaten.

People with cats, on the other hand, tend to just kill the thing that's threatening their cat.

And rural settings have a more endless supply of threats. Yeah, you could go out every single night with your raccoon, or you could put up an electric fence.

Also, not one of the cases I've seen in the city sought permits to trap or kill. When you live somewhere where there are murders, who gives a crap about an animal?

I think we're both right, honestly, but I think the city situation is far more complicated-and far less raccoon-friendly–than you think. But I get where you're coming from.

</comment></comment></comment></comment><comment><USER4> I wonder if also equipping containers with dummy latches would help -- some mechanism with moving parts that messing with gives the sensation of making progress, but ultimately opens nothing. A honeypot handle, if you will.

</comment><comment><USER5> When I see stray dogs in Mexico they always have a submissive demeanor and a facial expression that invariably evokes pity. I suppose being an aggressive stray dog is a one-way ticket out of the gene pool, so submissive/pity inducing dogs are naturally selected in an urban setting.

</comment><comment><USER6> Torontonian Raccoons are resilient but for the most part try and stay out of sight/out of the way of humans. However, I can't let my dog out into our backyard at night in Toronto. I'm pretty much guaranteed a trip to the vet.

<comment><USER7> We got rid of our dog door because of raccoons. 3:00 in the morning, me dancing around in the backyard in my underwear trying to figure out how to seperate raccoon and dog, and wondering how in suburban Seattle to quietly finish off the half dead raccoon and/or dog when it's over.

I don't mean to play up the "pit bulls are tough" trope, but damn that's the only dog I've seen walk away from a 'coon with only a few scratches, no trip to the vet. It was the raccoon's lucky day, too, as he scampered off to tell his friends. I'm serious, that's what the raccoon did, because we haven't seen a raccoon in the neighborhood three years since.

</comment></comment><comment><USER8> There's a raccoon who destroys my veggie patch almost nightly. It doesn't matter how secure I make it, how much mesh/wire/etc I use to try to protect it.

The raccoon is smarter than I am. I'm considering moving.

</comment><comment><USER9> Can't say the same about pigeons though. I swear cities make them dumber.

<comment><USER3> Spend some time in Manhattan and the concept of carrier pigeons becomes impossible to believe.</comment></comment>


Embed charts in webpages with one of our simplest APIs yet - <AUTHOR> http://google-code-updates.blogspot.com/2007/12/embed-charts-in-webpages-with-one-of.html

<comment><USER2> Thank you.

This sort of product is what I love about Google. Ridiculously simple, easy, and useful. It is a tiny effort for such a huge company, but it saves me having to work with my own charting libs for various little projects.

<comment><AUTHOR> You said everything I could say about it :)

</comment></comment><comment><USER3> Google Charts meets Pac-Man [http://chart.apis.google.com/chart?cht=p&chs=400x250&...](http://chart.apis.google.com/chart?cht=p&chs=400x250&chd=t:85.0,15.0&chl=pac- man|not+pac-man&chco=FCFC00,0000FF&chtt=Google+Charts+meets+Pac-Man)

</comment><comment><USER4> Man, I was toying around with this idea for so long. I hope Google makes this into some kind of an open-source project...

</comment><comment><USER5> I'm using amcharts. I'm glad Google is doing something free, but part of me would rather support the little guys.

</comment><comment><USER6> This is very cool. And just too easy.

</comment><comment><USER7> i kind of like fusion charts. i think rescue time uses them, and ive seen them in alot of places.

<comment><USER6> Well for use at a high-volume website you would need something else. There's a limit of 50000 charts per day before it stops working and/or you are banned.

<comment><USER8> You might not want to generate the chart for each page view - you'd probably store/cache the png at your end.

Of course if you need to generate > 50K dynamic charts/day then you're right.

</comment></comment></comment><comment><USER9> real clever</comment>


Good design for Humans - <AUTHOR> https://uxplanet.org/design-for-humans-e8fc7924286d <comment><USER2> > Good Design is simple.

> A user interface should be so simple that a beginner in an emergency can > understand it within ten seconds.

I think this has principle been taken _way_ too far, and it certainly shouldn't be regarded as a commandment. I, the user, am _not_ always going to be _a beginner in an emergency_ , so why restrict me like that forever? Good design shouldn't be _unnecessarily_ complex, but sometimes you need a complex good design to have a _powerful_ good design.

This podcast has a good discussion of this: [https://99percentinvisible.org/episode/of-mice-and- men/](https://99percentinvisible.org/episode/of-mice-and-men/)

<comment><USER3> That depends: will your users actually advance beyond the beginner level. If your complex design turns them off they won't learn and never advance unless forced to.

However it is important to remember that if your product is successful the vast majority of your users will not be beginners and so you need to make sure their experience is good.

<comment><USER4> Alan Kay said it: "Simple things should be simple, complex things should be possible."

For example, something like Twitter fails massively here. It's easy to use as a novice, but there's no progression (I know that sounds like a concept from games, but it seems applicable). I want to be able to see who, of all the users I've seen, listed, followed, is active these days. I want to be able to draw on other people's list of follows to extract suggestions of who might be good to follow & is actively tweeting (not dumb automatic suggestions, please).

It would be so amazing to be able to "bin" Twitter users (across all of my lists, follows etc.) by how active they are. So the excessively chatty ones can be browsed when I have time, and the ones that post almost never—well, when they do, I see it.

</comment></comment></comment><comment><USER5> If anyone wants a nice (8 min) video to watch — in the same vein — this one[0] is a great intro by Dieter Rams and the man he influenced at Apple: Jony Ive.

[0] - [https://www.dailymotion.com/video/x2oa1m1](https://www.dailymotion.com/video/x2oa1m1)

(Used to be on YT but I can't find it anymore)

</comment><comment><USER6> How is "good design is timeless" helpful advice?

Jones, make me something timeless, or your ass is fired

</comment><comment><USER7> I've never understood the 'for humans' bit, though I see it all the time.

Is it a backhanded insult? Ie is the tacit point that design which doesn't follow whatever guidelines is therefore not built 'for humans'?'

<comment><USER3> My cat door is badly designed for humans: I can't even figure out how to get my head through it. My cat can figure it out just fine.

My day job collects data from some sensors and uploads it to another computer. This computer-computer interface is not for humans, even engineers have trouble understanding it, but the computer does fine.

Both of the above cases are a design that is not for humans, and the engineers behind either have no need to consider design for humans.

</comment></comment><comment><USER8> About that factorial code in Clojure, I wish in reality one could write beautiful recursive code like that without blowing the stack for large inputs, one of my main grips with Clojure.

<comment><USER9> Sure you can, you just have to make the recursive call explicit:

[https://clojurebridge.github.io/community- docs/docs/clojure/...](https://clojurebridge.github.io/community- docs/docs/clojure/recur/)

This has the nice side effect of preventing you from writing a function that you _think_ will be tail call optimized but really isn't—the compiler will yell if your call to `recur` isn't in tail position.

The code in the article doesn't have the recursive call in tail position anyway, so it's not like other languages would be able to optimize it away.

</comment></comment><comment><USER10> This article is extremely vague.

<comment><USER11> good design is _smokebomb_

</comment></comment><comment><USER12> Ironic that the page layout of this article is absolute shite... and slow to boot.

</comment><comment><USER13> Im eager to read about good design for extraterrestrials</comment>


The BLAKE3 cryptographic hash function - <AUTHOR> https://github.com/BLAKE3-team/BLAKE3 <comment><USER2> It looks like the speedup is coming from two main changes.

The first change is reducing the number of rounds from 10 to 7. Think of it like making a smoothie - you add bits of fruit to the drink (the input data), then pulse the blades to blend it up (making the output hash). This change basically runs the blades for 7 seconds instead of 10 seconds each time they add fruit. They cite evidence that the extra 3 seconds aren't doing much - once the fruit's fully liquid, extra blending doesn't help - but I worry that this reduces the security margin. Maybe those extra 3 rounds aren't useful against current attacks, but they may be useful against unknown future attacks.

The other change they make is to break the input into 1KiB chunks, then hash each chunk independently. Finally, they combine the individual chunk hashes into a single big hash using a binary tree. The benefit is that if you have 4KiB of data, you can use 4-way SIMD instructions to process all four chunks simultaneously. The more data you have, the more parallelism you can unlock, unlike traditional hash functions that process everything sequentially. On the flip side, modern SIMD instructions can handle 2 x 32-bit instructions just as fast as 1 x 64-bit instructions, so building the algorithm out of 32-bit arithmetic doesn't cost anything, but gives a big boost to low-end 32-bit CPU's that struggle with 64-bit arithmetic. The tree structure is a big win overall.

<comment><USER3> > but I worry that this reduces the security margin. Maybe those extra 3 > rounds aren't useful against current attacks, but they may be useful against > unknown future attacks.

This was covered in more detail in previous "Too Much Crypto" paper [1], which argued that many standards have excessively high round counts. Note that Aumasson is author of both Blake3 and Too Much Crypto

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

<comment><USER4> From paper:

> Our goal is to propose numbers of rounds for which we have strong confidence > that the algorithm will never be wounded

They take algorithms, past 10 years of _public_ crypto research and shave off rounds, until it just about starts falling apart. AFAIU having security- reducing attacks is the target.

I prefer to have ample confidence in my crypto algorithms. Would not recommend BLAKE3 (without those extra rounds).

</comment></comment></comment><comment><USER5> Another benchmark:

time openssl sha256 /tmp/bigfile

      real  0m28.160s
      user  0m27.750s
      sys   0m0.272s

time shasum -a 256 /tmp/bigfile

      real  0m6.146s
      user  0m5.407s
      sys   0m0.560s

time b2sum /tmp/bigfile

      real  0m1.732s
      user  0m1.450s
      sys   0m0.244s

time b3sum /tmp/bigfile

      real  0m0.212s
      user  0m0.996s
      sys   0m0.379s

TIL OpenSSL sha256 invocation is really slow compared to the shasum program. Also BLAKE3 is _really_ fast.

Edit: bigfile is 1GB of /dev/random

<comment><USER6> On my machine running Ubuntu 18.04 (coreutils 8.28, openssl 1.1.1), openssl is faster than both shasum and sha256sum.

<comment><USER7> Yeah as someone familiar with openssl it looks like a version of openssl that was built incorrectly.

</comment></comment></comment><comment><USER8> So this is bao + blake2?

I remember watching Bao, a general purpose cryptographic tree hash, and perhaps the fastest hash function in the world: [https://www.youtube.com/watch?v=Dya9c2DXMqQ](https://www.youtube.com/watch?v=Dya9c2DXMqQ) a while ago.

Nice job!

<comment><USER9> Yep that's me :) The Bao project evolved into BLAKE3, and the latest version -- which I literally just released -- is now based on BLAKE3.

<comment><USER8> Excuse my confusion. I understand "the Bao project evolved into BLAKE3", but "is now based on BLAKE3" confuses me. Bao is based on blake3? But isn't bao ... the blake3 itself now? Circular dependency detected.

<comment><USER9> Ha, yes, that's confusing. The Bao project was originally two things: 1) a custom tree hash mode, and 2) an encoding format and verified streaming implementation based on that tree hash. The first half evolved into BLAKE3. Now the Bao project itself is just the second half.

<comment><USER10> Hi, some questions...

The README lists 4 designers, including yourself. However the Bao project doesn't list anybody, so presumably you are the only designer. What exactly were the contributions of the other 3 people to warrant being listed?

At what point did the Bao project become "BLAKE3" and why?

<comment><USER11> All three others are principals of the Blake or Blake2 design and major implementations.

</comment></comment></comment></comment></comment></comment><comment><USER11> Looks like they've taken _Too Much Crypto_ to heart[1] and dropped the number of rounds from Blake2B's 12 down to 7 for Blake3:

[https://github.com/BLAKE3-team/BLAKE3/blob/master/reference_...](https://github.com/BLAKE3-team/BLAKE3/blob/master/reference_impl/reference_impl.rs#L83-L95)

[https://github.com/BLAKE2/BLAKE2/blob/master/ref/blake2b-ref...](https://github.com/BLAKE2/BLAKE2/blob/master/ref/blake2b-ref.c#L200-L211)

Which, yeah, that alone will get you a significant improvement over Blake2B. But definitely doesn't account for the huge improvement they're showing. Most of that is the ability to take advantage of AVX512 parallelism, I think. The difference will be more incremental on AVX2-only amd64 or other platforms, I think.

[1]: Well, TMC recommended 8 rounds for Blake2B and 7 for Blake2S.

<comment><USER3> > Looks like they've taken Too Much Crypto to heart

Not surprising considering that one of they is the author of Too Much Crypto

<comment><USER11> Indeed. It's also 3rd citation in their formal spec.

</comment></comment></comment><comment><USER12> Just one variant, that's refreshing. And performance is impressive. What's the short input performance like? Say for 64 bytes of input.

<comment><USER9> The Performance section of the spec ([https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blak...](https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blake3.pdf)) has a paragraph about short input performance. 64 bytes happens to be the BLAKE3 block size, and performance at that length or shorter is best in class. Look at the left edge of Figure 3 ([https://i.imgur.com/smGHAKA.png](https://i.imgur.com/smGHAKA.png)).

<comment><USER13> 64 bytes happens to be the typical cache line size so it makes sense to use it as a block size.

</comment></comment></comment><comment><USER13> That's impressive speedup. I just installed it and holy moly it really is fast. All those extra cores can finally get busy. ;)

b3sum -l 256 big-2.6Gfile

      real 0m0.384s
      user 0m2.302s
      sys  0m0.175s

b2sum -l 256 big-2.6Gfile

      rear  0m3.616s
      user  0m3.360s
      sys   0m0.256s

(Intel® Core™ i7-8550U CPU @ 1.80GHz × 8 )

EDIT: ah, the catch. blake3 targets 128 bit security. It competes with SipHash for speed and security

EDIT2 scratch the previous edit.

<comment><USER9> > ah, the catch. blake3 targets 128 bit security. It competes with SipHash for > speed and security.

No no, BLAKE3 is a general-purpose cryptographic hash just like BLAKE2, SHA-2, and SHA-3. The confusion here is that a hash function's security level is half of its output size, because of the birthday problem. BLAKE3, like BLAKE2s and SHA-256, has a 256-bit output and a 128-bit security level. (BLAKE3 also supports extendable output, but that doesn't affect the security level.)

> holy moly it really is fast

Thank you :)

<comment><USER14> >security level is half of its output size

A hash can have different security levels against different attacks. BLAKE3 appears to have 128 bits of security against all attacks.

SHA3-256 was originally designed to have 128 bits of collision security and 256 bits of preimage security. NIST then made a change to it giving it 128 bits of security against all attacks. A lot of people got mad. Then NIST caved and changed it back to 128 bits of collision security and 256 bits of preimage security.

It looks like BLAKE3 agrees with how NIST wanted SHA3 to be. I wonder if people will be mad at BLAKE3.

[https://en.wikipedia.org/wiki/SHA-3#Capacity_change_controve...](https://en.wikipedia.org/wiki/SHA-3#Capacity_change_controversy)

For a more fair performance comparison against SHA3, you should compare against SHAKE128(256). That is, the version with 128 bits of security all around and a 256 bit output (how NIST wanted it). Although maybe it's pointless, because according to Wikipedia SHAKE128(256) is only 8% faster than SHA3-256 for large inputs.

<comment><USER15> >Although maybe it's pointless, because according to Wikipedia SHAKE128(256) is only 8% faster than SHA3-256 for large inputs.

This is mainly due to SHA3's humongous 1600-bit state, which is not very friendly to embedded systems. In sponge constructions with smaller states, or generally primitives with smaller states, the difference is much larger.

Also in general I would say that small message performance is usually more important than large message performance, since large messages with desktop/laptop CPUs are so incredibly fast anyway with most hash functions that the bottleneck goes somewhere else. (Storage, network, etc.)

<comment><USER14> I mentioned large message performance because that appeared to be what BLAKE3's benchmarks were focusing on.

</comment></comment></comment></comment></comment><comment><USER16> I would be interested in how this compares on the smhasher against some of the other fastest hash competitors like meow hash or xxhash.

<comment><USER11> I am also curious about how it performs as a PRF in places where e.g. Chacha20 is used as a keystream generator now. Also as a reduced round variant in places where non-cryptographic PRNGs are used for very fast RNG needs: JSF, SFC, Lehmer, Splitmix, PCG.

In my extremely limited testing (on AVX2, but not AVX512 hardware), (buffered) reduced (four) round Chacha is only about 1.5-2x slower than fast non- cryptographic PRNGs like JSF, SFC, Lehmer, or pcg64_fast (all with Clang -O2 -flto, the fast PRNGs are header-only implementations and only chacha is two files).

This thing still uses 7 rounds, but that is easy to tune down. Very neat.

<comment> loup-vaillant The "too much crypto" paper linked in the specs recommends to lower Chacha20 down to 8 rounds.

Blake3 wouldn't compete with Chacha20, it would compete with Chacha8.

<comment><USER9> Note that a "round" in BLAKE/2/3 is equivalent to a "double-round" in ChaCha.

<comment><USER11> Ah, ok. So 7-round Blake3 is perhaps closest to 14-round Chacha.

</comment></comment></comment></comment></comment><comment><USER17> I can't seem to find any non-rust implementations in the works yet, so I may sit down and adapt the reference to C# this weekend. Anyone know how the single/few threads performance holds up excluding avx512?

<comment><USER18> There's a non-Rust implementation in the same repository, at [https://github.com/BLAKE3-team/BLAKE3/tree/master/c](https://github.com/BLAKE3-team/BLAKE3/tree/master/c) (in C).

<comment><USER19> Yes, but about half as slow as the Rust version, because the rust version processes the chunks in parallel.

I'm working on exporting the rust version to C, so all can be compared properly.

</comment></comment></comment><comment><USER19> smhasher results without the Rust version yet (which should be ~2x faster):

[http://rurban.github.io/smhasher/doc/table.html](http://rurban.github.io/smhasher/doc/table.html)

It's of course much faster as most of the other crypto hashes, but not faster than the hardware variants of SHA1-NI and SHA256-NI. About 4x faster than blake2.

Faster than SipHash, not faster than SipHash13.

The tests fail on MomentChi2 dramatically, which describe how good the user- provided random seed is mixed in. I tried by mixing a seed for IV[0], as with all other hardened crypto hashes, and for all 8 IV's, which didn't help. So I'm not convinced that a seeded IV is properly mixed in. Which is outside the usage pattern of a crypto or digest hash (b3sum), but inside a normal usage.

Rust staticlib is still in work, which would parallize the hashing in chunks for big keys. For small keys it should be even a bit slower. b3sum is so much faster, because it uses many more tricks, such as mmap.

</comment><comment><USER20> Does anybody know of benchmarks for ARM? Or any research trying to break it?

The numbers look astonishing.

<comment><USER9> Take a look at Figure 5 ([https://i.imgur.com/Izs23wf.png](https://i.imgur.com/Izs23wf.png)) in the spec ([https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blak...](https://github.com/BLAKE3-team/BLAKE3-specs/blob/master/blake3.pdf)). That benchmark was done on a Raspberry Pi Zero, which is a 32-bit ARM1176.

<comment><USER11> Do you have single-thread cpb benchmark figures on amd64 hardware without AVX512?

Clearly the benefits of AVX512 really exaggerate the comparison on hardware that supports it, and the benefit over Blake2S is pretty muted on hardware without vector intrinsics (low end 32-bit ARM). But I'm interested in the middle — e.g., Zen1/2 AMD, Broadwell and earlier Intel x86-64.

Thanks!

</comment></comment></comment><comment><USER21> Why are there no AES-like hashing algorithms out there? AES design is very suitable to be used as a building block in a hash if you remove "add round key" operation.

<comment><USER22> I helped design Meow Hash using AES-NI. It is not general purpose crypto strength, but ridiculously fast, targeting a theoretical performance of 16 bytes per cycle on some processors, too fast for memory to keep up. [https://github.com/cmuratori/meow_hash](https://github.com/cmuratori/meow_hash)

<comment><USER23> >It is not general purpose crypto strength

This made me curious. Is it because at this stage it is a proposal that has not yet been verified/analysed or are there actual reasons that you know of that make this not "general purpose strong"?

<comment><USER22> I don't actually have proof that it isn't crypto strength. But comparing it to other algorithms that have been broken, it seems unlikely that it would hold given the rather modest amount of computation done.

I do believe that it meets the requirements for being a MAC function, and I'm completely certain that it is a great non-cryptographic hash function.

</comment></comment></comment></comment><comment><USER24> Is it possible to benchmark agaist blake2 etc. but where they have the same number of rounds, testing both for reducing blake2 and also increasing blake3? Also, in that vein, offering the version with more rounds could win over the "paranoid" for mostly being a faster Blake2 thanks to SIMD and extra features thanks to the Merkle tree?

</comment><comment><USER25>
      Benchmark #1: cat b1
        Time (mean ± σ):      1.076 s ±  0.007 s    [User: 5.3 ms, System: 1069.4 ms]
        Range (min … max):    1.069 s …  1.093 s    10 runs
      Benchmark #2: sha256sum b1
        Time (mean ± σ):      6.583 s ±  0.064 s    [User: 5.440 s, System: 1.137 s]
        Range (min … max):    6.506 s …  6.695 s    10 runs
      Benchmark #3: sha1sum b1
        Time (mean ± σ):      6.322 s ±  0.086 s    [User: 5.212 s, System: 1.103 s]
        Range (min … max):    6.214 s …  6.484 s    10 runs
      Benchmark #4: b2sum b1
        Time (mean ± σ):     13.184 s ±  0.108 s    [User: 12.090 s, System: 1.080 s]
        Range (min … max):   13.087 s … 13.382 s    10 runs
      Benchmark #5: b3sum b1
        Time (mean ± σ):     577.0 ms ±   5.4 ms    [User: 12.276 s, System: 0.669 s]
        Range (min … max):   572.4 ms … 587.0 ms    10 runs
      Benchmark #6: md5sum b1
        Time (mean ± σ):     14.851 s ±  0.175 s    [User: 13.717 s, System: 1.117 s]
        Range (min … max):   14.495 s … 15.128 s    10 runs

      Summary
        'b3sum b1' ran
          1.86 ± 0.02 times faster than 'cat b1'
         10.96 ± 0.18 times faster than 'sha1sum b1'
         11.41 ± 0.15 times faster than 'sha256sum b1'
         22.85 ± 0.28 times faster than 'b2sum b1'
         25.74 ± 0.39 times faster than 'md5sum b1'

gotdang that's some solid performance. (here running against 10GiB of random bytes; machine has the Sha ASM extensions, which is why sha256/sha1 perform so well)

edit: actually not a straight algo comparison, as b3sum here is heavily benefiting from multi-threading; without that it looks more like this:

      Benchmark #1: cat b1
        Time (mean ± σ):      1.090 s ±  0.007 s    [User: 2.9 ms, System: 1084.8 ms]
        Range (min … max):    1.071 s …  1.096 s    10 runs

      Benchmark #2: sha256sum b1
        Time (mean ± σ):      6.480 s ±  0.097 s    [User: 5.359 s, System: 1.115 s]
        Range (min … max):    6.346 s …  6.587 s    10 runs

      Benchmark #3: sha1sum b1
        Time (mean ± σ):      6.120 s ±  0.090 s    [User: 5.027 s, System: 1.082 s]
        Range (min … max):    5.979 s …  6.233 s    10 runs

      Benchmark #4: b2sum b1
        Time (mean ± σ):     12.866 s ±  0.208 s    [User: 11.722 s, System: 1.133 s]
        Range (min … max):   12.549 s … 13.124 s    10 runs

      Benchmark #5: b3sum b1
        Time (mean ± σ):      5.813 s ±  0.079 s    [User: 4.606 s, System: 1.202 s]
        Range (min … max):    5.699 s …  5.933 s    10 runs

      Benchmark #6: md5sum b1
        Time (mean ± σ):     14.355 s ±  0.184 s    [User: 13.305 s, System: 1.039 s]
        Range (min … max):   14.119 s … 14.605 s    10 runs

      Summary
        'cat b1' ran
          5.33 ± 0.08 times faster than 'b3sum b1'
          5.62 ± 0.09 times faster than 'sha1sum b1'
          5.95 ± 0.10 times faster than 'sha256sum b1'
         11.81 ± 0.21 times faster than 'b2sum b1'
         13.17 ± 0.19 times faster than 'md5sum b1'

still beating the dedicated sha extensions, but not nearly as dramatically.

</comment><comment><USER26> Where is this useful?

I'm guessing not for password hashes simply because a fast hash is bad for passwords (makes brute forcing/rainbow tables easier).

So is this mostly just for file signing?

<comment><USER27> Fast hashes are useful for signing, MACs (symmetric "signatures" so to speak), key derivation (HKDF and all kinds of Diffie-Hellman handshakes come to mind), as part of cryptographically secure PRNGs (though most of the world has moved on to stream ciphers for that instead) and probably more.

While programming, just try to think of a scenario where having a mapping between some kind of arbitrary data (and maybe a key) and a fixed-size, uniformly random-looking output could be useful. Opportunities to sprinkle some hashes on things come up quite often when you look for them.

<comment> lame-robot-hoax So I'm not super familiar with things like this, but for example, WireGuard uses BLAKE2 for hashing. What level of undertaking would it be to move from BLAKE2 to BLAKE3 in regards to WireGuard? Can you just pop out BLAKE2 and pop in BLAKE3?

<comment><USER28> Assuming wireguard hashes data shorter than 4k (i.e. most network packets), there is no reason to switch; BLAKE3 is only faster than BLAKE2 on data longer than 4k.

<comment><USER11> That isn't literally true; the reduced rounds make it faster on small inputs, too. And jumbo packets can be 4kB or 9000B or whatever, if wireguard is used on such an interface.

<comment><USER28> Does BLAKE3 reduce rounds vs BLAKE2s?

<comment> loup-vaillant 7 rounds instead of 10.

Though for Wireguard, you'd compete with Blake2b as well, which has the advantage of using 64-bit words. And if you want a fair comparison, you should reduce the rounds of Blake2b down to 8 (instead of 12), as recommended in Aumasson's "Too Much Crypto".

On a 64-bit machine, such a reduced Blake2b would be much faster than Blake3 on inputs greater than 128 bytes and smaller than 4Kib.

<comment><USER11> They address this in the paper, to some extent. With SIMD, you get 128, 256, or 512 bits of vector. You can either store 32x4, 32x8, 32x16, or 64x2, 64x4, 64x8 words. But either way you're processing N bits in parallel.

The concern about 64-bit machines and using 64-bit word sizes vs 32-bit word sizes really only matters if your 64-bit machine doesn't have SIMD vector extensions. (All amd64 hardware, for example, has at _least_ SSE2.) And as they point out, being 32-bit native really helps on low-end 32-bit machines without SIMD intrinsics.

(Re: the hypothetical, if wireguard were to do a protocol revision and replace Blake2B with this, it would make sense to also replace Chacha20 with Chacha8 or 12 at the same time. I doubt the WG authors will do any such thing any time soon.)

<comment> loup-vaillant I was talking about small-ish inputs, for which vectorisation wouldn't help.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


You Need to Make $40,000 to Travel All the Time - <AUTHOR> https://medium.com/rationality-lite/you-need-to-make-40-000-to-travel-all-the-time-dc3fdf216b49

<comment><USER2> Post-tax.</comment>


The UI circle is complete - <AUTHOR> http://blog.webicity.info/2010/10/26/the-more-things-change-the-more-they-stay-the-same/

<comment><USER2> Both the Win 3.x example and the Ubuntu example suffer from the same (presumed) failure: application organization imposed by the OS vendor.

I can find things on my messy desk because _I_ made the mess. If someone else arranged my desk for me, suddenly I have to understand their mental model before I can locate anything.

Which is why I can never, ever find what I'm looking for in Windows' Start menu. Even if the categories seem obvious, they never map 100% to my way of thinking.

(If those categories in the Ubuntu example are user-defined, then they're OK by me.)

…and let's please not even get into how confusing and redundant the Dock looks in the otherwise nice Lion example.

<comment><USER3> When I still used windows (a very long time ago, before 2002), I spent some time organizing programs in folders and subfolders within the start menu. I had "games", "graphics", "dev", etc, with applications subfolders. It's actually very simple to do (well it was back in win98 at least): right click anywhere in the start menu and "browse here".

<comment><USER2> You definitely want customization to be simple.

But even still, you should be careful about the mental model you're imposing on your users, especially if they're forced to literally dismantle that model to rearrange things the way they'd like.

Cognitively, it's almost more than twice as much work, once you factor in the uncertainty of messing with things you're not sure you can/should mess with. _(Were they pre-arranged a certain way for a reason? Will things break if I move them?)_

Which means that people are _even more_ likely to leave your default categorization in place, so it had better be bulletproof.

</comment></comment></comment><comment><USER4> Personally I think that Spotlight style search launchers are the best way to launch applications. If the search launcher is designed halfway well, with learning about which applications you use most often it only takes a few keypresses to bring up the applications you need.

Of course with touch devices it is probably more convenient to swipe to the application icon you want and touch it, but on the PC I find it much easier to click the search icon, type the app name and press enter.

<comment><USER5> If you can remember the name of the application without prompting.

I'll frequently have to troll through my /Applications directory looking for something that does X that I know I installed ages ago and will recognise when I see it.

It's important to have multiple useful ways to get to your applications. My unprompted recall, in general, is quite weak, but someone else might have vision issues that makes distinguishing icons apart difficult. For this kind of basic functionality, I think that having several high-quality approaches is best.

<comment><USER6> A good reason to include meta info about applications, so it can be pulled up after name matches.

Personally, I've almost quit using the Windows start menu. I hit win-key and start typing. Utterly _pathetically_ slow and inaccurate compared to using something like QuickSilver or Alfred, but I can still get places much more quickly than using a mouse when I'm programming.

</comment></comment></comment><comment><USER7> For inspiration: things that reject this same old paradigm: [http://www.amazon.com/Beyond-Desktop-Metaphor-Integrated- Env...](http://www.amazon.com/Beyond-Desktop-Metaphor-Integrated- Environments/dp/026211304X/ref=sr_1_1?ie=UTF8&s=books&qid=1288128575&sr=8-1)

</comment><comment><USER8> No it isn't. I still want a Conetree godammit:

[http://www.infovis.net/imagenes/T1_N173_A1014_ConeTreeIntera...](http://www.infovis.net/imagenes/T1_N173_A1014_ConeTreeInteractionsV5N2MarzoAbril98p11.jpg)

</comment><comment><USER9> What about...

The Original Mac:

<http://www.old-computers.com/MUSEUM/computer.asp?c=271>

The Xerox Star 8010:

<http://lowendmac.com/wale/07/the-roots-of-the-mac-os.html>

<comment><USER10> Every GUI is a descendent of the Xerox Star

</comment></comment><comment><USER11> I remember when the screenshots of Windows 95 first came out in the magazines and people's reactions. With the people I knew, at least, was an almost universal hatred of the Start menu which I put down to it merely being "new." In retrospect, it was a pretty stupid idea UI wise that, sadly, so many others copied (IMHO, of course).

</comment><comment><USER12> What? That we are back to icons? The icons never left from OSX.

<comment><USER13> Back to screens full of icons for applications.

Since Win95's Start Menu (I'm sure there are perhaps earlier examples in other desktop environments, but Windows is what I'm familiar with), users have been encouraged to keep _documents_ on the desktop, and keep application shortcuts filed away in the Start menu or on the Quick Launch bar or other similar launcher. OSX and various Linux desktops are organized in the same way: you _can_ put application shortcuts on the desktop, but the desktop is better for documents.

Why did this happen? A)Even for non-tech-savvy people, the idea of a "file" makes perfect sense if you think about a document, B)Someone realized that opening a document in an application made for that kind of document should be a first class action, and shouldn't necessarily require you to first open the application and then use the application to open the document, and C)When you start putting documents on a desktop, putting "applications" alongside them using the same visual representation (a clickable icon) can be confusing. The result was a more literal "desktop," complete with your click-to-open documents laying around. Tools (applications) were put away in the desk drawers, so to speak.

The widespread usage of iOS has put apps front and center again, both figuratively and literally - users have again become accustomed to seeing grids of icons for their applications instead of their documents. This is reflected in the Ubuntu and OSX screenshots.

<comment><USER8> _users have been encouraged to keep documents on the desktop_

Almost every piece of windows software I can remember installing has asked me if I wanted to create a desktop icon for the application. I have a whopping...2 documents there.

This hasn't required any special effort on my part, many applications default to saving in the user or (later) 'My documents' folders. I typically open documents from the file manager or via a 'Recent' menu, but prefer to launch the app if I starting a new document, and can't say I've noticed an irresistible trend for doing things the other way - if you ask me, it depends on the person rather than being driven by the OS.

<comment><AUTHOR> Almost every piece of Windows software tries to add itself to the quick launch too.

It's more about self-promotion than following best practices. "Hey, look at me, I'm here! Use me, tell all your friends"

</comment></comment></comment></comment><comment><USER14> It's interesting that UI's started out program-oriented, then document- oriented, and now going back to program-oriented.

<comment><USER15> I agree! Very interesting.

I remember when "document-centric" was all the rage in UIs (often went hand- in-hand with the term "object-oriented"... right around Windows 95/OpenDoc/Workplace Shell timeframe) and I would think that it seemed odd, because most users I knew had nearly no real concept of document/folder hierarchies.

You'd ask a user where their document is and they'd answer — just like they do today — "It's in Word."

</comment></comment><comment><USER16> Brings back memories of DESQview

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

</comment><comment><USER17> No arrange by penis?</comment>


I Just Got Permanently Banned from China Because I Liked a South Park Tweet - <AUTHOR> https://edm.com/news/zedd-banned-china-south-park <comment><USER2> There is no way this is true. This guy is trolling. China is not that vigilant. This guy is not the NBA, Blizzard, or a major TV network. Though this joke may ironically end up getting him banned in the end from the media attention. I would love to see evidence and be proven wrong.

Source: I'm a foreigner living in China.

<comment><AUTHOR> I hate to tell you this but I worked with a lot of anti-communist and anti- censorship efforts in the early 2000s.

The Chinese Government intelligence agencies are quite adept at using social media. People were "disappeared" with frightening regularity. Someone getting on the Chinese equivalent of the "Do Not Fly List" is pretty easy.

You can probably see it happen in person if you go to a local "police" station and ask about Tiananmen Square....

<comment><USER2> You don't have to tell me. I am well aware. I am not defending CCP. This article still provides no proof and very clearly looks like trolling. Lot's of people favorite tweets about HK and South Park. It's a completely different thing when someone who is high profile actually tweets it out.

</comment></comment></comment><comment><USER3> All this China censorship made me think. Starting to get this feeling that more and more choices made by me (to buy/to use/endorse) are becoming more like a political votes. Just happy there are things/ideas free from politics

</comment><comment><USER4> South Park was right all along (ending speech of 201)

<comment><USER5> For the curious:

[https://en.wikipedia.org/wiki/201_(South_Park)#Online_leak_o...](https://en.wikipedia.org/wiki/201_\(South_Park\)#Online_leak_of_uncensored_version)</comment></comment>


One Page R: A Survival Guide to Data Science with R - <AUTHOR> http://onepager.togaware.com/ <comment><USER2> I was surprised at the difficulties I had using R at my previous job. It's simultaneously a language I enjoyed, and one I'd feel hesitant to recommend a friend because of the flood of complaints I'd have directed at me as they learned it.

I love the concept of vectorized operations, but God almighty did I struggle with the differences between indexing a list with list[1] vs list[[1]]. Other hangups included the differences between lapply, sapply, apply or the difficulty with which one has applying operations to the rows of a dataframe. Other frustrations like naming conventions are apparently results of legacy code.

I'd strongly recommend the book The R Inferno[1] by Patrick Burns. It eases you through the nine circles of R hell that most newcomers seem to endure.

</comment><comment><USER3> Does anybody with experience doing analysis in both R and python have any insight as to whether one can replace the other, or do they significantly supplement each other? I get the impression that python with pandas/scikit- learn/scipy/numpy/matplotlib can be used almost completely in lieu of both R and matlab, but I don't feel that I have enough experience in R or matlab to make such a claim.

<comment><USER4> I am a pretty die hard Python person, having used it as my main language for over 10 years. I think there is a tendency to make that claim because we want it to be true :)

Python is such a nice language that we want to use it for everything. But I found I became more productive once I got out of that mindset. Right now, I have a very multilingual workflow including Python, R, shell scripts, C++, and a handful of other DSLs (various sql dialects, html templating, etc.)

I feel like I am finally productive working with data; I was always astounded by how MUCH code you have to write to work with data. There is a pretty big cost to learning all of that, and I won't lie and say I learned R quickly, but it was worth it.

I use Python to interface with MANY systems, often to generate cleanly formatted CSV files. R reads the CSV files and does data slicing and dicing (using the data.table package, an enhanced data frame). And then ggplot2 for plotting. And C++ for the big data stuff, and shell scripts to glue it all together (with concurrent processes, importantly).

I find that this Unix-style architecture is actually more maintainable in the long run. Parts of your analysis and data cleaning become more modular and reusable. There are a lot of reasons why a boatload of Python packages aren't very cleanly reusable. You also end up with MUCH less code using the multi- language strategy vs. trying to do it all in one language (I've seen people try to do that both with Python and R).

ggplot2 is unrivaled; Python and Julia people are busily trying to copy it. Python and Julia are both also copying R's data frame structure. The area is moving extremely quickly now, so I'll be interested to see what progress they make. But there are actually areas where R the language is more suited to data analysis (has more of a Scheme core than Python, more appropriate data structures, lazy expression evaluation, etc.)

In the end I am using R for the same reason I chose to use Python over C/C++ -- because it enables you to write 5x less code (in the domain of data analysis, compared with Python). And once you use other tools, you see Python's flaws, like bad package management (R's is actually better), and a relatively bad REPL. And Python's C++-inspired class system is often a hindrance for data analysis; R is a more data-oriented language.

R definitely has its problems, including a lot of horrible R code out there. But it also has a lot more books and so forth. IMO data.table + ggplot2 alone make it worth it. I recommend reading Hadley Wickam's papers on "tidy data" and the "split-apply-combine" style of analysis. In that sense learning R actually helps you learn how to do data analysis properly.

<comment><USER5> Thanks for the "tidy data" reference, getting that now. Have you explored dplyr yet, since you mentioned "split-apply-combine" and you like data.tables?

<comment><USER4> I'm familiar with dplyr but haven't really used it. I prefer using stuff that's mature, and I'm sure that dplyr is going to undergo a lot of evolution in the early days.

I independently came to the same conclusion as this guy: [http://blog.datascienceretreat.com/post/69789735503/r-the- go...](http://blog.datascienceretreat.com/post/69789735503/r-the-good-parts)

That is, "use everything from Hadley, except use data.table instead of plyr". This was before dplyr came out, so maybe that could change. But I kind of like the syntax of data.table, although I don't understand all of it.

Of course plyr is ridiculously slow and can't be used for even modest-sized data sets.

<comment><USER5> > Of course plyr is ridiculously slow and can't be used for even modest-sized > data sets.

Right and that's what dplyr is supposed to fix. The benchmarks so far mark it at roughly the same performance as data.table. But, as you said, it's early days for dplyr ;) Thanks for your comments!

</comment></comment></comment></comment></comment><comment><USER5> Wow, this is a really nice resource, especially for someone like me just getting started. The PDFs appear, at first glance, to be quite in-depth. Wondering if they include using tools like plyr/dplyr.

</comment><comment><USER6> This is definitely a good starting resource. Some of the tutorials on R can a bit too "academic" for some tastes, so its helpful to have a guide on working with specific data sets.</comment>


Show HN: We built a simple way to accept payments through Stripe - <AUTHOR> https://gethelium.com/?ref=hn <comment><USER2> The payment UI looks unfamiliar and slightly confusing.

       https://gethelium.com/static/images/sales/overlay.png

* Why are the labels _inside_ the input field? It's surprising when you can edit _some_ text in a well but not all of it.

* Why is my email address under billing?

* Why is the CVC field on a different row?

* Email, name, and street address fields will contain long data. Neither my street address or email address will probably fit in there.

* Why is the year only two digits? Y2K led me to believe two-digit years means accidental ICBM lanches.

Also, I spent fifteen seconds wondering why I couldn't flip the switches underneath "Effortless for everyone" on <https://gethelium.com/>. I even tried dragging the switch nub left and right.

I hope this helps. This looks like a really useful service. I'd love to look at the integration documentation (if there is any).

<comment><USER3> _Why is my email address under billing?_

Does it really matter much? It seems like a logical-enough section to place that field under. I can't think of use-cases where a user would be confused about this unless the company using this tool has primed them to think in certain way about Billing. For example, a company that says "we will never email you billing information" can have its users confused. But that is a made up use-case that is uncommon at best.

 _Why is the CVC field on a different row?_

Again, your question makes it sound like there is a well-accepted standard that it should be on the same row. As an online shopper, I am used to finding the CVC field under the CC field and it has never bothered me.

 _Why is the year only two digits? Y2K led me to believe two-digit years means accidental ICBM lanches._

That could be because most credit cards list two digits instead of four. And if you have made a payment over phone, it is standard to say something like "0614"(instead of June 2014) when asked for expiration.

<comment><USER4> Just curious - When you mentioned payment over phone, do you mean via SMS? I'm not familiar with that 4-digit MMYY pattern, I've always been prompted for month & year as separate fields.

<comment><USER3> I meant payment over a phone call when the rep asks "what's the expiration on your card?" and I go "0814" etc.

<comment><USER4> Ah, gotcha. Thanks for clarifying. :)

</comment></comment></comment></comment></comment><comment><USER5> You're asking me to connect my stripe account to your site, and give you 2% of my money and you won't even give me your first name? All of your info is anonymized and your domain who.is don't have real contact info, nor your Quora or twitter accounts...

I immediately thought you were a scammer.

<rant>

You know what pisses me off the most about a site like this? Where is your contact info? Demo? Screenshots? Samples? Names? Email? About? Who the hell are you? You provide no names, no contact info, just an overly minimal site that links to another even less informative site with no names. And I see this so often that it infuriates me. It breaks the basic most fundamental rule of the web which is, Trust and Authenticity. AKA Credibility.

<http://who.is/whois/freshplum.com> Even your WHO.IS info for your domain is anonymous. The only idea I have that you're not a scammer is that your HN account nick007 is 1000+ days old. And your first name _might_ be nick and you might be a part of Ycombinator's summer 2011 class. Your clients aren't going to play the clicking game like I just did to try to find out if you're a scammer or not.

<https://twitter.com/freshplum>: Here's your twitter, again no names.

<http://www.quora.com/Freshplum>: And your Quora, again no names. Just "a pricing company".

I know I'm comming off as an asshole critic (the kind HN needs less of) but, WTF man. I had to dig your names out from the bottom of your press release. The one document on all your sites that actually tells me something.

Who is spreading this philosophy of 1 page anonymous sites that ask you for credentials?

Here's a one page website I made. <http://www.timeforzen.com>. All it does is stream free creative commons songs. I'm not even selling anything and I still have an about page and contact info.

</rant>

(Also for those of you who are saying 5% is too high, don't forget ebay and amazon fees add up to 11%-20%. Amazon is so expensive that I can't afford to sell my calendars on its site. And Gumroad allows you to sell links to digital content by charging 5% as well. So it's normal.)

<comment><USER6> Hi Chris -

I'm sorry you feel this way. I agree that HN needs less vitriol like this, but I can understand where you're coming from.

Expect an 'about page' at some point in the near future. In the meantime here are a few links that might help you learn more about the company, the team, and the product (I found most of them by googling "Freshplum" and "gethelium"):

* <https://angel.co/freshplum>

* <http://www.crunchbase.com/company/freshplum>

* <http://www.linkedin.com/search/fpsearch?keywords=freshplum>

* [http://thenextweb.com/insider/2012/11/01/freshplum-launches-...](http://thenextweb.com/insider/2012/11/01/freshplum-launches-helium-a-simple-way-for-anyone-to-create-their-own-shopping-cart/)

* [http://techcrunch.com/2012/11/01/freshplum-goes-after-small-...](http://techcrunch.com/2012/11/01/freshplum-goes-after-small-businesses-with-a-dead-simple-stripe-enabled-shopping-cart/)

* Demo: <http://sam.odio.com/2012/10/31/buy-me-beer/>

* [http://allthingsd.com/20110621/sam-odio-i-left-facebook-to-r...](http://allthingsd.com/20110621/sam-odio-i-left-facebook-to-rejoin-y-combinator-with-a-new-start-up-video/)

And, if there's any more information you'd like before signing up, there's always email. Our addresses are in our profiles.

<comment><USER5> Now that I've calmed down, I have to say I'm so sorry for my rude rant. I don't know what triggered it but honestly my heart rate literally increased when I saw you didn't have a single name, a single email address, no contact info at all on GetHelium. I've never been that passionately angry before over a website. Maybe I'm overly-obsessed and need a break from design. Maybe I lost my life-savings to a con artist in a former life, I don't know.

I signed up and was about to connect my Stripe account when I realized it. I felt like I was being played. Who were these guys? Are they for real? Can I trust them? I automatically assumed I could because their site's on HN and got upvoted. And a flood of hormones and emotions came in, I felt weak, powerless to judge, unable to trust, unable to ask, confused, angry. All such negative emotions caused by a website without contact info.

Contact info is my #1 pet peeve in all of designdom.

You don't even need a seperate about page, just a picture of you guys at the bottom in the footer, with your names and email addresses.

Credibility and trust is more important than Usability, Pricing, Design, and everything else. NOTHING is more important. That's why so many sites have pictures of the owner, its workers, testimonials, links to Tech Crunch and the New York Times articles about them. Anything to build trust and say, "We're not going to run off with your money."

\- Bad design is forgivable, you might not have had the time or budget. Lots of sites with terrible design still get money and customers.

\- Bad UI is also forgivable, you might have bad taste. Lots of websites with terrible and confusing UI still sell, solve problems, and make money.

\- Hiding contact info while asking for money has no excuse. It's deceptive. It's something thieves do. So credibility is the #1 most important thing.

</comment></comment></comment><comment><USER7> A few comments are making an issue of the pricing (2% + Stripe's 2.9%) saying it's too high. It's not too high. If the product does it's job and makes it dead simple for the end user it might even be too low. As mentioned by someone else, the HN crowd likely isn't the target audience.

Fast Spring, which did 44.5 million in rev in 2011, charges 5.9% plus $.95 or 8.9% flat per order (user chooses which). Granted, Fast Spring may be more of a total ecommerce solution, but the point isn't +2%. It's who is the end user and how much easier does this product make their life/business.

<comment><USER8> The opinion of it being too high, is a perfectly respectable opinion given that there are free and one-time fee wordpress plugins that handle this integration.

</comment></comment><comment><USER9> Here's a question about Helium. The premise is that for 2% any site could be made an eCommerce store, making total transaction fees around 5% for a dead- simple solution. This is great for anyone without the technical knowledge or desire to code their own solution in. What happens when the site gets successful? At what point is it worth it for the site owner to pay someone to build a more cost-effective solution? 2% for $1,000/month is only $20, but if the site gets much larger, you lose a customer.

I guess the strange fact is that the more successful your clients are, the more likely they are to leave. How will Helium deal with this?

<comment><USER6> We're developing a suite of "enterprise" e-commerce tools under the Freshplum brand, so presumably we'd up-sell the retailer to those.

</comment></comment><comment><USER10> I really like the clouds in front of the airship! The movement is very subtle, which gives the design a refined feeling. Totally the kind of detail that could be overdone and become distracting, but I think you guys nailed it.

</comment><comment><USER11> Curious - as someone totally ignorant to the nuances of Stripe - why doesn't Stripe offer a very simple, OOB checkout solution?

What would prevent them from doing so, which in theory could be a nice additional revenue stream for them (stealing [a part of] your 2% away)?

<comment><USER12> I think this is very risky since stripe could easily put them out of business by providing the same thing and for no additional cost.

<comment><USER13> Honestly, this feels like the sort of thing they were putting in contract work anyway, and just decided to change into a service since they had it anyway...

</comment></comment></comment><comment><USER14> I've been following you guys for a while, and really love your sense of design.

As for the product, is this a direct competitor to Gumroad?

</comment><comment><USER15> I don't understand why you need to charge with pricing-per-transaction. This seems like something you'd pay monthly for, no? I'd be curious to know why you decided not to do a subscription plan.

</comment><comment><USER16> I run my lady's dog treat site. Arrfscarf.com

We have been trying to find a great solution for web ordering. We sell doggie ice cream. We currently sell retail in Chicago. Have a couple of stores in New York that are interested in carrying our product.

We want a simple solution for our online ordering. First, we need to test and see if people are willing to order dog ice cream online.

This looks like a good solution for us to try. I will implement this later today. I will likely give some feedback.

</comment><comment><USER17> very cool.. the Odio family always up to big things :) love the simplicity + the design + the use-case. releasing this as a wordpress plugin would be killer - the entire shopping cart space is very muggle-unfriendly. that said, you're going to have to do _alot_ of volume to make 2% worth your time - payments are coolest when tied to a marketplace, but your diff advantage is to not be a marketplace. you're going to have a tough time recouping the $$ you'll have to spend to gain the mass-market mindshare you'd want to drive that kind of volume. at the same time if the business turns out to be the bees knees, big guys will be quick to copy and out-spend you in marketing, while small guys (eg ribbon, gumroad) can quickly add "embedding" as a feature. i love the product (and the name!!), it's just a tough slog to "be the next PayPal" these days. quick feedback: your "effortless for everyone" is exceptionally well done, i would move it above the more standard 3 column descriptors.

<comment><USER17> i just saw freshplum- if you did helium as a way to <ahem> get freshplum into the air and with quick notoriety.. then i take back everything about being the next paypal - you did exactly the right thing. also i agree with others - bundle your pricing and state one clear %.

</comment></comment><comment><USER6> We believe Helium's target audience isn't the HN community, but it'd be good to get your thoughts about it anyways.

It's basically an easy way to add a shopping cart and check-out flow to a website. Think of the small business that's not tech-savvy but wants to sell a few products (or a service) on their site.

Design was by Michael Yuan, the same designer that designed Divvyshot.

<comment><USER18> It looks really nice! Does this position itself in the same space as google checkout was in?

</comment></comment><comment><USER19> Can I ask what you guys are using for the mouse-based signature feature? Is it something off the shelf or did you guys write it yourself?

FWIW, I think it is potentially a very viable product if you can find and effectively market to the proper niche (which obviously is not the HN crowd). Good luck!

<comment><AUTHOR> It uses the HTML5 canvas element... there's not that much too it actually. We're still playing around with it to see how to best use it.

</comment></comment><comment><USER20> You need to state your pricing structure clearly. Saying that you charge 2% over what Stripe charges makes it seem like you are hiding the total cost of transactions. Using Helium would cost people 4.5% plus 25 cents, am I right?

I also see that you are testing the response from HN. Well done. But the landing page for HN and regular visitors are the same. Why not run some quick tests with all the traffic?

You might have branding issues with the project Blimp (getblimp.com). The founders are really cool guys, but do chat with them about it.

The design is top-notch, though a button or link that scrolls down to the area with more information should be tested. Right now, the first impression you get is that this is an empty landing page.

A demo would also be nice.

<comment><USER6> Regarding pricing: We talked about the wording internally. It was decided that different people pay different stripe fees (eg volume discounts) and stripe may change their fees in the future w/o notice, so it's best to simply state what we charge. I've added a link to Stripe's pricing page to make things a little more clear.

Regarding the demo: we're planning on adding one to the home page. Until then I added the button to my blog: <http://sam.odio.com/2012/10/31/buy-me-beer/>

<comment><USER21> I'd be loath to put my credit card info there since it's on an HTTP (not HTTPS) page. How is this remotely secure?

<comment><AUTHOR> The page itself is loaded via HTTP, but all credit card information is transferred to Stripe & Helium via HTTPS. Again, with Helium, no payment information actually needs to hit your servers (Sam's blog, in this case).

</comment></comment></comment></comment><comment><USER22> I have something similar going at <https://www.bngal.com>

Your homepage design is definitely better but it would be really nice to see a demo, screenshots, or a video somewhere.

Also, do you think you'll have problems with integration once you go beyond _hackers who know how to paste embed code into their site_?

<comment><USER23> I like how your page tries to answer all questions of the potential customer right on the frontpage. First a clear value proposition, then some features, then the target customer ("where can I find myself?") and a short Q/A at the bottom.

May I ask how you created the responsive design for this page (fluid layout + mobile navbar)? I noticed some backbone.js in the script code, but I have no clue in how far you have used a CSS framework like e.g. Twitter Bootstrap.

<comment><USER22> All the responsive stuff just comes from twitter bootstrap.

Backbone is used when creating a page–mainly because we have certain attributes and form fields that only apply to certain pages.

</comment></comment></comment><comment><USER12> So is your target customer is very small transaction web sellers? Because 4.9% + 30c per transaction is extremely high. That's 2.9% + 30c from stripe and 2% from you.

<https://stripe.com/us/help/pricing>

If you're selling in any kind of volume, something like shopify would be a no brainer over this.

<comment><USER24> I would definitely consider capping the pricing structure. Something like 2% of the first $10k transasctions, and 0.5% thereafter. That or just have an introductory tier that's based on % of transactions, and higher level tiers that are monthly fees. The percentage fee is very attractive for small merchants who just want to try something out, but obviously loses its upside if your experiment works out.

<comment><USER8> good idea and encourages the seller to hustle. ;)

</comment></comment></comment><comment><USER25> This is going to sound snarky, but isn't Stripe a simple way to accept payments through Stripe?

</comment><comment><USER26> A little like <https://spacebox.io/> too.

</comment><comment><USER27> It seems like a good idea, but I think 2% additional per transaction is a tough sell.

<comment><USER6> Agreed, 2% likely isn't end state and we plan on searching in the space below it.

It's easier to drop the price (or give volume discounts) than raise it.

</comment></comment><comment><USER28> About freshplum: "We bring the decision-making power of data science to businesses that sell goods and services electronically."

This is a long sentence. How about "We bring powerful data analytics to online sales"?

</comment><comment><USER29> Is there a demo anywhere?

<comment><USER6> We're planning to add a demo to the home page. Until then I created a demo on my blog: <http://sam.odio.com/2012/10/31/buy-me-beer/>

<comment><USER29> Exactly what I was looking for, thanks! This looks great.

<comment><USER30> That's a really nice demo!

</comment></comment></comment></comment><comment><USER31> Here's something I need which I would pay 2% for right now - the ability to email someone an invoice. I'm stuck with PayPal, which I hate.

<comment><USER32> Interestingly enough, I'm just finishing up an email invoicing system that I'm planning on open sourcing. It integrates the Stripe button and can be hosted on Heroku.

I'll shoot you an email when it's up on github if you're interested.

<comment><USER33> I'd be interested. Could you email me too?

<comment><USER32> Will do!

</comment></comment></comment></comment><comment><USER34> Design-wise, it looks fantastic. Can I ask why there is absolutely no branding on the login page (or the TOS)?

</comment><comment><USER35> Nice job! Are there plans to support mobile browsers? Works great on iPad, but not iPhone at the moment.

</comment><comment><USER36> Far too much like spacebox.io for me.

</comment><comment><USER37> Beautifully presented, wow.

</comment><comment><USER38> Do sellers need to have an account with Stripe ?

How do you handle chargebacks ?

</comment><comment><USER39> Homepage seems like not tested in IE 9-10

</comment><comment><USER40> That page is just beautiful. Well done.</comment>


Silent Teacher – A game to learn how to code - <AUTHOR> http://silentteacher.toxicode.fr/ <comment><USER2> Hi everyone, I'm the guy behind Silent Teacher. I just had the surprise to see my work on HN, in fact a colleague of mine published it without me knowing, I didn't have the chance to really explain the goal.

This is a side project, and the goal is not to teach how to code. I agree with several comments here, it's sometime confusing, it's short and minimalistic. The real goal is far less ambitious. I just wanted people to catch a glimpse of what is coding. It's like stepping into un unknown world for a few minutes. And it's not aimed at everybody. Some people are driven away by written explanations, or can feel patronized very quick, and I wanted to address that. Here, the first questions make you feel confident, then with tries and errors, by yourself (or apparently so) you understand a bit how this works.

The story behind this is : I was never able to explain how code works to my wife. She is math-o-phobic and she never gave me the chance to explain... just the fact of explaining something like this scares her away. But one day, sitting next to her on the train, I opened my JavaScript console and began typing 3 + 4, then without a word I pointed the keyboard and screen to her... 20 minutes later we were doing functions and variables, without even a word. This is how this project was born.

Sorry for those who where mislead by the title of this HN post. We have other tools currently in development to address code teaching (one more focused on code reading, one more focused on creativity, one more focus on JavaScript ...), and only when 3 or 4 of these will be published will we be able to teach properly to a larger audience.

Thanks for all the feedback today, I really appreciate it.

<comment><USER3> Do you have any demos or profiles of your other educational projects? I'm working on project that uses a pedagogy similar to the Silent Teacher, I'm always curious to see what other people are doing in that area.

<comment><USER2> No, but there are works in progress and we hope to release some very soon. If you want to take part in beta tests, you can leave your email there on the two "coming soon" projects here : [http://www.toxicode.fr/learn](http://www.toxicode.fr/learn)

</comment></comment></comment><comment><USER4> When I see such projects, I try to remember how I learned to code.

And I certainly didn't do such practices.

First thing I did, was mIRC-script most of it copied from other scripts and retrofitted.

I think this was a good start, since I got something useful out of it and it increased my interest in coding. I didn't understand much of it, not even arrays.

But I wrote a web-crawler with this basic knowledge and a copy of a TCP socket example, got some data from a website, used 10 vars (the start-page of the news site just showed 10 articles at once lol) to save and modify it and spam the titles in the channels, with links to it.

I was intrigued by this power I got, even if I didn't understood much of it, fusing web and irc together, I felt like a hacker...

Later I went to a IT school, studied computer science etc.

Most of this basic stuff was boring and I just did it because I knew it would increase my power over things that interested me, but if I didn't had this "aha-moment" in my youth, I couldn't bring up the motivation...

</comment><comment><USER5> It's a great minimalistic interface, and clearly some thought went into the "silent teacher" theme. However, this is a completely ineffective way to learn coding. Coding is not rote memorization of how language constructs work, it's about applying language constructs toward bigger problems.

It's like getting aspiring artists to draw a bunch of stick figures and random shapes. They aren't learning anything that will help them paint a masterpiece, they're just learning to paint for the sake of painting.

</comment><comment><USER6> My problems:

1\. This doesn't teach you how to code, this teaches you how to read code and learn arithmetic logic that goes with programming. 2\. You use Javascript as a base.

<comment><USER7> It teaches how variables work though, which can be one of the toughest parts about understanding code.

<comment><USER6> But it doesn't, it only serves as practice for distinct edge cases that teachers try to use to trip up new students. Which is fine except that it does not teach you anything, it lets you figure it out through frustration and trial-and-error. It never tells you "Hey, make sure you pay attention to this part" or "Sometimes weird stuff like this might happen" and then offer a path for the student to progress.

</comment></comment></comment><comment><USER8> Really well executed.

This forces the reader to confront their misconceptions about what is going on by exploring edge cases. (number + string == ??). Teaching models that force you to guess when you are uncertain can create a deeper understanding by preventing hindsight bias. Everything seems obvious once you know the answer -- the hard part is convincing the student they would have gotten the question wrong before you told them.

</comment><comment><USER9> Even if I had never tried to program before, I feel like it starts/progresses way to slowly. It gave me like a whole pages worth of questions about adding single digit integers or combining small strings.

I like the look and feel of it, I just think the content should be tweaked a little bit to pick up the pace. Maybe some hints they can look at if needed.

Also, multiple language support would be good.

<comment><USER10> I've been doing something like this for regex as a side project.

One of the biggest things I'm thinking about is determining the adaptive algorithm that places you on different portions of the learning experience.

My current strategy is to compose a concept map of all the basic concepts and then devise a proficiency metric on each concept, which might be some aggregate of [correct on first attempt + time to completion + learner history] or whatever else I think of. Then you progress through the content by traversing this graph (with a fair degree of stochastic nature so to keep things moving). I'm hoping collected data can then be used to devise a new concept graph - something of a dependency graph whose density might ultimately reflect an element interactivity [1].

For example, function use might be considered a singular concept, while a function which returns a function might be another concept. The latter is a bit more exotic to newcomers and you can use the metrics determined by the former to gauge a pace to give the learner, but it's a foundational concept which most concepts in functional programming depend on and it might not be fair to consider it a single concept in the learning process until the schema is well-established.

 __Ideally, __within a few questions answered you get pushed up to a state where you 're actually learning something, no matter what your proficiency.

[1] [http://www.davidlewisphd.com/courses/EDD8121/readings/1998-S...](http://www.davidlewisphd.com/courses/EDD8121/readings/1998-Sweller_et_al.pdf)

</comment></comment><comment><USER11> How far does it go at the moment? And how far are you planning to make it go?

Very well done, congrats guys!

PS. Consider translating [http://www.toxicode.fr/](http://www.toxicode.fr/) into English for visitors from the US. Your services are in much demand over here. And get the .com too!

<comment><USER12> > How far does it go at the moment?

Not very far, I completed it in a few minutes. I think the hardest was:

        function hello(a) {
            return a * a;
        }

        hello(4) + 3;

</comment></comment><comment><USER13> Since becoming an instructor, I love these tools to help reinforce what I'm teaching. Its rapid fire enough and randomized enough that you can fire off 5-10 small 'exercises' without having to build elaborate (in the student's mind) programs to practice the concept. The sequence of math to functions was great in my opinion. Hammer home the math, then repeat with a twist.

I will say arrays need makes a quick jump since the concept of starting counting at 0 is sometimes new to them.

If I were to use this, the features I'd love to see are the option to view it in different languages (I teach Python and Java). Also, someway of setting up practices and monitoring student activity would be nice; like, homework is 20 correct answers of math, variables, functions.

Very cool site!

</comment><comment><USER14> I would love it if this hooked up to another side where you could come up with code-snippet based lessons (list variables at top with an array of example combinations). Move up/down the tree/chain if the error rate is too low/high.

</comment><comment><USER14> This is honestly the best one of these I've seen. Decision paralysis is probably the biggest fault when starting out in programming. This exists with the specific purpose of unlearning that habit.

</comment><comment><USER15> In case anybody is wondering why they're getting the string concatenation questions wrong, it's because you let your browser translate the page from French.

</comment><comment><USER16> I hate being negative, but I have to say that I really don't think this an effective way to learn how to code for someone without some programming knowledge to begin with.

I just watched someone with no programming experience whatsoever try the problems. She's smart and well educated.

The basic arithmetic is (obviously) fine.

Basic variable assignment is fine, although the 'var' keyword doesn't really serve a purpose. It's completely meaningless to the non-programmer, and seeing as you can declare variables in the global scope in js without using it, I don't really get what it's doing here.

The first difficult problem is why

        '4' + '2'

is '42' and not '6'. The person I watched voiced a bit of frustration, then after a minute saw that 4 and '4' are different, and then breezed through the round. But she didn't learn anything at all about strings vs. integers or even variable types as a concept. She learned that, arbitrarily, when numbers are in inverted commas they should be concatenated when a '+' sign is used instead of added together. She didn't feel like she'd learned anything either. And without already knowing about types, about integers and strings, it is _impossible_ to teach this concept intuitively because it is _not intuitive_. Someone taught that 4 + 2 = 6 and that '4' \+ '2' = '42' might very reasonably think that '42' \- '2' = '4'.

Next was variable assignment order:

       var a = 0; a = 4; a + 3;

She got the "rule" of last-assignment-counts pretty quickly, but again, didn't get what the variable was actually doing. She just learned to ignore the first line and add the last two numbers together. The idea of 'a' being a variable wasn't communicated to her.

Then there's a huge jump to functions, with

        function hello (a, b) {
            return a + b;
        }

        hello(2, 4);

After some trial and error, she worked out how to answer these kinds of questions as well, but with no understanding at all of what the function was, what the return statement was, the idea of functions having arguments, etc. She just learned to add the two numbers at the bottom, and later to perform an operation on the two numbers at the bottom using the operator from a few lines higher. The process became "find the numbers, find the operator, ignore everything else".

Up to this point I had been completely silent and just watched, but now she began to give up, and we talked about how she'd found the experience. She didn't feel that she'd learned anything and didn't like the lack of feedback and explanation.

The next questions were about about length:

        var a = 'nudintm';
        a.length;

I really don't like this. So far, the user has only been exposed to functions, and the syntax and structure will still be unfamiliar in the best-case- scenario. From there, it's a huge leap to properties and the implied existence of objects. This problem is just so arbitrary without an understanding of what's going on. Why is there a period between 'a' and 'length'? Why does length not have '()' after it like hello() did a few problems earlier? We know the answers to these questions, the intended audience will not.

        var a = [9, 4, 'w'];
        a.length;

This is another huge leap, and it's a bit odd because it introduces arrays in a problem that doesn't really indicate anything at all about what an array is or what it's for. It's also a bad question because the user might add together the length of '9', '4' and 'w' and come up with 3, the correct answer, and then think to get the length of an array you just add the length of every element in the array.

I'll stop there. I admire the execution and the ambition of the project, but in its current form I really don't think it works well at all if the intended audience is people who don't know anything about programming. Users learn superficial patterns to get the correct answers without understanding the problems in any real way or learning anything about the structure or function of code.

<comment><USER17> I just had my wife go through it, and she had similar sticking points. She seemed to grok most of it, with some small explanations of syntax along the way (=== as equality vs = as assignment, [a, b, c] is a list of things, etc).

I think that the value of this tool is to help non-programmers discover that code isn't scary, and that it's made of simple things that regular humans can understand. The key would be to have a developer beside them to (briefly) explain things that look utterly foreign or step in with some guidance if things get frustrating.

Overall, in my opinion it's a fantastic "gentle introduction to programming". It was a real confidence-builder for my wife, and she's agreed to go through tryruby.org with me tomorrow. Mission accomplished, IMO.

</comment></comment><comment><USER18> I don't mean to be mean but some of these answers depend on what language you use.

For example

var a = '3'; var b = '4'; a + b;

Depending on the language may give you 7 or maybe give you 34.

<comment><USER19> What's an example of a language that, when adding two strings/chars, parses them as integers first?

<comment><USER20> > What's an example of a language that, when adding two strings/chars, parses > them as integers first?

The cancerous piece of shit we know as Javascript.

<comment><USER21> No, Javascript will concatenate two strings that contain integers if you add them.

"1"+"1" //=> "11"

</comment></comment></comment></comment><comment><USER22> So I just gave this link to my non-technical wife for the ultimate test. She is actually making pretty good progress. I'll update this as she progresses.

<comment><USER12> > 52 minutes ago

No updates? :(

Cause I was interested in real-world experiences, not just programmers testing the programming learning tool.

<comment><USER22> She was having difficulties with functions and the order of operations. We decided to retry it again later.

</comment></comment></comment><comment><USER7> This is just what I was looking for to help one of the designers at my job learn about how variables and functions work. She's good with photoshop but her usefulness is seriously limited by her inability to write code - I've been trying to figure out how to get the basic concepts through to her gently.

</comment><comment><USER23> This is fine as an introduction to javascript. It's terrible as an introduction to _programming_. I really dislike teaching language idiosyncrasies that get in the way of clear expression of logic. And the first few levels are basically nothing but javascript idiosyncrasies.

</comment><comment><USER24> I like this approach, where it does explain anything, but lets you figure it out on your own by starting with the basics.

I think the functions should be renamed. function hello (a) would look like nonsense to a beginner. Give them names like addNumbers so they can piece it together.

</comment><comment><USER25> As a gentle introduction to viewing code snippets and reading variables this is exquisite

</comment><comment><USER26> Learning through dialogue feels very natural for languages, including programming languages.

The Little Schemer follows a similar approach-- a series of short questions that the reader is encouraged to answer, along with the book's answer to them.

</comment><comment><USER27> This seems fun. I'd be interested to hear how people who have never programmed before react to, and cope with the 'puzzle'. I didn't find any information beside the game itself.

</comment><comment><USER28> What happened to learning to code by reading K&R or some other book that explains how the machine works?</comment>


Dumpster Dive, and Endless Runner Through Garbage and Trash - <AUTHOR> http://dumpsterdive.ooglequest.com/

<comment><AUTHOR> A friend/acquaintance just released this. It's got a neat punk aesthetic, and they used music from a bunch of local (to Tallahassee) bands.

Also, I guess there's a typo in the title. Oops.</comment>


E-Commerce Site Lets Users Buy a Better Life For Girls in India - <AUTHOR> http://mashable.com/2011/01/27/the-girl-store/#

<comment><USER2> This is an absolutely amazing idea.

<comment><AUTHOR> The thing I wasnt able to gather from the article was how they manage the "marketing" of it. Most indians I know (in india more than outside) start asking "oh so how do we know they are not dodgy"... I have to say that was the first thought that crossed my mind (and I do feel guilty about that)... but something stirred in me (ofcourse I could be wrong)... Would be great to see a TipJar plugin on the site!</comment></comment>


Kubernetes Manager: A Kubernetes Dashboard / Status Page - <AUTHOR> https://github.com/mlamina/Kubernetes-Manager <comment><AUTHOR> I wrote this little tool mainly for myself, because I felt the need to have some kind of quick overview / status page for my Kubernetes clusters. Since IMHO there is still no tool out there providing this kind of functionality the way I wanted it to be, I just put the code on Github and hope that it might help some colleagues in need :) These are some of the core features that I find the most useful:

\- Quickly view the (color-coded!) status of all RCs, pods and services in realtime per namespace

\- Delete pods and RCs with one click

\- List and search recent cluster events and quickly jump to related resources

\- Follow the progress of rolling updates in realtime

</comment><comment><USER2> This might make a good "Show HN" if it meets the guidelines and want feedback.

<comment><AUTHOR> I don't have a lot of experience posting things on HN. Is it OK to post it again in "Show HN"?

<comment><USER2> If you don't keep reposting it and it meets the guidelines, I'd think so because "Show HN" is designed for letting people try stuff out and provide feedback.

Guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

<comment><AUTHOR> Thanks! Very helpful :)</comment></comment></comment></comment>