Ask HN: Thoughts on a Climate Neutral OSS License? - <AUTHOR> I've seen a growing interest in developers about doing something about climate change. It seems, particularly in the context of a big company, the engineering department doesn't really have much leverage, even if they wanted management to do things differently. What if we had a "green" open source license? It would mandate that the companies that use the software, offset their pollution, and become climate neutral?
It could suddenly make going carbon neutral a net positive, rather than just a cost., We could have conversations like "If we become carbon neutral, for the price of 20.000$ a year, we'll have access to software that can save us 100.000$ a year in work we don't have to do"
So HN: What are your thoughts on a "green" open source license? <comment><USER2> You could do that, but I'm not sure it would actually be Open Source, per the OSD[1]. It would depend on the details, but I suspect this would trip over criteria 5 and or 6 of the OSD.

[1]: [https://opensource.org/osd-annotated](https://opensource.org/osd- annotated)

<comment><AUTHOR> That's true - It's definitely not "classic" open source - but I wonder if it still could have most of the benefits of open source, while still being able to push an agenda.

</comment></comment><comment><USER3> > what if we had a "green" open source license? It would mandate that the > companies that use the software, offset their pollution, and become climate > neutral?

it'd need a bit of work to clearly define what this means.

suppose there's a climate-neutral-licensed plant optimisation tool T. maybe company A operates a coal mine (or whatever), and could save $1m / year by using the tool T. But company A currently doesn't offset any of their pollution, and doing that would cost them $10m, which they would be required to do by the licensing terms of tool T. So, assuming the license terms were enforceable, it wouldnt make purely financial sense for company to use T as the costs of complying with the licensing would exceed the cost reduction of using the tool.

But, could company A stand up a second tiny company B, which is a 1 person operation that has a contract to apply tool T to company A's operations, as an ongoing service? Then the (direct) pollution from company B would be tiny (1 person, 1 office, a network connection and a coffee machine or whatever), so it might only cost $5k / year to offset. But then company A could receive the $1m benefit of T without directly using it, without needing to offset $10m pollution, but perhaps with some additional cost of $50k/year of overhead required for the additional structure of company B.

i.e. in this example in the sense of the productive physical economy, essentially the same thing is happening, in terms of overall environmental impact, but by performing non-productive financial/legal gerrymandering company A might be able to comply with the license without really doing anything.

this could be avoided if the calculation used to figure out a company's environmental impact accounted for the indirect environmental impact of how company's revenues are obtained and costs are incurred -- perhaps through relationships with other companies or other parties that are heavily polluting.

but that'd get complicated! one way to figure this out in an objective way would be to have the state regulate it and estimate the environmental impact of each firm. bureaucracy required would be similar to taxation, but accounting for "how did you make this profit? was it from a productive environmentally sustainable activity, or a non-productive or non sustainable activity?"

then, assuming this bureaucracy was already in place to estimate the climate impact of each organisation, your license could refer to that

<comment><AUTHOR> Yeah this is something I've thought of as well - there's really quite some potential loopholes, if you really want to get through it, using e.g. shell companies or the like. It's a tough question to solve, and I don't know any mechanics in place currently to measure that.

</comment></comment><comment><USER4> It probably is not open source as we know the definitions and likely unenforceable. See the discussion around Chef and ICE from a post here last week

<comment><AUTHOR> It's definitely not free software as we know it. I'm curious what you mean by unenforcable? I checked out the Chef announcement ([https://news.ycombinator.com/item?id=21049822](https://news.ycombinator.com/item?id=21049822) right?) and I don't really see where there's a relevant discussion about enforcabillity?</comment></comment>


SenseiDB: Open-source, distributed, realtime, semi-structured database - <AUTHOR> http://senseidb.com/ <comment><USER3> I can't speak for SenseiDB itself, but I think that LinkedIn deserves a lot of credit for the technology they have been open sourcing in the last few months. Fantastic to see.

</comment><comment><USER4> Looks like the marketing copy is off from the actual implementation, AFAICT.

      Sensei (先生) means teacher or professor in Japanese(http://en.wikipedia.org/wiki/Sensei).

      It shares the same pronunciation and writing with the Chinese word that has the same meaning. This name indicates that the system can be used in place of Oracle database in many applications.

Okay, so on the name alone I can replace my Oracle database! Great!

Seriously though it goes on...

They claim the database is ACID: <http://javasoze.github.com/sensei/data- guarantee.html>

But they built the entire thing around "eventual consistency."

And statements like:

      "Sensei provides a high-level of durability by maintaining N replicas of each shard to guarantee a level of availability and fault-tolerance"

Don't seem to make sense when talking about ACID given that a _write_ operation will happen _at some point_. Looks like the data event producers will shard the data across N replicas without quorum... so there's no guarantee that there will be N replicas available... is that right (and that the transaction won't be lost mid-stream either)?

Skimming through the source it doesn't seem to be doing anything terribly revolutionary... and I can see the usefulness of the trade-offs they made in this database for certain scenarios. However I don't think the claims of ACID guarantees and "real time" are particularly representative of what this DB will actually do. They just don't seem to jive with "eventual consistency" models.

I'm not a hardcore database guru though so maybe I'm missing something?

<comment><USER5> Where does that page claim perfect ACID semantics? It's meant to describe what Sensei gives you for each aspect of ACID.

Sensei needs an event stream to process. We've open-sourced and apache-fied Kafka which is a great candidate for an event stream. For Atomicity and Isolation, the event stream must provide these guarantees.

Consistency is handled with a routing parameter. Requests partitioned around an id will always go to the same searcher, so they won't go backwards in the stream except in failure scenarios. This is eventually consistent, but tries to keep things sane.

Durability: The event stream helps with this. We don't immediately flush while indexing in Lucene, so if there's a crash we can replay the persistent event stream.

Does this make sense? SenseiDB is not intended for purely transactional processing. For some applications, sensei would make a good candidate for replacing your DB. For others, not so much.

<comment><USER4> _Where does that page claim perfect ACID semantics? It's meant to describe what Sensei gives you for each aspect of ACID._

And they're all well and good features! I can tell SenseiDB isn't transactional. Like I said, I skimmed the source and understand at a high level what it's does. I could see it being very useful in certain conditions as LinkedIn currently does and I'm sure others will.

However, I think the copy is confusing (at least it was for me). On the guarantees page there's an "ACID-ity" headline. For each aspect of ACID, as you say, the page describes what Sensei offers. The confusing part was that I was mentally comparing each aspect against what I understand to be the common semantics of ACID. I think it would be more clear if there was some distinction under the main headline that acknowledges this difference.

hth!

</comment></comment></comment><comment><USER5> Looks like someone non-LinkedIn posted this so the rest of the team is unlikely to be around for a few more hours. Let me know if you have any questions! I worked mostly on the distribution & rpc piece.

<comment><USER6> Congratulations on the project, and compliments on the breadth of documentation. Nicely done.

(Nitpick - none of the urls change. Some js error where you're not doing a pushState? You should report this.)

edit - this works -<http://senseidb.github.com/sensei/index.html>

<comment><USER5> Thanks! I'll make sure that gets corrected.

</comment></comment></comment><comment><USER7> 3 separate NoSQL stores from ONE company? And their primary business is not Databases? There are currently more than 100 different NoSQL solutions - <USER2> believe we will see a consolidation of NoSQL in 2012

<comment><USER8> On the flip side, we might see a lot of "build your own NoSQL store" tutorials in 2012.

</comment></comment><comment><USER9> SenseiDB looks really impressive. We were actually thinking about the same problem when we built ThriftDB (<http://www.thriftdb.com>) for Octopart so it's especially interesting to see LinkedIn's implementation.

Looking through the documentation a couple of things come to mind:

* Does SenseiDB support nested data structures?

* What happens when you modify the schema? Can you add/delete/modify attributes?

<comment><USER10> re: nested data structure is in the roadmap, but no target date yet. There are 2 ways of implementing this: 1) pre-pend field name reflecting the nesting, much like elasticsearch 2) encoding payloads in the term list indicating nested nature.

1) is straightforward, but can be restrictive if you want to in-nest faceting.

We are still debating on the route to take.

As for schema changes, we should document that better: certain schema changes simply requires you bouncing the node, but if there are data integrity changes, you would need to reindex. We will work on more documentation on the specifics.

<comment><USER11> If I change the faceting does bouncing the nodes cause a re-index automatically or is it more involved?

<comment><USER10> bouncing node will start reindexing from the last committed version on the disk. If the index is up to date, no re-indexing will be triggered.

</comment></comment></comment></comment><comment><USER12> How many home-grown databases have linkedin developed in the past few years?

<comment><USER13> How many programming languages do you use? :-) Just like we use Python, Java, Scala, etc... where each is appropriate, we also use different databases where appropriate.

Each system serves a need. We also use off the shelf databases, where appropriate: it should be noted Sensei uses Lucene (a well known search library), Voldemort has a pluggable storage engine (where we mostly use BerkeleyDB and a custom read-only storage engine), and Espresso uses MySQL.

We don't build databases for reasons of NIH: we focus on building features (faceting, real-time indexing, partitioning, fail over, etc...) that enable us to build fast, usable, feature rich, scalable, and reliable applications. We readily use open source components in many places within both our infrastructure systems (search, various databases, Kafka) and in the applications, and contribute to existing open source projects.

</comment></comment><comment><USER14> Options are great (and thanks for contributing to the OS community), but the biggest barrier to adoption will be confusion about all the NoSQL solutions floating around right now (including two others from LinkedIn). Therefore, I recommend that you spend more time on the homepage comparing Sensei with other NoSQL stores. Perhaps take a two-tier approach for those coming from Oracle or MySQL: why NoSQL, and if NoSQL, why Sensei NoSQL?

</comment><comment><USER15> Looking at its config, I'm reminded of Cassandra 0.6, but then I see the ZooKeeper functionality. Interesting. Love the open-sourcing! I showed an example of how to distribute inter-mingled DBs using MQtt a bit ago, but never posted here: [http://franklovecchio.tumblr.com/post/13051814890/mqdb- distr...](http://franklovecchio.tumblr.com/post/13051814890/mqdb-distributing- databases-with-mqtt).

One thing is for sure -- NoSQL isn't so mysterious anymore :)

</comment><comment><USER11> So to get data into this database, I have to have a Gateway implementation in Java?

Would I have to publish messages to Kafka in my language of choice to avoid writing any Java?

<comment><USER10> There is a Kafka gateway packaged with Sensei, see sensei-gateways module.

We love Kafka!

</comment></comment><comment><USER16> From a quick glance at the docs there's no database-side aggregations. Is that correct?

<comment><USER5> The facets let you support counting and group by - is there something else you had in mind?

Edit: You can get a pretty quick idea of what's supported the query language at <http://senseidb.github.com/sensei/bql.html>. Since Sensei was designed with document and text uses cases in mind, we have plans to support advanced queries where a relevance model is part of the query, allowing you to perform a custom sort on the server.

<comment><USER16> sum() and distinct() come to mind for sure, but I don't know how easy they'd be to implement. The particular use case I have in mind is where we have events streaming in and we usually don't care about the actual events, just various sums, counts and distinct counts over them grouped by various dimensions.

</comment></comment></comment><comment><USER17> Can Sensei be used as a replacement to MySQL + lucene?

<comment><USER18> Yeah, it'd be nice to see a side-by-side against other common DBs like MySQL and Oracle.

<comment><USER19> there's a comparison vs Mysql here: <http://senseidb.github.com/sensei/performance.html> for insert and query performance

</comment></comment></comment><comment><USER20> This is awesome.

Thanks for sharing this with the world. :)

</comment><comment><USER21> Is it single-point-of-failure free?

<comment><USER5> Yes. It's a partitioned system - you just need to have enough replicas per partition. Clients track cluster state by registering listeners to zookeeper.

</comment></comment><comment><USER22> A truly amazing peace of technology

</comment><comment><USER23> Nice looking wheel. I have a feeling it could be rounder though.</comment>


Could a clientside script redirect /news to /news?p=(random n in range(1..10)? - <AUTHOR> I'm just not smart enough on these things to know. I suspect the answer is yes, but can anyone confirm? <comment><USER2> Yes. One example:

       window.location = '/news?p=' + parseInt( (Math.random() * 10) + 1)</comment>


Self-charging, thousand-year battery by startup NDB - <AUTHOR> https://techcrunch.com/2020/08/25/self-charging-thousand-year-battery-startup-ndb-aces-key-tests-and-lands-first-beta-customers/ <comment><USER2> "NDB is a nano battery technology that generates electrons by converting the radiation energy from the energetic electron. Energetic electrons released from the nuclide of carbon, carbon-14. ...the energetic electron release mechanism where a carbon-14 atom decays into nitrogen, an anti-neutrino (which are both harmless and clean) and an energetic electron.

The electron released then undergoes inelastic scattering generating a shower of electric charge in its track.

The 3D printed MOF/ACNO/Graphene Supercapacitor then stores the generated charge for later use. Due to this feature, NDB is a graphene battery technology as well as a nuclear battery."

[https://ndb.technology/nano-battery-ndb-design/](https://ndb.technology/nano- battery-ndb-design/)

</comment><comment><AUTHOR> This sounds too good to be true. Suppose they deliver this with the scale to be used any place, we could see a truly wireless world, even the tv could come with a battery that would last a lifetime, no power outlets would be needed anymore. What are your thoughts?

</comment><comment><USER3> The proposed battery has a power output of 100 _micro_ watts. You can probably get more output with a tiny photovoltaic cell (like the ones on calculators).

</comment><comment><USER4> [https://youtu.be/uzV_uzSTCTM](https://youtu.be/uzV_uzSTCTM)</comment>


With 737 Max, Boeing Wants to Win Back Trust. Many Are Skeptical - <AUTHOR> https://www.nytimes.com/2019/05/08/business/boeing-737-max.html <comment><USER2> >Boeing will not be relying solely on its executives to win back the public's trust — a recognition that its leadership has lost some good will.

That's putting it mildly. Seems to me they should be putting as much effort into their engineering, quality, and manufacturing departments. That'd likely put them in a much better place to reclaim goodwill.

Props to the unions for sticking to their guns. I hope they hold out for a full acceptance of responsibility from Boeing. The age of faultless corporatism needs to come to a close. Now's as good a time to start as ever.</comment>


Improving access to sexual health education in Kenya with AI - <AUTHOR> https://blog.floydhub.com/improving-access-to-sexual-health-education/ <comment><USER2> Hey, I'm irving - the founder of SophieBot. Let me know if you have any questions!</comment>


The Army Is Falling Behind on Staffing Cyber Units, GAO Says - <AUTHOR> https://www.nextgov.com/cybersecurity/2019/08/army-falling-behind-staffing-cyber-units-gao-says/159250/ <comment><USER2> Something which I don't understand is why cyber war is both carried out by intelligence services and traditional armies. Sure, war "should" be done by soldiers, but my gut feeling is that intelligence services are the dominating actors.</comment>


SpaceX lands Falcon 9 booster on Just Read the Instructions drone ship - <AUTHOR> https://techcrunch.com/2018/07/25/spacex-lands-falcon-9-booster-on-just-read-the-instructions-drone-ship/ <comment><USER2> I feel like 1 year ago this would have a lot more points.

It's pretty cool that recovering used rocket boosters is becoming a norm

<comment><USER3> As too went the government space programs, until the disasters in each started happening.

The sense of awe sticks around though. I don't know, I still will from time to time get a little sense of vertigo when I'm in an airplane and the landing gear leaves the runway. The scope and scale of human accomplishment to get to the point where this miracle has become mundane will occasionally hit with the peculiar warmth that accompanies the loss of meaning of a word spoken one too many times. It briefly becomes new again, and _amazing_.

It is pretty cool indeed.

<comment><USER4> Have you seen "Everything's Amazing and Nobody's Happy"?

[https://www.youtube.com/watch?v=nUBtKNzoKZ4](https://www.youtube.com/watch?v=nUBtKNzoKZ4)

<comment><USER5> ah I remember that. I can't help but think in a modern context that this bit falls into the whole, "nostalgic for a better time that never existed fallacy" though.

For example: old crufty rant about how no one talks to each other and everyone is on their phones. Get a video from the 1960s of people on a train in NYC. Everyone has their head in a book or newspaper or magazine. By the 1980s, some nerds have walkmans. By the 90s everyone has discmans, plus their book. Today every has their phone, on which their either reading a book, a magazine or listening to a podcast or music. The media is different, it's a bit more interactive, but it really hasn't changed that much.

<comment><USER6> _Get a video from the 1960s of people on a train in NYC._

Of course people don't interact on mass transit.

 _The media is different, it 's a bit more interactive, but it really hasn't changed that much._

It has been a progression. More and more interaction has been mediated electronically, where it's been widely known since at least the 80's that interpersonal cues do not work in the same way. Of course non-interaction on mass transit is going to be a constant. It's socializing in the home, day to day, where things have changed.

Things have changed.

</comment></comment></comment></comment></comment><comment><USER7> If you like the ship's name, you should read this sci-fi:

[https://en.wikipedia.org/wiki/List_of_spacecraft_in_the_Cult...](https://en.wikipedia.org/wiki/List_of_spacecraft_in_the_Culture_series)

<comment><USER8> This particular ship's name (Just Read The Instructions) is deliciously punny, given that "read" might be present or past tense. So is the ship's AI saying that it just finished reading the instructions for the first time and what- could-possibly-go-wrong?

<comment><USER9> That's not a pun. That's just an ambiguous word. And it's only ambiguous for a person reading the written form. There's no indication in the book that the name is considered ambiguous by any characters.

</comment></comment></comment><comment><USER10> Video: [https://www.youtube.com/watch?v=zhOUkBZrO1E](https://www.youtube.com/watch?v=zhOUkBZrO1E)

But difficult to see anything.

<comment><USER11> Just before the landing at 85s in: [https://youtu.be/zhOUkBZrO1E?t=85](https://youtu.be/zhOUkBZrO1E?t=85)

</comment></comment><comment><USER12> This reads like some kind of weather report. I love the future we are living in.

<comment><USER13> The most interesting thing about this flight _was_ the weather: it was windy enough that the booster was (gasp!) a few metres off-centre.

<comment><USER14> And this is really important! As SpaceX goes from "recovery is a nice bonus" to "recovery is a standard part of every launch," they need to be able to handle challenging conditions. Weather delays for launch already cost a lot of time and money, and requiring perfect weather at the launch site _and_ out at sea could make it much worse. I think this is a really important milestone for them, even though it doesn't look that way at first.

</comment></comment></comment><comment><USER15> Did they mange to catch the fairings?

<comment><USER16> No they didn't. They said the wind was too much.

</comment></comment><comment><USER17> Very awesome. Now just waiting for the price to drop and launch frequencies to increase enough that it's basically impossible to compete in the launch market if you don't recover your boosters.

<comment><USER8> SpaceX says they're currently selling reused-booster GTO launches < 5.5 metric tons for $50mm, which is plenty low enough to screw up everyone else's financial plans. Ariane 6, for example, appears to cost more than SpaceX's current price.

<comment><USER18> > Ariane 6

Also, the first Ariane 6 test flight is currently scheduled for 2020.

Meanwhile, the next generation SpaceX platform, the BFR/BFS, is also expected to start orbital testing in 2020. BFR/BFS is 100% reusable, and will bring lift costs down at least an order of magnitude.

Now, everybody knows about 'Elon time', but the 2020 estimate comes from their COO, Gwynne Shotwell, who is without a doubt far more realistic with estimates.

I'm obviously a pretty huge SpaceX fan, but I really hope there is some meaningful competition for them in the future. It seems to me that Blue Origin might be the only possibility there.

<comment><USER19> I don't think Gwynne ever said orbital testing by 2020. They will start upper stage hops in 2019 maybe and potentially. However the booster is unlikely to be ready by then.

<comment><USER18> Well noted. I pulled 2020 from the Wikipedia article, which is sourced from Elon: [https://en.wikipedia.org/wiki/BFR_(rocket)#cite_note-34](https://en.wikipedia.org/wiki/BFR_\(rocket\)#cite_note-34) And several years ago at that.

</comment></comment></comment></comment></comment><comment><USER20> Has there been any talk of a night time booster recovery? I can't think of a reason this wouldn't be possible; I don't think the landing system uses visible wavelength cameras (other than for human consumption).

<comment><USER21> Today's recovery was at night.

<comment><USER22> As was last week's launch of the Telstar 19 satellite.

</comment></comment></comment><comment><USER23> The name of that ship gives me the impression that Elon (or someone in SpaceX) wanted to name it RTFM but had to compromise.

<comment><USER24> I'm pretty sure it's a Banks reference

</comment></comment><comment><USER25> The TechCrunch mobile experience is just so infuriating. If you scroll even slightly too far past the last paragraph it does this ridiculous jump animation to the next story and then you can't scroll back up to re-read anything from the story you were just on.

<comment><USER26> I disabled Javascript in my mobile browser a year or so back for privacy reasons, and it's made my browsing experience much better - no more ads, subscription popups, or bloated pages that grind my phone's cpu to a crawl - and, of course, no more "helpful" mobile-specific behaviors. While I fairly frequently have to make exceptions for sites that are nonfunctional without JS (anything video-related, for example), I recommend trying it out.

Of course, that does not excuse poor web design.

Disclosure: I have a vested interest in getting more people to disable JS, as it means developers are more incentivized to design with us in mind.

<comment><USER27> OMG, thank you for this! It has greatly improved my mobile browsing experience.

For chrome on Android, go to setting -> site setting -> JavaScript and then disable it.

<comment><USER26> (This is also where you can add exceptions to allow Javascript, or block it for specific sites if you'd prefer to leave it enabled in general.)

</comment></comment></comment></comment><comment><USER28> Elsewhere, flagged off HN frontpage: [https://news.ycombinator.com/item?id=17604933](https://news.ycombinator.com/item?id=17604933)</comment>


Ask HN: Reversible function definitions - <AUTHOR> What do computer scientists call a function that allows inference of transformations between two data types from a single definition, and does any language support this and explicit calls or implicit conversions?

   function convert
   (rad_t) phi = pi/180 * (deg_t) phi
   rad_t alpha = convert((deg_t) 45)  //explicit
   deg_t beta = pi/4 + alpha          //implicit
 rad_t and deg_t might be together in a typeclass archs or sumsuch.
disc.: I can't reach stackoverflow, so I'm posting here. <comment><USER2> There are Python packages that do what you want (units and numericalunits), but they aren't used much presumably due to the overhead they bring. You might also be interested in Prolog which feature what is, essentially, invertible functions. E.g:

convert(Deg, Rad) :- nonvar(Deg), Rad is Deg * pi / 180\. convert(Deg, Rad) :- nonvar(Rad), Deg is Rad * 180 / pi.

In this case, it doesn't work well because of floating point math, but it works well for functions manipulating lists. The Factor language also feature function inversion in an addon: [http://docs.factorcode.org/content/article- inverse%2Cintro.h...](http://docs.factorcode.org/content/article- inverse%2Cintro.html)

Afaik, figuring out what functions in general are invertible is an unsolved problem in computer science.

</comment><comment><USER3> They're call _isomorphic functions_.

Recently, I've been thinking a lot about them and also have been looking for a language/framework that supports them. What would be very interesting is a way to inverse non-isomorphic functions and get a constrained set of possible values (i.e., the reverse of age(birth, now) would return a range of date for either birth or now). Often, the complete value is not necessary and you're only interested in some subset of it (i.e., that a person's age is greater than 18).

<comment><USER4> It is true: An isomorphic function _admits_ an inverse _function_.

However, what you are describing in the second paragraph is a generalization of functions: You are now reasoning in terms of _relations_ , where a single entity can be related to _one or more_ others. Hence, a programming language that reasons in terms of _relations_ (not functions) seems very appropriate for your use case. Logic programming is a such a natural generalization of functional programming.

For example, if you want to reason flexibly over dates and times, check out Prolog and its finite domain _constraints_.

Michael Hendricks has implemented a great library for this, called library(julian):

[http://mndrix.github.io/julian/](http://mndrix.github.io/julian/)

This library lets you reason in terms of ranges and other constraints to describe general _relations_ between dates and times.

</comment></comment><comment><USER4> There is a natural generalization of functions, called _relations_. To benefit from relations, have a look at a _logic programming_ language such as Prolog. In Prolog, relations are defined by _predicates_ and constitute the basic building blocks of all Prolog programs.

A predicate is indeed sometimes called "reversible" if it can also be used in a direction that seems somewhat unexpected at first. For example, the predicate length/2 can be used to _both_ compute the length of a list and _generate_ a list of a _given_ length.

However, a predicate should ideally not only be "reversible", but indeed _completely general_. This means that we should also be able to ask: Which solutions are there _at all_? This is a query where _nothing_ is given, and the Prolog system must find solutions on its own. Indeed, length/2 also satisfies this criterion. We can ask for example:

       ?- length(Ls, L).
       Ls = [],
       L = 0 ;
       Ls = [_2168],
       L = 1 ;
       Ls = [_2168, _2174],
       L = 2 ;
       etc.

and the Prolog system _generates_ as many lists (and their lengths) as we want.

So, calling such predicates "reversible" still does not do justice to what they actually are, namely completely general _relations_ that work in _all_ directions. Therefore, when programming in Prolog, do not fall into the trap of calling your predicates "reversible" or "usable in _the_ other direction" is if there were only _one_ such other direction. Instead, think in terms of _relations_ between entities, and use language features that allow such general reasoning.

For instance, let us consider your concrete example. Using Prolog and its CLP(R) _constraints_ , we can very generally describe the _relation_ between floating point numbers. CLP(R) is for example available in SICStus Prolog and also a few other systems:

        :- use_module(library(clpr)).

        pi(Pi) :- Pi is 4*atan(1).

        rad_deg(Rad, Deg) :-
                pi(Pi),
                { Rad = Pi / 180 * Deg }.

Now the point: rad_deg/2 is a general _relation_ and can be used in _all_ directions.

For example, it can be used to compute the first argument if only the second is known:

      ?- rad_deg(Alpha, 45).
      Alpha = 0.7853981633974483 .

Conversely, it can be used to compute the second argument if only the first is known:

      ?- rad_deg(0.7853981633974483, Beta).
      Beta = 45.0 .

Here is your slightly more complex example, which is also an instance of computing the _second_ argument:

       ?- pi(Pi),
          rad_deg(Alpha0, 45),
          { Alpha = Pi/4 + Alpha0 },
          rad_deg(Alpha, Beta).
       ...,
       Beta = 90.0 .

But it _does not stop_ there! The relation can also be used _in the most general way_ to answer: Which solutions are there _at all_?

      ?- rad_deg(R, D).
      {D=57.29577951308232*R}.

In this case, it provides an _answer_ that expresses the _general relation_ between the two arguments even though none of them are known.

And it _still_ doesn't stop there! The relation can also be used to ask: Does the relation hold between two _given_ numbers?

      ?- rad_deg(0, 0).
      true.

If the relation _doesn 't_ hold between two given floating point numbers, the system tells us:

      ?- rad_deg(0, 1).
      false.

So, this is a true _relation_ between floating point numbers, usable in _all_ directions!

Caveat: Floating point numbers are an extremely bad way to represent numbers, and I can only advice to use better representations instead. For example, Unum computing looks very promising. In Prolog, consider using _rational_ numbers, available via CLP(Q). Declarative reasoning over _integers_ is available via CLP(FD) constraints. All these systems let you implement general _relations_ between numeric expressions.

<comment><USER3> This is awesome. Why aren't we all programming this way?

<comment><USER5> It's an interesting question.

In the 1980s, there was a lot of interest in Prolog, particularly people thought it would be good for massively parallel programming since you don't have to specify the exact sequence things happen in.

It was discovered pretty early that Prolog does not parallelize well, so that research went in another direction towards languages that were less expressive such as KL1.

I think Prolog has not really caught on because the combination of imperative in logic programming is awkward. For instance, you might implement a loop that uses logical failure to backtrack (and run the next iteration of the loop) when you have what you think of as a true condition.

Since then there has been a lot of interest in Datalog which is not a precisely-defined language with a particular syntax, but rather the pure logical core of Prolog which can be implemented in languages like Clojure or the SPARQL-RDF ecosystem, etc.

On the other hand there are also "constraint programming" languages which are more expressive than Prolog as well as SAT/SMT solvers and other tools that use more complex solving and optimization strategies.

<comment><USER4> With "constraint programming" languages, do you mean languages such as MiniZinc that provide dedicated syntax for some tasks?

I am asking because support for constraint programming is among the most important and most distinguishing features of common Prolog systems: All widely used Prolog systems (GNU-Prolog, SICStus etc.) ship _at least_ with a constraint solver over _integers_ , and often with many more, such as constraints over Herbrand terms (dif/2), constraints over rational numbers and also constraints over Boolean variables (SAT constraints).

So, support for constraint programming is typically provided also natively by Prolog systems, with a simple and also very expressive syntax that blends in seamlessly into Prolog like any other relation.

There was a recent HN discussion about why Prolog is not yet more popular:

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

In my view, Prolog implementations are now becoming interesting because they are now quite robust, feature-rich and also reasonably efficient.

<comment><USER3> I actually started that thread about Prolog :)

Recently, I've been looking at Mercury and Eve. I really thing logic programming is underrated.</comment></comment></comment></comment></comment>


Top sites built with PHP - <AUTHOR> http://coderfactory.co/posts/top-sites-built-with-php

<comment><USER2> Clarification on Yahoo! and it's use of PHP. They used to be a pretty heavy PHP shop, but there has been a consistent effort underneath to move away from PHP towards Javascript, more notably the new version of Flickr being a Node.js application. Eventually they'll stop using PHP and basically have from what I have heard. Nothing new gets written in PHP at Yahoo!

I noticed Flickr is on the list as well being incorrectly listed as a PHP site, it's Node.js now... The Flickr engineering team even wrote a blog post about it and I have spoken with Yahoo! developers who worked on the redevelopment effort.

</comment><comment><USER3> Misleading: Some parts of FB are still written in PHP but it is compiled before it runs on the server, so I would not call it a PHP site per se.</comment>


Why A Muxtape Comeback Won't Last - <AUTHOR> http://www.alleyinsider.com/2008/8/why-a-muxtape-comeback-won-t-last

<comment><USER2> Oh, wow, it might be a server issue. Who would have thunk it?

<comment><USER3> A server issue that causes the server to respond _"Muxtape will be unavailable for a brief period while we sort out a problem with the RIAA"_? Man, I hate those.</comment></comment>


China Threatens to Break Into U.S. Auto Industry This Year - <AUTHOR> http://www.popularmechanics.com/cars/news/industry/chinese-car-companies-2010

<comment><USER2> But our cars don't even have PDF readers.</comment>


When Fashion is Fungal - <AUTHOR> https://www.washingtonpost.com/climate-solutions/2020/08/31/fashion-musrhooms-mycelium-climate/ <comment><USER2> [http://archive.is/fwSf8](http://archive.is/fwSf8)</comment>


System Integrity Management Platform (SIMP) – By the NSA - <AUTHOR> https://github.com/NationalSecurityAgency/SIMP <comment><USER2> Keep those backdoors to yourself, motherfuckers.</comment>


Multiple Simultaneous Ajax Requests (with one callback) in jQuery - <AUTHOR> http://css-tricks.com/multiple-simultaneous-ajax-requests-one-callback-jquery/

<comment><USER3> globalStore? Ewwwww. As the jQuery documentation states on $.when [1], the .then() callback function will be called with a number of arguments equal to those passed to $.when(), ergo in this example:

.then(function(html, css, feature) {});

Which avoids the need for a global / shared object. If you need access to these resources outside of this one callback, prefer to pass the promise object itself around; promises allow multiple 'then's to be added, either before or after the promise resolves.

I'm working on a blog post about promises and related patterns (in the context / implementation of Angular, but they're equally valid for jQuery or other promise implementations), I'll post it on HN hopefully somewhere this weekend or early next week.

[1] [https://api.jquery.com/jQuery.when/](https://api.jquery.com/jQuery.when/)

<comment><USER4> Thank you for clarifying this!

</comment></comment><comment><USER5> This is the proper solution: [http://css-tricks.com/multiple-simultaneous- ajax-requests-on...](http://css-tricks.com/multiple-simultaneous-ajax- requests-one-callback-jquery/#comment-1154646)

<comment><USER6>
       $.when(
         // Get the css-tricks once
         $.get("http://css-tricks.com"),

         // get it twice
         $.get("http://css-tricks.com")
        ).then(function( csstricks1, csstricks2 ) {

          console.log( 'Fetched css tricks' );

          console.log( csstricks1, csstricks2 );
        });

csstricks1[0] is the content object and usually what you'll want - <USER2> example, if the response is json.

<comment><USER7> Why would you fetch the same thing twice? Or is that just for you example and wouldn't be done in reality?

<comment><USER8> Just to be sure that one of them isn't corrupted.

</comment></comment></comment></comment><comment><USER9> Can't get enough of deferreds and promises? Want lots more examples of interesting, cunning and mind bending ways to use promises and deferreds? As luck would have it, this:

[http://shop.oreilly.com/product/0636920030508.do](http://shop.oreilly.com/product/0636920030508.do)

...has just been published.

(N.B. I'm one of the authors - all feedback would be most welcome and apologies for the shameless plug).

<comment><USER10> I don't mean to shit on your book, but an entire book dedicated to jQuery deferreds? There is that much to say about them?

<comment><USER11> It's more a matter of learning how you can use them in various ways, and also of really getting into the habit of thinking with deferreds. I've been using them for about 7 years (mainly in Python) and I'm still finding interesting new ways to think about them, new tricks, etc. [Disclaimer: I'm also one of the book's authors.] BTW, if you use AUTHD as a discount code on the O'Reilly site, you'll get 50% off the e-book price or 40% off a dead tree version.

</comment></comment></comment><comment><USER12> Nice introduction to the promise concept. It's very interesting take a look to the oficial documentation [https://api.jquery.com/category/deferred- object/](https://api.jquery.com/category/deferred-object/) for more advanced features.

</comment><comment><USER13> And remember to use fun.prototype.apply if you're argument to $.fn.when is an array of deferreds or a function call that returns said array. E.g. $.when.apply(thisArg, array_of_deferreds).

</comment><comment><USER14> Please let me know if this is a horrible UI pattern (and I'd love to hear alternatives), but this could also be used to implement something like "do X, after Y succeeds _and_ at least Z milliseconds have passed".

For example, if you have a Search button that makes an AJAX request, and there's a loading spinner while waiting for that request, you could use this technique to make the spinner show for at least, say 500 milliseconds. I have noticed that a lot of AJAX search forms return so quickly that the loading spinner just barely flickers before the results display. It might be less jarring if you ensured that the spinner would show for at least 500 ms. Of course, you don't just want to _add_ a 500 ms delay after the request returns, because then slow requests will get that much slower.

</comment><comment><USER15> Or you can make a count-down latch of some kind:

      var num_results = 3;
      var results = []
      var makeCallback = function(index) {
        return function(response) {
          num_results -= 1;
          results[index] = response;
          if (num_results > 0) {
            return;
          }

          // actually do stuff here, all results are loaded.
        };
      };
      $.get("/a", makeCallback(0));
      $.get("/b", makeCallback(1));
      $.get("/c", makeCallback(2));
      // etc

It's also not hard to make a generic latch-producing function so you can just write stuff like:

      var l = makeLatch(callback);
      $.get("/a", l());
      $.get("/b", l());
      $.get("/c", l());

<comment><USER16> Yes, you can reinvent wheels and avoid javascript best practices, and lose all benefits of async code control.

<comment><USER15> Latches aren't async code control? Javascript has (async) best practices that survive more than a couple years?

Promises are great, I totally agree (as long as they're A+ compliant). But they're not on every platform, and it's not (usually) worth building your own if it's not there.

</comment></comment></comment><comment><USER17> Like many, I had written myself a similar utility some years ago because "I need several stuffs that don't depend on each other, so they could be downloaded or calculated at the same time to get the end result faster" is a pattern that often comes up.

Nowadays I use "async.js" ([https://github.com/caolan/async](https://github.com/caolan/async)): does the same, but with extra features.

It doesn't rely on jQuery unlike the snipplets of the article, so it's useful when you're aiming for vanilla or want to share code with Node.

It's far from the only library of this type, but I like it because it's reliable and has a good balance of simple yet tweakable for uncommon workflows.

<comment><USER17> I also like promises-style solutions, but in practice it felt like it needed more things modified to work with them than async when mixing with third-party libraries required by projects, but that's more a gut feeling than backed by hard numbers, so I'll reevaluate that assertion when the right project comes along.

</comment></comment><comment><USER18> As as extension to this idea, I do stuff like this sometimes in coffee.

$.when.apply($, (object.request() for object in objects)).done (responses...) -> doStuff()

</comment><comment><USER19> Why he says about one callback when he really has four? Not even saying about globalStore.

</comment><comment><USER20> This is pretty similar to using RequireJS no?

</comment><comment><USER21> Promises are the way you should be doing AJAX, really.

<comment><USER19> And that is how $.when and $.then works, no?

<comment><USER21> ...which is why I upvoted the post? Just saying, a lot of people aren't aware jQ even has them, even if it's not inline with the A+ spec.

</comment></comment></comment><comment><USER22> Yes, promises are great. It would be nice to have a function on a promise that returns a regular callback which you can pass to functions that only know about callbacks.

Also, if you are using promises for getter functions, you'll have to store those promises somewhere, so that next time you don't load them again. Basically "getting" a resource involves caching, promises, and maybe even throttling. So its ideal implementation is not really just a promise.

Check this out: [http://platform.qbix.com/guide/patterns](http://platform.qbix.com/guide/patterns)</comment>


Factoring Out Common Technology - <AUTHOR> http://blog.opbeat.com/2013/05/03/factoring-out-common-technology/

<comment><USER2> Great point, but it is also quite easy to go too far in trying to factor out features that one should just build. I think we need a matrix equivalent to the recent xkcd <http://xkcd.com/1205/> to inform decisions on when finding, integrating, and adapting a certain "factored out" service or feature is simply not worth the effort...</comment>


Self destructing emails that gmail or the NSA cant read - <AUTHOR> http://venturebeat.com/2013/11/14/secretink-is-the-snapchat-of-email-and-sms-with-a-little-mission-impossible-sprinkled-in/#vb-gallery:2:860482

<comment><USER2> Sample link: [https://secretink.co/read/2atelv15n5hqip59416c7c3c0q](https://secretink.co/read/2atelv15n5hqip59416c7c3c0q)

Why does it send the decryption key to the server (presuming the data is even actually encrypted server-side)? Just use the megaupload model, where you link to an address containing a #, and then client-side javascript to decrypt.

Is it perfectly secure? Of course not, but at least then this company itself can't read them. Now there's nothing NSA-resistent about it. Just NSL secretink.

</comment><comment><USER3> I love how we are seeing the snapchat-ization and tinder-ization of everything. LA startup scene came out of nowhere!</comment>


How a spider jumps on its prey – science has the answer - <AUTHOR> http://www.bbc.com/news/science-environment-43996959 <comment><AUTHOR> Paper can be found at [1]

[1] "Energy and time optimal trajectories in exploratory jumps of the spider Phidippus regius" [ [https://www.nature.com/articles/s41598-018-25227-9](https://www.nature.com/articles/s41598-018-25227-9) ]</comment>


What Is the Oldest Computer Program Still in Use? - <AUTHOR> https://www.technologyreview.com/s/538966/what-is-the-oldest-computer-program-still-in-use/ <comment><USER3> I think the more interesting thing about these ancient programs is the question of why projects to modernise them fail over and over again. Of course we can already guess many of the answers without even reading any post- mortems, but obviously these organisations were able to execute complex IT projects once upon a time and over the years lost that ability, leaving them stranded with ancient systems.

In the case of MOCAS I'm going to assume it's all of the standard reasons: weak management, absence of competition, over-reliance on the same small pool of defence contractors that know how to navigate byzantine federal procurement rules, etc.

<comment><USER4> > _I think the more interesting thing about these ancient programs is the > question of why projects to modernise them fail over and over again._

A lot of it is because they fail the KISS principle.

<comment><USER5> Specifically, suffer from second system effect [0].

[0] [https://en.m.wikipedia.org/wiki/Second- system_effect](https://en.m.wikipedia.org/wiki/Second-system_effect)

<comment><USER6> While we were building a web frontend on top of an insurance system written in Cobol running on a mainframe, another team was trying to port that Cobol to Java. I often talked to those guys as we were in the same IT basement and indeed, they were to port it and 'and some things'. That project failed while ours is still running on that Cobol system.

<comment><USER6> Can't edit (yet?) but obvious typo 'and = 'add.

</comment></comment></comment></comment></comment><comment><USER7> Because of its longevity, replacing the program will essentially mean replicating all the logic so that its input and output is perfectly duplicated - including any bugs or quirks it has. Any differences, I'm sure, will end up causing a domino effect of failures and inaccuracies in all the _other_ antiquated systems this program talks to. So then the question becomes, "why bother?" and 58 years later it still chugs along. I know of code I personally wrote over a decade ago still being used in production happily every day, so I'm sure this is bound to be a much more common experience in the years to come.

<comment><USER8> It was written by Grace Hopper, there are no bugs ;)

<comment><USER9> They wouldn't dare.

<comment><USER8> The first thing I did was scan the article for her name. She was such an amazing person in so many ways that I'm in awe.

</comment></comment></comment></comment><comment><USER10> For me, I still occasionally get a server monitoring email from a cron job running a Perl program that first mailed me in April '97\. I've got no idea who's keeping that running... The "startup" I wrote that for (and later went to work for) has been dead a decade now.

(Scary though: this might mean _someone_ is still running a Redhat 5 or 6 linux machine or VM - that's a late'90's vintage Redhat, not Redhat Enterprise Linux. It's _possible_ I updated that Perl script when we moved to CentOS in the early 2000's, but surely if anyne's been updating it since then - they'd surely have taken my personal email address out of it???)

</comment><comment><USER11> Slightly off-topic, but meta user interface relevant:

IMHO Google has been so successful because of their user interface and not because of its superior algorithm. In essence it is a REPL where the E part is slightly non-trivial.

But I agree it is the best user interface. Files and processes are a great thing, but the shell built on-top of it glues everything together and for me is the most successful interface. However it would be nice to switch interpreters _online_ , i.e. switch between e.g. Bash or Python and "human language" (like Google Search). Interestingly DuckDuckGo provides something similar via its '!' syntax.

<comment><USER12> I think at least at first, Google's success was definitely because of the algorithm. Existing search engines were _terrible_. They primarily relied on text analysis and human edited web directories. You could search for something as basic as "pet food" and get a few relevant results and then a bunch of random garbage. When Google came out using PageRank, it was a whole new world. Every tech savvy person I know switched right away, and not because of the interface.

But no doubt the simple and elegant interface helped too, and has helped them stay ahead as the other search engines have caught up with their algorithm.

<comment><USER13> I agree. That PageRank was patented is only reason Google is what they are today. They would've been copycatted to much lower revenues or market share.

<comment><USER14> That's completely untrue.

There were numerous well-understood PageRank alternatives available at the time (eg HITS was published in 1999[1]).

Google did lots of things right (good algorithm, good scaling, good UI, text- based advertising, spam handling, no portal etc), and to say it was "only PageRank" is just wrong.

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

<comment><USER13> Never heard of HITS for some reason. Thanks for the tip. A quick Google for comparisons between two give this:

[http://www.slideshare.net/shatakirti/pagerank-and- hits](http://www.slideshare.net/shatakirti/pagerank-and-hits)

[http://www.ijarcce.com/upload/2014/february/IJARCEE9J_a_pooj...](http://www.ijarcce.com/upload/2014/february/IJARCEE9J_a_pooja_comparative.pdf)

The first indicated PageRank has less disadvantages like spam. The second sums up the result here:

"page rank is more popular algorithm... due to the features like efficiency, feasibility, less query time cost, less susceptibility to localized links, etc which are absent in the HITS algorithm"

If that's true, then my claim would stand as HITS wouldn't have been good enough without a lot of modification. Google also got me better results than Ask that used HITS. If such claims are wrong, then you might be right. It would take more than a quick search to know.

</comment></comment></comment></comment></comment><comment><USER15> [https://en.wikipedia.org/wiki/Ship_of_Theseus](https://en.wikipedia.org/wiki/Ship_of_Theseus)

</comment><comment><USER16> I read a book by Vernor Vinge where the main character did some software archeology as part of his hobby and technological interests. He discovered that the program used to keep time was viciously ancient, and after looking into "epoch" figured that the old-calendar year "1970" must have been decided upon because "that was when humanity first landed on the moon".

</comment><comment><USER17> > It's widely accepted that the first computer program was written by Ada > King, Countess of Lovelace, in 1842

Hmm. Hasn't this been widely disputed and disproven? I wonder why it keeps being circulated, and with such a bold tone.

</comment><comment><USER18> Emacs and vi date back to at least 1976: [http://www.slate.com/articles/technology/bitwise/2014/05/old...](http://www.slate.com/articles/technology/bitwise/2014/05/oldest_software_rivalry_emacs_and_vi_two_text_editors_used_by_programmers.html)

</comment><comment><USER16> My first real job out of college, classic DoD contractor gig, I walked in and was shown the spiffy VAX I was going to be using. I didn't know which was older, the computer or me. There's one sitting in the Computer History MUseum in Mountain View. Wirewrap, 4mb of RAM maximum and each 1mb was a square foot of circuit-board you'd have to slide in and lock into place with thumb-tabs. I felt my own obsolescent like an angry itch every day I showed up for work and turned it on.

The way I understand it, the Navy got tired of supporting that. "If you want more of our money, you'll upgrade this crap." So they did, and now it's one server rack with, wouldn't you know, such modern things like USB ports and 21st century OSs and ethernet capability. But that's crazy talk.

</comment><comment><USER19> Here's a great article with many more examples:

[http://www.pcworld.com/article/249951/computers/if-it- aint-b...](http://www.pcworld.com/article/249951/computers/if-it-aint-broke- dont-fix-it-ancient-computers-in-use-today.html)

My favorite is the 90 yr old Texas company that uses an IBM 402 from 1948. The computer uses plugboards - breadboard-like cards that are programmed by plugging wires like a patch panel. As of the date of the article (2012) they still used the plugboards, as well as a more modern card reader/puncher.

Edit: I just realized my example is also mentioned in the OP article, though there is more detail (and photos) in the PCWorld article I linked.

</comment><comment><USER20> Ironically (I think? Or is it Fittingly?), they're probably using MOCAS to try and find a replacement for MOCAS.

</comment><comment><USER21> Notedly it runs on a very small configuration of an IBM mainframe (z10 BC - <USER2> GB of RAM), costing less than 100k USD.

<comment><USER22> Not practical/legal due to IBM licensing, but the open source hercules emulator is stable enough to even run current z/OS on a linux box: [http://pastebin.com/umhdBsPu](http://pastebin.com/umhdBsPu)

</comment></comment><comment><USER23> what about these ? [https://en.wikipedia.org/wiki/Barrel_organ](https://en.wikipedia.org/wiki/Barrel_organ)

<comment><USER24> Is an organ really in the 'computer' class of machine? It doesn't "carry out an arbitrary set of arithmetic or logical operations," to quote the Wikipedia definition.

A barrel organ could be said to follow a 'program', if we're loose enough to mean 'a set of machine-readable instructions that cause a process to take place' but it is in no sense calculating a result based on logical operations.

</comment></comment><comment><USER25> "You can still find antique green-screen systems if you look hard—in some cases, a pleasant Web interface just disguises the old guts." \- There is so much wrong with this sentiment! It's just kind of folded in there, the insinuation that "web interfaces are more pleasant" than TUIs. I cannot express how much this kind of writting annoys me. Why can't they tell the story without wedging in unbacked opinions. The sentence "You can still find antique green-screen systems if you look hard—in some cases, a Web interface just disguises the old guts." would work just as well.

<comment><USER26> I think that you might be very nearly alone in your sentiment that green screens offer as good a user interface as more recent technologies.

<comment><USER27> I've seen it many times, particularly in finance which still has plenty of VT100 applications.

The reason is that once you know the codes, you can navigate and enter data at a genuinely incredible rate. If you've ever watched an experienced operator on one of these applications you'd be amazed. For one loan processing application, the terminal was an order of magnitude faster than the Web-based interface that was being deployed.

The key here though, is "experienced". This is someone who has developed the knowledge and muscle-memory to operate at that speed. This also makes the system more brittle (and often harder to change). Critically, it also means it takes a lot of training and time for people to be productive.

The reason many big organizations dropped the terminals - they wanted to be able to train people quicker, not because it was more productive.

<comment><USER4> > _The key here though, is "experienced"._

The other key is that those people and those "POS" style apps do very little things -- mostly a single task like e.g. bank accounts management.

<comment><USER27> The example I put in there was loan applications, which are quite complex. Loan origination (especially Business Loans) is perhaps the most complex business process I've ever encountered.</comment></comment></comment></comment></comment>


Show HN: Microsoft ReportViewer recompiled for .NET Core - <AUTHOR> https://github.com/lkosson/reportviewercore/ <comment><USER2> I really appreciate your efforts with this. Thank you.

</comment><comment><USER3> Great job!</comment>


Google Classroom outside the classroom - <AUTHOR> https://blog.google/topics/education/google-classroom-outside-classroom/ <comment><USER2> Unclear. [https://support.google.com/edu/classroom/answer/6025224?hl=e...](https://support.google.com/edu/classroom/answer/6025224?hl=en- AU&ref_topic=7175444&authuser=0) <quote> No. To use Classroom with students at a school, the school must sign up for a free G Suite for Education account. </quote></comment>


Google's Next Opportunity Could Spell Serious Competition for Facebook on Mobile - <AUTHOR> http://madmorkonmobile.blogspot.com/2014/07/google-next-opportunity-could-spell.html <comment><USER2> Isn't Google already selling mobile ads that rely on app store analytics, [http://techcrunch.com/2014/04/22/google-to-offer-mobile- app-...](http://techcrunch.com/2014/04/22/google-to-offer-mobile-app-install- ads-in-search-and-youtube-expands-app-deep-linking-to-adwords/) ? What's the difference in this proposal - bidding for placement within store categories?

<comment><USER3> Another big difference is that those mobile ads are only in the Search and YouTube apps, and not in the Play Store app itself (although the ads link directly to the Play Store). From a usability standpoint, putting app ads directly in the Play Store is a terrible idea. I can see users easily getting confused about whether a listing is part of the Store proper, or an ad in the Store. That's probably a big reason this hasn't happened.

<comment><USER4> Then again, that was an argument made against Adwords when it first debuted. But that worked out pretty well for a Google (admittedly, it's debatable whether users are entirely clear on what's a sponsored result and what's not).

Here's a related question: what's stopping Facebook, or any company for that matter, from making its own App Store? It could list both Android and iOS apps, and simply link to each app's original listing in its native App Store. The problem, of course, is that if this was in the form of an app it could not be part of the iTunes App Store.

But the search experience in both major app stores is sorely lacking, and if some other big company with reach wants to improve on that -- desktop or otherwise -- it would be a welcome improvement.

<comment><USER2> Would the business model be advertising? There's a bunch of app review sites which seem to rely on affiliate revenue from iTunes.

</comment></comment></comment></comment><comment><USER5> His business argument concludes with this: "then we're talking a high margin ads business worth an additional $1.5B a year in revenue."

So we're talking about the app store (Google Play Store), which is an extraordinarily important centerpiece to Google's hold on Android and mobile. The risk: you mess up the app store, and torpedo Android; the benefit: you gain 2% in revenue, maybe 6% in new profit.

Google isn't getting out of bed for $1.5 billion in new revenue, and they sure as heck aren't putting Android at risk in any regard for such a small sum. In two years they'll be as large as Microsoft, sporting north of $80 billion in sales. $1.5 billion is now a rounding error.

You'd have to say this concept was a $10 or $20 billion opportunity. Otherwise Google will never consider it.

</comment><comment><USER6> I've never went app exploring on my phone, tablet or any PC I've ever owned the way articles this week are suggesting is so broken. I've always started with a) a service I already use, b) a problem I need to solve or c) a recommendation from someone/thing I trust. App discovery is not something I need my device or service provider to "solve" for me.

</comment><comment><USER7> Discovery happens less and less in the App Store proper, and more elsewhere (search, in-app ads, etc).

This is not to say the article is very wrong -- only that the placements Google can sell will be, for the most part, outside of the Play app.

</comment><comment><USER8> That would likely spell the end of indie app development as well.

<comment><USER9> Why? There would still be "organic" discovery just like there is organic website discovery on search.

Also, an adwords-like model is relatively friendly to small budgets. A cost per install (or effectively cost per instal) model favors apps that have a high value per user, which aren't necessarily the bigger companies.

<comment><USER8> I believe this model necessitates a substantial up-front investment which indie developers may not be comfortable with. Also, unlike AdWords ads which are shown side-by-side with 'free/organic' search results (which may still be 'bought' from an SEO company), those auctions would totally supplant the current discovery model. That's at least the impression I'm getting from the article.

</comment></comment></comment><comment><USER10> very relevant

[http://priceonomics.com/when-yahoo-reigned- supreme/](http://priceonomics.com/when-yahoo-reigned-supreme/)</comment>