Immutable.js: An Introduction with examples written for humans - <AUTHOR> http://untangled.io/immutable-js-an-introduction-with-examples-written-for-humans/ <comment><USER2> Immutable.js would be great if it were actually maintained. FB hasn't made or approved a real pull request since April, and there are hundreds of pending issues that haven't been addressed or even responded to in over a year.

<comment><USER3> Which is somewhat ironic, considering half of the reason to use it over Mori (which is better in some aspects) was that it was more maintained (Mori didn't pull anything in ages).

Now neither of them are really maintained.

For a lot of usages, something like Ramda or Lodash/FP will do the trick (Ramda lenses or Lodash/FP's get and set methods work great to handle immutable data structures), but if you really wanted structural sharing and stuff, now you're kindda stuck.

<comment><USER4> You might dig mudash – Lodash wrapper providing immutable.js support

[https://github.com/brianneisler/mudash](https://github.com/brianneisler/mudash)

<comment><USER3> That's not the issue (we have our own lodash-ish thing for immutablejs at work). Its that immutablejs itself isn't maintained much. Doesn't matter how many layers you put on top.

</comment></comment></comment></comment><comment><USER5> First, TypeScript type definitions are _almost_ the same as standard JavaScript JSDoc type annotations, so (to the level they're used in Immutable.js), yes, people should learn them.

Second, TypeScript should be considered a best practice for nontrivial JavaScript development in 2016. And pretty much any app that would benefit from Immutable.js would be "nontrivial" by that definition.

Third, everyone using JavaScript or TypeScript knows what a Map is, I would hope. The docs for it that read "Immutable Map is an unordered Iterable.Keyed of (key, value) pairs with O(log32 N) gets and O(log32 N) persistent sets." are perfectly legible to me, having never used Immutable.js, just because I had a few undergrad (not "a Ph.D.") computer science classes. I don't even have a computer science degree [0] at all.

I actually personally despise lowest-common-denominator docs: Docs that tell me "what a Map is and how to use it" when what I want to know are things like what its get and set performance implications are, and whether you can iterate over it, and whether that iteration will be ordered, and so forth.

Sure, create a user's guide, but don't pick on the reference manual for being concise.

FWIW, I'm not a big fan of Immutable.js or immutable structures at all. I'm too performance-oriented to want a layer like that between me and the underlying data structures. Criticize it for being unmaintained [1], sure, but not for having docs that aren't aimed at beginners.

[0] My degree is a B.S. in Cognitive Science [1] [https://news.ycombinator.com/item?id=13051458](https://news.ycombinator.com/item?id=13051458)

<comment><USER6> I feel the same about lowest common denominator, and even though facebook and google documentation can be on the far end of the austere spectrum, they are still putting out incredible libs for free.

For your comment about performance, immutable structure being comparable by reference can provide huge gains in read and re-use heavy environments, thanks to memoization-like techniques.

<comment><USER5> >For your comment about performance, immutable structure being comparable by reference can provide huge gains in read and re-use heavy environments, thanks to memoization-like techniques.

Fair enough. I'm often doing things to graphics, and the concept of using immutable data when the data is a bitmap with 4Mb of pixels, and you're trying to draw hundreds of sprites or shapes to it...well, let's just say that immutable doesn't make sense for that.

Even when I'm just working on a game, though, the more frequent allocations required by copy-on-write structures means more fragmentation of the heap and more deallocations later. Ideally during runtime _nothing_ gets allocated.

You may even be right that the _amortized_ speed of using immutable structures is the same as doing it with mutable data. But anything that adds a lot of allocations and therefore adds to the frequency of garbage collection will cause (or increase) jankiness in a game.

You have 16.66ms to accomplish _all the work_ for a frame. If a garbage collector comes along and steals even 10ms, if you can't do the remaining work in 6.6ms, it will skip a frame, and users will see it.

And my current game needs to run in a browser, at least mostly. So here I am. :)

</comment></comment></comment><comment><USER7> The sites down, here's the cached version: [http://webcache.googleusercontent.com/search?q=cache:5fXNOBY...](http://webcache.googleusercontent.com/search?q=cache:5fXNOBYia1AJ:untangled.io/immutable- js-an-introduction-with-examples-written-for- humans/+&cd=1&hl=en&ct=clnk&gl=us)

<comment><USER8> This is off topic, but is the traffic from HN really that great?

It seems like websites are dead pretty often on HN, but on sites like Reddit where I assume there is a magnitude more traffic they seem to hold up pretty well (with some exceptions).

So what's going on here? Does HN really have a bunch of silent viewers? Or is it something more benign like sites that get submitted are often smaller?

<comment><USER9> This actually says a lot about web technologies.

When I posted a recent high ranking blog post[0], I received around 18,000 views over the next 24 hours according to Google Analytics. I don't believe this covers a lot of the bots and associated traffic that also crawled the site.

This amount is nothing for a Jekyll site, I had CPU hovering at around 4%, with a series of services also running on this server. This is, imo, where a "hug of death" _should_ end.

I did however at the time, have several colleagues in web development express shock and awe at the fact the site stayed online with traffic levels such as this. Multiple people tried to school me on the need for Cloudflare at this incredible scale.

A lot of web developers think about "scale" in terms of many bloated CMS platforms, and it is with no surprise that the site in question is running Wordpress.

We had a friend's site a while back where we worked out, with just two desktops and spamming "F5" on the keyboard, we could take the site offline, and take several minutes to recover from after the fact. He went and posted for help on Reddit, and sure enough, the consensus was that his experience involved far more traffic than any website could reasonably be expected to handle.

Your answer therefore lies not in the silent HN users, but in the unusually poor performance of popular CMSs. And although I'm using Wordpress, it's not alone in this situation. [0] [https://news.ycombinator.com/item?id=12973181](https://news.ycombinator.com/item?id=12973181)

<comment><USER8> See I understand the reasoning behind it, but I don't think that's it alone.

I'm saying that the frequency I see the "HN hug of death" is much more than the "Reddit hug of death" while having many of the same kinds of sites (the "bloated CMS platforms" you talk about).

</comment></comment></comment></comment><comment><USER10> I don't know if it's my eyes but I find those coding examples extremely hard to read because of the colour palette used.

<comment><USER11> Going to echo this, really hard to read, both because of the color palette and the bizarre white spacing between the black lines of code.

</comment></comment><comment><USER12> I find seamless-immutable to be much much better. It mostly follows the standard javascript api, and throws an error when you use a mutable action.

Makes it very simple to use it anywhere you'd use a plain array or object, rather then always having to use immutable.js's api.

<comment><USER13> seamless doesn't implement the "persistent" part of immutable persistent data structures. The persistent part means you can create a cheap modification of the data structure, with structural sharing between "copies".

<comment><USER12> What do you mean? I'm pretty sure it only clones the minimal necessary.

I.E. if I have {a:{aa:"1"},b:"cc"} and I change b, then {aa:"1"} will not be deep copied.

Are you talking about something like keeping a reference to the parent and sending lookups up the chain (with a prototype or some such?)

<comment><USER14> The person you are replying to is talking about things like maps implemented with persistent trees. Updating a value in such a map generally only involves copying O(log N) nodes in the tree: It's not necessary to shallow copy the entire tree itself.

<comment><USER12> And immutable.jsdoes that?

<comment><USER13> Oops, didn't realize that seamless does its own shallow copying strategy with `merge`, `set`, `setIn`. I can't speak to how this compares to persistent data structures implemented by immutable.js, clojure, elm, etc. But it looks like the seamless author said the following about it:

> Persistent data structures are different, as their performance improvements > are passive. Although seamless-immutable does not (and cannot, while > maintaining its backwards compatibility with vanilla JS collections) use > things like VLists under the hood, its cloning functions—such as merge—only > bother to make shallow copies, as shallow and deep copies of immutable > values are equivalent. In practice, this simple passive optimization has > been sufficient; we have yet to encounter a performance problem that > Bagwell-style persistent data structures would have solved.

from: [http://tech.noredink.com/post/107617838018/switching-from- im...](http://tech.noredink.com/post/107617838018/switching-from-immutablejs- to-seamless-immutable#performance)

</comment></comment></comment></comment></comment></comment><comment><USER15> I've never seen code in which someone actually uses Immutable.js in a way that's superior than using the built-ins. In fact even this introduction the examples seem terribly contrived.

I'm not convinced this library is really that useful in a dynamic language. Considering the top 2 immutable libraries (Mori and now Immutable.js) are both essentially abandoned I get the feeling the public opinion is likely the same.

<comment><USER16> The decision axis for something like Mori or Immutable is not so much static versus dynamic typing but imperative versus functional code. Immutable/Mori lends itself handily to cases where you are writing a lot of pure functions that output a different state rather than manipulate an existing state. Immutable/Mori can help you ensure that your pure functions stay pure by making it almost impossible to mutate an existing state.

If you are less concerned with pure functions and happy with largely imperative or hybrid imperative code, then yes it is difficult to find a compelling example for Immutable.

(Immutable seems almost entirely stable at this point and covers just about the entire necessary API surface, so I think it's a case to call it "mature" rather than "abandoned".)

<comment><USER15> > If you are less concerned with pure functions and happy with largely > imperative or hybrid imperative code, then yes it is difficult to find a > compelling example for Immutable.

Meh, I don't see a lot of usage even with pure functions. JavaScript never really had any protections in it (minus the new-ish const and Object.freeze()) so most developers I know simply write as if something else has access to an object then it will mess with it so everything gets architected accordingly. Just seems to me a mostly non-issue in the JavaScript world.

> so I think it's a case to call it "mature" rather than "abandoned".

No I would most certainly call it abandoned. They have countless issues and pull requests from over half a year ago without even a single response from a human. While it may be a mature product, I would still call it abandoned.

<comment><USER16> Just because JS historically hasn't had too many protections built in doesn't mean that adding protections from a library aren't useful. Especially if you are coding from a functional language perspective (and not everyone believes this but JS can be a rather good functional language if you let it; it's not terribly far removed from the ML/OCaml family).

For what it is worth, anecdotally, I've been doing a lot of heavy work with RxJS observable pipelines (in a CycleJS-based application) where Immutable has absolutely made a big difference in performance and stability of complex "four dimensional" (lots of changes over time) "shared nothing" (pure) state tracking.

That may be a use of the language and a complex learning curve of a framework setup in which you never plan to work, but it's definitely an "issue" where libraries like Immutable and Mori turn out to be extremely useful (whether or not you think they are abandoned).

I've heard similar anecdotes from people using various combinations of things like React and Redux with Immutable.

<comment><USER15> Fair enough. I wouldn't be surprised a lot of folks found good uses for Immutable.js. I just hadn't seen anything that would appear to benefit from it in my travels and I think having immutability is a bit oversold IMO :)

</comment></comment></comment></comment></comment><comment><USER17> Great article. I wonder what the performance implications would be vs using, for example, native (mutable) arrays. Such addition of analysis to the article would've made it just perfect.

@alexhayes it is a common color palette, I was going to link the most common place where I find it but I forgot about it, haha.

<comment><USER18> @diegorbaquero you should watch that [https://www.youtube.com/watch?v=I7IdS- PbEgI](https://www.youtube.com/watch?v=I7IdS-PbEgI).

The author spoke about performance and immutability-data structures like Directional Acyclic Graphs and Trie.

</comment></comment><comment><USER19> I always thought their documentation was excellent tbh.</comment>


Niklaus Wirth: CS ideas that seemed good at the time - <AUTHOR> http://www.inf.ethz.ch/personal/wirth/Articles/GoodIdeas_origFig.pdf

<comment><USER2> One of the bad ideas discussed is functional programming (particulary the side-effect free aspect of it), another one is "passing parameters by name" which was proposed as one of the possible semantic for passing parameters in Algol. And which works like ruby blocks, IIUC. Seems funny that now those are mostly considered good ideas.

All in all - most of the bad ideas seems to be things that struck the wrong balance between being fast/cheap to do in hardware and being a clean design. Either some feature went so far with making things easy for programmer, that it was too expansive to implement or too slow, or it went too far the other way - making it too easy to mess things up in the pursue of fast execution/cheap implementation.

</comment><comment> walnut-tree I particularly liked this passage from Wirth's essay:

 _A notorious example for a bad idea was the choice of the equal sign to denote assignment. It goes back to Fortran in 1957 and has blindly been copied by armies of language designers. Why is it a bad idea? Because it overthrows a century old tradition to let "=" denote a comparison for equality, a predicate which is either true or false. But Fortran made it to mean assignment, the enforcing of equality. In this case, the operands are on unequal footing: The left operand (a variable) is to be made equal to the right operand (an expression). x = y does not mean the same thing as y = x. Algol corrected this mistake by the simple solution: Let assignment be denoted by ":=".

Perhaps this may appear as nitpicking to programmers who got used to the equal sign meaning assignment. But mixing up assignment and comparison is a truly bad idea, because it requires that another symbol be used for what traditionally was expressed by the equal sign. Comparison for equality became denoted by the two characters "==" (first in C). This is a consequence of the ugly kind, and it gave rise to similar bad ideas using "++", "--", "&&" etc."_

I agree with this, and have never understood why languages perpetuate this practice of using the equal sign to denote something other than its meaning in mathematics.

<comment><USER3> Meh. This is one of those things that people have been railing about for _decades_ , and I think as "language issues" go, it's pretty minor.

It's one of those things that quickly simply ceases to be a real issue once you're past the "my first program" stage. Humans are flexible, they don't really have a huge problem adapting to disparate usages in disparate situations (mathematics vs. programming).

IOW, it's bikeshedding. Yeah, even Wirth can bikeshed.

[Note that I actually _prefer_ Pascal-style ":=" for assignment and "=" for equality; I just think it's nicer (Wirth gave some examples as to why). However, it's clear that the C-style syntax has the momentum these days, and it just doesn't seem to be much of a problem.]

</comment></comment><comment><USER4> I'm a little disappointed that Wirth doesn't mention one of the key reasons that financial institutions use decimal floating point: that binary floating point can't produce exact representations of powers of 10, such as 0.1, and you may want to produce exact results for these situations, because fractions of a cent can really add up over time (see e.g. <http://en.wikipedia.org/wiki/Salami_slicing>).</comment>


Maze Algorithms (2011) - <AUTHOR> https://www.jamisbuck.org/mazes/ <comment><USER2> I got interested in mazes late last year and found Mr. Buck's resources invaluable. In fact, I received his book for Christmas. I highly recommend it, definitely worth the paperback purchase to support his work.

I implemented several of the algorithms for my Rust maze generation tools ([https://github.com/animate-object/mazes](https://github.com/animate- object/mazes), [https://github.com/animate-object/maze- cli](https://github.com/animate-object/maze-cli)), (and the game I built on top of them [https://github.com/animate- object/followed](https://github.com/animate-object/followed))

</comment><comment><USER3> My maze algorithms done in perl more than 10 years ago

[https://github.com/xa-bi/mazes](https://github.com/xa-bi/mazes)

</comment><comment><USER4> Several years ago, I wrote a maze generator using POV-Ray [0]. It's interesting trying to write a queue in a language that only has simple fixed- length arrays.

IMO, the recursive backtracking algorithm looks the best, and I'd probably use that if I were to ever return to this quick little project.

[0][https://youtu.be/VwuA2Z1tCaw](https://youtu.be/VwuA2Z1tCaw)

</comment><comment><USER5> Recently, I have been working on a maze program (in C++) that generates SVG files that can be used to cut mazes with a laser cutter. I also have been trying to do some statistical analyses on the various algorithms.

[https://github.com/FransFaase/MazeGen](https://github.com/FransFaase/MazeGen)

Because this program is for my own experiments, I simply modify the 'main' function if I want to change some parameters or select another combination of algorithms. See 'all_tests' for some examples of how the various methods can be called.

</comment><comment><USER6> The Aldous-Broder algorithm sure is somethin'.

<comment><USER7> I wonder if I can ace my next technical interview after learning it's intricacies

</comment></comment><comment><USER8> This might be a stupid question but how can the site run multiple maze generation algorithm at the same time? My understanding is that javascript is single thread.

<comment><USER9> Really good question actually!

I peeked at the javascript and it looks like when you hit `run`, it is calling the step at a setInterval (if I'm reading this right, as fast as the browser can call run)

So at the end of each run call, the interpreter figures out which setInterval timer to execute next and has the chance to pick other mazes. (I don't know much about how the JS engine resolves which "not quite thread" gets run next when there are multiple candidates)

<comment><USER8> Thanks! I ran multiple maze at the same time and time it and it seems like the maze ran just as fast as running only one maze at a time. If the interpreter can pick other maze, should it take longer? Did I miss anything here?

<comment><USER10> The maze generation is slowed down to visualize what is going on. Most of those mazes can be generated in a few of milliseconds.

</comment></comment></comment></comment><comment><USER10> I feel mazes are a nice hello world project for learning a new programming language. I made one in JavaScript last month when I was setting up a personal web site. I added a maze to the 404 page to show how truly lost you are when you end up there. It is the most interesting page on my web site so far.

[https://www.schaap.io/404.html](https://www.schaap.io/404.html)

</comment><comment><USER11> Wilson's algorithm creates the best mazes by having a variety of short and long passages.

</comment><comment><USER12> Generating mazes on 3d polyhedra & other surfaces: [http://matthewarcus.github.io/polyjs/maze.html](http://matthewarcus.github.io/polyjs/maze.html)

</comment><comment><USER13> I got so interested in mazes after the last HN post on Eller's algorithm that I actually created and published a real mobile game based on it! (shameless plug: it's called "Squashy Squares")

</comment><comment><USER14> If you are interested in mazes and maze solving in general, check out [https://www.pathery.com/](https://www.pathery.com/)

</comment><comment><USER15> Are there any algorithms that are not squares or include line art?

<comment><USER16> I believe most of these algorithms work on graph structures internally, which means you can use them on any topology as long as you have connectivity information.

So if you want really random maze shapes, sprinkle random points, then use voronoi to get a topology, then use backtracking on that. Your maze will be built out of randomly shaped polygons.

BTW, what do you need the maze algorithm for?

</comment></comment><comment><USER17> Amazeing!</comment>


Making code better with code reviews - <AUTHOR> http://blog.cloudflare.com/making-code-better-with-reviews

<comment><USER2> Refactoring is fun, especially on a slow day. The "Introducing an Explaining Variable"[1] refactoring is:

      if (version < 8 && ua ~ "IE") ...

is better written as

      IE8 = (version < 8 && ua ~ "IE");
      if (IE8) ...

This allows variable IE8 to be (1) reused later on in the code, (2) is self documenting and (3) sets a precedent for extending it easily by future devs:

      IE8 = (version < 8 && ua ~= "IE");
      mobile = (ua ~= "mobile")
      if (IE8 || mobile) ...

Another quick one is Guard Clauses[2].

      function {
        if (...) {
          ...
        } else {
          ...
        }
      }

where either block is long, is better written as

      function {
        if (...) {
          return ...;
        }
        ...
      }

This site [http://sourcemaking.com/refactoring](http://sourcemaking.com/refactoring) is worth a read even if you have been programming for years; especially if you have been programming for years and haven't developed good habits.

      [1] http://sourcemaking.com/refactoring/introduce-explaining-variable
      [2] http://sourcemaking.com/refactoring/replace-nested-conditional-with-guard-clauses

<comment><USER3> I like functions that return a value to be written in the guard-clause style. [In C++, that's probably better for efficiency since the compiler optimizer doesn't have to remove temporaries by converting the code to guard-clause style.]

However, I'm not convinced that void functions are better written in the guard-clause style. I think the intent of the code is better expressed with nested ifs. Of course, try to factor the ifs so that they're readable.

I'm saying this is more readable if the "do something part" is less than about 15 lines. Thoughts?

        void do_something(input) {
          if (!input.already_done()) {
            // do something.
          }
        }

</comment></comment><comment><USER4> The problem with code reviews is when it turns into a nitpicking festival and/or an opinion discussion

Having a big blob of comments above the code, _to me_ is bad. It might have been good, but I'm adverse to "ASCII art"

I think the change they did went further in the direction of explaining it then the comment blob there

Also, doing things in the X or Y way, when it's a matter of opinion/readability (readable/easy to understand code may not be the cleanest/most concise)

And PLEASE don't do "consts everywhere", this:

total_seconds = hours * 3600; // seconds per hour

is better than

total_seconda = hours * SECONDS_PER_HOUR;

No, the number of seconds per hour is not going to change.

<comment><USER5> The number of seconds per hour probably won't change, but repeating `// seconds per hour` as a comment everywhere you use the number 3600 seems a little silly when you can just use a constant.

The next programmer doesn't need to see those digits at all, they're nothing but a distraction.

<comment><USER6> Agreed. I much prefer the latter, as it tells me not only the value, but the intention.

newTime = currentMillis + 21600000,

I go WTF is that number and is it right,

newTime = currentMillis + SIX_HOURS_IN_MILLIS

and I not only know at a glance what you're doing, I know what the value ought to be, so if you accidentally added/left out a zero, I can actually check it where that const is declared.

<comment><USER7> Or, in a more reusable/flexible way:

      newTime = currentMillis + 6 * HOUR_IN_MILLIS

But an even cleaner solution would be to just use the date/time library for this (depending on the language, of course):

      newTime = currentMillis + TimeSpan.FromHours(6).Milliseconds;

<comment><USER8> Why six hours? This definitely needs another constant.

</comment></comment></comment></comment></comment><comment><USER9> I find it odd that in the header illustration bit 0 is put on the left. It is usually put on the right so that you can construct the bit mask easily. That is the way we write numbers: most significant digits first on the left, least significant digits on the right. The convention has been used in all bit twiddling literature I have ever read. Being different isn't always a smart thing.

<comment><AUTHOR> I agree. Unfortunately, this is a DNS server and the DNS RFCs are all like this.

See [http://www.ietf.org/rfc/rfc1035.txt](http://www.ietf.org/rfc/rfc1035.txt) Section 2.3.2

</comment></comment><comment><USER10> They rip out everything that has been proven shitty and replace it with new stuff. But how do they do it?

I have worked in a few companies and such behaviour almost never happened.

The management always wanted to maintain the old stuff and only resorted to a rewrite, when things were really really bad. "We don't have the time/money" was always the reply. But I had the impression, that a rewrite wasn't that expensive, it always went faster than the first version, without many bugs the first version had and a better structure.

<comment><USER3> Been in a few orgs. I now think "no rewrites" is a good policy for all but a few orgs. Few orgs have the (1) business luxury (time and money) or, (2) the caliber of people and, (3) team motivation (few teams people even _want_ to improve things) to pull off rewrites.

The best orgs do a rewrite usually in the face of sea changes to the technology stack (e.g., containers vs. VMs) or business use (number of users is now 10X of original etc). Bringing key infrastructure in-house is also a decent reason, but the benefit of building expertise in an existing ecosystem vs. full rewrite should be carefully weighed.

You probably have read spolsky's article. It's quite dated by now, but it's still more right than wrong. [http://www.joelonsoftware.com/articles/fog0000000069.html](http://www.joelonsoftware.com/articles/fog0000000069.html)

<comment><USER10> This reads like they tried to replicate 100% of the features in a big monolithic application, which is rather time consuming. :\

When I start a rewrite I check which are the essential features and try to iterate my way to 100% (sometimes the 100% aren't even needed) with many small releases, but every executive fears "rewrites" like the devil....

<comment><USER11> Sadly, this often leads to a 50% rewrite where key features are missing because I he rewrite team ran out of budget or willingness to code the non-fun parts. Which drives users to misery or competitors.

<comment><USER10> True story.

But I have the feeling, that a prio-list of the needed features is all that is needed.

People say what they need, you implement it, done.

I mean the way other companies steal your customers IS that they implement a better version of stuff you did. So it's either, they do the rewrite (in their case a first write) or you.

</comment></comment></comment></comment></comment><comment><USER12> Hmm, I don't quite understand the point of this blog post. I would assume everyone knows about code reviews, and this is just a very typical code review.

<comment><USER13> Working somewhere that scores less than 6 on the Spolsky Test I'm very glad for articles like this, it provides useful articles I can link to when I get asked what the point of these things I'm introducing are.

</comment></comment><comment><USER14> Why not good ol' De Morgan's laws?

return !(raw[2]&(QR|AA|TC) == 0 && raw[3]&(Z|RCODE) == 0 )

<comment><USER15> The code probably goes on to to do additional checks.</comment></comment>


Ask HN: Like Superhuman, which other products have the best keyboard shortcuts? - <AUTHOR> <comment><USER2> Not a product, but I won't leave vim because the keyboard shortcuts

Gmail has vim like input too. Since I mastered that, my time to process email is like 20% of what it used to be. I live in an inbox zero world, it's great</comment>


How Basecamp Next got to be so damn fast without using much client-side UI - <AUTHOR> http://37signals.com/svn/posts/3112-how-basecamp-next-got-to-be-so-damn-fast-without-using-much-client-side-ui <comment><USER2> This is all fascinating ... but does it feel like a sustainable approach going forward, or more like a turbo-charged horse and buggy?

Developer happiness aside -- there are plenty of folks who like JavaScript just as much as Ruby -- and assuming that we're talking about an non-public- facing app (like Basecamp Next), is there still an argument that can be made in favor of doing your UI on the server side?

Even just in principle, it can't possibly be close to as fast (client-side can render optimistically, where possible), and it can't be close to as flexible (you don't have a model of state on the client to perform logic with).

I think that the truth of this is already admitted in that the really fancy bits of UI are being implemented in JS: [http://37signals.com/svn/posts/3094-code-statistics-for- base...](http://37signals.com/svn/posts/3094-code-statistics-for-basecamp- next)

<comment><USER3> I'm not sure what qualifies as sustainable or not in your book. We've achieved our speed goals (sub 100ms pages for the most part), our development goals (Ruby, Rails, server side pleasure), and our UI goals (app that feels like a web page, not just a single-page JS app).

I'm sure Flash or Silverlight or other RIA people would argue that anything that's not a compiled native experience isn't as flexible or as fast as whatever they're peddling. Meh.

Yes, it's great to occasional dip into advanced client-side when that's needed. Just like Flash had its legitimate use cases here and there. But for the bulk of the UI interactions we're giving people, it's just not needed (or desired).

<comment><USER4> DHH - if you guys keep working so hard on your custom platform one day you just might be able to reproduce the client-side JSON+JavaScript stack!

Keep up the hard work!

<comment><USER3> Is that supposed to be a slam? I've been working on "custom" platforms for the better part of a decade.

<comment><USER4> Hence why you're trying at all costs to make it work with things it wasn't designed for?

<comment><USER5> I'm pretty sure he knows what it's designed for better than you given the fact he's the one who designed it.

Rails was literally lifted out of Basecamp into a standalone framework that works great for CRUD-style apps. You might personally prefer another approach or think this design failed but Rails was definitely designed for this use case.

</comment></comment></comment></comment></comment></comment><comment><USER6> I love posts like this, not just for what OP has done, but for what you guys have to say about it. I'm continually asking myself 3 questions:

      1. Should I do it on the client or the server?
      2. What should be travelling between the client and the server?
      3. Based on the answer to #2, what else do I need on the client?

Even though I've read all your great discussion points, I'm not sure I'm that much smarter. But it's nice to know I don't suffer alone. :-)

<comment><USER7> > 1\. Should I do it on the client or the server?

I think most applications use both client and server components. If your question is more on the lines of which one plays a major role, it depends mostly on the app. GMail won't be half as good without all the JS magic, but again, I assume it also has a heavy server component.

> 2\. What should be travelling between the client and the server?

If you need any client side processing or are using a framework which works on raw data(backbone.js), then json/xml/...; or else if your goal is to run the app without reloading unnecessary parts, html is a better idea.

> 3\. Based on the answer to #2, what else do I need on the client?

I am not sure what you are looking for here, but if your goal is to make a responsive app, there are some basic things to take care of.

Have bookmarkable links and don't break the back button. Doing that is breaking the base paradigm, and plain ajax does that.

Use something that provides bookmarkable links, and doesn't break the back/forwrad button; and at the same time, doesn't reload the whole page when only a small portion of the page needs reloading.

pjax is one such solution - the 37signals guys investigated it, then went with their home grown solution, but I think pjax will work just fine for majority of use cases.

The trick to pjax is serving content without layout if it is a pjax reques; with layout otherwise. There is nothing you can't handroll, but 1) why would you want to? 2) pjax uses pushState to preserve links and back button behavior.

Here is the pjax code:

<https://github.com/defunkt/jquery-pjax>

And here is a gist in Flask/Python which shows conditionally including the layout:

<https://gist.github.com/830fc28c680e77759b4b>

<comment><USER8> Thanks you for the links. I found a simple Rails pjax app and I am going through the code right now: <https://github.com/edison/pjax-rails-sample>

<comment><USER7> Looking at the rails pjax_rails gem <https://github.com/rails/pjax_rails> I see it automatically patches layout to return false when the request is pjax.

[https://github.com/rails/pjax_rails/blob/master/lib/pjax.rb#...](https://github.com/rails/pjax_rails/blob/master/lib/pjax.rb#L5)

        layout ->(c) { pjax_request? ? false : 'application' }

So in the sample app you pointed out:

        def show
          @post = Post.find(params[:id])

          if pjax_request?
            render layout: false
          else
            respond_to :html
          end
        end

is the same as:

        def show
          @post = Post.find(params[:id])
        end

Also, pjax-rails converts the following selection to pjax:

[https://github.com/rails/pjax_rails/blob/master/lib/assets/j...](https://github.com/rails/pjax_rails/blob/master/lib/assets/javascripts/pjax/enable_pjax.js.coffee)

        $('a:not([data-remote]):not([data-behavior]):not([data-skip-pjax])')

I was a bit baffled by the example app since it didn't appear to be doing any pjaxy stuff, but rails being opinionated, I see all links are pjax(except the not classes show above), and layout is turned off for pjax requests.

<comment><USER8> I put some debug printouts in his example notes controller and it seemed to be setting the no layout rendering option correctly, but as you say, the checks in the controller may be redundent. Anyway, I am planning on giving pjax a very good look: I find doing a lot of client side coding to be tedious and is something to be minimized.

</comment></comment></comment></comment></comment><comment><USER9> Hmm, degraded development experience of doing everything on the client?

Bit of a bizarre claim there given the state of templating these days. Sounds more of a prejudice than an actual problem.

Also json tends to be much lighter than HTML and if you're taking an optimistic view of updates you can assume the action's been a success and even immediately update the display without waiting for the server to create some simple HTML, so it's arguably a worse user experience due to the lag.

<comment><USER3> We've found that the additional overhead of sending HTML vs JSON is negligible in most cases. The additional speed gained by just sending JSON across is not worth the programming enjoyment hit of doing everything client-side.

When you get below 50-100ms per action, things are generally fast enough that this is not a key problem any more. The user cares greatly if you can go from 800ms to 100ms, but not so much if you can go from 100ms to 70ms.

<comment><USER10> I have to agree here. A major problem with client-side json is the need for additional documentation and likelihood of things breaking because of simple html edits.

For example, if you are populating a bunch of divs inside a parent div with the data returned using json, you would describe this using something like jquery selectors. Now if someone else comes and moves around the div during a redesign, he must go through whole bunch of js to make sure his shuffling of the divs around won't break the jquery selectors populating the data from json.

Now think about having a parent div that is simply populated with returned HTML from server-side and it seems way easier than using json to populate the data.

<comment><USER11> That's nonsense, the same issue would apply on the server side templates. If you go around messing with DIVs without an idea of the consequences, you will get in trouble regardless of your templates being on the server or client. If you try to have the designer do a redesign without testing the application afterwards, you're always in for trouble.

<comment><USER10> _you will get in trouble regardless of your templates being on the server or client_

My view is that you will get in _significantly_ less trouble because manipulating an HTML template that is rendered on server side is much easier to manage and adapt to a new design than finding nitpick jquery selectors across the app that depend on a specific div structure.

Btw, my post doesn't imply anywhere that a designer should redesign an app without testing. Therefore, your argument about testing is garbage.

<comment><USER12> Rather than "finding nitpick jquery selectors" I use a client side framework (backbone.js) with a lot of Views which makes my development faster vs using server side templating, so I cannot share your opinion.

</comment></comment></comment></comment></comment></comment><comment><USER13> I have to say, reading this made my day. I've been feeling such a push towards client-side templates lately, that I felt like it was just me that didn't get it. I really don't understand what's so compelling - unless those exact same actions are actually (YAGNI) used as endpoints of a web service. render :partial => '..' is such an sweet, simple and natural paradigm to web programming.

<comment><USER14> > _"I really don't understand what's so compelling - unless those exact same > actions are actually (YAGNI) used as endpoints of a web service"_

Well of course it's not going to appear all that compelling after you rule out _the most compelling use case_.

<comment><USER13> Hey, I totally agree that if your actions are gonna be consumed by clients other than your own UI, it makes _total_ sense. However, I've seen people [strongly] advocating this approach even when this isn't the case..that's what I don't get.

<comment><USER14> Well there are other benefits. [1]

Though I suspect you're just talking about cases that are best chalked up to: there's no accounting for the logic of the illogical.

[1] If you want to ensure a separation between display code and business logic, it's not a bad way to draw a line; some heavily data-driven problems do tangibly benefit from fetching JSON and formatting on the client; solutions that have multiple views on essentially the same data sets benefit in much the same way that solutions with multiple clients benefit; etc.

</comment></comment></comment></comment><comment><USER15> Cross posted from a comment by DHH on this post

>> We use nodejs for local development via Sam's Pow server, but there's no nodejs in Basecamp Next itself. It's all Ruby on Rails. We're running the default stack using Rails 3.2+, MySQL 5.5, Memcached, a tad of Redis (mostly for Resque), ERB , test/unit, CoffeeScript, Sass, and whatever else is in the default box you get with Rails.

</comment><comment><USER16> Awesome, very interesting article that shows you don't always have to go full client side to get a snappy app.

However, I do agree with another poster about this being a turbo charged horse and buggy. You can't, for example, deploy the app to a static CDN, or serve templates from a CDN. Templates can't be cached on the client, so you've developed what is essentially an elaborate partials caching infrastructure that is likely very brittle and must be watched over closely to maintain speed benefits (keeping all those things in mind when content changes -- what to throw out and what to keep, etc).

Also, by delivering HTML you're limiting your presentation to browser-only devices, at least with this app. I know basecamp has a JSON API, and at that point, why didn't you just do a traditional client side app I wonder? I think the answer rests in the fact that you preferred the "niceness" of server side development, which is arguably more mature than client side at the present time. If that's the only benefit, in a few years, do you think that advantage will hold true?

</comment><comment><USER17> I find GWT to be the best platform to do full-blown fat client-side paradigm due to several reasons:

1) UI Templating (like XAML)

2) MVP Pattern + JUnit = test automation as part of your build with minimum investment to infrastructure (most JS based solution requires investment on infrastructure)

3) Resource Bundle (similar to Asset Pipelining) cut down HTTP requests

4) Resource splitting (follow up from #3) to reduce the size of the responses when it comes to resources

5) JS binding (like C binding, C++ binding, JNI, etc) to support popular JS library

6) Top Notch Compiler (arguable... but it's there) that can also prune dead code

7) JS switching based on browser's request (IE browser will get IE-specific JS)

8) CSS variable substitution (like Sass)

9) History framework.

10) Flexibility: end point can either return JSON, XML, or use the built-in XML-RPC mechanism (Java only).

The disadvantages are: it's Java and requires compilation.

I like GWT the most so far because I don't have to find libraries or tools that support all of the above (Sass, mustache, various js unit-testing tools, library to merge and compile css/js, etc).

YMMV.

<comment><USER18> I like GWT as well, but its development history makes me a bit nervous about its future.

It is open source, but doesn't have a developer ecosystem outside of google employees (in fact they outright state that no one else can be a committer). That in itself wouldn't be the end of the world, but unfortunately google has a) reduced resources devoted to GWT dramatically in the last year or so (many team members were reassigned to the dart project), and b) has a history rapidly changing 'paradigms' and semi-abandoning the code and documentation for the old way of doing things.

<comment><USER17> I think the biggest danger of using GWT is when it breaks on newer browsers and this has happened once in the past with the release of Safari 4 (or 5?) there was a minor hiccup in which they quickly fix it the next day.

That is definitely a major glare. Other than that, if the community decided to fork it (and have the time and capability to do so) it'll be a safe choice for a long time.

GWT as of today is definitely very polished and well maintained and fulfil the needs of Single Page App smoother than having to hunt different tools and libraries and to set them individually to be a part of the build tool.

</comment></comment></comment><comment><USER19> I think in the whole client-side rendering debate, a lot of people miss the fact that there is a one-to-one correspondence between JSON and a certain subset of HTML, that can be illustrated by the following example:

        {"user": {"first_name": "David",
                  "last_name":  "Hansson"}}

David

Hansson

If, as 37signals basically seem to be doing, you restrict yourself to this subset of HTML and use CSS to do _all_ presentational styling, then honestly it's all the same either way.

</comment><comment><USER20> Are you guys taking care to send as-plain-as-possible markup from the server to the client and then style it up to keep most the UI development in CSS or are you just sending through raw, styled HTML that gets inserted as-sent directly into the page?

This reminds me of the early days of Java Servlets when people would stream back HTML from inside their Java Servlet code to JSP pages to build it out... made it impossibly hard to edit the templates.

Then the Java world moved to templating engines, but it was still the same idea.

Just curious how you are managing this pain point (I am not a Ruby dev so maybe there is a well-known 'best practice' templating approach?).

<comment><USER3> I'm not sure I understand the pain point you're describing. What's "styled HTML"? We're sending HTML across the wire that looks exactly like the HTML we used to render the initial page. It has classes, ids, and custom data descriptors.

We have not experienced any pain doing this.

<comment><USER20> You answered my poorly-worded question. Thanks.

</comment></comment></comment><comment><USER21> Interesting. We've just had a discussion in our team about moving as much as possible to the client becasue... developers enjoy writing CoffeeScript!

</comment><comment><USER22> Is this similar to Quora's livenode/webnode2 (<http://www.quora.com/Quora- Infrastructure/What-is-Webnode2>, [http://www.quora.com/Quora- Infrastructure/What-limitations-h...](http://www.quora.com/Quora- Infrastructure/What-limitations-has-Quora-encountered-due-to- Webnode2-LiveNode), <http://www.bigfastblog.com/quoras-technology-examined>, [http://www.quora.com/Quora-Infrastructure/How-does- LiveNode-...](http://www.quora.com/Quora-Infrastructure/How-does-LiveNode- work))?

</comment><comment><USER23> I don't think push state is supported in IE (except ie 10):

<http://caniuse.com/#search=pushstate>

This makes it a non-starter for me.

<comment><USER24> The app still works in IE, it just requires page refreshes on every page load.

</comment></comment><comment><USER25> Aren't they are using a __lot __of client side UI code in order to replace parts of the UI with updated HTML from the server?

They have caching on the server side but that can only account for some of this.

Although in my couple of years of using Basecamp in my previous job, I never found it particularly "snappy" but then I was one user out of a team of five, out of how ever many users they have.

</comment><comment><USER26> I can't help but feel that you are sacrificing the flexibility of your UI in order to stay in your 'safe place'. IMO its easier to implement complex UI if you can deal with it all in the front end. I have used a similar approach before and felt like my hands were tied many times by it.

</comment><comment><USER27> This ia a bit of a tangent, but Stacker feels like breadcrumbs that require more real estate than necessary. Maybe the physical metaphor is important, but my first thought was 'this is just bread crumbs'.

</comment><comment><USER28> This is very similar to what Google+ does with Closure Templates.

</comment><comment><USER29> I'm showing my ignorance of rails here, but is it hard to do the 'russian doll' style of fragment caching that DHH describes? Are there any gems that do this?

</comment><comment><USER30> I just realized how "next last year" is an oxymoron... Or is it? A reference to the present per chance?

</comment><comment><USER31> Is Stacker a proprietary 37 Signals thing? It doesn't seem to pop up after several search attempts.

<comment><USER13> yes, the blog post was quite clear that it's built in-house, with no plans to open source it since it isn't a generic solution (it's purpose-built with Basecamp in mind).

</comment></comment><comment><USER32> Summary: Use window.pushState() to reduce HTTP requests and cache _every thing_.

</comment><comment><USER33> > Alexander, I think the Law of Demeter is shit and never follow it.

Classic DHH

</comment><comment><USER34> What's the point of putting the tl;dr at the bottom?

</comment><comment><USER35> advertising

</comment><comment><USER36> or, you know, you can also stop using Rails.</comment>


Show HN: VirtuBroker – Sell your home with a virtual agent - <AUTHOR> http://www.virtubroker.com/ <comment><AUTHOR> any comments/suggestions would be helpful :)</comment>


Show HN: Mob Translate – Translation for Australian Aboriginal Languages - <AUTHOR> https://mobtranslate.com <comment><AUTHOR> So the site is mostly a prototype at this point -> [https://mobtranslate.com/](https://mobtranslate.com/)

I'm building it out to be a fully open source and community driven project -> [https://github.com/australia/mobtranslate- server](https://github.com/australia/mobtranslate-server)

I've also only started work on my own tribes language (Kuku Yalanji)

We have a dictionary in PDF form -> [http://www.ausil.org.au/sites/ausil/files/WP-B-7%20Kuku- Yal%...](http://www.ausil.org.au/sites/ausil/files/WP-B-7%20Kuku- Yal%20-%20English%20Dict._0.pdf)

And I'm currently manually transcribing it all into YAML -> [https://github.com/australia/mobtranslate- server/blob/master...](https://github.com/australia/mobtranslate- server/blob/master/dictionaries/kuku_yalanji/dictionary.yaml)

I'm trying to keep the project simple but with enough consideration to keep it robust.

I'd love if anyone is interested enough to perhaps lend a hand. I'm always looking out for any other indigenous developers to network with. (I believe I've only ever met one other person)

Also, for anyone who works in this space, any resource recommendations or tips for writing a translation engine. (I currently will just for likely word replacements but will eventually make the engine try to understand grammar)

"mob" is a common way Aboriginal's refer to each others tribes. "Which mob are you from?"

Edit: I've only added 20% of the dictionary so will finish over the next couple days.l

<comment><USER2> > any resource recommendations or tips for writing a translation engine

All the successful translation websites/apps you're familiar with use machine learning. ML stomped all over NLP approaches because it gives a rough translation between so many more languages for so much less work.

On the question of where the data comes from, you might be a bit closer than you think. That dictionary you're transcribing has some sentence pairs, and like yorwba said, sentence pairs are food for ML language models. Extracting all the sentence pairs into a dataset might raise some interest from ML people.

<comment><USER3> I think ML approaches are not well suited here - or at least there are still huge problems between non-germanic/Latin languages that have yet to be approached. (My background: white Australian, not a linguist, know a little Vietnamese, know a very tiny bit about indigenous Australian languages based on chatting with friends who studied that area)

I continually see consumer-facing ml approaches (FB, Google) give terrible Vietnamese translations because they assume all of the context needed for a translation is available in the text. In general this is not the case. In Vietnamese this is hugely obvious because their pronoun system is largely based on 3rd person relationships ("sister walks down the street", "boyfriend loves girlfriend"), which is impossible to map to/from English 2nd person ("you walk down the street", "I love you") without basically a full conscious intelligence. Even FB, which is in a unique circumstance of actually having a lot of the requisite relationship data between people available to it, does a terrible job at this.

My (tiny) understanding of the incredibly rich kinship systems in indigenous Australian cultures suggests that this would be a huge issue there as well, assuming these complexities are also present in their languages. (...OP? :) )

</comment></comment></comment><comment><USER4> If you are from FNQ, i had heard somewhere there are grants available from qld gov for language initiatives. Did a which search and found one here [0].

I know grant applications can be a real pita, but from the face of it sounds like you could be eligible (just in case you were not already aware).

[0] [https://www.datsip.qld.gov.au/programs- initiatives/grants/in...](https://www.datsip.qld.gov.au/programs- initiatives/grants/indigenous-languages-grants-2020)

<comment><AUTHOR> Good thinking, I imagine that it would be a grant worthy project..

I personally prefer to stay away from funding and will do this project in my spare time.

Though, once there is a big enough team, and they vote that the project deserves funding, I'd be happy to investigate it.

</comment></comment><comment><USER5> Great initiative that will have significant impact by making translations available to all, including journalists, governmentS, lawyers, courts and merchants. And of course it will give kids one more reason to contextualise aboriginality as first class citizenship.

Have you looked into affiliations with unis and education departments?

<comment><AUTHOR> Great ideas.

Current plan will be to finish one whole dictionary.

Then find the second most popular dictionary.

Once two are fully integrated, I will do a bit of promotion to the places you mentioned.

And hopefully just network everyone who is interested in thoroughly digitising the tribal dialects.

</comment></comment><comment><USER6> As having dabbled in NN's,speech,language recognition, I feel rightly ashamed that Aboriginal langauge has never crossed my mind (ever!); That's not the worse part,, I'm a native of Australia :(

<comment><AUTHOR> Hey mate, part of me posting this here was to find other Aboriginal programmers, as I've only ever met one other in my life.

I was thinking of putting together a group chat somewhere if you are interested in joining.

<comment><USER6> Absolutely, would really appreciate access to a group chat.. I can organize free hosting/servers if it helps

please msg me

<comment><AUTHOR> can't send you a message.

Email me at email@example.com

</comment></comment></comment></comment><comment><USER7> Commendable effort, but do I understand correctly that you're just doing word- for-word replacements? If so, the end result will not be at all grammatical, since you're missing the case markings and inflections required in most Aboriginal languages.

<comment><AUTHOR> Yeah, the translation hasn't quite been massaged yet. The next steps are;

1) Complete copying the dictionary in

2) Add more variations of words e.g. hi, hello, gday

3) Add a probability matcher that looks for % matches of liklihood e.g. house != hosue (0.75)

4) Use the saved grammar types to try infer if the word is a verb before noun etc

5) Use a real ML/NLP system to really try understand the language

rinse and repeat those steps for optimizations. A few developers have already reached out to contribute so hopefully get this up to scratch asap.

</comment></comment><comment> rlv-dan Good effort, but this is not Google Translate, just Translate.

Edit: I see the title of this post is changed now

<comment><AUTHOR> Sorry I meant to put it in double quotes.

</comment></comment><comment><USER8> Great project!</comment>


Japan announces ¥132.6 bil aid to Bangladesh - <AUTHOR> https://japantoday.com/category/politics/bangladeshi-leader-visits-japan-to-talk-economy-partnership <comment><USER2> Big kudos to Japan! Some of our today's leader should learn from them!</comment>


Uber's Ad-Toting Drones Are Heckling Drivers Stuck in Traffic - <AUTHOR> https://www.technologyreview.com/s/602662/ubers-ad-toting-drones-are-heckling-drivers-stuck-in-traffic/ <comment><USER2> This is likely photoshopped. This is what I got when I ran it through[0]

[https://i2.uploadit.ga/img/1476562202.jpg](https://i2.uploadit.ga/img/1476562202.jpg)

That looks suspiciously like someone edited at least the text into the picture.

[0] [https://github.com/sentenza/GIMP-ELA](https://github.com/sentenza/GIMP- ELA)

EDIT: Different picture, same story: [https://i3.uploadit.ga/img/1476564394.jpg](https://i3.uploadit.ga/img/1476564394.jpg)

Definitely shopped in. At least the text.

<comment><USER3> I'm not an expert. Can you explain why those links indicate it is photo shopped? Is it the bright lines... So the cars are shopped as well?

<comment><USER4> Image data takes on noise/damage when it's compressed, during things like saving and uploading to the web. When you turn that noise way up, it should be even overall. When it's wildly mismatched, it indicates pieces have been chopped in, like when a crappy voiceover has a word that's obviously wrong.

Note the sharp difference surrounding the in-focus drone's text, compared to the background drones, whose signs have a much higher level of consistency across the pages they're carrying.

</comment></comment></comment><comment><USER5> I'm not sure this is for real. Can anyone find any other journalistic or other confirmation?

The OP here links to a Bloomberg article, in which the only mention of drone advertising is the caption on the same photo.

Which yoo1I tells us analyses as photoshopped: [https://news.ycombinator.com/item?id=12715479](https://news.ycombinator.com/item?id=12715479)

I think someone photoshopped it, then Bloomberg News googled for a photo to use for the story and found it, and just put it in without checking it.

Now other people are going to start 're-blogging' it as news, with Bloomberg as the source, as in OP.

I'd think this would actually be pretty big news if it was going on, but doesn't seem to be mentioned anywhere else.

Shoddy job, Bloomberg News. If this what happened, and I think it probably is, Bloomberg has failed at journalism.

<comment><USER6> Technology Review (OP link) uses a different picture than Bloomberg. Bloomberg:

[https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iRzJLFQi2dc...](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iRzJLFQi2dcQ/v0/1200x-1.jpg)

Bloomberg also dates the picture (17th June in Mexico City) and sources the photographer (Brett Gundlock/Bloomberg).

The explanation that this was a one-time publicity stunt for a nice photo/short video is way simpler and rational, than either the premature claim of a fake ("I see it because of the pixels!") ore the idea of battery constrained drones being used 24/7 as advertising billboards.

</comment></comment><comment><USER7> I can't help but feel that this is more for "column-inches" advertising than the direct "eyeballs-on-billboards" advertising. I've not played with drones for a year or two, but consider that drones have a fairly short battery life, don't fly well in breezes, and need fairly close human attention, and this is a huge amount of effort to go to if it's not for the write-ups.

Of course, column-inches are still a good way to do advertising, and this is a clever way to get that.

<comment><USER8> This is exactly it. Judging by perfectly framed picture with nice bokeh/dof this whole thing was arranged for that one PR shot.

</comment></comment><comment><USER9> But without any sensible regulation or assignment of property rights to fly commercial drones, advertising drones could be buzzing around everywhere!

To limit the ability of stores to put signs wherever they want, the are both signage/billboard regulations. If a store can't secure a billboard at a desirable intersection, they sometimes pay to put a person with a sign there. That loophole is only acceptable because there is a cost of the employee that creates a natural cap on the use of unregulated signage.

With the advent of drones, the cost of will fall dramatically and the expected result is an exponential proliferation of such drone signs. Yes, current battery technology is woefully incapable of this currently and autonomous technology isn't there yet, but as soon as the drones can be 100% autonomous and can recharge themselves on charges on the roof of a nearby building, then it simply becomes a capital cost of the drones. I think at that point is won't be simply for publicity stunts anymore. Let's hope this isn't the future we find ourselves in.

</comment><comment><USER10> Local and state governments and their elected representatives in the United States are soon going to get an earful from constituents about stunts like this.

Another thought: The FAA will soon be involved regulating drone advertising. I guess they already have some oversight over skywriters and blimps and airplanes dragging banners, but this takes things to a new level.

<comment><USER11> This was in Mexico. Commercial drones do already have a number of regulations here in the US, to be fair.

</comment></comment><comment><USER12> How inspireational! :-D

Can't wait for brain-computer interface to get them fed right into my thoughts...

</comment><comment><USER13> I always wondered why they didn't use drones to warn drivers about upcoming construction. If people had miles to merge into one lane instead of hitting a wall, I suspect people may not have to come to a stop to merge, and thus everyone can keep on moving.

<comment><USER14> You underestimate the selfishness of people. Knowledge of upcoming situations is not the issue. Rather it's the "it's more important for me to get where I'm going than it is you" that keeps people from merging until the very last second.

Source: US roads. All day, every day.

<comment><USER15> Merging late, and using both lanes to their fullest actually improves overall congestion (per Washington state, Minnesota, and others.) Merging early can lead to differential speeds between lanes, which encourages lane changing, which causes a general slowdown for everyone.

Use those lanes and zipper at the end!

<comment><USER16> One big problem I witness often is people exiting the open lane just to zoom to the front and re-merge back into it. Now they've changed lanes twice!

</comment></comment></comment></comment><comment><USER17> How is this not an Onion article?</comment>


Alexa changes their ranking scheme - <AUTHOR> http://www.alexa.com/site/company/announcement

<comment><USER2> It does look a lot more accurate for my medium-small sites.

Compete data is still far too sparse to do better on these.

</comment><comment><USER3> I guess Compete has them worried. It is MUCH more accurate, even if it is US- only.</comment>


An Insider's Guide to Shenzhen Manufacturing - <AUTHOR> http://makezine.com/magazine/making-in-shenzhen/ <comment><USER2> This is more like a guide for how to lose all your money, and have your product design stolen, in the minimum amount of time.

I have seen too many Kickstarter projects crash and burn because they read guides like this, speed dated some factories, and then lost all their money in a bad production run, by a factory who doesn't really care about them.

Unless you work with a factory who you not only trust, but know that they have an extremely strong motivation to not steal your product, they will both screw up your product, and your design will be cloned in a matter of weeks.

Even friends I have who are Chinese, living in Hong Kong, have warned me that even for them, it is hard to find trustworthy suppliers and factories in Shenzhen.

We are going to be doing all our manufacturing and assembly here in Europe. Luckily we're making a more expensive item and we have this choice.

" But if you're undertaking a serious endeavor and you're looking to make mission-critical parts, you have to visit to really know the situation at your suppliers, to establish relationships with factory owners and staff, and to get a sense of their quality control standards. " NO NO NO NO NO. Unless you are going to MOVE THERE AND LIVE THERE, then you need to absolutely forget about manufacturing there. You WILL lose.

I don't want to sound down on Shenzhen - it is where almost all our beloved electronics come from - but seriously - it is an environmental catastrophe, there is ZERO intellectual property protection, it is full of scam artists, there is a nearly insurmountable language barrier, and yes, there are in fact plenty of completely competent, worthwhile, trustwothy electronics manufacturing assembly companies in nearly every country of the world. Unless you are going truly mass-market (>200,000 pcs) then you should absolutely not even consider taking it to Shenzhen.

<comment><USER3> To provide a somewhat-contrasting anecdote, I've been dealing with Chinese factories (mostly in the Pearl River Delta area) for the last 3 years, manufacturing fairly high-tech products. We haven't had any of the problems you describe. We did our first small manufacturing runs _sight-unseen_ with our initial partners and everything went well. I think the story of cratered Kickstarters has more to do with creators who have little experience in manufacturing and no clue what they're doing in China, rather than some intrinsic failing of Chinese factories.

There are plenty of ways to make your BOM work in your home country, but at least in the US it's surprisingly difficult to get low volumes (<5k units) manufactured economically.

<comment><USER4> > manufacturing fairly high-tech products. We haven't had any of the problems > you describe.

Only because of the nature of your product...

It's all about the product type, its price range, and the availability of reaching the customers.

A US company that made a general consumer-level (non-pro) 1 milligram scale (e.g., accurate on the weight to within 1-3mg) outsourced its manufacturing to China, which then had the same production lines make 2x the order, placed its own brand/sticker on the additional units, got it into the US, and had the various distributors provide it at a price that was 80% less than the company was selling them.

I bought one off Amazon. Why pay $200 when I can pay $20-$40?

If this is legal or not it does not matter - if it can be done it will be done.

In your case, the time is not just right. But the moment when everything aligns and they think they can compete with you...

<comment><USER5> So what do you want, patents?

<comment><USER2> Patents won't save you. Trademarks can help you prevent imports like this, but nothing will ever stop your product from being sold in other places, especially mainland china.

<comment><USER5> Right, so ... you've just re-iterated my point. Whinging about the nature of reality aint gonna change it.

<comment><USER2> No, my point is you need to find people who won't steal from you, not because you have patents, but because they're not scumbags. Going to Shenzhen, the odds are very much stacked against you with this.

<comment><USER5> Do small fly-by-night factories care about reputation? No, probably not. Does having your stuff produced elsewhere given this reality protect against its copying? No. Realistically, we just have to recognize that the exclusive right to produce something does not exist, except as vaguely enforced at retail through certain developed markets' monopoly-assisting enforcement arrangements... _if_ you have enough dosh for lawyers to back it up. _From a business standpoint, the cold hard truth is that producing anything physical is more about the object 's distribution and marketing than the design and production_, which can be monopolized only temporarily.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> It's funny how "focusing on core competencies" usually reduces the set of core competencies gradually till all that left is management.

<comment><USER7> That is funny (though sadly common) because it's a good idea early on: focus on what really sets you apart when you start; then gradually expand your core competency so you can better control your fate.

Unfortunately building big companies is not really in fashion these days.

</comment></comment><comment><USER8> I was in Shenzhen a few weeks ago. It's indeed a wonderful city.

Originally the massive manufacturing industry was accelerated by the large amount of people from rural areas flocking into the city due to reform and opportunities. The increase in population resulted in a large unskilled workforce and thus very cheap manual labour and large factory assembly lines.

It's a lot better now given a much more competitive market. Salaries are higher and quality of living is better than the rest of the country. A lot of people became very rich in Shenzhen within the last decade.

<comment><USER9> I pay my Chinese employees in shenzhen the same wages I pay my workers in LA. The cost of living, from what I can tell, is fairly comparable.

<comment><USER10> No, it's not.

[http://www.numbeo.com/cost-of- living/compare_cities.jsp?coun...](http://www.numbeo.com/cost-of- living/compare_cities.jsp?country1=United+States&country2=China&city1=Los+Angeles%2C+CA&city2=Shenzhen)

<comment><USER11> That is actually much closer than I expected it to be.

> Prices Including Rent in Shenzhen are 36.96% lower than in Los Angeles.

To compare,

> Prices Including Rent in Los Angeles, CA are 36.34% lower than in Zurich.

<comment><USER5> LA is basically the same price for rent as third tier Chinese cities. (Source: I lived LA 2010, China before and after) However, you don't need a car in China, other aspects of cost of living such as food, utilities, transport and appliances are a lot cheaper, and the government doesn't really try to tax you (and certainly not on foreign earnings). Plus, you get to learn a new language. Flip side, no LACMA and it's a bitch to get decent avocados or orange juice, and a lot of alcohol is cheaper in LA.

</comment></comment></comment></comment></comment><comment><USER12> Ah Shenzhen! Such a wonderful and interesting city. If you are there, make sure you get to the Lo Wu Baby Factory AKA The Luohu Commercial City. I jest, it's actually not a baby factory, that's just what we called it for some reason. It's a humongous mall where you can buy pretty much anything in any quantity, of the lowest or highest quality, you just have to know what you are doing. I bought a 64 GB USB drive there in 2007. I knew it was fake, but I wanted to see how they were doing it. There was also the memorable time when I found a DVD shop, all pirated stuff, where they literally had every movie and TV show ever put on DVD, Like The Complete MacGyver . You peruse through a CD binder to find the DVDs you want and then a few minutes later a little kid pops out of the ceiling with your DVDs and the scampers back up into the ceiling. There are legit products there, don't get me wrong, but I was fascinated with the fake and knockoff stuff.

<comment><USER13> > I bought a 64 GB USB drive there in 2007. I knew it was fake, but I wanted > to see how they were doing it

Out of curiosity (if you remember), what was its actual capacity?

<comment><USER14> Check out [http://www.neowin.net/news/fake-chinese-500-gb-external- driv...](http://www.neowin.net/news/fake-chinese-500-gb-external-drive-is-one- clever-paperweight-literally) for an impressive one of these.

It reports as a 500 GB drive to the computer and you can copy small files to/from it. But it's basically a ring buffer; once the actual (much smaller) capacity is full it goes back to the beginning and starts writing over the earlier data.

</comment></comment></comment><comment><USER15> Interesting article, but I get the impression it was downplaying environmental and social concerns quite a lot. A lot of "promising signs" but in the meantime you get heavy metals in your food, and workers' conditions are just bearable. It's probably better than most other parts of China but still, the situation seems to be quite bad.

<comment><USER16> Meta: It's obviously a puff piece. It is also true that there are folks that enjoy the city.

I was going to flag it and file it under "why the heck did that appear on HN?", but if it generates some useful conversation about hiring and startups, it's worth it. A lot of puff pieces on HN (and elsewhere)

It makes for an interesting exercise to take all of the criticism that you see elsewhere and note how it is handled in the article. "...Labor practices are still a concern, but..." and "...environmental issues are still a major concern, there are hopeful signs..."

Note the use of the passive voice and the elimination of the subject of the sentence. It's never "I made a mistake" or "China's labor practices concern others", it's "mistakes were made" and "labor practices are a concern" (I also love the word "concern". What does that mean? If you're driving in your car and the radio doesn't work, is that concerning? If the car catches fire, is that concerning? "It's a concern" simply says that you thought about it. Brownies are a concern)

We could use a lot more China articles -- huge market, lots of really cool stuff going on there. But we would be remiss if we read any article on HN without a critical eye to context, style, and agenda.

</comment></comment><comment><USER17> Can someone explain why "Maker" is capitalized and "Factory Owner" or "Engineer" isn't? It seems that there's a certain amount of pretense among so- called "makers." How is a maker any different than any other kind of manufacturer? I am not trying for snark; I actually don't understand what distinguishes this 'maker' label from any other kind of manufacturer. Did we start calling chefs "Cookers?" It just seems like this attempt at being "Makers" rather than manufacturers smacks of pretentious hipsterism. How is this scene any different than people fifty years ago who manufactured toasters?

<comment><USER18> It's a brand. It's "Make" magazine who wrote this article, and so they branded folks of similar mindsets along the same lines: "Makers".

For better or worse, they have acted as a force to bring together folks with similar interests, so I have a hard time being critical of their choice of capitalization in their branding.

</comment></comment><comment><USER19> Not really a guide. I was expecting names of people and businesses or how to actually make the connections with factories etc. Going to Shenzen is not by itself enough. You could wander around the city for a week and get nowhere.

</comment><comment><USER20> Highway1 ([http://highway1.io](http://highway1.io)) is doing a great job of helping startups figure out how to get their manufacturing strategy set up. The advice and insight the two companies I worked with in their most recent cohort (Spinn Coffee and Game of Drones) received was absolutely essential to getting off the ground, so I'm expecting to see more of this kind of incubator/accelerator in the future.

</comment><comment><USER21> I wish we would not need Shenzhen.

<comment><USER22> I think that we had it in the past in the USA.

Almost a hundred years ago an electronics market sprung up in New York City, and electronics manufacturing factories in the city and suburbs. I think it was Robert Moses who decided to raze Radio Row to build WTC. After the war, our electronics industry was mostly driven by the government's war on communism. When consumer electronics innovation picked up again, US companies were already looking to buy from or build in Asia (Japanese CB radios) or Asians were already here doing business themselves (Sony Walkman).

<comment><USER17> Try to open a factory in Marin county or build a house in Malibu. THIS is why manufacturing has left the U.S. In the U.S., people want jobs but they don't want the factories that create the jobs. To build a house in Malibu for example, It can take 2 years, just for permits! You can even hire someone called an "expediter" who can speed it up slightly, but not by much. ..and that's to build a house. Imagine trying to build a computer factory. Apple has a Mac Pro factory in California, but only because the margins are high enough on the Pro that they can absorb the huge differential for the California factory. If they attempted to make MacBooks in California, it would likely double the price.

The reality is that U.S. Corporate taxes are too high, the EPA often acts like the Gestapo, state and local permitting makes filing papers in India seem like ordering from Uber.

Don't misinterpret, I am not hating the EPA, however their obsession over CO2 is killing US industry. Taxes are killing growth and NIMBY politics has pushed the factories across the oceans and over the border. Obamacare is also a large disincentive to business.

You may agree with the above things, however when you can't even convince people to buy a useful app for $1.99, you certainly cannot convince consumers to pay hundreds of dollars more for electronics to have US manufacturing.

<comment><USER23> You make valid points, but the way you couch them comes across as being from someone who doesn't directly have manufacturing experience. I do, and have worked in electronics manufacturing my whole career (15 years). My company is based in the US (San Jose) but the two largest campuses are in Mexico & China, each of which contains >10,000 employees.

Yes, making electronics in the US would cost more, but you'd be surprised at what "cost" is most important to corporations when making those kinds of decisions. Depending what is being built, time to market & location of profit/revenue can be more critical than labor cost. At this point, Chinese wages in the first mover cities of Shenzhen/Guangzhou and Shanghai/Hangzhou/Kunshan have increased to the point of being noncompetitive with other regional options (Malaysia, Vietnam, Bangladesh), but because the Chinese domestic market is so huge, many companies are just relocating to cheaper places like Dalian, Fujian or Chengdu. Having the entire supply chain in one country is hugely compelling.

Factory labor in the US, even in high skill, high tech manufacturing, is still typically <$15/hr, with starting pay closer to $10/hr in many places. It doesn't make a bit of sense to build things like mops & brooms here, nor does it make sense to build extremely low margin electronics (like many consumer goods), but the manufacturing economy in the US is actually thriving now. It just happens that it's lately been high margin, complex stuff, military equipment, and a few other select types of goods.

US corporate taxes are too high, but the EPA isn't strong enough (in my backyard, just look at how Duke Energy got away with throwing coal ash into a local river for yeeaaaarrs). Most electronics factories produce nearly 0 CO2 emissions anyway. That's mostly limited to heavy industry & raw materials refining. State governments make stupid decisions, too, like offering short term tax breaks for companies to invest in factories there, but with no consideration for what happens when the company leaves immediately after the tax incentives disappear. Again in my backyard (North Carolina), we lead the nation in solar farm investment in 2014 ... but it was 80% due to tax incentives and 20% due to Apple & Google building data centers here.

I don't think the problem is NIMBY politics in most cases. The problem is short sighted politicians and greedy consumers.

</comment></comment></comment></comment><comment><USER24> good read, love the part on how to choose among the factories by meeting directly with their boss(es)...

If this is the norm for other type of factories in China, I don't mind settling there too

</comment><comment><USER25> Well, despite all the complaints here if the USA continues on this ridiculous path of trying to dictate a $15 an hour minimum wage the "Shenzhen Effect" will continue and grow. All kinds of businesses will continue to be forced, through regulation and artificial wage floors to get their work done outside the US. And this will lead to accelerating the loss of job, technology, intellectual property, independence, growth, etc.

Once you destroy your industrial base recovery could take a hundred years (or it could be impossible). The Chinese know this and happily do whatever the can do to effectively destroy US, European and other manufacturing centers by manipulating currency, ignoring environmental pressures, stealing intellectual property and more.

The lunatics (that is, those in government) are running the asylum.

The funny thing is that the world can actually force a change by hurting the Chinese where it counts: Business. We need to start a movement that is very vocal about having China be accountable for all of the violations they commit. And we need to refrain, as much as possible, from buying Chinese made products when possible. I know this is nearly impossible, but if we start somewhere they'll get the message.

Here in California I'd much rather dump 100 billion dollars into a tax free, relaxed regulation, flexible wages (meaning, market driven not minimum wage) manufacturing zone than on the stupid fucking joke of a high speed train we claim to be building. We can show the world how to do manufacturing efficiently, effectively, competitively and without destroying the environment. We can do so if we commit to creating a zone where government stays the fuck out other than to setting some basic rules and lets private enterprise take it from there.

If we don't do something like that as a State and a Country we are absolutely utterly doomed to be destroyed by a thousand cuts, and they all come from China. The same is true of European and any other countries where a reasonable manufacturing and industrial base exists that is being eroded by what China has been doing for decades.

Governments and politicians are only interested in their own survival --keeping their jobs-- and escalating in power. This interest has been proven to be diametrically opposite the idea of doing what is best for a country in the long term. Very often doing what is best is accompanied by some pain and the need to make concessions.

Using California as an example, we need to kill off all these stupid lawns in front of our homes that suck-up water frivolously. We have an intense drought to deal with. Yet, you drive around my neighborhood and you'd think we have no problem. I am one of the only homes that's taken out all grass and replaced it with a super low water utilization rock and flowers landscape. So, yes, some regulations are required and they also require the balls to make the case for them and enact them.

In other words, the problem with the way we do things is that we don't look far enough into the future. The drought problem isn't new. We could have been in a serious water conservation mode three years ago. Yet, three years ago it would have been political suicide to push for it. Being that politicians only care about their own survival and whatever advantages they can engineer through legislation rather than what is right, nobody made the hard decision that lawns had to go. And here we are.

This is exactly what is going on with China. Nobody in politics wants to attack this problem anywhere in the world. Why? Because having prices go up in Walmart isn't good for any politician. It takes balls and it takes not being guided by political ambition to swim completely against the current and push forward an agenda who's results could only be appreciated by the population 10 or 20 years later (or even as far as the next generation). Those are HARD decisions to make. I have seen no politician anywhere interested in tackling those problems, in becoming really unpopular today for the benefit of future generations.

And that's the problem.

</comment><comment><USER26> China has an authoritarian government that produces pollution that threatens the entire world, uses the great firewall to attack tech companies in other countries, prints up to 282% of GDP [1] in order to buy their way into other countries real estate and companies, ignores human rights and free speech, and supports dictators in Russia and Africa. If China gets anymore powerful, the world is doomed. We need to curb commerce with China.

[1] [http://www.washingtonpost.com/blogs/wonkblog/wp/2015/02/11/c...](http://www.washingtonpost.com/blogs/wonkblog/wp/2015/02/11/chinas- increase-in-debt-is-massive-and-unsustainable/)

<comment><USER27> Sadly, everything (literally, every little singe bit) you've written can be said for the USA. Sadly...

<comment><USER26> Please show me where US

1.) artifically keeps dead and poisonous factories alive to produce massive pollutions that harms other countries 2.) has a great firewall that inhibits free speech, and use it to attack other countries 3.) is a authoritarian government</comment></comment></comment>


The Man Who Walked Backward - <AUTHOR> https://www.texasmonthly.com/the-culture/plennie-wingo-the-man-who-walked-backward/ <comment><USER2> I was surprised to see that the article ended without revealing whether he made it, but apparently it's an excerpt from a much longer biography.

Wikipedia sort of answers that question but leaves open a ton of other questions:

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

Apparently Wingo published a memoir in 1982 under the title _Around the world Backwards_ , and the new biography is called _The Man Who Walked Backward: An American Dreamer 's Search for Meaning in the Great Depression_.

<comment><USER3> I can't believe how many words are written about everything except his journey. I kept skimming and skimming but there's so much fluff

<comment><USER4> I couldn't agree more. Maybe we all just got Rick Rolled in long form.

</comment></comment></comment><comment><USER5> When my son had just gotten to the point he could confidently walk, we watched as he went from the living room, around a corner, down the hall and around a corner into his room - backwards the whole way. He didn't turn his head or walk slow. We'd never seen him walk backwards before.

</comment><comment><USER6> From the Wikipedia article:

> He wears periscopic eyeglasses, fastened over his ears like regular > spectacles, which enables him to see where he is walking.

OK, that makes sense.

<comment><USER7> I wonder if he could walk normally (forward) again after his backward trip.

Perhaps this is related: [https://www.theguardian.com/education/2012/nov/12/improbable...](https://www.theguardian.com/education/2012/nov/12/improbable- research-seeing-upside-down)

And perhaps this Smarter-Every-Day video: [https://www.youtube.com/watch?v=MFzDaBzBlL0](https://www.youtube.com/watch?v=MFzDaBzBlL0)

<comment><USER6> He started as an adult, so I doubt that there were permanent effects. It does remind me of those experiments with kittens, where researchers mounted prisms over their eyes, and then studied their optic pathways, using intracranial electrodes and so on. In those cases, brain development basically reversed whatever distortion the prisms caused.

But damn, teaching a kid to ride that backwards bike is sick.</comment></comment></comment>


Ask HN: A startup trainer? - <AUTHOR>

I've been working on my startup for several years now, but my progress has been slow with many false starts and long periods of inactivity. My friends and family don't show much interest in it and I'm having trouble staying motivated after so long. I've recently been working with another startup and found that because the founder has high expectations and demands that things work, I've been much more productive helping them out.
Does anyone know of an outsourced motivation service. I'm thinking about something like a personal trainer service, but for business.
Someone who will work with you a couple times a week and demand that you push yourself just a little more than you would on your own. Someone who will objectively rate your performance and effort, and help a flabby founder to get their startup fit. <comment><USER2> This is a very interesting idea.

The day-to-day realities of managing and growing a startup are very challenging, especially if you are the sole founder. I've been there in the early days for numerous startups and for myself, and found that most difficult parts are not necessarily related to the business, product, or customers themselves, but rather they are usually emotional in nature, and center around how to stay motivated, continue to get things done and move forward when there's no end in sight. The hardest part is feeling like you're alone, there's no one else who gets it to talk to.

I'm not an investor or startup advisor, but I'd be happy to help you out if you want to work together. My contact is in my handle.

</comment><comment><USER3> It sounds like what you're looking for is best served by an incubator. Barring that, if you're in the valley (or even elsewhere) you should get involved with some sort of shared-working space like HackerDojo. From what I've experienced, the people and environment provide a nice expectation boost (it's very difficult to push yourself alone - much easier when people know what you're up to, and have expectations on you to succeed - then you have to!).

Best of luck!

<comment><USER4> I came here to tell about haker dojo and you beat me to it. In Bay area Hacker dojo, agile entrepreneur meetups happen. Once a week (Fridays?), you give update to others in the meetup on what you accomplished, what you plan for the next week and what your stumbling blocks. I believe this is a great way to keep pushing yourself forward. Apart from that, you should consider working in a co-working space so you can meet like minded people.

</comment></comment><comment><USER5> Best and smartest motivation hack is engaging with your beta- testers/customers/end-users daily. Live interaction & feedback is huge. Your passion will re-emerge if you focus giving them something cool and worthwhile. Try to build those conversations into the top-half of your day.

</comment><comment><USER6> Where are you? If you are in Boston, email me at $firstname.lastname@example.com and I'll introduce you to a friend of mine who does this for startups.

</comment><comment><USER7> You should talk to [https://twitter.com/pfinette](https://twitter.com/pfinette) he loves to help people like you!</comment>


Calculating Batting Averages with Riak's Map/Reduce - <AUTHOR> http://blog.basho.com/2011/01/20/baseball-batting-average%2c-using-riak-map/reduce/

<comment><USER2> HEre's what I don't get. We see map/reduce posts all the time, like it's some fantastic new technology.

Reading up - it seems to me that map & reduce are standard functional programming patterns (or whatever you call them) that just happend to lend themselves very well to distributed computing.

mapping and reduction have existed in functional programming forever, no? There's no magic there.</comment>


The Linux Standard – Codename "Zoot" - <AUTHOR> https://danmehic.com/the-linux-standard-codename-zoot/ <comment><USER2> If the name is a Python reference it's a weird one. "Bad, evil Zoot!" [https://youtu.be/nMUnbNPCoSw](https://youtu.be/nMUnbNPCoSw)</comment>


EBook piracy sites to be blocked by UK net providers - <AUTHOR> http://www.bbc.co.uk/news/technology-32899041 <comment><USER2> Not that I'm actually planning on using any of them... but if I were in fact interested in pirating e-books but didn't know where to start, the BBC would have just given me a list of what I suspect are the 7 _BEST_ ebook sites in the world.

"Streisand effect" comes to mind somehow.

</comment><comment><USER3> I suppose we'll be seeing a bunch of libgen.org proxies soon?</comment>


Patterns: Great self promotion  - <AUTHOR> http://www.37signals.com/svn/posts/1546-patterns-great-self-promotion

<comment><USER2> This is something every software security services firm has embraced since the 1990s; we're lucky, because we have a series of professional conventions and research venues to demonstrate our work in.

It was one of _the most frustrating things_ , coming from a security research/startup background and going to work at a relatively large network security software company like Arbor Networks, that we had no venue to "show off" that didn't involve pitching our actual product. One of the great things about leaving Arbor and starting up with my friends was that I got my name back; instead of writing white papers and designing product demos, I got to work on and talk about stuff I was doing for love, not money.

</comment><comment><USER3> I like the idea in the end of the software, "Every designer on the planet has a portfolio of their designs, but how many have a portfolio of their minds?". Rarely you see a designer or an enterprnuer talking about what is in there mind. Portfolio of mind does not mean you have to spell out the idea verbatim, but you present a map of the path you are planning to tread. Having tried this technique of presenting what is going in my mind to potential customers, I can say when 'mind portfolio' is mixed with 'brand portfolio', you do get more customers. In my experience of running startups, customers do prefer startups that can think over startups trying to simply sell stuff.

The caveat is, you should be capable of presenting the mind portfolio without appearing to be a smart donkey. Spelling out your mind portfolio during a general chit chat with potential customer over a cup of tea, is what I do.</comment>


Ask HN: What are the most in-need charities? - <AUTHOR>

Indeed it is the season for giving.  I don't have much, but I know there are others who have less.  What charities are really taking a beating with donations this year?
Also, if there is some kind of searchable database of charities, please post it.
Happy Holidays. <comment><USER2> admin overhead ratios are controversial, not really measure of effectiveness/efficiency in providing services

[http://blogs.asaecenter.org/Acronym/2008/12/impact_versus_ov...](http://blogs.asaecenter.org/Acronym/2008/12/impact_versus_overhead_charity.html)

<http://www.charitynavigator.org/>

<http://www.forbes.com/forbes/2004/0112/036_print.html>

<http://blog.givewell.net/?p=15>

</comment><comment><USER3> You could try:

<http://www.networkforgood.org/Default.aspx>

There's a "Crisis Relief" link off the home page.

</comment><comment><USER4> I don't know how it compares with its need for us, but we certainly all need it, so I give to FFRF. <http://www.ffrf.org/>

</comment><comment><USER5> Choose your own by simple search:

<http://www.charitynavigator.org></comment>


The North Pole is 36 degrees warmer than normal - <AUTHOR> https://www.washingtonpost.com/news/energy-environment/wp/2016/11/17/the-north-pole-is-an-insane-36-degrees-warmer-than-normal-as-winter-descends/ <comment><USER2> Extremely scary.

Even junior sysadmin seeing chart[1] like this one in article would say something wrong with the 'system'.

[1] [https://img.washingtonpost.com/news/energy-environment/wp- co...](https://img.washingtonpost.com/news/energy-environment/wp- content/uploads/sites/43/2016/11/meanT_2016.png)

</comment><comment><USER3> Why not a simple revenue-neutral modest carbon tax? And for countries who do not have a similar paradigm, an import tariff equal to the equivalent embedded CO2.

It appears much of the world (other than the US) is now headed in this direction.

<comment><USER4> Here's an article on Vox about a carbon tax initiative in Washington:

[http://www.vox.com/2016/10/18/13012394/i-732-carbon-tax- wash...](http://www.vox.com/2016/10/18/13012394/i-732-carbon-tax-washington)

It's an interesting article and is worth reading in full. But my takeaway from it is "environmentalists, and particularly wonky highly scientific environmentalists, are junior members of the liberal coalition. Their role in the liberal coalition is to follow policy and add support to it. Their coalition members are not interested in narrow environmental initiatives like a revenue-neutral carbon tax."

So liberals sink modest wonky proposals like a revenue-neutral carbon tax. Conservatives sink giant omnibuses that include environmental stuff in a package with redistribution and social justice stuff. End result: no environmental legislation.

I have a blog post going into more detail on the subject here: [https://sandoratthezoo.wordpress.com/2016/10/19/scientific-e...](https://sandoratthezoo.wordpress.com/2016/10/19/scientific- environmentalists-are-junior-coalition-members/)

<comment><USER5> Thanks for the link and the blog post - the climate justice split is affecting efforts in Colorado as well.

However, my impression is that the Washington initiative from the Vox article would have performed well in Colorado, as it tends to lean more pragmatic/conservative pro-environment.

</comment></comment></comment><comment><USER6> Lest anyone claim that this is a short-term excursion, temperatures in the arctic have been well above average all season.

[http://ocean.dmi.dk/arctic/meant80n.uk.php](http://ocean.dmi.dk/arctic/meant80n.uk.php)

</comment><comment><USER7> I never thought I'd see a gnuplot graph in a mainstream news piece. Gnuplot is seriously awesome, though.

</comment><comment><USER8> Degrees _fahrenheit_... Probably don't need to start your doomsday prepping _just_ yet.

</comment><comment><USER9> [http://weather- warehouse.com/WeatherHistory/PastWeatherData_...](http://weather- warehouse.com/WeatherHistory/PastWeatherData_NorthPole_NorthPole_AK_January.html)

paste the table to excel and chart first two columns (we are still to beat warm winters of 1981 and 1985). what is insane it the wapo headline.

<comment><USER10> These temperatures are for North Pole Fairbanks Alaska. It's not "The North Pole", it's also not even in the Arctic Circle.In fact if you look at the first picture in the linked article, you'll see how the deltas they're referring to are not the case in Alaska. (And the temperature in the middle of Alaska doesn't have much bearing on Arctic sea ice).

<comment><USER9> damn google! i stand corrected:)</comment></comment></comment>


Show HN: Human-Powered Lead Callback for Realtors - <AUTHOR> https://realestate.upcall.com/ <comment><USER2> Explainer video could be more prominent

</comment><comment><USER3> Great landing page!</comment>