Go's Major Versioning Sucks – From a Fanboy - <AUTHOR> https://qvault.io/2020/09/15/gos-major-version-handling-sucks-from-a-fanboy/ <comment><USER2> I'm the author of the _other_ recent post that made it to the front page about the trouble with Go's v2+ modules.

I disagree with much of this post.

> Go makes updating major versions so cumbersome that in the majority of > cases, we have opted to just increment minor versions when we should > increment major versions.

I disagree with this, wholeheartedly. I think Go's module system making modules separate packages on major versions is actually _great_ once you actually know how it works. The problem is simply that it's non-obvious and not well understood. I think they could have made it more obvious requiring in on v1 for starters.

Beyond that you should absolutely be tagging major versions for every breaking change, and it _should_ be something a developer has to stop and think about. Not something to be taken lightly, EVEN with regard to internal libraries.

You can learn how to code things preemptively so they are flexible for additive changes and require fewer breaking changes. It's almost always worth the effort in the long run.

To my posts point, the problem is just _people don 't_ know how it works, and it's design makes it something you learn late into a project, when you're tagging v2, rather than something you hit early.

FWIW, my post for anyone didn't catch it:

[https://donatstudios.com/Go-v2-Modules](https://donatstudios.com/Go-v2-Modules)

<comment> grey-area No, that is not the problem, people are not just holding it wrong.

The problem is a mismatch between the Go team's perception of semver usage (or perhaps how they think it should be used) and its real-world usage. Some examples:

Major versions are used to communicate more than breaking changes.

Project identity doesn't change if a project changes, it is not a new package.

Hardly any projects use strict semver in the real world, and other package managers allow a more flexible, looser semver.

Just what is a breaking change anyway? Real-world packages make small security changes which break compatibility, sometimes minor changes do too, and that's ok if breakage is very limited in scope.

In the current go modules, new major versions are not easily discoverable or announced, and new importers will need to consult docs or know about go get @latest to find the latest version. This could be fixed with tooling _if_ the problem is recognised. There are possible solutions if they want to keep /v2 paths, but we shouldn't pretend there are no problems caused by this change. It makes it easier to produce breaking changes and harder to version increment just for new features (as most projects from linux to rails do).

Personally I think it condones breaking changes and will lead to more breaking changes, not fewer - if you're forced to change import paths at higher versions why not just delete that api you don't like? Within Google say there are significant downsides to this and pressure to fix your own breakage, outside, not so much, including in packages people are required to use, like api client packages for popular services.

Significant breaking changes introduce real pain for consumers and in an open ecosystem should be avoided at all costs.

<comment><USER3> Okay, here's a real world example. Three months ago, stretchr/testify was version 1.3 and supported Go 1.10. Yesterday, we tried to build some project, and suddenly tests don't run because, you see, now testify is version 1.6 and they support only Go 1.13 and up. That's a bloody breaking change, okay? And it happens all the time with Go packages: they're constantly in the process of dropping support for older Go versions without bumping major versions.

<comment><USER4> And is Go so hard to upgrade for your application?

Go the language is really best in class when it comes to keeping backwards compatibility.

<comment><USER3> Well, in this particular case it was hard. The used version of one our internal libraries didn't support Go 1.13, so we bumped its version, and that required some more dependencies brought in and updated, and then it turned out that the container with Go 1.13 was misconfigured so it literally had no access to that internal library, at all (something with Gitlab deploy keys...), so in a hurry we tried to vendor this internal library wholesale, and then there were some problems with gomod-ed libs and those without go.mod, and some linters had to be explicitly told to skip the 'vendor' directory (wtf), and...

And at this point, I just stopped digging down that rabbit hole and instead added

        TESTIFY := github.com/stretchr/testify

and

        mkdir -p "$(GOPATH)/src/$(TESTIFY)" ; git clone --depth 1 --branch v1.3.0 https://$(TESTIFY).git "$(GOPATH)/src/$(TESTIFY)"

before 'go install' in the build script, and ran it in the container with Go 1.10. _This_ change took 5 minutes to make and worked without any problems.

Isn't the one of the reasons we use semver in the first place so that after you do some small change to the current application you're working on, you don't suddenly find yourself having to update 2/3 of your the environment just to compile it?

</comment></comment></comment></comment></comment><comment><USER5> I think most of the frustration I have seen comes from people expecting symmetry and uniformity in the vendor/package management solution. This is the same way some looking at an architecture diagram expects clean straight lines or aligned boundaries.

That said, Go team should have made it clear right in the title (for all blog posts) that they are attempting a unique non-intuitive solution to a hard problem of transition from 'no-versioned' world of existing packages to 'semver' and the explicit desire for force people to avoid versioning if they can (just like the old days). There is nothing wrong with weird solutions. We don't have to follow Rust or Ruby or npm. Their situation is different.

Of course then the protobuf or grpc team (I forget which one) went and created a new "v2" without the "v2" suffix and that pissed a few people off. Of course that was still within the reasoning Russ explained (it was a reimplementation and domain part of the URL already changed, so there was no need to add v2), and Russ probably doesn't control the particular package's team. But that is life! People still expect perfection from opensource projects.

<comment><USER6> What I dislike about Go's solution, and somewhat about semver in general is that no one makes major version changes anymore _even if_ they break backwards compatibility.

However if I use semver internally, like it's supposed to and make regular major changes (let's say once a month), my code repo becomes a mess. After a 2 years, I'll have folders for v1 up to v24. And the fact that I have to copy -R/grep|sed, means that people will be less likely to properly signal that a backwards incompatible change has occured.

Disregarding uniformity, for the reasons above I don't think their design is a good one. It treats major version changes as a rare event.

<comment><USER7> If you're introducing breaking changes once per month, then your library really isn't ready.

Tell people you have an unstable library. Breaking changes _will_ happen. Then, when you've used your library in production for a while and are reasonably sure it wont have to change, tell people it's stable. If you make breaking changes after that, then start with a v2 suffix.

For some reason, semver has made people stop going through the alpha, beta and rc stages of a release, even though the point of such things is to discover breaking changes before you're commited to maintaining the version for the time to come.

Major version changes should be a rare event. If it's not, you're really just shipping around a (pre)alpha library, and should be explicit about that.

<comment><USER8> > If you're introducing breaking changes once per month, then your library > really isn't ready.

The whole software industry moved away from waterfall to agile because it's unreasonable to assume that no requirements will emerge. I would disagree, for example, that Python3 is not ready just because they're introduced backward incompatible changes in some minor releases.

<comment><USER9> I mean python is basically the prime example of how to poorly manage version upgrades with their failure of 2 => 3.

<comment><USER10> They were just desperate to do a better job of screwing up than Perl with it's 5 => 6 updates...

<grin>

<comment><USER11> As we can see from the Perl ecosystem having completely moved over to the extent that Perl 5 is now out of support while Python is still mired in the update.

<comment><USER12> That's funny, because I see the opposite. Perl 6 was a failure that had to be spun into a separate language and people stayed with perl 5, recently work on perl 7 started, but as far as I know perl 5 is still the version in use, recently FreeBSD forced me to update perl to version 5.32.

Regarding Python, I no longer see 2.7 in the wild (I have no doubt it is still in some places) all projects I'm working on are in Python 3. AWS Lambda supports 3.8 (which is the latest stable version), Ubuntu comes with 3 installed by default. FreeBSD set 3.7 as default, depreciated and will remove 2.7 completely by the end of this year.

Many Python 3 packages were released as python 3 only, the packages that that previously supported 2 dropped their support. Currently running 2.7 is a liability. Not as much that it is EOL and there are no security fixes anymore, but also packages dropping support (which is IMO a bigger deal).

<comment><USER11> Yes my comment was ironic.

<comment><USER12> ah, feeling dumb now :)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> I think for a package versioning system to work, the ecosystem has to adhere to its principles. This is true for any package system.

I think this post is an example of a package not adhereing to its principle; a major revision implies breaking changes, so it doesn't make sense to have a tool "automatically update" things for you, because theres no garuntee that it'll work.

I feel like the issue is that this post doesn't totally understand how the package versioning is meant to work in the first place; if you're changing your struct names and it has no external effects, i don't see why you /want/ to semver, because you're exactly getting much value from semver'ing other than the vanity of pretty numbers. Maybe I'm missing something?

Im curious if an ideal package system that would work for this particular project, but I don't think one does.

<comment><USER14> Exactly this.

The whole point of semver is to address the issue of backward-incompatible changes breaking downstream dependencies (well, among important other things).

What Go is doing is forcing you to use Semver the way it is intended to be used; from the semver specification:

\---

Given a version number MAJOR.MINOR.PATCH, increment the:

        MAJOR version when you make incompatible API changes,
        MINOR version when you add functionality in a backwards compatible manner, and
        PATCH version when you make backwards compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

\---

If you don't want to adhere to this, just cut PATCH versions and MINOR versions.

It's an absolute terrible idea though.

As annoying as it may seem, there's a lot of benefits to using semver the way it is intended to: it forces you, the developer, to think a little more about how you design your code.

The small amount of productivity you lose getting used to do the proper thing (i.e. cut MAJOR version, or spend more time designing your code so that it more forward thinking) will pay off in the long term.

The tiny amount of productivity you gain by not doing the right thing will come back to haunt you and make you wish you had been more rigorous.

His startup might be small right now, but if it becomes successful, their number of internal users might explode overnight and they'll suddenly wish they had used semver properly all along.

<comment><USER15> Personally, there is no "too small for semver". Feels like every time I've done the lazy thing and failed to bump a major, even if it's small package Foo written only by me used in Bar, also only by me, there comes a time a few weeks later of digging through to figure out what broke.

When you are crunching for a deadline, the last thing you want is "oops the tool automatically bumped all the major versions on you" when you didn't explicitly intend to. Having a dedicated flag would be nicer than grep/sed though.

</comment></comment></comment><comment><USER16> The major reason to have separate import paths is to support multiple major versions of the same module, which is important to not end up stuck in situations where package A wants dep D1 and package B wants dep D2, and you can't fix it.

Of course, you could handle this w/ more complexity in the package manager/build system, but having separate import paths makes it very clear, and is a very "Go"ish solution.

Since you're only doing this when you've got breaking changes coming in _anyway_ , i.e., you've already got to fix the code, is it really such a big deal to update the import paths while you're at it? It's like a 2 second grep/replace...

That said, having Go tell you about major version upgrades available, and also an option to fix the code to use the upgraded versions import path, are good ideas.

<comment><USER17> > Since you're only doing this when you've got breaking changes coming in > anyway, i.e., you've already got to fix the code

Just because the module broke compat doesn't mean you were using the things that broke though. Maybe they dropped or changed functions that you didn't use.

<comment> xh-dude Then you don't have breaking changes, though?

<comment><USER18> Breaking and Naming is a property of the whole package, not the subset one client uses.

</comment></comment></comment></comment><comment><USER18> I'll never understand HN's love for arbitrary ill-informed blogposts about topics that have already been debated at length by experts on the mailing lists.

Writing about a complaint in a blog post and saying Tweet me is a tacit admission that the author isn't willing to face criticism from experts and just wants to get attention from the casual unininformed masses.

<comment><USER19> That's kind of an elitist viewpoint, though. I imagine the "experts on the mailing lists" are largely contributors, and really only represent a certain class of users of the language at large.

I'm not a Go user at all, but it reminds me a bit of like back when Gnome3 took a direction completely different than what I loved about Gnome2 (Apple worship, largely), which eventually lead to projects like MATE and Cinnamon.

<comment><USER18> The go-nuts mailing list is open. Anyone can (and many do) write in to discuss concerns.

You don't have to defer completely to the authority. But if you want to be treated as one, you should be willing to engage and consult with them.

</comment></comment></comment><comment><USER20> So basically this is a complaint about having to manually upgrade packages in the manifest because his small company makes lots of regular, breaking changes?

If that is the case do you have to follow rules for semver? (edit- that is indeed what they do) Your users are all internal, its not like they are going to rat you out to the police for agreeing to do something different internally. It's just a couple of numbers...

I don't do go but, as described, the version system seems fair and reasonable on paper, for a system designed to avoid suddenly breaking code that depends on it.

</comment><comment><USER21> Not defending the import versioning strategy, but I found it helpful to read Russ Cox's writeup on the topic: [https://research.swtch.com/vgo- import](https://research.swtch.com/vgo-import)

<comment><USER22> Helpful? Yes, sort of. Should you have to read that to understand how the module versioning system works? Absolutely not.

The Go module system is a debacle. It's not intuitive and it's badly broken right now.

<comment><USER23> It does kind of suck. But it's better than npm... or rubygems... or the python ecosystem... hmm, what language's package management system _doesn't_ suck?

<comment><USER24> I like Maven. Fight me.

<comment><USER25> My day job is on a modular monolith that uses mvn. I'm no expert but I've set up some IT's, setup build pipeline from jenkins, configure some plugins on various steps of the lifecycle, etc. and I guess it's ok, xml takes a lot of space though and it gets ridiculous on big code bases.

I've been working on an android app and use gradle with the kotlin dsl. I haven't really done any programming with the build steps but this is pretty sexy and doesn't need three open/close tags every plugin.

      dependencies {
        implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
        implementation("com.google.android.material:material:1.2.0")

Gradle used to use groovy dsl, but with kotlin the syntax is more consistent and auto complete is actually useful.

<comment><USER22> I've done a ton of work with both Maven and Gradle and I feel like eventually everyone just ends up back to wanting Maven.

The problem with Gradle is that it's flexibility is... dangerous and without some constraint can quickly lead to a lot of pain.

</comment></comment></comment></comment></comment></comment><comment><USER26> The author doesn't seem to understand the idea behind this, which I very much agree with, that a new major version should be handled as a new module. You are breaking contract with your existing users, upgrading will have difficulties for them.

Ross Cox explains the concept in this talk from 9:20: [https://youtu.be/F8nrpe0XWRg?t=560](https://youtu.be/F8nrpe0XWRg?t=560)

<comment><USER27> You are breaking contract with _some of_ your existing users, upgrading will have difficulties for _some of_ them.

I regularly update across major versions of packages in other languages and don't touch a thing other than the package version. I appreciate the version bump so I can do my due diligence to research the changes, but I just don't use the entire API of libraries in most cases so I'm not always affected by changes.

</comment></comment><comment><USER28> HN seems to be beginning a transition I recognize from proggit: thoughtful discussion by experts devolving into superficial critiques for the social media masses.

Perhaps I'm yelling at clouds, but it's disappointing to find an article that opens with "fanboy" and closes with "suck it" making a debut on the first page of HN.

<comment><USER29> I interpreted those phrases as just a humorous writing style.

</comment></comment><comment><USER30> You're always going to have trouble if you try to "enforce" semantic versioning, because it's a social commitment by project maintainers, not a theorem that can't ever possibly exist about "breaking changes" (which has a fuzzy, social definition).

The best option for projects is probably to loudly declare that you are not using semantic versioning, and then use it anyway, on the good-faith basis that is the only actually possible way to use it. Declaring that you don't use it will head off trouble from people who expect it to be an impossible magic constraint, while using it will help people make sense of your version numbers.

<comment><USER27> 100% agree. Semver is a _social_ construct not a _technical_ one. There is Semver the spec as originally designed, and Semver as it is currently observed. Semver has become something other than it was originally intended, likely because the idea of "breaking changes" ends up being way more encompassing than people wanted to admit [1]. To ignore that reality is a futile fight.

[1] - [https://www.youtube.com/watch?v=tISy7EJQPzI](https://www.youtube.com/watch?v=tISy7EJQPzI)

</comment></comment><comment><USER31> It feels like there are some inconsistencies in this article:

* we're using projects internally and don't want the hassle of rewriting import paths when making backwards-incompatible changes

* we don't want to just give up on semver and publish breaking changing on the v0/1 numbering scheme

I feel like you have to pick one. If it's the first, then it's actually a positive thing that explicit import path rewrites are needed in my mind at least.

</comment><comment><USER32> I have some experience developing multi-version modules([https://github.com/GrigoriyMikhalkin/sqlboiler- paginate](https://github.com/GrigoriyMikhalkin/sqlboiler-paginate)). And i quite disagree with this article.

> new copy of the entire codebase

What i have done in my module, and what i think is a common way -- is to move common codebase to common submodule, which will be used by all other versions.

> Allow package maintainers to specify the major version simply by updating > git tags

Wouldn't it cause problems if developers would need to maintain multiple versions in parallel?

> command has no way to automatically update to a new major version

To be honest, i don't see why there should be auto update to new major versions, since, usually new major version means breaking changes to API.

</comment><comment><USER33> this seems to be an overall google engineering problem.

go's not alone in breaking changes between minor versions, and "what worked yesterday no longer works" problems. v8 is very similar, where a very large breaking change can occur from one minor version to another.

even without a loose "agreement" like semver, it feels like there is no thought to "outside the bubble".

</comment><comment><USER34> > Package-Side Problems > I also find it problematic because it breaks (in my > mind) one of the most useful things about module names – they reflect the > file path.

Sorry, this is incorrect: [https://golang.org/ref/mod#module- path](https://golang.org/ref/mod#module-path). A module path describes where to find it, starting with its _repository root_ (github.com, golang.org, etc) and then the subdirectory in the repository that the module is defined in (if not the root).

So, if a module lives in golang.org/username/reponame/go.mod, its module path is likely golang.org/username/reponame. If a module lives in golang.org/username/reponame/dirname/go.mod, its module path is likely golang.org/username/reponame/dirname. (and so on with a /v2 folder, etc)

I mention this because it appears that OP's major gripe in "package side problems" is that the /v2 dir "breaks" the (mis)conception that a module path describes _only_ the repo root.

(see also: multi module repositories)

> In other words, we should only increment major versions when making breaking > changes

No, you can increment major versions whenever you want (though it's painful to your users). But, you _should_ increment a major version when you make a breaking change.

> I think a simple console warning would have been a better solution than > forcing a cumbersome updating strategy on the community.

Could you elaborate on how a console warning solves the problem of users becoming broken when module authors make incompatible changes within a major version?

> Another problem on the client-side is that we don't only need to update > go.mod, but we actually need to grep through our codebase and change each > import statement to point to the new major version:

What if you need to use v2 and v4 of golang.org/foo/bar? How would you import them both without one having a /v2 suffix and a /v4 suffix? Are you proposing that users should only be able to use one major version of a library at a time?

(I assume you are talking about a user upgrading to a new major, not the package author bumping to a new major. If the latter, a grep and replace is quite approachable and is shown in the blog you linked :) )

> Go makes updating major versions so cumbersome that in the majority of > cases, we have opted to just increment minor versions when we should > increment major versions.

I'm reminded of when the "unused imports not allowed" rule was lambasted, and then goimports was released and the conversation was snuffed out. This situation feels analagous.

You praise the toolchain and the good decisions in modules, but then hinge your thesis against it on "it's cumbersome". That's a valid concern, but it's likely that a tool that makes major version upgrades easier will resolve your issue. A wholly different design certainly is not needed _.

Check out [https://godoc.org/golang.org/x/exp/cmd/gorelease](https://godoc.org/golang.org/x/exp/cmd/gorelease) for one tool that's under development aimed at helping version bumps. It sounds like you also need something that will create the v2 branch/directory, change all the self-referencing import paths in that branch/directory, and change the go.mod path. That sounds like an easy tool to write - I expect something like that should come out quite quickly if it doesn't already exist.

\</comment><comment></comment><comment></comment><comment>-

_ Side note: In my opinion, dependency management is a rat's nest of choices that seem good at the outset and end up with terrible consequences later on. Go modules make super well thought out decisions, and is a very very simple design, built to last for a long time without regrets. Sometimes the right answer is to work around a small problem with some tooling or documentation rather than go a totally different direction that will have large, sad consequences later.

That is: all choices have downsides, but it's good to choose the best choice whose downsides can largely be tackled with easy solutions like tools and docs. Decisions like "we should build a SAT solver" have sad, sad, sad consequences that can't be tool'd and doc'd away, for example.

</comment><comment><USER35> Another problem is that if a branch is used for the new version (for example as hashicorps hcl/v2 does), then the master or main branch is no longer the active development branch, and developers have to know to look at a different branch. Not to mention that github search only works on the master branch.

</comment><comment><USER36> Well, misreading the title as "God's" and clicking the link left me feeling somewhat disappointed.

</comment><comment><USER10> Go's versioning sucks?

Welcome to the Disillusioned Fanboy Club, there's a bunch of Perl guys who eventually gave up and moved to Python waiting at the bar with some war stories for you... (I'm the one alternating beers and bourbons...)

</comment><comment><USER37> Wait, don't we have versions already and they written in go.mod and matched with git tags or specific commits? Aren't they committed to go.sum?

Why does that have to change if you move from v1 to v2?

<comment><USER38> Because v2 requires you change your import paths.

</comment></comment><comment><USER39> Why aren't you using Ruby? [https://www.youtube.com/watch?v=0D3KfnbTdWw](https://www.youtube.com/watch?v=0D3KfnbTdWw)

</comment><comment><USER40> I like how even the programming languages of today suffer the same technical treadmill anxiety as the frameworks and libraries they are used to author.

</comment><comment><USER41> i guess i am still unaware of these issues since i am still using glide.

</comment><comment><USER42> Can this stop being posted? The same user posted it 12h ago.

<comment><USER43> Hey dang, you may want to look into this.

OP seems to have a history of repeatedly spamming their company's posts [https://news.ycombinator.com/submitted?id=lanecwagner](https://news.ycombinator.com/submitted?id=lanecwagner)

<comment><USER44> Might be worth shooting them an email, in case dang doesn't see this message</comment></comment></comment>


So....Python on iPad/iPhone/iPod/iWhatever? - <AUTHOR>

Think so with the relaxed restrictions? Pygame games would be spectacular.... <comment><USER2> I've heard some Python developers mention using Jython as a way to do this.. simple write in mostly normal Python and compile to Java bytecode.. <http://www.jython.org/>

Be curious to know if it has been done already and if so, how well it works.

<comment><USER3> Can the iPhone handle bytecode? It seems like if it could, most developers wouldn't be complaining about the iPhone's closed language ecosystem. Ruby devs could compile using JRuby; Python devs with Jython; Lisp guys with Clojure (I know that's a stretch for some), etc., etc.

As a general question, how is someone going to get a language interpreter (or Java compiler) included on the iPhone?

<comment><USER4> Sure - you can now (as of the new rules today) ship a VM and bytecode (eg, Python VM and some Python code). Your app just cannot download additional bytecode (like Flash VM downloading arbitrary Flash bytecode).

<comment><AUTHOR> So you think it'd be exactly the same as bundling the VM and code for a .app bundle?

</comment></comment></comment></comment><comment><USER5> python interpreter can be embedded inside an objective C app quite easily, like lua. embedding a java VM is a lot harder.</comment>


PHP: goto - Manual - <AUTHOR> http://www.php.net/goto <comment><USER2> Is spaghetti code coming back?</comment>


Ask HN: How do you memorize? - <AUTHOR>

I am not asking about learning stories with context or systems or routines. It came up in discussion today and I am wondering how the doers and thinkers of HN memorize facts? Do you use tricks to remember names? <comment><USER2> I associate names with peculiar features or habits. It is best not to ever vocalize these mnemonics to others.

For the memorization of facts and figures, I find that alliteration or a short rhyme works best.

If something does not readily avail itself in that direction, then a "connections" type story will stay with me longer than a statement of fact.

</comment><comment><USER3> I am a big fan of visualizing weird pictures to remember names and numbers. You have to have a system though, so your first sentence confuses me.

If you want to learn how to have a good memory, try these:

[http://www.amazon.com/Memory-Book-Classic-Improving- School/d...](http://www.amazon.com/Memory-Book-Classic-Improving- School/dp/0345337581/)

<http://www.ludism.org/mentat/>

</comment><comment><USER4> I usually just think about things, adding lots and lots of associations, specializations and generalizations between the new things and my existing knowledge. Once this is done, I just know it once someone asks me for it.

(And yes, I hate learning useless streams of numbers or words to know them exactly number by number or word by word)

</comment><comment><USER5> Incorporate your facts into a song.

"We the people..."</comment>


The pervasive use of second screens endangers corporate IT networks - <AUTHOR> https://www.helpnetsecurity.com/2019/07/10/second-screens-threat/ <comment><USER2> Oh, FFS. It's not the damned screens. Software engineers need screen real estate. This will be used by managers to refuse to provide them with enough pixels to avoid constantly juggling their windows. This really should be titled "IT departments too inept to configure firewalls to block streaming media services, and won't sanction problem employees under existing policies."

</comment><comment><USER3> > many people today use their additional monitor to stream music and watch > sporting events

It reminds me of my internship in a French investment company, where the network slowed to a crawl during Roland-Garros. When crossing the trading floor to grab a coffee, we could see that many of the traders' screen showed the games. Except in their case, it was one screen out of 4-6.</comment>


Principles of Calm Technology - <AUTHOR> http://www.calmtech.com/ <comment><USER3> I love my Pebble, my phone is always on completely silent mode and nobody but me feels or hears the Pebble. It feels quite private. I can ignore it during conversions and see what it has to say whenever I look at my wrist later. I can blindly dismiss notifications, knowing they are still open on my phone for later. I never miss important calls but I can also refuse calls without looking away from someone I have a conversation with just by touching my wrist.

But oh man is it infuriating when the Pebble shows me a spam message, for some reason it evokes hate against the spamming company to a much larger the degree than it does on my phone. I'm much more selective about what app can have notification on the Pebble. It's strange, the smartwatch just feel closer to me and it feels like people mess with me when "they use it" to disturb me for useless things.

Sorry, not really a point in this comment but it felt significant to the point of the website.

<comment><USER4> I think it's relevant. I think there should be an addendum: the human should have total control over "how important" a given technology is to it. So for example, there's maybe 3 apps on my phone out of 50 that are allowed to use notifications. I'm always horrified when I pick up my mom's phone and it's swamped with notifications, popups in the status bar, lock screen flooded over, yuck.

<comment><USER5> Consider, when describing an arbitrary and even perhaps notional human in the singular, using _literally any pronoun other than 'it'_. Neuter humans are very rare, and, at least in English, using grammatically neutral pronouns to refer to humans has a long and unlovely history.

Use the singular 'they' instead. If you find that too grammatically egregious to be borne (as I do), alternate masculine and feminine pronouns (as I do). Or default to the feminine pronoun except when speaking specifically of someone male. Or default to the grammatical, if presently unfashionable, collective use of masculine pronouns. Just, seriously, do _something_ that doesn't entail referring to a human as 'it'.

<comment><USER6> > Use the singular 'they' instead. If you find that too grammatically > egregious to be borne

Then you've bought into the bizarre, quixotic, and increasingly-being-rejected effort by Victorian elites to try to pretend that English is some strange constructed Latinate language and not, well, English.

And you should give up.

OTOH, if you really need to refer to a gender neutral _abstract_ person in English, and _really_ can't bring yourself to use "they", learn to use "one" properly. This can require restructuring sentence and not just dropping a different pronoun in, e.g., this:

      the human should have total control over "how important" a given technology is to it.

might become:

      one should have total control over "how important" a given technology is to oneself.

<comment><USER7> Wider usage of "one" \-- in German, _man_ \-- is something I miss from studying German. It's a pretty elegant solution when it can be used.

Of course, the German version catches flak for being too close to "man" ( _Mann_ ), and is sometimes replaced with _frau_ ( _Frau_ meaning "woman"). So it goes.

</comment></comment></comment></comment></comment><comment><USER8> Reminds me of these desiderata from an essay by Wendell Berry:

\</comment><comment>-----

To make myself as plain as I can, I should give my standards for technological innovation in my own work. They are as follows:

1\. The new tool should be cheaper than the one it replaces. 2\. It should be at least as small in scale as the one it replaces. 3\. It should do work that is clearly and demonstrably better than the one it replaces. 4\. It should use less energy than the one it replaces. 5\. If possible, it should use some form of solar energy, such as that of the body. 6\. It should be repairable by a person of ordinary intelligence, provided that he or she has the necessary tools. 7\. It should be purchasable and repairable as near to home as possible. 8\. It should come from a small, privately owned shop or store that will take it back for maintenance and repair. 9\. It should not replace or disrupt anything good that already exists, and this includes family and community relationships.

<comment><USER9> Just wondering, is there any example of technological innovation that meets these criteria?

<comment><USER10> All other things being equal, if you improve in just one of these dimensions, you are doing it right.

<comment><USER11> Only so long as other dimensions don't degrade. In practice, that's usually what happens.

</comment></comment></comment></comment><comment><USER12> I'm reminded of a recent article about how technology and automation should be Iron Man, not Ultron. Assist and empower the user, don't take over for them completely. This allows for human oversight, keeps skills relevant (for when the automation fails), and still allows for significant progress.

Seems to have a lot of overlap with these principles.

<comment><USER13> This leads off in interesting directions, though. For example, people complain that students shouldn't just use calculators, but in the developed world, the chances of not having access to a working calculator on a phone or computer are very small (that said, it's good to know what the machine is doing for you, even if you don't want to do it yourself). Compare that to phone numbers - even a generation ago, it was common to have memorized half-dozen 10 digit phone numbers for friends and family members. Are we diminished somehow now for having offloaded that to machines? Or was it work we shouldn't have ever had to take on?

<comment><USER14> Specifically regarding calculators, the idea is that knowing how to calculate aids in understanding later math that depends on calculation.

Phone numbers don't lead to other interesting ideas, that I can think of. Didn't dialing originally work by just picking up the handset and telling the operator who you wanted to talk to?

</comment></comment></comment><comment><USER15> I love the calm technology principles. A serious problem, though, is that the interests of the technology provider do not necessarily align with the interests of the technology user. Here is an example. (This is speculative on my part. Anyone who is more familiar with the history here, please chime in.) In the earliest days of telephone, it was in the interest of the phone company that callees answer incoming calls. No answer, no revenue. So, the phones generated jarring, noisy, almost violent clanging noises. We all became Pavlov's dogs for the phone company.

I'm afraid that there will always be an underwhelming minority of technology users who make conscious choices to purchase and encourage calm technology.

One admittedly tepid hope is that society-scale evolution will eventually help. Communities that embrace calm technology will be more fit and ultimately successful than those that acquiesce to jarring, rude, and disruptive technologies that foster a passive, frantic, reactive, unreflective, and anxious consciousness.

<comment><USER16> > acquiesce to jarring, rude, and disruptive technologies that foster a > passive, frantic, reactive, unreflective, and anxious consciousness.

I totally agree with this and love the calm technology principle as well. I'd like to draw attention to the "Time Well Spent" project started by Google's "product philosopher," as I think it's very similar and equally as important. [http://timewellspent.io/](http://timewellspent.io/)

</comment></comment><comment><USER17> I love that people are thinking about how technology interacts with the user, since we're terrible enough at that still, but there's another aspect that this kind of thinking doesn't recognize, where we're arguably _even worse_ \- how technology interacts with _non-users_.

Unless we're shut up in our own private rooms (and often enough, even then) we're all constantly getting the "Status Shouts" of devices completely unrelated to us. Is a truck down the street from your window set in reverse? You'll know. Did someone down the hall leave their cellphone unattended on their desk? You'll find out if they get a call. Goodness forbid that you share a building with someone who doesn't change the batteries in their smoke alarms! All of these are okay design decisions when considering one device and one human user, but in an environment where there can dozens of humans and thousands of devices in a city block, they become drastically less apt.

<comment><USER18> So what would you propose as an alternative? Trucks beep when they reverse because people were literally run over by trucks. Smoke detectors beep when backup batteries are low because people died in fires.

I can sympathize with people who hate those noises, but I think the only practical solutions are for them to wear earplugs or move somewhere with lower population density.

<comment><USER19> There are "white noise" back up sounds that are used when the trucks are expected to be used at night.

<comment><USER20> Fascinating, here's a good demo video: [https://youtu.be/psWBaxtK19g?t=1m11s](https://youtu.be/psWBaxtK19g?t=1m11s)

</comment></comment></comment></comment><comment><USER21> I wholeheartedly agree.

It is a bit like Unix principles (please, don't hit me!) - if program succeeded it should not output anything by default.

        $ cp foo bar
        $

Problem of course is if something is taking longer time. I prefer microwaves with single ding at the end to one that is beeping every 3 seconds (I have such one at my work). Of course microwaves have also clear progress bar. Android is guilty many times of doing something in background and not showing it at all. I think that abundance of log messages or showing progress is just laziness at users expense.

My Roomba talks to me in my language when something is wrong. It is helpful for less common notifications (like clean the brush). But it is annoying for common things - like Roomba notifying that it stuck on the middle of carpet for no apparent reason. In common case I would prefer it to not occur than to have other means of notifying me.

Status lights should be so much dimmer than lights currently most devices have. With all the devices around me it sometimes looks like it's Christmas.

Modal popups are very hard to do right. I think many times it would be better to have simple means of undoing the action with non-modal popup and additional way to undo not that recent actions. I understand that it may be not that easy - i.e. removing something. For example I am baffled that adding a word to dictionary in Google Keyboard needs additional popup (that appears half a second later thanks to useless animation). I would prefer it to just show non obstructing popup with option to undo addition of the word.

<comment><USER22> >I prefer microwaves with single ding at the end to one that is beeping every 3 seconds

I forgot my food in beeping oven constantly, just because I semi-opened it to prevent beeps but did not extract contents because it was too hot. Even when I look at it, the fact that the door is not closed automagically means to my brain that there is nothing inside.

How it _should_ be done: ding once, light inside. Open door -> turn it off.

</comment></comment><comment><USER23> I like the article. Another commenter here gave a good example with the Android phones overloaded with notifications. I'm going to illustrate the right way with communications embedded into non-communication products.

There were older, desktop apps that made modal dialogs appear that blocked you from doing anything if you had an update, message, whatever. I later saw that turn into a dedicated box with significant chunk of screen. At least I could do other things. Later, there was a menu or window somewhere that could be opened with the notifications being smaller instead of the message itself. Later, on Xbox Live, they made the notifications pop up in top-center of screen with very little info in them. They also let me turn them off with a one-button method of checking if anything happened in-game. A further enhancement of this might be replacing the popup with a distinct, mellow, sound effect that blends into in-game sounds in such a way to stand out but not jolt a person out of the game. Not just preserving the mood of one but also not say masking sound of enemy footsteps.

So, in just that one area, things have improved remarkably from the time when developers said, "We're going to shove this in their faces and force them to pay attention." I'd love to see more such improvements across the board leading to calmer software.

</comment><comment><USER24> > Give people what they need to solve their problem, and nothing more

If this is true, then "tools for thought" can never be "calm technology," since creative thinking is not just about problem solving, but problem _finding_.

I completely agree that—when you're talking about thinking tools—"technology should amplify the best of technology and the best of humanity." But I don't see how it applies to any of the examples given (including "lavatory sign," trend graph, office window, and, of course, teapot).

> How many are notifications are necessary?

OT, but it seems no technology is so calm these days that people can effectively proofread the first 58 words of their web site—not even an author promoting her book.

</comment><comment><USER25> Small typo: I think "How many are notifications are necessary?" should read "How many notifications are necessary?"

<comment><USER26> That jumped out at me, too.

<comment> harry-wood me too. It made me feel less calm

</comment></comment></comment><comment><USER27> Not sure about this website, but the original essay by Mark Weiser should be required reading for HN crowd IMO:

[http://homes.di.unimi.it/~boccignone/GiuseppeBoccignone_webp...](http://homes.di.unimi.it/~boccignone/GiuseppeBoccignone_webpage/IUM2_files/weiser- calm.pdf)

</comment><comment><USER28> > Machines shouldn't act like humans

I'm surprised - does that mean ML/AI isn't calm ? Why ?

<comment><USER29> Maybe to emphasize that machines are there to make the human task easy but not let them get lazy and develop a hard dependency on the machine! As in - <USER2> can't do this without using some X machine, is a clear sign that we developed a hard dependency on the machine and we fail to learn/understand how to do the task without using the machine.

Happening a lot, the boundary is fading slowly. The human dependency on machines is constantly increasing, intelligent/ AI machines take this to next level e.g. Self-driving cars.

<comment><USER30> It's been a very long time since humans haven't been dependent on machines. There's a legitimate question to how complex the supply chains are that produce those machines, and whether as a result it makes society and civilization more fragile (if I'm dependent on farm implements from a blacksmith in the center of town, that's different from being dependent on LED displays only made in 3 factories in the world, all of which are on the other side of the planet). But I think the general idea of "don't become dependent on machines" is a ship that sailed long before any of us were even born.

</comment></comment></comment><comment><USER31> I love this piece. I also feel pessimistic about calm tech because a lot of tech companies have perverse incentives to addict and perpetually disturb their users in order to gain mindshare and sell ads.

<comment><USER16> There needs to be a generation or current of people in tech working against the trend to addict and disturb their users for profit maximization and pushing for some kind of ethical limit.

</comment></comment><comment><USER32> I've been on this website many times and read the book. I long for the day everyone follows these principles.

"Technology should amplify the best of technology and the best of humanity".

<comment><USER24> Have you read any Don Norman? Like _Emotional Design_ or _The Design of Everyday Things_? Based on the principles (and even the examples) given here, I'm wondering how this book adds to that work.

<comment><USER33> "Technology should work even when it fails" was the tenant that seemed the most relevant to that book. Usually when technology fails there's a good chance the user will suffer in a way, such as feeling embarrassment or having to repeat a task again. Caring more about how technology fails gracefully would help figure out how to mitigate negative feelings the user might experience if such edge cases happen.

</comment></comment></comment><comment><USER34> I enjoyed the article. I have often thought that any new device should add no net complexity. Preferably it should reduce overall complexity.

</comment><comment><USER35> Centering lists so that the bullets do not line up does not make me calm...</ocd></comment>


On the Insanity of Overly Long Passwords - <AUTHOR> http://www.theatlantic.com/science/archive/2010/09/password-unprotected/62656/

<comment><USER2> Or just use Password Gorilla (<http://wiki.github.com/zdia/gorilla/>) and let it remember your overly long cryptic passwords for you.</comment>


Show HN: An Alternative to Reddit - <AUTHOR> http://narf.com

<comment><USER2> Nice, but it's departure from HN's and Reddit's minimalistic clean UI, so, often the lack of any design attempt is the best design!

<comment><AUTHOR> Perhaps, but I need to differentiate myself. I think the design is a good mix of functional and good looking... could always be better of course. Thanks for the feedback.

</comment></comment><comment><USER3> Maybe you could use embedly to pull in a picture from the submission, instead of using the alternating robots.

<comment><AUTHOR> I'm hoping the robots are temporary. When users submit stories it shows their pictures. I've considered using embedly or writing something of my own though. What do you think is better, user pictures or a picture from the linked to page?

<comment><USER4> I'd rather not see the users pictures at all. With most sites it seems you end up with a few bulk submitters in each category. Seeing their faces/avatars over and over again would get really old really fast. I could see it also potentially altering voting behavior. There are certain users on all social media sites (reddit and hn included) where some users will be upvoted/downvoted just due to their popularity or "fame". A visual indicator might increase those trends as they are faster to spot.

<comment><AUTHOR> Ok. I'll look into using pictures from stories and maybe try some A/B testing once I get more users.

</comment></comment></comment></comment><comment><AUTHOR> Hi Everyone. This my new product - Narf - A user curated news site. A lot like Hacker News, which I love, but where people use their real identities. My theory is that real identities will help produce great conversations... Would love any feedback you have to give.

<comment><USER4> Looks nice, with a clean/simple layout. The only thing I found to be distracting are the weight and position of the discuss/comments buttons. As they are aligned with the end of the byline for each article they aren't in the same place between articles, and being buttons they are significantly larger than the surrounding text. Of course if your intention was to draw attention to those buttons it worked on me.

<comment><AUTHOR> The goal is to draw attention, so that people will discuss the stories. Glad it worked. :)

</comment></comment></comment><comment><USER5> Facebook login. Cannot use. :(

<comment><AUTHOR> This was one of the first comments I expected to get. :) My theory is that people using their real identities as provided by Facebook will improve the quality of the site. We'll see how it goes.

<comment><USER5> It's a nice theory... Until you look at the sheer range of quality of postings on Facebook. Have you seen Lamebook? It's utterly mind-boggling. I don't believe that identity has even the slightest effect on stupidity. Facebook proves that, in my mind.

Metamoderation has always demonstrated the ability to support quality, especially in the absence of identity. People lacking history or demonstrating poor behavior punish themselves and self-select in that environment.

I'm not complaining except for the fact that I'm deliberately avoiding Facebook - there are people on there I want nothing to do with and from whom I wish to isolate myself, and the utter complexity of privacy issues on Facebook further turn me off to it. I feel safer when I can dissociate my accounts across various sites, however misguided that may be. I'd like to participate on your site, as it looks interesting, but the requirement of a Facebook account is a complete dealbreaker.

</comment></comment></comment><comment><USER6> Hi narf's!

What do you use for search?

Don't you want to try hosted search like IndexDen (IndexTank alternative) and move search management to our shoulders?

BTW: We're helping everyone with integration ;-)

Kind Regards <http://IndexDen.com>

</comment><comment><USER7> A sorting & filtering feature would seal the deal for me!

<comment><AUTHOR> How would you like to sort things?

<comment><USER7> You should copy reddit's. Basically time-based sort, and trending submission sort.

Also inevitably you'd need some grouping/labeling so users can filter out/in. E.g. I'd never want any submission about cats.

<comment><AUTHOR> The frontpage now has top/new feeds.

</comment></comment></comment></comment><comment><USER8> Looks nice -- is this built on Twitter bootstrap?

<comment><AUTHOR> I am using bootstrap... only for a few things like the topic completion javascript and for a basic css framework. It was a great way to get the site going. I hoped it wasn't obvious. :)

</comment></comment><comment><USER9> I like the name ;-)</comment>


COE: Why was I fired from Amazon? - <AUTHOR> https://sites.google.com/site/thefaceofamazon/home/coe-why-was-i-fired <comment><USER2> Working at a company like this sounds like a nightmare hellscape and this guy should join a startup and enjoy life again.

<comment><USER3> Doesn't need to be a startup, just a normal company that doesn't have internal business speak that make it sound like a certain cult.

</comment></comment><comment><USER4> If you manage to offend 8 people above you in the org chart (without winning others to defend you), and you get fired solely because these people don't trust you, what's the case against that?

</comment><comment><USER5> > 2.9 years

There isn't some weird RSU mis-incentive possible here, is there?

<comment><USER4> Probably not. Hiring is expensive and time consuming, as is training up new employees.

</comment></comment><comment><USER6> If this is all about 2015 why is it new news?</comment>


The LHC has restarted for its 2017 run - <AUTHOR> https://home.cern/about/updates/2017/04/lhc-has-restarted-its-2017-run <comment><USER2> There's still a chance they can get us all back into the correct timeline.

<comment><USER3> Now I'm curious how much someone's chance of having seen/played anything Steins;Gate goes up when preconditioned on visiting Hacker News at least once a week.

<comment><USER4> I watched SG but I read the timeline reference in terms of "Community". I.e. this is the darkest timeline.

<comment><USER5> That's very interesting; I've watched both but I read it in terms of Leibniz: this is the happiest of all possible timelines.

<comment><USER6> Leibniz didn't say happiest did he? I thought he meant the best of all possible timelines, compromise-wise.

</comment></comment></comment></comment></comment><comment><USER7> Ok taking bets now, missing muons are..

[ ] issue with calculations [ ] go away with more data [x] new physics! [ ] other

<comment><USER8> I'm hoping it's some kind of temporal fuzzing where particles are going backwards in time and causing interference with both past and future events.

No reason other than because that'd be awesome.

<comment><USER9> I'd settle for figuring out how to send an email to a previous point in time. I'd like to email myself in 2009. Something about buying a bunch of ASIC's and mining something for a long-term hold.

<comment><USER10> No need to mine it. Just buy in bulk at $1 and hold.

</comment></comment></comment></comment><comment><USER11> I wonder if there was another human sacrifice under the Shiva statue to mark the restart.

Only half joking. Has anyone heard any more about why scientists performed a mock ritual like that?

<comment><USER12> Letting loose 200 summer students will result in some sort of event. When we were getting ready for the 2008 startup of the LHC someone sent a crowbar guess how many Gordon Freeman themed youTube videos came out of that.

<comment><USER13> I was a summer student last year, and from what I've heard it actually wasn't summer students.

<comment><USER14> As it happens, it was students, but they weren't enrolled in any sort of CERN student programme.

</comment></comment></comment></comment><comment><USER15> Are they homing in on anything that would excite the general public like the Higgs did?

<comment><USER16> I'm still not sure what about the Higgs excited the general public. Or why it hasn't applied to e.g. gravity wave detection, especially since that one is _much_ easier to explain and understand.

<comment><USER17> Blame it on the decision of the publisher of a certain book to take a phrase from an early draft "that goddamn particle", drop a syllable and change anotherone and make it the title of that book "the god particle".

It catered to a certain part of the population, and snowballed from there.

<comment><USER18> Add the success of "Da Vinci Code" which has no specific relation. But then add it's prequel "Angels & Demons" which uses antimatter from CERN to destroy Vatican.

Then add the crap about LHC creating a black hole and destroying the universe and you have 500 TV stations at the launch of a particle accelerator. The specific experiment that was happening at the time didn't matter much.

</comment></comment></comment></comment><comment><USER19> Is there a chance the track could bend?

<comment><USER20> not a chance my underground swiss friend

</comment></comment><comment><USER21> Happy science ya'll!

</comment><comment><USER22> Everyone don your aluminum foil hat... lol</comment>


A Crowdfunding Campaign to Set Smartphones Free From Cellular Networks - <AUTHOR> http://www.technologyreview.com/view/517106/a-crowdfunding-campaign-to-set-smartphones-free-from-cellular-networks/ <comment><USER2> Any details on routing protocol? Identification, uniqueness guarantees, route discovery?

The dev wiki has what's described as a proposal - is that actually in use, or something for future development?

Providing mesh networking in a user-friendly package would be a very impressive accomplishment.</comment>


In defense of doing it the "hard way" - <AUTHOR> http://accidentalninja.net/in-defense-of-doing-it-the-hard-way/

<comment><USER2> I couldn't agree more with this article. I wrote a post about my personal path to becoming a programmer, and about the most specific I got about what I actually programmed was "stuff I thought was interesting." The most specific advice I gave was "program" and "work hard." The comments I got both here and on the article made it clear that people wanted specific tutorials and sample projects they could replicate.

This misses the point entirely. The way to become anything -- at least a good anything -- is to hard work and repetition. I can't tell you what to program. I can't give you sample projects based on what I did because why should you care enough about some dumb thing I made to extract _meaningful_ lessons from it? Find something you think is neat or cool to make and make it.

When it comes to sports, or tradecrafts like carpentry/masonry etc., singing, painting, etc., it's understood the only way to become a professional is to bust your ass. It's the same way with anything in the world. There is no magic bullet. There's no wand you can wave or wish you can make. You just have to work. The number of people for whom this is a completely foreign concept is surprisingly large.

</comment><comment><USER3> I think this comes down to "shit is hard" and "a quick tutorial isn't going to make you an expert". There are too many people after instant gratification these days.

After 10 years of writing code, I felt that I had a basic understanding of how things were and what felt right and what didn't. Now on year 22, I feel I know what I'm doing but still tread carefully.

<comment><USER4> Ten years seems about right. Peter Norvig wrote a wonderful article, "Teach Yourself Programming in Ten Years" -- <http://norvig.com/21-days.html> \-- which is a reaction to people who claim that you can "Learn X in 21 Days".

Another well-known rule of thumb is that it takes 10000 hours of practice to become good at something (e.g., programming, playing a musical instrument, etc.).

</comment></comment><comment><USER5> I'm finishing up the CodeAcademy Javascript class. I'm not a programmer by any stretch, but over the past thirty years or so I've written a little script here and there to solve a problem.

CodeAcademy won't turn anyone into a programmer overnight, though it might start someone directly down that path - there is a lot of good stuff in the exercises (even though in the end they are just exercises).

Personally, I had a couple of "Aha!" moments where the hands on nature and immediate feedback made something I had read about many times just click clearly into place (recursive functions and passing an object to a function).

The "official" pace of the course is probably a little slow - writing code a little at a time is the worst approach and the exercises really don't have enough meat to drag on for the many weeks of the official timeline (unless meaningful homework is added to the course - in which case it might drag).

It's a good project; it's not going to make someone immediately employable (particularly if it took them two months to complete it); and there is a lot of room for growth of the product.

</comment><comment><USER6> I'm learning to program using K & R, and using Codecademy as a supplement. I'm finding it useful to see some of the same ideas in another language.

Codecademy (currently) won't teach anyone to be an expert programmer, but they're just getting started. I can see it turning into something very useful over time.

<comment><AUTHOR> I'm definitely not saying it isn't useful, just that people shouldn't be going in with expectations of superhero coding ability when they come out the other side. I'm sure it will become more and more useful over time.

</comment></comment><comment><USER7> As a non-coder, I'd like to have read a bit about the planning vs code learning bit. For instance, the author states that "...I built the first version of Hngry while working through the first edition of that book."

The book presumably dealt with Ruby, the libraries, the agile process, but how did the author translate the interactions he had in his head into objects/procedures/whatever in the code?

Abstractionacademy anyone?

<comment><AUTHOR> Actually, AWDWR contained a complete tutorial for building a Rails app. I basically had an idea, popped open the book and instead of building the app in the book, used the concepts/instructions to build Hngry instead. For instance, I read about how to create new database models, and instead of making the ones the book wanted, I made restaurant/user/menu item models instead.

</comment></comment><comment><USER8> I admit I have had no experience with code academy so I can in no way be qualified to judge it but what the post wants to convey is just simply true.

It's not the hard way, it's the right way to go about building something. You build your knowledge while you are working on your project and learn from your mistakes. This is how we all started and I suppose that the way to go about it has not and will not change for a while.

</comment><comment><USER9> I don't really see the problem. Code academy lowers the threshold for people to get to try programming. They can after that find their own ideas, select a technology, and start to hack.

It's less daunting to do that once you have a better grasp of what programming means at least. Some people think programming is wizardry you do in front of a computer to make it do what you want.

<comment><AUTHOR> I wasn't trying to say that there's a problem with Codecademy et al, I'm trying to say that there's a problem with going into it with the wrong mindset/expectations.

</comment></comment><comment><USER10> That's not the hard way - it's the efficient way. Instead of learning everything from the beginning, you learn only the stuff that can be immediately used for your goal/task - fast, efficient and terribly unscalable, but good enough for most people who don't actually want to be, for example, programmers, but just want to build an app or something.

</comment><comment><USER5> Ms. Benjamin has had a couple of decades to realize success, CodeAcademy has had a couple of months to do so. I doubt she was suggesting anything as complex as _Agile Web Development with Rails_ to the children she introduced to the topic. That sort of thing, I am certain came, much later and to very few of her former students.

CodeAcademy makes tradeoffs, so do Zed Shaw's _Hardway_ books. Both however attempt to help people avoid paying the entire dumbtax in learning to program. I suspect that's what Ms. Benjamin strove for as well.</comment>


Overly Broad CheckFreePay Terms and Conditions - <AUTHOR> http://www.evernote.com/l/AEXhEXtIs9tDOLwiYy6pwnQ33hmSCkl5YII/ <comment><AUTHOR> highlighted portions which seem overly broad. Are these pretty standard in the industry? These are required to use certain core features of Simple Bank.</comment>


Show HN: I build a website which combines all hacker news sites in a nice stream - <AUTHOR> https://hackeroo.co/ <comment><AUTHOR> As I always had 10 different tabs open on the same time, I build hackeroo to combine all the news sources in one single stream.

The alogrithm sorts the list to have the best news on top.

Frontend is build in vanilla javascript and the backend a golang services which writes static files that can nicely be cached by cloudlfare.</comment>


Show HN: Build front end web app in a day - <AUTHOR> https://uibakery.io/ <comment><USER2> I'm struggling to spend any time on that page because the scrolling jumps about every time the carousel changes.

Using Android, tried on both Chrome and Firefox Preview.

<comment><AUTHOR> Sorry about that, we are working on improvements on our site. Thank you for your feedback! We've taken away.

</comment></comment><comment><AUTHOR> The Offer to support startups including 80% off for any plan.</comment>


"You make apps? I'm trying myself, but I'm having trouble just getting started" - <AUTHOR> https://littlebitesofcocoa.com/100 <comment><USER2> Again, HN rules require the original title, unless the title itself is bad/linkbaity. Using a quote from the article to get around this is still linkbait.

<comment><AUTHOR> Ah got it, so no fun allowed _at all_. Understood. Thanks.

<comment><USER2> No, the purpose is to give everyone a fair playing field. If everyone did a linkbait title, HN would be unreadable.

See the guidelines: [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)</comment></comment></comment>


The Regret Minimization Framework: How Jeff Bezos Made Decisions - <AUTHOR> https://medium.com/@alyjuma/the-regret-minimization-framework-how-jeff-bezos-made-decisions-4d5a86deaf24 <comment><USER2> The problem with this way of describing "Bezos framework" is that, according to research, the things that you think will make you unhappy in the future will probably not. Predicting your future emotions is a fool's errand.

That said, the most reliable way of minimizing regrets when faced with a decision of doing x vs not doing x, is to do x. Inaction is not something your future self will be able to rationalize, and that's why missed opportunities are so painful.

In other words, don't think whether you'll regret doing something. You most likely won't. Worry about NOT doing something that sounds like a good idea, because you will probably regret it. Don't try to predict your future emotions because you will fail. Just do it. Do that thing you're wondering about.</comment>


Face Swap (C++ / Python): Meet Ted Trump, Donald Clinton and Hillary Cruz - <AUTHOR> http://www.learnopencv.com/face-swap-using-opencv-c-python/ <comment><USER2> Well...Now I have a new image to haunt my nightmares.

This is actually a pretty neat tutorial, I recommend.

<comment><AUTHOR> Thanks. I could not sleep last night after generating that image.</comment></comment>


Why I Feel Bad for the Pepper-Spraying Policeman, Lt. John Pike - <AUTHOR> http://www.theatlantic.com/national/archive/2011/11/why-i-feel-bad-for-the-pepperspraying-policeman-lt-john-pike/248772/

<comment><USER2> See also this personal essay from Norm Stamper, chief of the Seattle Police Department during the WTO protests in 1999:

"The cop in me supported the decision to clear the intersection. But the chief in me should have vetoed it. And he certainly should have forbidden the indiscriminate use of tear gas to accomplish it, no matter how many warnings we barked through the bullhorn...

My support for a militaristic solution caused all hell to break loose..."

[http://www.thenation.com/article/164501/paramilitary- policin...](http://www.thenation.com/article/164501/paramilitary-policing- seattle-occupy-wall-street)

</comment><comment><USER3> I haven't seen any articles that condemn Pike without also attacking the system he's in. After all, the students weren't just protesting him. They were protesting all of the brutality in the Egyptian and OWS protests. They aren't calling for him to be beheaded or anything, just fired. And they're calling for his bosses to resign.

I think everyone realizes this already. It's why the incidents in NYC are treated as isolated "bad cop" stuff, compelled by the mayor. While Oakland is seen as a thoroughly corrupt system. People can tell which systems are OK and which systems are broken.

</comment><comment><USER4> I agree that it's a system problem, but that doesn't really get the policeman off the hook. The policeman doesn't deserve any defense for what he did. He knew what he was doing and he did it. Blame the system, but blame the policeman, too.</comment>


Ask HN: Beside Product Hunt, what other place exist for products marketing? - <AUTHOR> <comment><USER2> You should look at with other set of eyes, like, you shouldn't be looking for a media channel for the sake of being a media channel - which producthunt is: a platform with the an audience of early adopters, entrepreneurs,and tech enthusiasts are... like they say "It's a place for product-loving enthusiasts to share and geek out about the latest mobile apps, websites, hardware projects, and tech creations."

There's the possibility that it's not the best place to focus your efforts on.

So the right answer is actually, everywhere, within the legal boundaries of course - and you shouldn't be disappointed with this reply, because it opens you to a whole world of possibilities.

You should rephrase your question like: This is my product [explain it or show it], and this is my audience (or potential audience), how to I get this product in front of this audience, with this budget (from 0 to ...).

<comment><AUTHOR> Basically "It's a place for product-loving enthusiasts to share and geek out about the latest mobile apps, websites, hardware projects, and tech creations." the reason that I was thinking on PH first and looking for similar niche.

I would like to use all resources available for marketing but Im concerned that maybe that approach is not healthy at all.

</comment></comment><comment><USER3> Places to post your startup - [https://github.com/mmccaff/PlacesToPostYourStartup/blob/mast...](https://github.com/mmccaff/PlacesToPostYourStartup/blob/master/README.md)

<comment><AUTHOR> Initially I was thinking in more like a personal project, where to share it, but that list is really like an eye opener for me. The are a whole world to show off.

<comment><USER4> Just don't submit to all of them at once, that's a good way to crater your google rank.

Some of those are also really spammy (Maqtoob) and I suspect have negative seo value.

<comment><AUTHOR> Based on experience? Or is a general tip?

</comment></comment></comment></comment><comment><USER5> Beta page is another one: [https://betapage.co/](https://betapage.co/)

<comment><AUTHOR> Is that website only for Premium products? I saw only products from Amazon, Apple, Google, etc.

<comment><USER6> Click on 'recent' to see the others. The 'trending' view is sorted by number of stars (likes?) so most well knows products seem to win. (Or everybody just submits their own and doesn't bother liking any others.)

</comment></comment></comment><comment><USER7> Where do your potential customers hang out?

</comment><comment><USER8> I would recommend you to join Slack Channel of PH and SSG.

<comment><USER9> What is SSG?

<comment><USER10> [http://startupstudygroup.com/](http://startupstudygroup.com/)</comment></comment></comment>


Big breakfast 'aids weight loss' - <AUTHOR> http://news.bbc.co.uk/1/hi/health/7460729.stm

<comment><USER2> I actually just finished eating a big (for me) breakfast down the street, and while I was walking home I thought about how health science is full of contradictory claims. Wasn't there an article on the front page a couple weeks ago about how skipping your breakfast is the healthiest thing to do, or could be? With no two articles giving the same advice, it seems like there's no point in reading them.

During my walk I concluded that the only way to really figure out what works best is to just experiment. Come up with a list of metrics you care about (#1 on my list: alertness) and record them, along with what food you eat and other data that might impact your metrics (exercise, social time, whether what you've done that day is tedious or exciting). Considering that everyone's body and lifestyle is different, this approach makes the most sense to me.

I'm sure other folks have done something like this before. Does anyone know of a tool that will help? Have any of you tried something like this, and how'd it work out?

<comment><USER3> Well, no, how to eat healthily is pretty much known these days. Eat 5-6 small meals throughout the day, every 3 hours or so, avoid refined/simple carbs, aim to get your calories from 40% carbs, 30% protein, 30% fat, all from a variety of sources, aim for 25g fibre a day. This is right because it's what humans evolved doing. The _difficult_ part is doing it in the modern world. Like if you're in a hurry in the morning, you might skip breakfast, or grab a pastry (white flour, white sugar) at Starbucks. Or if you're tired or stressed in the evening, you might order a pizza.

But the more processed food is, the more profitable it is too, so it's hard to live as you were meant, but it is possible.

<comment><USER2> Doesn't "5-6 small meals throughout the day" contradict the suggestions in this article, which other folks here have concurred worked for them? Would the people who got good results from eating a large breakfast and then eating smaller lunches and dinners have done better using your suggestions? Is "conducive to weight loss among the obese" too narrow a criterion for a healthy diet? Are your suggestions appropriate for different lifestyles? Is a diet that worked in circumstances that I'm not in actually best for me?

I'm not actually asking you all these questions, they're just meant to illustrate my continued warines and weariness over varied and contradictory health advice. (But if you knew the answers that would be awesome)

<comment><USER3> Also - 3 meals a day is not natural. It is an artefact of needing to fit eating into a "working day". Some cultures go for 2 meals a day which is even worse. Our ancestors ate when they were hungry, and stopped when they were full.

<comment><USER2> By the way, have you read or seen The Road to Wellville? Hilarious satire of obsession with health. T.C. Boyle in general makes for a good read. A lot of his stories are written from the perspective of humans being just another animal, with often ridiculous behaviors and compulsions.

<comment><USER3> I'll check him out :-)

</comment></comment></comment></comment></comment></comment><comment><USER4> This does actually work. Continuous starvation actually conditions the body to store additional fat. A good breakfast also helps to provide fuel to your brain, which burns a lot of glucose.

Eating regularly conditions your body to burn what takes in, because it doesn't have to save for later, so instead of storing calories in fat, it builds other things like muscle.

One of my friends went on a plan to lose one pound per week or thereabouts while he was training for a long, difficult bike tour in the French Alps, and calculated that he would have to consume around 4100 calories per day.

</comment><comment><USER5> It would be a mistake to view this study solely in terms of breakfast calorie counts. The researcher allotted macronutrients differently for each group, not just with breakfast [1] [2] but, more importantly, in the daily totals:

Control: 1,085 calories ~ 17g carbs, 51g protein, 78g fat

Test: 1,240 calories ~ 97g carbs, 93g protein, 46g fat

Since fat contains ~9 calories per gram (versus 4 for protein and carbs) and since ~3 percent of fat calories go toward energy conversion (versus 25 for protein and carbs), we should expect Control to burn their calories ~2x more efficiently than Test. So while Control ingested fewer calories than Test, over time Test kicked their butts on weight loss because when Test burned a calorie it burned lots of additional calories. [3]

[1] Test ate 610 calories for breakfast: 58g carbs, 47g protein, 22g fat

[2] Control ate 290 calories for breakfast: 7g carbs, 12g protein, ? fat

[3] I'm ignoring some other factors e.g. enzymes (such as liprotein lypase and hormone sensitive lypase which store and release stuff like fatty acids)

</comment><comment><USER6> My diet principles:

1\. Eat a variety, particularly with respect to fruits, nuts, and vegetables. If you can't get them in natural forms then at least go for processed combinations. Uniformity of diet is a symptom of agricultural society and should be avoided.

2\. Make eating a priority after you wake up. Eat a few hours before bed so that you wake up when you're hungry.

3\. Rely on protein to make a meal filling - in whatever form it takes, milk, soy, whey, meat, fish...

</comment><comment><USER7> My take on food is efficiency. If it tastes good, that's a plus, but if it is nutritious I couldn't care less.

With that disclaimer... the super breakfast (Variant of the breakfast by Tim Ferris).

1) Microwaved egg whites with salt and flaxseed, topped with salsa

2) Fresh Spinach with salt, pepper, olive oil

3) Grapefruit

4) Fat Free Cottage Cheese

One hour later follow up with protein shake.

</comment><comment><USER8> What goes into a 600-calorie breakfast? Sausages?

<comment><USER3> Off the top of my head, a bowl of porridge with fruit + 2 slices of toast with marmalade would be about 600 calories.

Also note that a glass of OJ is probably 100 calories.

<comment><USER7> Somebody must be from Britain ;)</comment></comment></comment>


Syllabuzz: Tactile Design Made Real  - <AUTHOR> http://www.azarask.in/blog/post/syllabuzz-tactile-design-made-real/

<comment><AUTHOR> This is a follow-up to the "Know Who's Calling: Tactile Design" post from last week. <http://news.ycombinator.com/item?id=683342></comment>


Show HN: Python script to watch directory for changes and copy modified file - <AUTHOR> https://github.com/austinpickett/watch-directory

<comment><AUTHOR> Hey all, I'm not super familiar with python but a friend of mine thought it would be cool if he could have a program watch his directory for changes, and save a copy of his file to an external drive.

Any code comments, suggestions, etc would be extremely helpful.</comment>


Why You Should Blog to Get Your Next Job - <AUTHOR> http://mashable.com/2013/06/01/blog-job/

<comment><USER2> James Altucher tells us: "For each single person you worry about, deduct 1% in quality from your writing."

List of people to worry about: parents, wife, children, ... an indeterminate list of possible future employers ...

Conclusion: the blogs written to "get a job" will be less interesting than those other blogs that were written for no particular reason.</comment>


We're a group of HS students going to NYC to learn about startups - <AUTHOR> https://rafflecreator.com/pages/a-ticket-to-win:-grab-a-bag-for-2013

<comment><USER2> The site makes me wonder what the legal situation of raffles with regards to gambling regulations in the US (or anywhere else) is? I know they are popular in schools. Are they are legal without having to acquire any permits, or are they are usually just to low profile to matter?

<comment><USER3> They are generally legal for non-profits, but it's complicated and depends on the state.

General information: <http://www.nals.org/?p=1340>

New York State: <http://www.charitiesnys.com/pdfs/raffles.pdf>

</comment></comment><comment><USER4> Please check into the legal implications of this and add some detailed CYA (cover your ass) terms to that page.

The way it is set up now is not legale in my province at least. (and most likely all of Canada )

Sweepstakes = gambling

</comment><comment><USER5> Best of luck!

Side comment on: Raffle Creator -- while I love the idea I question the legality of it. While looking into doing various contest/raffle apps myself I was always stonewalled with legal issues. IANAL but I believe anytime you cross money with pure luck it is considered gambling and must be regulated.

<comment><USER6> I built something like this and abandoned it for that precise reason

</comment></comment><comment><USER7> Not sure if payment page really works. I tried entering a number for tickets and the amount remained $0.

<comment><AUTHOR> Huh.. I can't get that to happen. Can you try refreshing. Sorry! I'll keep investigating.

<comment><USER7> I am using IE8 just in case you wanted to know.

<comment><AUTHOR> Thanks a lot. trying to pull up a copy now to test.

</comment></comment></comment></comment><comment><USER8> so do you have any itenerary planned for your time in NYC?

<comment><AUTHOR> It looks like we're going to spending most of time in-depth with Quirky and Fab if everything well, but we're looking for one more company to visit as well.

<comment><USER9> Why don't they just pay for you to intern there? Sounds like a fantastic opportunity for both sides.</comment></comment></comment>


Will .co domains fizz like .biz? - <AUTHOR> http://www.webdragon.com.au/main-site/welcome/will-you-be-registering-a-.co-domain-in-june

<comment><USER2> yes, how well have .cm's sold?

<comment><AUTHOR> There are always reports of astronomical sales in the initial grab, but the hype always fades when people realise that there's no real value from the domains.</comment></comment>