The Internet has all but destroyed the market for films, music and newspapers - <AUTHOR> http://www.guardian.co.uk/media/2011/aug/14/robert-levine-digital-free-ride

<comment><USER2> What's happened isn't a destruction of a market.

There's a high interest in various forms of information and entertainment. This is going nowhere.

What's been removed are the tollgates we've grown accustomed to over the past 20 - 600 years.

Market econmics are predicated on producers, consumers, goods, utility derived from those goods, _and a pricing and revenue collection model._

Market failures occur where any of these elements can't be satisfied: where production isn't possible, where consumers are disenfranchised (through poverty, discrimination, or other means), where large positive or negative externalities exist (an externality is a consequence of production or consumption whose cost or benefit isn't fully captured: pollution, traffic congestion, and free-riders are all externalities). Or where a price or revenue collection scheme can't be created.

Traditional tollgates include, well, toll gates, box offices, storefronts, circulation departments, service subscriptions, and the like.

If a good is deemed significantly important to produced by individuals, governments, or groups, it may be provided on other bases: public goods (paid through taxation), charities (paid through voluntary donations), patronage works (bought for prestige or other purposes by the wealthy but not for their exclusive consumption).

The existing "information economy" is very much a creature of technology and society since the printing press, prior to which mass production of informational works wasn't posisble. _All_ information and music was bespoke.

Absent mass production, we had: town criers, wandering minstrels and acting troupes, church and court-sponsored works of art (much of classical music and art). Most information was scarce. Libraries were (by modern standards) small and highly valued. A given person, if literate, might have access to a iven book once in a lifetime.

The printing press, phonograph, telegraphy, film, broadcast radio, broadcast television, electrically amplified instruments, telephony, cable, and the Internet not only changed the _market_ for information and entertainment works, but _changed the works themselves._

Broadsheet newspapers were a function of early printing presses. Film displaced live theater performance, as did recorded music (Sydney Australia saw a rise in "discos" vs. live-music venues along with gaming due in part to tax and cost structures). Big-band gave way to 3 and 4 piece quartets with amplification. "Singer-songwriters" and "recording artists" are two different responses to copyright laws and payment requirements (songwriters receive mechanical royalties, RAs are much cheaper for recording labels to produce and promote). Weekly "magazines" were an answer to the news, information, and distribution technologies of the time.

Broadcast media necessitated a radical revisiting of previous revenue models, which ultimately resulted in a royalty collection scheem largely based on mechanical means (there are few restrictions on public performance of a work, but a set fee must be paid), with compliance based on a mix of audits and recordkeeping (small live-performance venues work roughly similarly). The system is hardly perfect (payola has been a huge problem for over half a century), but monies get paid, if not always to the artists.

The Internet, its distribution mechanisms, cost structures, and the priority on lifting restrictions on most forms of mass media, make traditional "paywalls" problematic at best.

At the same time, there have been very strong tendencies to consolidation in the basic backbone and search spaces particularly. There is a service and revenue relationship generally at the ISP / service-provider level. A sampling/audit based mechanical system tied to this with revenues being distributed to artists and publsihers is likely the ultimate outcome, for the large case, with smaller one-off solutions attempted elsewhere (specific subscriptions). One benefit of such an Internet Royalty Audit Syndicate (IRAS) would be that the _online source_ of a work wouldn't matter so long as attribution of authorship/ownership could be reasonably established, and such an element should be a design goal of any such system.

"Pirate sites" would simply become additional legitimate distribution channels. As well they should be.

It's also highly probable that the price point of works created will shift down the cost curve. When distribution channels are few, outlets are many, and marketing/promotion costs are high, it makes sense to focus on a small number of blockbuster works. When channels are many, control is diffuse, and entry barriers are low, individual works can and will be produced at lower costs. Marketing will remain a major expense, though community/viral methods can compete with more conventional institutional/mass means.

</comment><comment><USER3> Looking at the iOS App Store & Netflix model I can't help but feel that Apple has found the way for both the consumer and content creators to be happy. Price it low and go for volume. Yes, there will always be pirates but I get the impression it is a very small minority that would continue to do so.

Content creators are going to have to get over the fear that reducing the price of your content doesn't devalue it.</comment>


Google is encrypting search globally. That's bad for the NSA and China's censors - <AUTHOR> http://www.washingtonpost.com/blogs/the-switch/wp/2014/03/12/google-is-encrypting-search-worldwide-thats-bad-for-the-nsa-and-china/?tid=pm_pop <comment><USER2> Would this protect the NSA from stealing the data before it's encrypted though? Through their Turbine project?</comment>


IFTTT for Marketers - <AUTHOR> http://www.seerinteractive.com/blog/ifttt-recipes-for-marketers/

<comment><AUTHOR> I found several of these very useful.</comment>


Rendr - Use Backbone on both the server and client - <AUTHOR> https://github.com/airbnb/rendr <comment><USER2> My brother released a very similar project about 8 months ago.[1] He never did properly announce or document it so it's no surprise that nobody else is using it.

Of course, it's not like rendr has any real documentation, either.

However it has been working very well for us, so it is validation of the rendr approach.

A quick glance at their documentation indicates a very similar design, comparing the two projects should be instructive.

1: <https://github.com/wvl/highbrow>

<comment><USER2> I looked a little bit more at the rendr source, and one thing that immediately jumps out at me is the code BaseView#getTemplateData[1] which very tightly couples the model & views together. You should totally steal highbrow's ViewModel code, which is very sweet. (But you might want to come up with a better name). Rather than passing @model.toJSON() as template data, highbrow creates a ViewModel from the model or collection or out of thin air, and passes that in as template data.

Here's a typical ViewModel definition (in JS):

        foo.vm.Resource = highbrow.ViewModel.extend({
          lastUpdated: function() {
            return moment(this.model.get('modifiedAt')).fromNow();
          }
        });
        foo.vm.Resource.attrs(['name', 'content']);

This shows the main two features of ViewModel's: a whitelist of attrs that the template can access directly, and a set of functions that would otherwise end up polluting your model with view side code.

This decoupling dramatically improves the structure of our applications, without introducing Rails style controllers which are also totally misnamed in my opinion. Rails controllers are essentially two things: routers and MV- shims. Splitting the two makes for much improved program structure.

1: [https://github.com/airbnb/rendr/blob/master/shared/base/view...](https://github.com/airbnb/rendr/blob/master/shared/base/view.coffee#L54)

2: [https://github.com/wvl/highbrow/blob/master/src/view- model.c...](https://github.com/wvl/highbrow/blob/master/src/view-model.coffee)

<comment><USER3> Cool, I like that ViewModel pattern. You could certainly use that with Rendr.

</comment></comment></comment><comment><USER4> More background and discussion about Rendr and how it fits into the stack of the nodejs app AirBnB built: [http://nerds.airbnb.com/weve-launched-our-first- nodejs-app-t...](http://nerds.airbnb.com/weve-launched-our-first-nodejs-app- to-product)

</comment><comment><USER5> I have gone through the blog post and bit of code but I am a bit stomped. Can anyone tell what is the flow here?

If I go directly to /search/q=hello, the request will go to server, it will render the HTML on server and send it to client. What happens next? Do they send all the Javascript + client-side templates alongside as well so that further requests are catered on client?

Think I should fiddle around with the sample app.

<comment><USER6> _Do they send all the Javascript + client-side templates alongside as well so that further requests are catered on client?_

Yes.

</comment></comment><comment><USER7> We used a similar approach with Bones (<https://github.com/developmentseed/bones>) for a while and ended up dropping it for a more decoupled architecture (API on side and static client on the other).

I remember chatting with Spike about this at a Backbone.js meetup at Airbnb's office last year, I think they were aware of the limitations similar frameworks were running into.

I'd be interested in seeing how this play outside of Airbnb's use case, but from experience I think sharing backbone.js on both client and server, while neat, end up being pretty constraining.

</comment><comment><USER8> This looks fantastic. Anyone know how well something like this deprecates? My dream is to have a mobile site that is all Backbone-y on iPhone/Android but falls back to server-based rendering when loaded through a Blackberry or similar.

<comment><USER9> The goal is to render everything server-side; you'll need to handle POSTs and whatnots separately (since rendr is effectively middleware, so you can do what you like and redirect back to a GET route to display data.) In theory, it deprecates perfectly.

</comment></comment><comment><USER10> We @sc5io decided to release our own research regarding this very same issue.

I love the Rendr approach, yet we feel that our backbone-serverside framework provides an even more flexible way to tackle the same issue.

Read more at SC5 blog ([http://blog.sc5.fi/2013/04/serving-backbone-for- robots-legac...](http://blog.sc5.fi/2013/04/serving-backbone-for-robots- legacy-browsers/)) or at the Mozilla Hacks article: [https://hacks.mozilla.org/2013/04/serving-backbone-for- robot...](https://hacks.mozilla.org/2013/04/serving-backbone-for-robots- legacy-browsers/)

</comment><comment><USER11> I'm using <http://phantomjs.org/> to render my EmberJS app's pages and serve those to crawlers. I hope to write a blog post about it soon. It has the benefit of working with any software stack, not just Node.js.

Rendr looks like a much more robust solution, however. I'll have to see if I can incorporate some of it's techniques, specifically serving HTML on page load.

<comment><USER12> Cool I'd be interested in reading about that.

</comment></comment><comment><USER13> This is pretty cool. I've been playing around with a variety of JS frameworks recently and code sharing is probably my 2nd favorite thing about meteor. Anybody know if these guys are hiring? My school's big interview day is on Thursday and airbnb's front-end stack looks appealing.

<comment><USER3> We are absolutely hiring! airbnb.com/jobs

</comment></comment><comment><USER14> I remember reading their blog post about their "Holy Grail" framework, but I couldn't really understand what made it so cool. Can someone explain to a noob like me why someone would consider Rendr the Holy Grail of frameworks?

<comment><USER15> MVC is being used for web development. The M part, model, handles the rules for inputs. This would trigger validation errors. In a typical stack, we code the server-side model in, say, Ruby on Rails, and duplicate the same model in client-side model in JavaScript so it can detect things like minimum password lengths without sending data back to the server. The holy grail is to have both server-side and client-side in JavaScript and also sharing the models as well, with that we reduce amount of things we have to code.

<comment><USER2> This approach doesn't help. With highbrow and presumably rendr, you still have 'client side' & 'server side' components to your project. The 'server side' is typically just a JSON REST API. In our case, it uses mongoose to talk to mongodb. The 'client side' talks to the API and renders HTML; on first load it actually runs on the server. The client side uses Backbone.js models.

So you still need both backbone & mongoose/whatever validations if you want them both on the client & server side. In practice, the system is fast enough that server side validations may be sufficient.

</comment></comment></comment><comment><USER16> Wow, their samples sure look like Batman.js. Also, I'm a fan of them for going with CoffeeScript, they have taste.

But seriously, looks very much like Shopify's batman.js <http://batmanjs.org>

<comment><USER2> They're both written in coffeescript, and they're both written about the same time so have very similar influences.

I think most of the similarities you see stem from those two points.

But there are some massive differences:

\- batman.js is Rails-style MVC, rendr is based on Backbone so you must supply your own controllers. A good argument can be made that Rails is not truely MVC, but it at least attempts to do so. rendr is MV.

\- RENDR runs and renders on the server. batman.js relies on a Rails or REST app on the server.

\- rendr is based on Backbone.js and Express, batman.js isn't

<comment><USER16> I wasn't pointing out on those portions, I was merely just reflecting over the API design :) keywords and etc

</comment></comment></comment><comment><USER17> This is really fantastic - thanks to Spike and the rest of the Airbnb guys for releasing it to the world.

My interpretation of the key benefits: large speed increases for users, and vastly improved SEO.

</comment><comment><USER18> I've been waiting for YUI team to fit the YUI App Framework(the equivalent of BackBone) into Mojito. But seems like you've beaten them to it. :)

Great job!

</comment><comment><USER19> The Holy Grail!

</comment><comment><USER20> I don't like the idea of rendering client code in the server.

<comment><USER18> Don't think of it as client or server code. Think of it as presentation code. And it happens to run on both the server and browser.

Though, don't write your business code in javascript. Hell to maintain.

</comment></comment><comment><USER21> > Library, not a framework

> Talk to RESTful API

> Simple Express middleware

Hard times for Meteor</comment>


Lua: A Guide for Redis Users - <AUTHOR> https://www.redisgreen.net/blog/intro-to-lua-for-redis-programmers/ <comment><USER2> This is a really good article, I referred to it a lot when working with Lua and Redis. Like a lot of people, I really admire antirez. The pragmatism he displayed choosing Lua was exceptional imo:

>> I think that for what we need Lua beats everybody else hands down. The language is not one that I particularly like, compared to Ruby for instance, but who cares? We are programmers and can code a short script in any language we want, but the point is, Lua is a wonderful implementation. Easy to embed, without even a configure script, like Redis! And FAST.[1]

[1] [http://oldblog.antirez.com/post/redis-and- scripting.html](http://oldblog.antirez.com/post/redis-and-scripting.html)

<comment><USER3> Honestly, it's a great article. That said, there's nothing wrong with nils in tables in Lua if you know what you're doing. Yes, they can introduce weird behaviors, (particularly with the # operator) but if you understand how next, pairs, ipairs, and # work, which are required if you want predictable table iteration behavior in Lua, then this shouldn't be an issue.

I think it's dangerous to say that nils terminate tables if you're not going to explain table iteration in Lua.

Edit: Here's a picture example showing how easily nils can cause confusion if you're using a #table based loop. [https://i.imgur.com/qW0XoSs.png](https://i.imgur.com/qW0XoSs.png)

for i,v in pairs(table) will go through an entire table.

for i,v in ipairs(table) will stop at a nil. It's meant for consistent behavior in tables with numerical indices.

<comment><USER4> The easiest way to have a value which "acts like null" but doesn't mess with table indexing is to use `false`, which is the only Lua value other than nil which is falsey (0 and "" are truthy).

<comment><USER5> Yeah, I wish Lua hadn't taken undefined and nil to be the same thing given the way tables work in it. Most of the time it doesn't matter, thankfully. Sometimes you bump into it.

A sigil value can work too if you absolutely need it. ex:

      undef = {}

      function isundef(val)
        return undef == val
      end

The sigil value is truthy and makes your code more convoluted, though. ex:

      if not val or isundef(val) then -- ...

So, :/. I do love the language though.

<comment><USER6> If you want, you can add t.exists[key]=true, and check it if you really want to know if key exists despite it's value is nil.

        function exists(t, k)
            return t[k] ~= nil or t.exists[k]
        end

        t = { 1, 2, nil, 4, exists={ [3]=true } }
        i = math.random(4)
        if exists(t, i) then
            ...

That's pretty close to Perl's semantics, where undef is inoperable under 'use strict' but arrays/hashes can have them explicit. Also can move exists out of t easily with weak table.

        local exists_t = setmetatable({ }, { __mode='k' })

        function set_exists(t, k)
            exists_t[t] = exists_t[t] or { }
            exists_t[t][k] = true
        end

        function exists(t, k)
            return t[k] ~= nil or exists_t[t][k]
        end

That said, I really like math-like attitude of definitions in Lua. No bs like 'bloated for your convenience', you just use your logic skills to program.

</comment></comment></comment></comment></comment><comment><USER7> This is the best line from the article:

> The best scripts simply extend the existing Redis vocabulary of small atomic > data operations with the smallest bit of logic necessary.

Having used quite a bit of Lua (in Redis) I whole heartedly agree.

<comment><USER8> I use redis + lua quite a bit in my home-grown analytics real time tool. My biggest fear is when do I know I am overusing lua ? Is there a quantitative measure for "smallest bit" of logic ? I fear I have been given a very long rope with Lua + Redis and I may be unknowingly about to hang myself.

<comment><USER9> I don't understand what your concern is.

Lua is a relatively modern script language. It has all the tools you need to create modular programs in whatever style you like. Imperative is easy, OO style nearly so (there are plenty of OO implementations to choose from), and there is even some support for functional programming.

The PUC-Rio (main) implementation has a fast bytecode interpreter, and LuaJIT is wicked fast compared to just about anything else.

People don't tend to write really huge applications in Lua, but that is more due to the lack of libraries rather than anything else.

<comment><USER10> > People don't tend to write really huge applications in Lua, but that is more > due to the lack of libraries rather than anything else.

We used it to write almost all the game-logic on a few titles. Ran great on all sorts of platforms(this was before LuaJIT). Coroutines are awesome for AI, lets you bundle in all sorts of implicit state easily and concisely.

</comment></comment></comment></comment><comment><USER11> I really like the way this article introduces the concepts of integrating Lua into a storage system like Redis.

Shameless plug: the integration of Lua into Redis served as inspiration for our recent integration of Lua into Ceph/RADOS [1] for building custom object interfaces. I'll taking a cue from this article when we update our out-of-date documentation on the feature [2].

[1]: [https://github.com/ceph/ceph/pull/7338](https://github.com/ceph/ceph/pull/7338)

[2]: [http://noahdesu.github.io/2014/01/22/dynamic-rados-object- in...](http://noahdesu.github.io/2014/01/22/dynamic-rados-object- interfaces.html)

</comment><comment><USER12> Are redis scripts still recommended now that redis modules are a thing? One of the pain points of scripting is the lack of test coverage.

<comment><USER13> If I was just trying to group 3 operations together into a "transaction", a script would seem like the way to go. But yeah, as soon as my "script" got at all long/complicated, I'd take a long look at making it into a module.

<comment><USER14> Or you could use a Redis transaction for a transaction. :-)

[http://redis.io/topics/transactions](http://redis.io/topics/transactions)

</comment></comment></comment><comment><USER15> I keep a bunch of small scripts for common tasks like deleting or aggregating keys maching certain criteria.

I wish redis offered a mechanism to save and call these scripts from the server, akin to the usual database functions and stored procedures.

I wonder if this was a conscious decision or something that's in the pipeline eventually.

<comment><USER16> What about this?

[http://redis.io/commands/script-load](http://redis.io/commands/script-load) [http://redis.io/commands/evalsha](http://redis.io/commands/evalsha)

EDIT:

I realize this was mentioned in the article, just wondering why it doesn't fit your needs.

<comment><USER17> I believe the ask is to have any scripts loaded to persist through restarts of Redis. As is, you have to reload them on each init of Redis. As such, the onus is on applications to catch evalsha errors and load the missing scripts, in the case of Redis being restarted.

<comment><USER18> We built the same mechanism using HashMap and `SCRIPT LOAD` on restart/deployment to make a mapping table between function name and its SHA. Any client want to call the function just need to fetch the table and using the according SHA via `EVALSHA` command.

</comment></comment></comment></comment><comment><USER19> Is there a way to automatically load a script or a directory of scripts when the redis-server starts?

<comment><USER20> I don't think that's the recommended way of doing things. Redis will cache compiled Lua scripts internally so after the first EVAL you can call EVALSHA and pass the scripts hash. But you're client code should always be ready for the case that maybe the script is not there any more. In which case you call eval again. Automated tools that upload all the scripts would have no way to say "compile and cache this but don't run it" so you'd need your scripts to handle not doing anything. The usual pattern, then, is to simply send EVALSHA always and if it fails then call EVAL. With small numbers of scripts and larges numbers of operations this will be more efficient and doesn't require any co-ordination with the Redis server when scripts change or servers restart.

<comment><USER16> [http://redis.io/commands/script-load](http://redis.io/commands/script-load)

While I agree that the caller should be ready for a script not existing, one could build an automated tool to load scripts when starting redis using the SCRIPT LOAD command.

<comment><USER20> Ah I missed that capability thanks for the correction

</comment></comment></comment></comment><comment><USER21> Tangeant: it's so obnoxious that every code snippet from Github has to have such a signature. All I could read was "hosted with <3 by GitHub"

<comment><USER22> That's probably because it's not what gist is made for. Embedding a gist instead of adding a fenced block in your markdown or whatever blog engine you're using is kinda silly for a couple of lines of code.

[https://gist.github.com/bpo/044fed4c53fc61a1a0a0](https://gist.github.com/bpo/044fed4c53fc61a1a0a0)</comment></comment>


How to Record Everything You Do in Terminal - <AUTHOR> https://www.ostechnix.com/record-everything-terminal/ <comment><USER2> For more utility, enable (and save) timings using the '-t' or '\--timings <file>' option.

You can then replay the session, in realtime, or with some multiplier (slower or faster), using scriptreplay(1). An advantage is that full-screen utilities will be fully captured.

I've used this technique, and serial connections (zmodem, minicom, serial- over-ethernet, many ILOM/IPMI/BMC systems) to record full system installs, starting at BIOS prompts and configuration utilities.

Replaying the session through the phosphor(6x) screensaver can be entertaining.

[http://man7.org/linux/man- pages/man1/script.1.html](http://man7.org/linux/man-pages/man1/script.1.html)

[http://man7.org/linux/man- pages/man1/scriptreplay.1.html](http://man7.org/linux/man- pages/man1/scriptreplay.1.html)

[http://manpages.ubuntu.com/manpages/trusty/man6/phosphor.6x....](http://manpages.ubuntu.com/manpages/trusty/man6/phosphor.6x.html)

</comment><comment><USER3> On macOS and BSD at least (I haven't checked GNU), you can make a replayable script.

Record with

        script -r [filename]

and then play back with

        script -p [filename]

which creates a pretty cool effect.

<comment><USER2> Add timings.

See also scriptreplay(1):

[http://man7.org/linux/man- pages/man1/scriptreplay.1.html](http://man7.org/linux/man- pages/man1/scriptreplay.1.html)

</comment></comment><comment><USER4> With iTerm there is also an alternative approach.

You can enable 'Automatically log session input to files' in Preferences -> Profiles -> Session</comment>


Creating View Controllers for Deep Linked iOS Apps - <AUTHOR> http://benroesch.com/2013/05/14/creating-view-controllers-for-deep-linked-ios-apps/

<comment><USER2> Or you could use a component like my ABRouter (<https://github.com/aaronbrethorst/ABRouter>) or Joel Levin's JLRoutes (<https://github.com/joeldev/JLRoutes>) to connect your view controllers via API paths, and then just use one of those for deep linking.

To elaborate on this a bit, I originally wrote ABRouter for an iOS app I was building that talked to a RESTful web service. The app would register the relevant URL patterns, and the web service would hand back paths for each downloaded or navigable resource. When the user taps on a UI element that will show a new screen, the app tells the router to load the corresponding path. The router builds a new view controller that corresponds to that path, and the VC then gets pushed onto the navigation stack.

What's great about this is that deep linking and loading UI from push notifications becomes a trivial task, and your UI flows are no longer hard coded.</comment>


The Afghanistan Papers - <AUTHOR> https://www.washingtonpost.com/graphics/2019/investigations/afghanistan-papers/afghanistan-war-confidential-documents/ <comment><USER2> It seems like hubris is an inescapable trait that most countries/empires exhibit before their collapse.

A trillion dollars is not an insignificant amount of money. The wealth squandered and potential unrealized will be a sad epilogue in the books ultimately written about the American Empire.</comment>


Building Nuclide, a unified developer experience - <AUTHOR> https://code.facebook.com/posts/397706937084869/

<comment><USER2> Why are so many companies hacking on atom recently? First it was MS, and now FB? Anything special about Atom that you don't get in something like Vim or Emacs? They're both open source, and very hackable.

<comment><USER3> Yes, a native-feeling GUI. Emacs GUI for OSX is ugly and unpolished. Atom's real competition is Sublime, but unlike Sublime it's open source.

<comment><USER4> I agree; with vim as well, gVim isn't much help to those who still want to use a mouse / don't know the keybindings. Atom is really the most versatile open- source GUI text editor right now IMO.

<comment><USER5> Well, I think the OP's point is that it would be easier to bring Emacs/VIM up to acceptable GUI editor standards rather than build the whole thing from scratch, as a webapp no less.

But they didn't, my guess is because NIH.

<comment><USER6> > _is that it would be easier to bring Emacs /VIM up to acceptable GUI editor > standards_

Perhaps but nobody has done it yet.

<comment><USER7> And it's not for lack of trying. The last major attempt was Sun Studio on the 90's/early 00's.

Emacs and Vim are like Lisp at this point: unicorns. Perfect, mythical creatures everybody loves to talk about. Meanwhile oxen like Eclipse, Visual Studio, Sublime, etc. keep chugging 90% of the world's code :)

</comment></comment></comment></comment></comment></comment><comment><USER8> Heh, they had "pico" in their list of editors. If one is really hellbent on using _that_ for Hack/Obj-C in 2015, I'm not sure whether any argument is convincing enough ;)

Generally I wasn't really that impressed by the demo. Sure, the integration is nice, but I don't see how that's different from most other IDEs. But what struck me as a bit odd was the presenter stating a preference for vim, and then starting to edit Objective-C like all you've got is your cursor keys plus tab.

So, yes, another IDE, yay. And if you work at FB, sure, mindshare alone is probably worth it. But why would one give up normal mode/macros/elisp/abbrevs etc. for that?

Now don't get me wrong, I totally understand different preferences, and if your current editor is e.g. TextMate/Sublime or an IDE like PhpStorm/Eclipse/Xcode, I can see it. But if you start with the premise that vim is the One True Editor, why would _this_ be the switch reason, whereas IDEs before didn't get you there?

No problem with another flower in the garden of editing, I just thought the sales pitch was a bit weird.

<comment><USER9> I guess that was intended as a vi-emacs joke/pun ...

<comment><USER10> Indeed. I guess I shouldn't quit my day job!

</comment></comment></comment><comment><USER11> Seeing as how this is facebook's hacked up editor I'd love to see some more social features to share with other developers. Get advice, show something cool, share a branch, etc. with teammates or even the world.

I'm sure it is nice to have an editor that understands javascript better and it is nice to see that yes they have syntax checking and auto suggestion. Experience tells me the devil is in the details of the architecture for how much their integration will survive tool churn vs composition model of different tools.

What I'd really like to see in my next editor that seems hard to find is:

\- Ability to easily share code and screen with other developers. I know the lone gun is typical in software development but it would be great to work with other people seamlessly as well.

\- Working with files/shell on a remote server. All to often these days I find myself with large data set that is hard to move so I end up using console tools to debug the problem on the box.

<comment><USER12> I haven't used it, but [https://floobits.com](https://floobits.com) might scratch some of that itch?

</comment></comment><comment><USER13> Did someone say Gavin Belson and Nucleus?

<comment><USER14> Was the first thing that came to my mind when I saw the title :)

<comment><USER15> Yep, that's the first thing that came to mind for me too - not sure why they chose to keep it.

</comment></comment></comment><comment><USER16> Remote development sounds very interesting. If the IDE supports this directly, the user experience could be much better than the one you get when running an IDE over a remote desktop connection.

</comment><comment><USER17> "Last but not least, this initial release includes our universal search tool package. In a large, multi-language codebase like ours, finding files and symbols quickly and efficiently is important for our engineers. Here's a glimpse: SEARCHES INDEX.PHP"

sorry thought that was funny

</comment><comment><USER18> You say "unified developer experience", I read "everybody will be forced to use the same tools". Not cool.

</comment><comment><USER19> Strange/random observation: it is surprising that Chrome-style tabs seem to be the default tab representation given the pushback over the past few years over skeuomorphism in digital design.

This editor looks cool though. I haven't really looked at Atom, so I assume that it has good PHP/Python/Ruby support. I will try this out when it is released, I love the autocomplete

<comment><USER20> I would go further—I'm confused by the proliferation of "tabs" as a UX metaphor. Do people really think they're the best thing they can get, compared to, say, ZUI zoomable groups?

They're great for browsers because the affordance fits: you have one active "browsing session", and then a bunch of inactive ones, and the inactive ones don't matter, and when you switch, you're asserting that the active one now doesn't matter.

But for _productivity_ applications, tabs are just kind of silly.

In the OSX Finder, for example, if I have two windows open, I'm likely rearranging files between two-or-more folders—I need to see the state of both the source and the destination. You can drag-and-drop a file onto a tab, but you lose the visual cue as to where it's gone—it might have just ended up out of scroll-range in the current folder, or in some other random folder. To do the task quickly, I need to see both places: something done much better† by the window metaphor.

† (Though not perfectly: having to rearrange the windows to get the drag- sources and drop-targets all visible is a big hassle. Mac OS almost had something going for a while with MDI applications having their own virtual desktops, but they never far enough with it; if you could tell a given MDI application to auto-arrange/snap its document windows, people might actually start to want MDI interfaces again, rather than uberwindow "I know what's good for you" interfaces like FTP programs or Xcode.)

Then again, I'm also astounded that "tabs" aren't just a window manager feature (i.e. being able to group arbitrary windows into a single tabbed window, and noting when windows in a tab group spawn a new window and spawning it inside the tab group instead.) That would have cost too much GPU power decades ago, but it's costless with compositing window managers.

<comment><USER21> > Then again, I'm also astounded that "tabs" aren't just a window manager > feature (i.e. being able to group arbitrary windows into a single tabbed > window, and noting when windows in a tab group spawn a new window and > spawning it inside the tab group instead.) That would have cost too much GPU > power decades ago, but it's costless with compositing window managers.

I'm trying to achieve this using i3 as window manager and a minimal browser like vimb which has no tabbing built-in. That way you can search for a browser page just like you would any other window.

<comment><USER22> Kwin has this built-in, for the record.

</comment></comment></comment></comment><comment><USER23> Very promising. I wish there was more roadmap information. I cannot wait for the React and React Native parts to be released!

<comment><USER24> I'm a bit disappointed because of neither React or React Native were part of this release.

<comment><USER23> I think it is more communication and management of expectations than anything else. They opened the pre-release FB group, and not much was posted for weeks. This first release gives no clue as to when the React part will be available (other than "soon"). I cannot complain, or be disappointed, because they are sharing a great product for free. A roadmap with some estimated dates would really help keep the anxiety down :-)

</comment></comment></comment><comment><USER25> I'm an alpha tester for Nuclide, and it's quite nice. There are a tonne of bugs that are getting ironed out, but it's brilliant to have an editor that is built for the stack I use: Hack, React and Flow. I use Atom as my daily editor along with Komodo, and I'm looking forward to Nuclide replacing both!

</comment><comment><USER26> Previous discussion (273 points, 93 comments): [https://news.ycombinator.com/item?id=9273976](https://news.ycombinator.com/item?id=9273976)

</comment><comment><USER27> ES7 expertise? I thought ES6 was just finalized a few days ago.

<comment><USER28> ES7 was developed concurrently with ES6. ES6 is also officially known as ES2015 now with ES7 being referred to as ES2016. Apparently the goal is to ship functionality to the language on an annual basis.

<comment><USER29> Where do one keep up to date with the ES news? W3C mailing lists?

<comment><USER30> JavaScript Weekly is pretty good for that. [http://javascriptweekly.com/](http://javascriptweekly.com/)

</comment></comment></comment></comment><comment><USER15> The features they include are nice, but it would be really helpful to have dependency support for languages Scala and Java like IntelliJ does.

<comment><USER25> The neat part of being built on Atom, is that that is totally possible. There are already packages for handling the base language support for Java and Scala, linters for both of them, and through atom-ctags you can gain proper autocomplete.

</comment></comment><comment><USER31> Seems that Hack now has a first class IDE available, that the authors themselves can help contribute to, awesome.</comment>


Could a country become a computer like or a hybrid of some sort? - <AUTHOR>

What can be read below is not about politics. It is about the notion that many issues that seem politically motivated can (partly) be explained by quite simple visual figures (think about merging and small sized graphs as examples). If you are such a type, who is into the visual thinking, you might see a pattern arising from the following notions related to Finland. I'm not saying that I've enough notions listed here for forming some kind of claims like "Finland as a country is becoming a gigantic computer – or a single component to be resided inside a larger entity -- which is driven by people, whose goals are uniform enough" and it would also be quite easy to not take in consideration something that didn't get imagined while visualizing (compare this to infographics that is "too powerful"). It might be easier to understand the motivations behind the following, if you are an entrepreuner of some sort:<p>* Government considered abolition of all ministries in 2011. Plan is still on agenda in 2013.<p>* Possibility of merging the Finnish Competition and Consumer Authorities was assessed in 2012. New, merged "Finnish Competition and Consumer Authority" started in 2013.<p>* Google invested another $180 million to expand datacenter in Finland in 2012.<p>* Last week it was questioned (by a one person, who got quite a lot of media time), if Finland even needs a president. Another public figure, who seems to have enough experience in both, politics and business related matters, commented that Finland could make it on its own without a president starting from somewhere after 2024. He wasn't very exact about what he actually ment, but he propably had some kind of idea in his mind, when he wrote that. He might have meant that there are enough people in Finland, whose desires are uniform enough to drive the country together.<p>* Smaller universities are been merged, because..<p>(wordcount limit exceeded, continues in the comment..) <comment><AUTHOR> (continues..)

* Smaller universities are been merged, because of "quality and competitiveness". "Small universities are just not powerful enough", it has been said.

* Finland tends to like to streamline usage of multiple information systems by either making them more interoperable or by designing a new national enterprise architecture afresh. For example, we (almost) have this "The National Archive of Health Information (KanTa)", which "is the name of the national data system services for healthcare services, pharmacies and citizens. The services include the electronic prescription, Pharmaceutical Database, My Health Information, and Patient Records Archive." It will replace the need for separate, smaller information systems, to be able to communicate with each other as all the data in different systems can be seen (by permission) through this central system. Same will later apply to museum and library -related data (applies to other countries too as they are dropping the usage of older national standards and are moving to use international standards).

Now.. I'd like to peak to the future just to see, what happens after it, when all the big reorganizings have been done. And no, I don't belong to any political party or support "officially" any of them. I'm just a person, who tend to design and implement (smallish) ICT-based solutions of his own.

</comment><comment><USER2> Not sure the direction you are going here but i wanted to point something out, A computer has a processor, its the decision engine its divided init.

Maybe hybrid but from computer stand point someone has to make a decision, others give expertise and ideas but there is always a head whether formal or informal.</comment>


Ashton Kutcher invests in, will advise travel booking start-up Airbnb - <AUTHOR> http://latimesblogs.latimes.com/technology/2011/05/ashton-kutcher-invests-in-and-becomes-an-advisor-to-sf-startup-airbnb.html

<comment><AUTHOR> There is also the official airbnb article and HN post here: <http://news.ycombinator.com/item?id=2586652></comment>


What the US gets wrong about China's public trust system a.k.a. "social credit" - <AUTHOR> https://www.pri.org/stories/2019-07-29/what-western-media-got-wrong-about-china-s-social-credit-system <comment><AUTHOR> The propaganda machine is in full effect, not in Russia but in the US. For any possible scenario Americans might come up with for China or anyone else for dystopian surveillance systems, they should look no further than America itself. Chinese government involvement with Huawei -> 3 letter agency desks at Facebook and Google (let's not forget their funding as well). Uighur's prisons in the west -> immigration camps and mistreatment in the US. Meddling of elections by Russia -> assassinations and policy warfare by the US.

It's time for the US to respect the principles in which it was founded on. Respect the sovereignty of others and "live and let live."</comment>


What is the interest to sign commit -S -m in git? - <AUTHOR> Hello Hackers! I have recently view that we can use -S to sign with our keys on git (maybe not all but works on github) and would like to know what is the interest of doing that, anyone can explain please? <comment><USER2> If a commit is signed, one can verify that the author is indeed who s/he claims to be. See [https://git-scm.com/book/it/v2/Git-Tools-Signing-Your- Work](https://git-scm.com/book/it/v2/Git-Tools-Signing-Your-Work).

Some excerpt:

 _Git is cryptographically secure, but it's not foolproof. If you're taking work from others on the internet and want to verify that commits are actually from a trusted source, Git has a few ways to sign and verify work using GPG._

 _In Git 1.8.3 and later, "git merge" and "git pull" can be told to inspect and reject when merging a commit that does not carry a trusted GPG signature with the --verify-signatures command._</comment>


My little cousin's dirty little secret - <AUTHOR> https://medium.com/p/500e8d2319ec

<comment><USER2> "Its author presented anecdotal evidence without any actual numbers and then concluded that doing CrossFit is not worth the risk."

...

"My problem is that such articles needlessly scare off people who can otherwise become stronger, faster and healthier with exercise."

That's why it's called "survival of the fittest".

Someone scared off by anecdotal evidence from reading a single article (or even several) will no doubt not fare as well health or otherwise in life than someone who gives things a bit of thought before agreeing or going along.</comment>


Time for Netflix CEO Reed Hastings to Step Down? - <AUTHOR> http://mashable.com/2011/10/10/netflix-ceo-reed-hastings-time-to-step-down/ <comment><USER2> This article completely misses the point. Hastings & Co. made a mistake. Yes. But they are learning and dealing with it way better than I would have imagined. At least they acknowledge a mistake and the CEO isn't egotistical enough to take the company down a wrong path (i.e. continue with split Netflix and Quikster) even if he believes it to be incorrect. Personally, I just gained new respect for Reed Hastings. Also, are we forgetting that this is also the man who was visionary enough to bring us legitimate Video on Demand when everyone thought online digital content either didn't matter or was restricted to pirated copies floating on the internet.

I personally see the Netflix case similar to the way Southwest Airlines hedged fuel prices to gain an advantage compared to other firms. When that advantage ended, it had to figure out a way to compete with the rest of the world, often times increasing prices or reducing service quality.

</comment><comment><USER3> funny thing about this. I actually give props to netflix. It is a big and established company looking to change something. They are willing to take a risk (ok it didnt work out) rather than becoming the next ms -- stagnant.

<comment><USER4> Totally agree, they're failing fast and are adapting.</comment></comment>


Ask HN: what's a good resource or book to learn domain management - <AUTHOR>

i have asked this question on a few related forums lately and have either been flamed out of it or given no response.
for me at least, there seems a fair bit to know to do it right. it might be that it's one of those topics that you learn organically and take for granted, but i registered a few domains recently and having worked in the design end of things i am in the process of getting the sites up. it has be stumped.
i would like to have an in depth knowledge of all the dns settings, how they function, security issues, how to apply sub-domains properly etc. maybe there is not much to know, but from the list of options at my registrar there seems to be enough to warrant a large drop-down menu (10 items). i don't know what i need to know.
anyone any pointers in exchange for muchas gracias? <comment><USER2> Out of curiosity, who is your registrar?

I would recommend checking out Slicehost's articles and ebook on DNS topics: <http://articles.slicehost.com/tags/dns>

They have helped me quite a bit. From my experience, I would say the following are the most useful concepts to grasp:

* Knowing the difference between an A record and a CNAME record

* Understanding MX records (especially with the prevalence of Google Apps for email)

* Understanding SPF records (helps if you have a web app or form that sends mail)

<comment><AUTHOR> that's a big help callmeed, just the sort of thing i was looking for. thank- you very much. not being sure what search terms i should use, i was coming up with a lot results for "domaining" frustratingly. the registrar i am using is joker.com.

<comment><USER2> No problem. Don't forget, some DNS records are managed with your host, not your registrar.

For example, most of my domains are registered through Hostway or GoDaddy, but I do most DNS management through Slicehost or Rackspace.

</comment></comment></comment><comment><USER3> O'Reilly's DNS and Bind is the book for you. O'Reilly has several books on Apache as well, for information about web server security.

<comment><AUTHOR> thank's i'll check that one out too!</comment></comment>


Show HN: Remove unused css with Purgecss - <AUTHOR> https://github.com/FullHuman/purgecss <comment><USER2> I'll take a look at it, I'm quite obsessed with the perf and I've been giving talks about uncss some time ago.

How is this tool/lib different from the other similar tools?

<comment><AUTHOR> Uncss works the following way: The HTML files are loaded by jsdom and JavaScript is executed. All the stylesheets are parsed by PostCSS. document.querySelector filters out selectors that are not found in the HTML files. The remaining rules are converted back to CSS

Purgecss will not emulate the dom and execute javascript. Instead, it will read your files, determined the selectors in it and then remove the ones that are not used. A much simpler process that will translate in better performance.</comment></comment>


David Braben, co-creator of Elite (which is 25 this month) on the games business - <AUTHOR> http://www.gamesindustry.biz/articles/braben-it-would-be-mad-for-us-not-to-work-on-elite-4

<comment><USER2> Elite was the only game that ever managed to capture me. Everything else I could put down easily, but Elite was different.

At some point I had played it so much that I looked at a white wall with some kind of structure paint on it and I swear I saw a viper dodge away. That's when I realized I had been playing Elite a little much and I stopped.

Another nice little detail about Elite was the way the game state file was encrypted. We tried to break through that, but when after the sixth layer or so we came upon this message that read 'does your mother know you're doing this' we realized that we were probably already on a false trail, and we gave up.

The 'split mode' screen on the BBC was very impressive, basically in 'flight' mode what they did is reprogram the vdu on the fly to switch to a different mode about 80% down on the screen. That way the 3d display was all black & white and high resolution, the dashboard was in colour.

Elite is what put me on the track of becoming a games programmer for a while, though - in spite of much more powerful machines - we never managed to put anything out that could put a dent in it in terms of playability or fun.

Anybody interested in buying some small furry creatures ? I seem to still have a surplus of them, it started out as one...

<comment><USER3> there is a recent, open source recreation of Elite here: <http://www.oolite.org>

It is a reasonable compromise between modernity and nostalgia, made me lose some time again :-)

</comment></comment><comment><USER4> Article today about Elite on BBC news website: <http://news.bbc.co.uk/1/hi/technology/8261272.stm>

</comment><comment><USER5> Rollercoaster Tycoon brings back great memories. I've always loved games where you were given a blank slate and had to create something from scratch, as opposed to first person shooters where all you do is shoot the guy wearing a different colored vest.

</comment><comment><USER6> Elite with multiple online players (MMORPG?) would rule!

<comment><AUTHOR> If you are not yet familiar with EvE Online - <http://www.eveonline.com/> \- I now disclaim all responsibility for your imminent loss of productivity.

Quite aside of the game itself (which I finally managed to wean myself off), it's a very interesting project for everything from the server-side code being implemented in Stackless Python to the fact that they employ an economist.

<comment><USER7> Are you saying eve online lets you do stuff like buying guns on planet X for 80 and selling them on planet Y for 200? B/c if so, I am going to have to get it.

<comment><AUTHOR> If anything, Eve gives you too many options and strategies, to the point where becoming a seriously skilled player means a major investment in time. So yes, but it's _exponentially_ more complex than Elite, to the point that you should be able to use a high net worth in EVE to wangle a real job in commodities trading.

<comment><USER7> WOW! Ok - i know that is not a very thoughtful comment, but I am excited.

edit - my comment, not yours. Yours was thoughtful. In case that wasn't clear</comment></comment></comment></comment></comment>


Top climate scientists admit global warming forecasts were wrong - <AUTHOR> http://www.telegraph.co.uk/earth/environment/climatechange/10310712/Top-climate-scientists-admit-global-warming-forecasts-were-wrong.html <comment><AUTHOR> "The "summary for policymakers" of the report, seen by the Mail on Sunday, states that the world is warming at a rate of 0.12C per decade since 1951, compared to a prediction of 0.13C per decade in their last assessment published in 2007."

Not sure what the difference means.

</comment><comment><USER2> The content doesn't say what the headline does. No surprise -- the Telegraph is really bad on climate issues. Check out [http://realclimate.org/](http://realclimate.org/) if you want to get a real view of what's happening.

</comment><comment><USER3> The forecasts weren't wrong, the scientists just increased accuracy since 2007. All basic premises still hold, the problems the humanity faces remain.</comment>


Root: CERN's scientific data analysis framework for C++ - <AUTHOR> https://root.cern.ch/ <comment><USER2> ROOT is my go-to example for peak Object Oriented in the 90s. Look at the inheritance for something like a 2D histogram of doubles[1].

Trying to find the documentation for how to draw an arrow on a plot was always fun, because searching for "TArrow ROOT" would inevitably get results for "taro root".

The XRootD[2] project is pretty interesting, though, and I feel like the software industry is going to have to start dealing with similar data problems before too long.

[1] [https://root.cern.ch/doc/master/classTH2D.html](https://root.cern.ch/doc/master/classTH2D.html) [2] [http://www.xrootd.org/](http://www.xrootd.org/)

<comment><USER3> Object oriented is part of the name! If I remember correctly it's some combination of the original developers' names/initials with OO sandwiched between.

</comment></comment><comment><USER4> Ooh, boy, rant time. I used ROOT all through my PhD, and it is a royal mess.

As a starter, there is a mass of global state. It maintains a "gDirectory", which is the currently active directory, either referring to a location on disk or in memory. Many objects in ROOT will register themselves with the current gDirectory on creation, and will be destructed when the gDirectory closes. This includes objects that were declared on the stack, leading to destructors being called twice.

Since large data requires good performance, you might be wondering how this interacts with multithreading. Not well at all. There are many ROOT internals that assume a single-threaded environment. If you call TThread::Init(), most of those are avoided. However, ROOT has some memory tracking code that gets called on the constructor/destructor of all ROOT objects, and that memory tracking code is entirely thread unsafe. In any program that links against ROOT libraries, the memory tracking would be enabled based on a user's .rootrc configuration file. Tracking down why a program segfaults for some users but not others, and those segfaults happen at any point in the code that interacts with ROOT, was quite irritating.

The histogramming, which is the most used form of plotting in high-energy physics, has a broken class hierarchy. TH2, 2-d histograms as a function of x and y, are implemented as a subclass of TH1, 1-d histograms. As a result, there are all manner of functions appropriate only for TH2, but are able to be called on a TH1. This includes getting a Z axis for something that inherently doesn't have a Z axis.

And it has a web browser, TGHtmlBrowser. I don't know why it has a web browser. It doesn't support https, css, or javascript, so I couldn't see how it performs on any modern website, but it was rather amusing to see it break on the Acid tests.

Many of the issues with the interpreter were fixed with ROOT6, which uses an clang-based interpreter. However, every command executed increases the memory usage of the program. This becomes an issue with automatically updating histograms, because the main way that GUIs can be updated is by issuing a command that is then run through the interpreter.

<comment><USER5> I always name my TBrowser T_T to express my annoyance of having to use it ':(' is sadly not a valid name : /

<comment><USER6> It's like the graphical file open window is designed to troll the user. It opens in icon view sorted by name with hidden files visible. Like who would ever want that? Its gaurenteed to never be useful. Switching to list view and sorting by date requires 3 clicks, and date sorting only works in one direction. Trying to type to highlight a directory or file by name often doesnt work.

</comment></comment></comment><comment><USER7> Root has some features that are very unique and powerful.

It's used in particle physics today mostly because it allows to do performant out-of-memory, on-disk Data Processing.

With frameworks like Python pandas, you always end up having to manually partition your data if it doesn't fit in memory. And of course, it's C++, so by default the data analysis code is pretty performant. This makes a difference when you can iterate your analysis in one hour instead of 20.

That being said, when I last worked with it, Root was a scrambled mess with terrible interfaces and way to many fringe features, e.g. around plotting, that are better handled by Python nowadays. It even has a C++ command line!!!

I wrote a blog post back then how I thought it could be fixed: [https://www.konstantinschubert.com/2016/06/18/root8-what- roo...](https://www.konstantinschubert.com/2016/06/18/root8-what-root7-should- have-been.html)

<comment><USER5> Let's be honest: it's used today because it was used yesterday, and there is a lot of useful legacy code. Not many _like_ plotting with root, or faffing about with memory allocation.

The reason it started getting use is that in the 1990's, when the current generation of experiments were starting up, C++ was hot and Fortran was not. PAW was old and in Fortran and so the young ones wanted to work with the new hip ROOT instead[1].

[1]: [https://www.quora.com/Why-does-CERN-use-ROOT/answer/Mario- Al...](https://www.quora.com/Why-does-CERN-use-ROOT/answer/Mario-Alemi)

<comment><USER8> Back when I was at HLT, I remember many talking about ROOT but we didn't use it much in TDAQ.

<comment><USER5> Oh man, that's to hardcore for me. I bow to your superior inside knowledge and ask for enlightenment on the meaning of HLT & TDAQ

<comment><USER8> It is a Google search away. :)

<comment><USER7> No it isn't.

</comment></comment></comment></comment></comment></comment><comment><USER9> [https://root.cern.ch/root-has-its-jupyter-kernel](https://root.cern.ch/root- has-its-jupyter-kernel) (2015)

> _Yet another milestone of the integration plan of ROOT with the Jupyter > technology has been reached: ROOT now offers a Jupyter kernel! You can try > it already now._

> _ROOT is the 54th entry in this list and this is pretty cool. Now not only > the PyROOT, the ROOT Python bindings, are integrated with notebooks but it > 's also possible to express your data mining in C++ within a notebook, > taking advantage of all the powerful features of ROOT - plotting (now also > interactive thanks to (Javascript > ROOT]([https://root.cern.ch/js/)](https://root.cern.ch/js/\))), multivariate > analysis, linear algebra, I/O and reflection: all available within a > notebook._

Does this work with JupyterLab now? (edit) Here's the JupyterLab extension developer guide: [https://jupyterlab.readthedocs.io/en/stable/developer/extens...](https://jupyterlab.readthedocs.io/en/stable/developer/extension_dev.html) (edit) here's the gh issue: [https://github.com/root- project/jsroot/issues/166](https://github.com/root-project/jsroot/issues/166)

...

ROOT is now installable with conda: `conda install -c conda-forge root metakernel jupyterlab # notebook`

<comment><USER10> For c/c++ in Jupyter, see xeus-cling [https://github.com/QuantStack/xeus- cling](https://github.com/QuantStack/xeus-cling)

<comment><USER11> Coincidentally, cling (wrapped by xeus-cling) is also a product from CERN.

<comment><USER8> Many of the CERN researchers are pretty deep into C++.

It was there that I got my template meta-programming baptism, back in 2002, when gcc was still trying to cope with template heavy code.

And curiously, also where I got my first safety heavy code reviews of C++ best practices.

</comment></comment></comment></comment><comment><USER12> This brings back memories from my undergraduate days as a physics student, where we made extensive use of root in labs. It was a kind of badge of nerd honor to do analyses in root as opposed to Matlab.

It also came with a sort of C++ interpreter that gave you a repl. I remember that kind of blew my mind back then.

<comment><USER13> > It also came with a sort of C++ interpreter that gave you a repl. I remember > that kind of blew my mind back then.

That would be Cling (or CINT): [https://root.cern.ch/cling](https://root.cern.ch/cling)

</comment></comment><comment><USER14> They also have been building a javascript version! A few years ago (as part of the GSOC program) I worked on parts of their webgl renderer, and ended up adding a feature to threejs as a result! Sergey has done a great job with it.

Try it in your browser:

[https://root.cern.ch/js/](https://root.cern.ch/js/)

</comment><comment><USER15> I'm a PhD student in physics, working on CAST [1], a small experiment at CERN. That fortunately means I don't depend on other peoples' code too much.

With the C++ interpreter of ROOT you can run so called ROOT macros. They are basically just C++ files containing your code at top level in pair of `{}`. The "funny" thing is half the time you run a piece of code it'll work the first time. But then running it again will cause the interpreter to segfault, due to the mess of global state and the half baked memory management of ROOT.

And don't get me started on the usability of the ROOT classes. A huge amount of stuff is string based, so throw away your type checking guarantees. I mean why bother...

Since I really didn't want to continue working with ROOT for my PhD (after having used it before), I decided to ditch the previous data analysis code and start from scratch [2]. I decided to use Nim for it, because it provides me with a powerful language (on par with python for my purposes - aside from admittedly certain libraries, which I had to wrap), yet still being as fast as the old ROOT code (in fact faster for my data analysis, but the comparison is problematic).

Yeah, it cost me a lot of time to get "back to where I started", the code itself might also not be a shining example of perfection, but I learned a huge amount about programming and I understand every piece of it. It was totally worth it. The gains in efficiency thanks to Nim and due to the fact I know the codebase means I make up a lot of the lost time anyways.

So to any people out there who may be in a similar position, don't be afraid to throw out what you don't like. :)

[1] [https://home.cern/science/experiments/cast](https://home.cern/science/experiments/cast) [2] [https://github.com/Vindaar/TimepixAnalysis](https://github.com/Vindaar/TimepixAnalysis)

<comment><USER5> Ah, axion searches! Who said you can't get paid for staring at a wall?

How come you didn't go with Julia? (or Fortran for that matter?)

<comment><USER15> Haha, well you can get payed for it, but you won't be payed well.

It's hard to give an easy answer for that.

But let's step back a little: I played around with Julia several years ago. I don't know when exactly, probably in 2015 (?). Back then I thought of it as a faster python for science. Many things I would use python for back then I could have done in Julia too. Others I couldn't though, because the eco system was still too small. And while Julia was somewhat faster for the things I tried, it wasn't amazingly faster. My interest in the language dropped sometime after that. But still, I felt like it was a language targeted specifically to scientists. Many things I wanted from my analysis framework however were outside that bubble I felt. I didn't simply want to write a faster "analysis script". I do realize however, that the language has evolved a lot and I'm happy it's finding acceptance!

Fortran on the other hand, I never really considered. I suppose modern Fortran is a pretty good language though.

So why did I choose Nim then? It gave me: \- the ability to produce standalone binaries I could just put on any data acquisition pc without a hassle (well ok, be careful about old glibcs) \- it's fast, and I felt right at home syntax wise coming from python \- the community is amazing. The first time I entered Nim's IRC channel I noticed Araq, the creator of the language, answering random people's questions! In general the community allows for a super quick feedback loop to learn the language \- it's a pretty concise language. The whole manual can be read in less than a day \- having written some Clojure, I loved the idea of a powerful macro system \- after seeing mratsim's arraymancer library [1] I was happy to 1) have a numpy substitute and 2) thought if one person could write such a great library in O(1 year) it must be a pretty awesome language to work with :) \- being able to trivially wrap any C code around is super helpful \- a pretty strong type system! No more annoying implicit conversions from any type to a bool, error prone implicit int <-> float conversions etc.

I probably forgot many points, but well. The truth is of course, many languages could have worked for me, but the time I spent with Nim in the beginning was just super pleasant.

[1] [https://github.com/mratsim/Arraymancer](https://github.com/mratsim/Arraymancer)

<comment><USER16> I followed the opposite route: tried Nim and liked it a lot, then switched to Julia. Perhaps my typical usage of a scientific language is quite different from yours. In my case, what drove me away from Nim was the fact that even small features of the language keep changing in no controlled waya. It was 2014, and commits related to some obscure feature were subtly changing the behaviour of apparently unrelated stuff. Julia changed a lot in the last years, but in a very controlled way, and always sticking to semantic versioning. In 2014, Nim 1.0 was said to be behind the corner, yet only a few weeks ago the first RC for version 1.0 was released (Nim 0.20), and it still broke some basic stuff like bitshift operators.

Moreover, the lack of scientific libraries in Nim was more severe wrt Julia. Sure, writing C bindings in Nim is easy, but it is not a zero-effort job: you have to properly test them to check that types get converted correctly, and you have to write some documentation. Some guy is currently checking the quality of Nim libraries [1], and he gave very low scores for a few libraries of mine (rightly so, IMO, e.g., [2]) because they lack documentation.

[1] [https://forum.nim-lang.org/t/5092](https://forum.nim-lang.org/t/5092) [2] [https://github.com/ziotom78/nimcfitsio](https://github.com/ziotom78/nimcfitsio)

</comment></comment></comment></comment><comment><USER17> I remember when ROOT came out. I remember downloading it, going through it a bit, and wondering why anyone would leave PAW for it. To this day, I think PAW is probably a superior system and the ROOT project is best considered an expensive failure.

The one guy doing C++ (on a different experiment) skipped ROOT entirely and used Python to orchestrate C++ code.

</comment><comment><USER6> I can't recommend pyroot highly enough. All the benefits of python while removing some of the worst usability problems in root. Compiling with cython meshes well, as it tends to provide the biggest performance gains for the types of tasks people frequently need to perform (like checking lots of conditionals).

Advice to people starting with ROOT who have lots of data to process: if at all possible dont mess with multithreading. Make a single threaded process that grabs only the data needed and makes its own output file. Then combine the outputs with the hadd tool. You can run the single threaded program en masse with HTcondor or a similar scheme and it 'just works' while remaining scalable.

</comment><comment><USER3> Are there any other academic fields so dependent on a single piece of software the way that (experimental) particle physics is dependent on ROOT?

<comment><USER18> My field is control systems. Every academic I know, and every paper I've read which mentions a software stack, uses matlab/simulink. Simulink appears to me to have no good alternative (maybe jmodelica or something?) There are some python/Julia alternatives to matlab, but the existing control libraries are really pretty limited in comparison.

I'm not sure exactly how dependent particle physics is on ROOT, so direct comparison is difficult.

<comment><USER19> The Modelica systems are a good alternative, but don't really exist in high level languages yet, other than some transpilers which are a little iffy. We are planning to change that with Julia though which has enough of an ecosystem to easily build such an open source tool unlike Python or R.

</comment></comment></comment><comment><USER20> Very nice to see this trend on HN. I have been using croot as a REPL for C/C++ for close to a decade.

</comment><comment><USER21> I like the user interface. It was built on xclass (a FVWM95 like UI toolkit). They ported it to Windows by emulating the xlib portions using gdk 1.3.

</comment><comment><USER22> Why would some one use this, over say Spark? What are it's unique capabilities?</comment>


The Long Engagement – Fred Wilson - <AUTHOR> https://avc.com/2019/08/the-long-engagement/ <comment><USER2> I mean yes, in theory, you want to build relationships and get to know potential investors. In reality, entrepreneurs usually have an urgent need to get the cash needed to grow their business, and fundraising is a really high emotion and time sink.

It doesn't help that most investors will shut you off as soon as they've decided "there's no fit". So yeah, it would be nice theoretically if everyone had the time and energy to do this, but I'm not sure it's realistic, and I think a big part of why the process is transactional is because of transactional investors.</comment>


How do I "install" Clojure on windows - <AUTHOR>

Trying to install clojure here, but the website's example just brings up a REPL, what if I want to write a program and compile/interpret it later? <comment><USER2> Did you read this: <http://clojure.org/compilation></comment>


Japan radiation poisoning America? - <AUTHOR> http://www.wnd.com/2013/12/japan-radiation-poisoning-america/

<comment><USER2> There's too much "we don't know but it could be scary" in that posting.

It mentions a PNAS author, Nicholas Fisher. The relevant journal article is at [http://www.pnas.org/content/early/2013/05/30/1221834110](http://www.pnas.org/content/early/2013/05/30/1221834110) , titled "Fukushima nuclear accident to marine biota and human consumers of seafood." It includes:

> We showed that doses in all cases were dominated by the naturally occurring > alpha-emitter 210Po and that Fukushima-derived doses were three to four > orders of magnitude below 210Po-derived doses. ... Although uncertainties > remain regarding the assessment of cancer risk at low doses of ionizing > radiation to humans, the dose received from [Pacific bluefin tuna] > consumption by subsistence fishermen can be estimated to result in two > additional fatal cancer cases per 10,000,000 similarly exposed people.

There's a transcript of a conversation with the author at [http://www.pnas.org/site/misc/nicholasFisherPodcastTranscrip...](http://www.pnas.org/site/misc/nicholasFisherPodcastTranscript.pdf) :

> We found that, at least for the bluefin tuna, whether they were in Japan or > migrated to California, the radioactivity was well below the safety limits > set by Japan, which is considerably stricter than that set by other > countries such as the US. Now, it's not to say that all fish in Japanese > waters are safe. They're not. There are some fish in Japanese waters — > bottom-dwelling fish — that do exceed safety limits, and might be of > concern. So I'm not going to say that all fish in all places are safe. But, > just because we can measure radioactivity, using very sensitive > instrumentation, doesn't mean that there's a likely detectable increase in > cancers that will result from consumption of that food.

Yet you'll notice that the wnd.com link never reports the amount of radioactivity detected, nor compares it to other natural sources of radioactivity that people are exposed to every day. That's a sign of an article which spreads fear and worry, not of reporting the issue.</comment>


Ask HN: Rate my Friday fun app - "Let Me Search Twitter For You" [lmstfy.com] - <AUTHOR>

www.lmstfy.com for "Let Me Search Twitter For You"
This one is a fun app designed to pwn noobs who use Google to search realtime events. Typically it goes like this:
1. Something happens (gmail down, etc.)
2. Noob Googles for it but finds stale info, so IM's a Pro to find more info.
3. Pro goes to LMSTFY.com and inserts the noob's stupid question.
4. Pro sends noob a quick LMSTFY link.
5. Noob clicks on the link and is guided to Twitter search.
6. Noob has no idea what Twitter is, but likes the chatter and links in its search results.
7. Pro sits back, thinking "Google for the greatest, Twitter for the latest."
The app animates a cursor across the twitter search page, seems to type in a keyword, clicks on the search button to take you to the twitter's SRP. This one is obviously inspired by lmgtfy.com - "Let Me Google That For You."
In the process of writing this app, it was fun learning Google Apps framework, python and some javascript animation foo.
I would love to hear any feedback people have. <comment><USER2> <http://www.lmstfy.com/?q=doody>

</comment><comment><AUTHOR> <http://www.lmstfy.com>

</comment><comment><USER3> where's the point of learning python with this?

well... :-)

<comment><AUTHOR> some backend stuff to analyze the keywords.</comment></comment>


Rust Standard Hash Table Could Go Quadratic - <AUTHOR> http://accidentallyquadratic.tumblr.com/post/153545455987/rust-hash-iteration-reinsertion <comment><USER2> _The key effect of Robin Hood hashing is just that it gives you confidence and /or hubris to push a table to 90% capacity, which greatly exacerbates the problem._

If you push a hash table which handles collisions by linear probing that hard, and any non-randomness appears, you can get long runs and are in trouble. I knew about Robin Hood hashing, but didn't know it was being used to justify 90% table density. Usually, above 50% full and it's time to double the size of the table.

What does the Rust implementation do for deletions? The classic solution is to mark the deleted cell as available for reuse, but non-empty for the linear part of the search during lookup. If you do that, at some point you have to compact the table or recopy it or something. This is an argument for a hash table with linear lists for each hash slot. More memory allocations and cache misses, but better behavior as the table fills up.

(Remember the YC discussion in which some job interview question insisted that hash tables operated in constant (O(1)) time? Not quite. There's collision overhead and growth overhead.)

<comment><USER3> From the docs page [0] for std::collections::HashMap, Rust uses backwards shift deletion [1] instead of the tombstone method.

[0] [https://doc.rust- lang.org/std/collections/struct.HashMap.htm...](https://doc.rust- lang.org/std/collections/struct.HashMap.html)

[1] [http://codecapsule.com/2013/11/17/robin-hood-hashing- backwar...](http://codecapsule.com/2013/11/17/robin-hood-hashing-backward- shift-deletion/)

<comment><USER2> That makes sense. With the tombstone method, hashmaps get worse with age.

</comment></comment></comment><comment><USER4> Quadratic complexity is bad, but when I saw the example code I automatically thought "that's definitely not a good way to make a copy". I'm not familiar with Rust, but I assume the class contains a special cloning method which does something more like a memcpy()? If so, if you want to make a slightly modified copy of a hashtable, it's probably still faster to copy the whole thing in one go and then add/remove the desired elements than insert each one and do the filtering element-wise.

Otherwise, it somewhat reminds me of [http://www.joelonsoftware.com/articles/fog0000000319.html](http://www.joelonsoftware.com/articles/fog0000000319.html)

<comment><USER5> > when I saw the example code I automatically thought "that's definitely not a > good way to make a copy"

Sure but that's not really the point, it's just an easy way to trigger the issue. If you look at the original issue[0], the initial use case is merging two maps:

        let first_map: HashMap<u64, _> = (0..900000).map(|i| (i, ())).collect();
        let second_map: HashMap<u64, _> = (900000..1800000).map(|i| (i, ())).collect();

> The user wants to merge the hash maps, and does so naïvely,

        let mut merged = first_map;
        merged.extend(second_map);

> Time for merge when second_map is shuffled: 0.4s

> Time for merge when second_map is not shuffled: 40.s (x100 amplification)

The example in TFA is a simplified/boiled down to the barest version exposing the issue from a more real-world case of "was transforming one HashMap into another (with natural language words as keys), iterating over the keys of the first HashMap, inserting them in the second with different values."

> I'm not familiar with Rust, but I assume the class contains a special > cloning method which does something more like a memcpy()?

You can't memcpy the hashmap since it could contain non-trivial keys or values (e.g. refcounted heap allocations)[1], but you could clone() it for a one-shot copy. As noted above you're missing the forest for the trees though, that's just an easy trigger case, the point is not cloning maps.

[0] [https://github.com/rust-lang/rust/issues/36481](https://github.com/rust- lang/rust/issues/36481)

[1] and the hashmap is mostly a pointer to a big holding the keys, values and hashes, which you probably don't want to share

</comment></comment><comment><USER6> Why didn't they just use the same algorithms as typical implementations of C++'s STL?

<comment><USER7> Any algorithm you pick is going to have edge cases, and the C++ STL only defines the interfaces for interacting with them. This means that there is no "typical" implementation. Do you actually know how the implementation you're currently using is written?

<comment><USER8> I might be wrong but I thought the STL design docs also had restrictions on algorithm speed? As in - you are free to choose any design you want, as long as it has a given API and has O(1) access.

<comment><USER9> It's been a while, so my memory could be playing tricks on me. However, I believe the specified std::unordered_map iterator invalidation behavior rules out efficient use of open addressing unless someone comes up with some timsort-level novel implementation ideas.</comment></comment></comment></comment>


Ask HN: Help, I think GoDaddy has hijacked my domain - <AUTHOR>

I registerred a personal domain for a 1 year period from GoDaddy on Sept 1, 2010. As the expiration is approaching (2011-09-01), I decided to renew for another year. I used my PayPal to purchase 1 yr. renewal & private registration, however due to a recent (unrelated) issue with PayPal, I had a stop-payment issued from my bank so the payment failed. My payment was reverted and consequently so was my renewal order. This is fine; I planned on using another payment method to  pay for the renewal.
However, to my surprise, GoDaddy has further taken the reversal and revoked access to my domain and pointed it to standard GoDaddy landing page.
I paid for the domain from 2010-09-01 to 2011-09-2011, but my service has been cut short. Does GoDaddy have the right to take over my domain in this case?
Thanks for any input <comment><AUTHOR> FWIW, here is the current WHOIS result:

       Domain Name: LOGANLINN.COM
       Registrar: GODADDY.COM, INC.
       Whois Server: whois.godaddy.com
       Referral URL: http://registrar.godaddy.com
       Name Server: NS09.DOMAINCONTROL.COM
       Name Server: NS10.DOMAINCONTROL.COM
       Status: clientDeleteProhibited
       Status: clientRenewProhibited
       Status: clientTransferProhibited
       Status: clientUpdateProhibited
       Updated Date: 16-aug-2011
       Creation Date: 01-sep-2010
       Expiration Date: 01-sep-2012

</comment><comment><USER2> loganlinn,

I can't know the exact details of this situation, but in a normal PayPal reversal scenario, you can call Support, pay for the reversal with a different payment method (as you suggested would be done), and the service would be returned to your account. If this hasn't been resolved with our Online Support Team yet, I encourage you to make that call - 480.505.8877 - and I have every reason to believe it would be resolved quickly.

</comment><comment> mark-r Shouldn't you be asking GoDaddy instead of us? Seems like a simple problem to resolve unless they're actively ignoring you.

<comment><AUTHOR> They have not responded to my emails as of yet. I will be calling them soon, but I was hoping to get some input from the community on the legitimacy of their actions.

</comment></comment><comment><USER3> I imagine it's a bug in GoDaddy's system rather than anything malicious, just call them and find out.</comment>


RIAA: Net neutrality shouldn't inhibit antipiracy - <AUTHOR> http://news.cnet.com/8301-31001_3-10435388-261.html

<comment><USER2> I believe I speak for everybody here when I yell "the RIAA are a bunch of wankers"!</comment>


Analysis of Chinese MITM on Google - <AUTHOR> http://www.netresec.com/?page=Blog&month=2014-09&post=Analysis-of-Chinese-MITM-on-Google

<comment><USER2> Funny that the certificate is signed using MD5 and wouldn't have worked regardless of being signed by anyone or the CN being correct.

<comment><USER3> The purpose of the "Great FIrewall of China" is to censor the Internet, i.e. the intention of this MITM doesn't seem to be to covertly spy on the University user's searches.

A self signed X.509 cert is enough in order to see what they are searching for and to block/RST queries for topics like "Tiananmen Square protests". The CH authorities don't care if users notice the MITM in this case.

</comment></comment><comment><AUTHOR> This plus cache poisoning via service workers.</comment>


Satellite Eyes – Change your Mac desktop to a map of where you are - <AUTHOR> http://satelliteeyes.tomtaylor.co.uk <comment> _-__--- Here's an idea that I don't have the wherewithal to implement:

Take this location-based image service and pair it with something like artful (link is probably still on the front page) to give you imagery - not just maps - that are relevant to where you are. (eg local artists, photos of local landmarks, historical sites, etc)

</comment><comment><USER2> This is such a cool idea. Works perfectly with multiple monitors (the map extends across displays).

</comment><comment><USER3> A refreshing change of pace from being tracked by others to being tracked by oneself!

<comment><USER4> Unless the whole map database is included in the app, then this is still you being tracked.

<comment><USER3> Fair point, let me rephrase:

A refreshing change of pace from being tracked by others to also being tracked by oneself!

</comment></comment></comment><comment><USER5> I was using this before my Yosemite upgrade, I suggest changing to different maps (The bing ones seem more up to date at the moment). I've seen more interesting things that I didn't know were there than just randomly looking around google maps or openstreetmap. I also got lots of comments from people about it too.

</comment><comment><USER6> Thank you for contacting the map tile server via TLS. Apple's own Maps app does not do this. :(

I'm not even sure if the daemon that provides the corelocation lookup contacts the wifi-signal location api over TLS...

</comment><comment><USER7> Pretty cool. I wonder how often the wifi database needs to be refreshed? How often do the wifi points change, go offline. I assume that database also uses some info from the IP address as well.

<comment><USER8> It uses Apple's CoreLocation framework. The data was, I believe, initially bought from Skyhook, and then augmented by iOS devices reporting SSIDs from a known GPS fix.

It's abstracted away behind the API, but I think the framework uses trilateration of SSIDs with signal strength. The fix is often very precise - even shifting slightly between the front and back of my house.

It doesn't use any IP geolocation - it's just not precise enough.

[http://www.skyhookwireless.com](http://www.skyhookwireless.com)

Disclaimer: I wrote the app! Nice to see it here.

<comment><USER9> You sure it doesn't use IP geolocation to narrow down the SSIDs it should search for? I'm thinking of an R-Tree like structure based on IP to get your search for SSID coordinates most of the way there.

On the other hand, maybe simple database searches for SSIDs are fast enough?

<comment><USER10> It is a common misconception that the SSID is used in these types of databases. What it is actually looking for is the MAC address of the wireless access point.

<comment><USER8> You're right - I mean BSSID, which is the same as the MAC address.

</comment></comment></comment></comment></comment><comment><USER11> Neat work. This plus a visible satellite overlay would be fun add-on.

</comment><comment><USER12> Cool idea. It finds my location and I can see the map in the browser, but it does not actually set the background on my Mac Book Pro (Yosemite 10.10.1).

</comment><comment><AUTHOR> Code is here: [https://github.com/tomtaylor/satellite- eyes](https://github.com/tomtaylor/satellite-eyes)

</comment><comment><USER13> This is awesome and I like it. Thanks :)

</comment><comment><USER14> This could be very useful on a phone, which actually has a GPS.

<comment><USER15> On Android devices, this used to be available through Google Maps as a Live Wallpaper:

[http://www.cnet.com/news/make-google-maps-your-live- android-...](http://www.cnet.com/news/make-google-maps-your-live-android- wallpaper/)

Unfortunately, it was removed in a later update.

<comment><USER16> I always liked Muzei[1] with the Stamen maps [2]. The effect works better than a regular map or aerial view.

[1] [https://play.google.com/store/apps/details?id=net.nurik.roma...](https://play.google.com/store/apps/details?id=net.nurik.roman.muzei)

[2] [https://play.google.com/store/apps/details?id=com.omarseyal....](https://play.google.com/store/apps/details?id=com.omarseyal.muzeimaps.app)

</comment></comment></comment><comment><USER17> So creepy, yet so cool.</comment>


Updated Facebook for Android requires "Retrieve Running Apps" permission - <AUTHOR> https://play.google.com/store/apps/details?id=com.facebook.katana&feature=nav_result#?t=W251bGwsMSwxLDMsImNvbS5mYWNlYm9vay5rYXRhbmEiXQ.. <comment><USER2> I really hope Google fixes Android's broken security model. As the owner & user of an Android device, I should be able to configure feature access on a per-app basis. It's ridiculous that you have to either grant an app all requested access, or just don't install it. You should be able to install it, but choose which features to grant access to and which to deny.

<comment><USER3> What if core features of the app rely on the permissions? Is the onus on the app developer to build checks for permissions or on the user to realize the app isn't working the way it should because they disabled some permissions?

<comment><USER4> I see nothing wrong with making developers check for features before using them. Should be used to it, with the variability of platforms.

</comment></comment></comment><comment><USER5> I would like to see Apple, Android and Microsoft provide a mechanism where the developers can explain, in their own terms, why they need access to certain permissions. I own an HTC HD7 which is WindowsPhone 7. I remember installing some generic music player app (for the life of me I cannot remember the name of it). It required access to, among other things, my location information. At this point the installation was cancelled and the app deleted from my phone. All I could think was "Why on Earth do you need to know where I am to let me listen to my music?".

If developers were at least given an opportunity to explain to their users why they are requiring certain information, consumers may be more willing to allow access. It seems to me many apps take a "lets grab all the info we can" approach which is extremely off putting.

<comment><USER6> Unfortunately, what you describe is the ideal case.

A typical case might be:

1\. Developer releases free app

2\. Users find it useful

3\. Developer seeks to monetize, adds some mobile ad network libraries

4\. Ad network libraries want the user's location

5\. User's who liked the app now find themselves OK'ing a frivolous-seeming permission during an update, or they have to uninstall the app, potentially losing access to some of their own data.

And so we find our developer on the slippery slope. Putting the power to cause those apps to fail when they do dubious things in the user's hands means that developers would be more discriminating about their monetization partners, among other benefits.

<comment><USER5> All good points and I'm sure many of the app developers on HN will be able to give reasons as to why they are unable to provide this information on the apps they develop and I suspect it is all closely controlled by the platform as opposed to the developers themselves.

If the app I downloaded said "Our free version requires your location due to our arrangement with our Ad providers" I would have at least known why they were wanting my location.

I know this doesn't solve the problem, people will still have the choice to either accept it (albeit grudgingly) or uninstall the app. What it does do however is acknowledge they are asking for permissions to a users data. If someone asks for my permission to use my car is it unreasonable for me to know why they want it?

</comment></comment></comment><comment><USER7> The increasing number of permissions that appear to be out of place for this app is exactly why i hit the "force stop" button for the app about a month ago and then went on to hit the uninstall button for it about 3 hours ago. I would like to continue to use the facebooks messaging features though. however their need to include the read/write/edit your SMS/MMS messages permissions is a serious put off and causes me not to want to install it.

<comment><USER8> That's because they are the SMS app for Facebook Homeified devices.

<comment><USER9> Are Facebook mobile developers that bad they can't check if they're on a Homeified device and degrade gracefully if they're not?

<comment><USER10> What are you asking here? They probably can, but they still need to request the permission upfront because that's how Android is set up.

<comment><USER9> I'm asking who is responsible for the poor application design choice.

<comment><USER11> It's not a "poor application design choice." Facebook wants to provide the ability for users to send and receive SMS/MMS from the Messenger app. Even though it's a feature you can turn off, the app must request the permission even if it's not using the feature. This is an Android limitation. A better solution would be to the app request permission only when it needs it, such as how an app requests your location or access to your photos on iOS.

<comment><USER12> Android provides this for some features but not all.

The problem is if an app requests too many permissions it gets messy to just show a pop-up dialog for each and every one.

This is the reason why Google Chrome and Firefox started working on web apps that essentially are just fancy bookmarks those bookmarks provide permissions before hand for the web app so that they don't need to be requested later.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> I'm not gonna lie, I like using facebook, but I unplugged it from my phone a while ago and haven't regretted it. Social networking is a fun diversion but a terrible lifestyle.

</comment><comment><USER14> It's pretty much the only thing left they didn't already require, so no big surprise here. Perhaps it's time to switch to only using the web version on my phone...

<comment><USER15> I do this and don't miss the official app. At first I did miss having my contacts synced, but HaxSync does this fantastically.

[https://play.google.com/store/apps/details?id=org.mots.haxsy...](https://play.google.com/store/apps/details?id=org.mots.haxsync&hl=en)

<comment><USER16> Just bought haxsync and so far its doing exactly what I want - thanks!

Otherwise I just use FB in the browser too.

</comment></comment></comment><comment><USER17> This is it, the final call, privacy invading has gone to far.

I'm already wearing at least half a tinfoil hat, now it's time to put it on leave it there.

I have already deleted my facebook account a long time ago and honestly I haven't missed it ... at all!

I encrypt all my hard-drives at home and on my laptop, just because I can.

I have several privacy extensions installed in my browser and I try to avoid using chrome unless it's absolutely necessary.

I still use google search and gmail, but I will migrate away from them in the near future.

I do not want to be the product being sold any more, I don't want anyone to be able to put together a complete profile on me with a few clicks on keyboard.

"The line must be drawn here, this far - no further"

</comment><comment><USER18> Related to the new Facebook Home app-launche feature?

<comment><USER19> Yup. The Facebook Home pretty much communicates directly with the Facebook App which has all the permissions needed to be a Home Replacement/Launcher.

This is why Facebook Home does not need any permissions.

[https://play.google.com/store/apps/details?id=com.facebook.h...](https://play.google.com/store/apps/details?id=com.facebook.home)

<comment><USER20> Well it is no wonder they had 'Too many methods'[1] in their Facebook android application if they've packed all the features into their facebook client, and left their messaging and launcher applications as thin wrappers around the core application. Is there any good reason they don't split the functionality to the appropriate applications? Then maybe they wouldn't have to hack dalvik to run a simple facebook client.

[1] : [https://www.facebook.com/notes/facebook-engineering/under- th...](https://www.facebook.com/notes/facebook-engineering/under-the-hood- dalvik-patch-for-facebook-for-android/10151345597798920)

<comment><USER8> Before I installed Facebook Home last night, I'd replaced the Facebook app with a Chrome bookmark, but kept Messenger. I still received and could reply to text notifications, so Messenger is definitely a real app.

I wonder if Home is just a shell so they can maintain huge install counts on the main Facebook app. Then again, they could require the main app for API access and still use Home separately to handle drawing the Home UI and listening for Home interactions.

</comment></comment></comment></comment><comment><USER21> FYI, on Android, you can get a list of installed Applications without any permission.</comment>


Mayor Bloomberg blames Apple thefts for rise in New York City crime rate - <AUTHOR> http://theverge.com/2012/12/28/3811498/nyc-officials-apple-thefts-responsible-for-increased-crime-rate

<comment><USER2> thieves don't like Android phones?</comment>


Hype 3.5: tool for HTML5 animators and prototypers - <AUTHOR> http://tumult.com/hype/whats-new/3.5/index.html <comment><USER2> OS X only, though. I noticed a lot of similar tools are specifically tailored for OS X. Is there a reason for it?

<comment><USER3> 3 reasons, not ordered by importance:

1\. This is gonna be unpopular, but: the target OS X users for this low/medium priced softwares are more willing to pay instead of pirating, than their counterparts on Windows.

I say that based on empirical assumptions, I have to say, but what I notice is a general cultural difference on this point.

2\. A huge part of the web creatives community uses Macs, therefore it makes sense for these devs to focus on OS X

3\. I don't know about Sketch, but for Tumult the reason can be found in their official "about" paragraph:

"Tumult Inc. was founded in 2010 by ex-Apple employees whose mission is to make the next generation of tools to produce beautiful web sites and apps. Tumult Inc. is funded by Y Combinator"

<comment><USER4> I guess #3 is the most important factor here but from my personal experience #2 is not really true. Maybe it is for US based web developers but its not a worldwide phenomenon. There is a large percentage using OS X but it's small compared to the combined Windows/Linux user base. I'm sitting in an office with 6 webdevs right now and only 1 of us uses OS X. It not because OS X lacks something but its mostly because Apple product availability, pricing and familiarity is not the same everywhere.

About #1, totally agree there is more piracy on Windows than OS X but I am not sure it makes a difference in the number of sales. i.e. a lot of people will pirate it but isn't that the ones that would have not paid for it in the first place?

</comment></comment></comment><comment><USER5> Awesome</comment>


Intel open sources Nauta: multi-user, distributed environment for DL training - <AUTHOR> https://github.com/intelAI/Nauta <comment><AUTHOR> I'm not 100% sure that this buys you a ton since the multinode training is still done with tensorflow clusters or horovod, so there's nothing new I can see (after all of 10 minutes of looking, so take that with a grain of salt) with the actual distributed pieces. That said, workflow management is still an important piece of the training puzzle. I've seen a lot of good quantitative work put to poor use for lack of a good workflow tool.</comment>