Amazon expands its air cargo fleet - <AUTHOR> https://techcrunch.com/2019/06/18/amazon-expands-air-cargo-fleet-with-15-more-planes-will-have-70-planes-by-2021/ <comment> W-Stool Here's a scenario that gives me pause: you as a company goes all in to re- engineer your critical apps to use AWS as efficiently as possible. Your apps are now no longer portable away from AWS without a lot of time and work.

Then Amazon enters your business space in direct competition to you. Through your business with AWS you are now funding a large, fierce, and direct competitor.

Anyone else think of this, or am I just being paranoid?

<comment><USER3> This is what Amazon does. See Amazon Basics? Sellers sell on Amazon, Amazon tracks what sells well, enters market with same cheaper product and puts you out of business.

You are doing a large part of the market research for your competitors by using cloud services and platforms. You just pray they are good actors and ethical.

<comment><USER4> > See Amazon Basics? Sellers sell on Amazon, Amazon tracks what sells well, > enters market with same cheaper product and puts you out of business.

Or they contract with you to sell a private label version of your own product.

For example, Ergotron makes a very nice quality monitor arm:

[https://smile.amazon.com/dp/B00358RIRC/](https://smile.amazon.com/dp/B00358RIRC/)

Amazon Basics has a monitor arm that looks just like the Ergotron, except it's all black instead of silver and black.

[https://smile.amazon.com/dp/B00MIBN16O/](https://smile.amazon.com/dp/B00MIBN16O/)

I have a couple of the Amazon arms. The reason they look the same is because they are made by Ergotron. It says so right on the box:

 _Ship From: Ergotron Inc - Private Brands - <USER2>

<comment><USER5> Sure, they partner with you and force you to sell the same thing for less money, with less brand recognition.

All under the implied threat that if you don't partner with them, they will go to a competitor and push that product before yours.

</comment></comment></comment></comment><comment><USER6> Increased use of airplanes is one factor in why US greenhouse gas emissions grew last year after years of decline: [https://www.vox.com/energy-and- environment/2019/1/11/1817711...](https://www.vox.com/energy-and- environment/2019/1/11/18177118/airlines-climate-change-emissions-travel)

<comment><USER7> U.S. airlines != Amazon cargo. How do you propose Amazon ship their products? Rail?

Amazon is effectively just replacing UPS / FedEx. In the long run, the net result to society is the same whether UPS, FedEx or Amazon flies the plane (assuming every plane operates at the same capacity and have equal fuel efficiency). The pollution from these planes is a function of how much people shop online, not which company flies the plane.

<comment><USER8> _How do you propose Amazon ship their products? Rail?_

Amazon ships by rail already. I see Amazon Prime-branded trailers on flatbed rail cars tearing across the country all the time. And the number of Prime- branded tractor trailers I see on the highways between cities has grown exponentially in the last year or so.

<comment><USER9> Sure. Honestly, how much utility does 2 day shipping really have? Is it really enough to justify the increased emissions of flying a package across the country instead of using a more efficient method?

Of course that's not really Amazon's problem. We really need more reasonable taxes on fossil fuels that make it cost-prohibitive for Amazon to rely on air shipping.

<comment><USER10> _We really need more reasonable taxes on fossil fuels that make it cost- prohibitive_

And more awareness among consumers - how often do we need same day/next day delivery? I bet not that often

It would be nice for consumers to support local businesses instead of always buying from mega corporations...

<comment><USER11> I'm well aware of the environmental costs of these decisions. For a while, I avoided online shopping, for a number of reasons. One day, a few years ago, I drove to four or five different stores in my city to try to find some specific hardware product, where physical fit was important. I did not find it. Then I searched online, and found an answered buyer question that made it clear that the thing would work for me. After this, my online shopping ramped up a lot. What's worse? 45 minutes of driving an old car, or .01% of the freight volume of an 18-wheeler over hundreds of miles?

</comment></comment></comment></comment></comment></comment><comment><USER12> I wonder if Amazon will offer any up any spare freight capacity on their planes? After all if they're not using they can always sell that capacity.

<comment><USER13> A logical eventual extension of [https://freight.amazon.com/](https://freight.amazon.com/)

<comment><USER12> That makes sense. I wonder how much a slot would cost compared to regular airfreight? I'm not even sure how much the regular Amazon freight service costs compared to regular truck freight.

<comment><USER14> According to recent news, Amazon freight is about 30% cheaper.

</comment></comment></comment></comment><comment><USER15> Since they own the planes can they move stock around rather than packaged parcels, doing the boxing at the remote end?

If they could do this then they could pack so much more stuff on the planes than a commercial parcels company could.

</comment><comment><USER16> I am scared at the scale that a single company can have nowadays. This is astounding!

<comment><USER17> This isn't much compared to the Korean chaebol - have you seen how much stuff Samsung really make?

<comment><USER18> lol, samsung is worth a third of what Amazon is worth. Apple could buy Samsung. Samsung is a big company, but Google, Microsoft, amazon, and Apple are in a whole different league

<comment><USER15> Stuff made, not market cap.

It depends on big and how you define it. For instance Samsung has getting on for three times as many employees as Apple. Plus they actually make stuff rather than just get some other company to do it for them.

The stock market values companies precisely because they don't have the liability of employees that make stuff. Personally I value companies that do.

</comment></comment></comment></comment><comment><USER19> I'm surprised they're pushing this out so fast considering one of their planes crashed outside of Houston fairly recently.

</comment><comment><USER20> Techies who dont have Prime and dont buy something every week, please raise your hands.

Five hours later: still waiting for first hand.

</comment><comment><USER21> drove down from Palo Alto to San Diego up to LA yesterday and I passed so many amazon 18 wheelers. they were by far the most prevelent of a single "trucking company" that I saw (there were a handful of others that I saw more than one truck of, but must have seen at minimum 5-10 amazon trucks)

<comment><USER22> They're pretty much the new Wal-Mart.

<comment><USER23> Wal-Mart also wants to be the new Amazon

[https://wwd.com/business-news/financial/amazon-walmart- top-e...](https://wwd.com/business-news/financial/amazon-walmart-top- ecommerce-retailers-10383750/)

</comment></comment></comment><comment><USER24> Omega Co is expanding.

</comment><comment><USER25> Bet they could get a great deal on lightly used 737-MAX planes available from these sellers. (insert Amazon Marketplace link :-))

<comment><USER26> MAX doesn't have a freighter conversion program yet though.

<comment><USER25> This is the company that famously turned doors into desks. [1]

1 [https://blog.aboutamazon.com/working-at-amazon/how-a-door- be...](https://blog.aboutamazon.com/working-at-amazon/how-a-door-became-a- desk-and-a-symbol-of-amazon)

<comment><USER27> Well, desks don't fly through the air at 500 mph with ~hundred tons of cargo aboard :/

<comment><USER28> Well, Steve Ballmer never worked at Amazon.

* Ducks, I'm going to take a karma hit for this _</comment></comment></comment></comment></comment>


Russian Nuclear Sub Prevented 'Planetary Catastrophe,' Officer Says - <AUTHOR> https://www.bloomberg.com/news/articles/2019-07-08/stricken-russian-nuke-sub-crew-prevented-planetary-catastrophe <comment><USER2> Man that is some rich clickbait.... it's a real quote but their own story in the next paragraph says:

>Kremlin spokesman Dmitry Peskov said he wasn't aware of the official's comments but said there was no indication the incident posed a broader threat. "As for the reactor, there are no problems with that," he said on a conference call.

Plenty of subs have gone down before, without a 'Planetary Catastrophe'.

<comment><USER3> Yes, very rich clickbait. This one by Ars Technica [1] is much better, giving details on the sub and even listing the officers who lost their lives in the accident, many of them very senior Russian military officials.

[1] [https://arstechnica.com/tech-policy/2019/07/death- at-1000-fa...](https://arstechnica.com/tech-policy/2019/07/death- at-1000-fathoms-the-fire-aboard-russias-secret-sub/)</comment></comment>


Iran plane crash: Ukrainian jet was 'unintentionally' shot down - <AUTHOR> https://www.bbc.com/news/world-middle-east-51073621 <comment><USER2> It escapes me, why a civilian airline was in air in first place. Shouldn't ATC be asked to stop flight movements for the duration of missile launches?

In tense war (like) situations, things go wrong. To me, letting civilian airline in air, itself was serious wrong.

What a terrible collateral.

<comment><AUTHOR> I can think of several reasons:

\- despite its belligerent actions in Iraq, Iran wanted to live up to Khamenei's tweet to Trump "1st. You can't do anything". [0]

\- if Iranian leadership was actually fearing American reprisals after their missile strikes at Iraqi bases, they may have wanted to maintain civilian air traffic as human shields, because if only military planes were allowed to fly and an actual war broke out, American total air superiority would benefit them. Having civilian planes flying would make it easier for Iranian military operations to mingle in.

[0] [https://twitter.com/khamenei_ir/status/1212301034871279616](https://twitter.com/khamenei_ir/status/1212301034871279616)</comment></comment>


Always have 18 months of cash in the bank - <AUTHOR> http://cdixon.org/2011/12/06/always-have-18-months-of-cash-in-the-bank/ <comment><USER2> _Almost all VCs I know care primarily about the success of their companies and not about extracting every last point of equity._

You would be surprised, I have seen some things in my career that are insane and done for the simplest reasons, like ego, megalomania and most of all money.

I once was with a start up in which the CFO and the COO got into a fist fight in front of the entire company, over equity.

Another time I saw a VP who was running one division give everyone the day off, called in three of his trusted developers, and they all said that the development team was on strike and would not return unless the board appointed him the CEO. He then proceeded to run the company in the ground, while paying himself and his three developers handsomely.

And I have seen investors use all manners of leverage against the operations team to dilute their ownership. The stories about being diluted out of ownership are common because it happens all the time. I personally, was diluted out of my ownership in a start up. A 90 million dollar exit and I walked out with less than $100k as the CTO, a tough lesson in finance for me, but it happens all the time.

I have come to believe that for people that act like this, it is a game, and the game is not won if they cannot get every penny. It probably bothered them that I walked away from the table with less than 100k, because some how they did not play the game hard enough to get that from me. Somehow they are less of a person, if they don't win and they judge their self-worth based on it.

I am not saying that this is all, or even most, VC's, but they are out there, and you only need to cross one of them for it to make an indelible mark.

<comment><USER3> > _Almost all VCs I know care primarily about the success of their companies > and not about extracting every last point of equity._

This quote is from someone who has not been around the block.

<comment><USER2> The author did preface it with "i know" which does condition it as their experience. But yes they may have a experience that is the minority to the odds of running across a bad VC and generally once you are in a VC group you tend to use those connections in the future. For example I just had a really good idea the other day, called a good VC that I know and we are working out the details now to start working on it. If I had met her as one of my first contacts, I probably would have not went through the learning process that I did.

</comment></comment></comment><comment><USER4> I initially thought this was referring to _personal_ finances, and thought that 18 months seems a little extreme. I have heard people suggest to keep anywhere from 3 to 6 months of living expenses in the bank.

<comment><USER5> Depends on your income. Apparently, it takes on average 30 weeks to find a $100k job.

[http://www.ehow.com/facts_5858845_average-length-job- hunt.ht...](http://www.ehow.com/facts_5858845_average-length-job-hunt.html)

<comment><USER6> 30 weeks for $100k and 25 weeks for $40-$75k... but also 30 weeks if you're over 55 years old, and 21 weeks if you're not. And I'm guessing that industry and education level would have even bigger effects.

</comment></comment></comment><comment><USER7> _1) as a rule of thumb it takes 3 months to raise money_

If you're already connected with multiple VCs that might be true. If you're starting out cold, I wouldn't count on getting funded in 90 days even if you have the greatest thing going on planet Earth.

<comment><USER8> Agreed. Closing itself takes around 60 days. So 90 days is really tight if you are talking about from "hey let's go get money" to "cash in bank"

</comment></comment><comment><USER9> I would think having the ability to raise 18mo of funds to deposit in a bank already puts one in a small (and quite fortunate) group. True, this ability can come from diligence and careful financial planning, but there will always be external factors that could preclude this ability to save up in the first place.

Besides that, the more reckless half of myself is reminded of this Oscar Wilde quip: "Anyone who lives within their means suffers from a lack of imagination."

</comment><comment><USER10> That's 18 months worth of expected expenses or 18 months worth of reasonably expected losses? I am confused.

If a company has any dependable revenue, I would expect that to count against the money you have to have in the bank. What do others say?

I am a big fan of cutting expenses to a min, and funding from operations to the extent one can but have noticed that VC types don't like this (relatively low-risk) strategy. Not entirely sure why.

</comment><comment><USER11> I'm wondering if Chris is talking about Series A+ with this.

If you raise anything less than $500k angel it's going to be very tight to make that last 18 months by the time you've hired a few developers, covered expenses, etc - esp in SF/SV

</comment><comment><USER12> It depends.

If you plan to build a profitable startup, meanings, you are willing to sell the service (for $$) as early as possible, then perhaps, "18 months" is a period of time which within you get to the break-even point.

If you are planning to build a cool-and-free-iPhone/android-app and all you care is to get as many users as possible, then perhaps, this is a great advice for you.

In the first case, however, it means, you only need raise enough for about 12-18 months.

</comment><comment><USER13> 18 months of cash. That would take me about 180 months to save up.

Are you guys all really that disciplined when it comes to saving up? Or simply earning way too much?

</comment><comment><USER14> s/in the bank/under your bed/g.

</comment><comment><USER15> Hello Hacker News.

I would LOVE to have 18 months in the bank. In fact, I would love to have 30 days in the bank. And I think I have a really terrific idea and I know for a fact that I can make it a reality, since I have implemented aspects of this before, and have about 27 years of programming experience (started when I was 7). The thing is, it seems quite far-fetched to think that someone would give me 18 months worth of cash to make my vision a reality. Anyway, here is the idea: <http://cure.willsave.me/vision> . Basically the goal is to replace WordPress with a platform that has a number of advantages, starting with a CoffeeScript codebase running on Node.js.

"The Cure Platform is a component- and plugin- based content and data management framework.

The main goal for this platform is increased developer and user productivity. To achieve that the platform will have these features:

* WYSIWYG drag-and-drop designer. No source code templates (no mixed markup/source) and limited CSS.

* Component (GUI control) -based architecture to enable easier code reuse and faster configuration and integration of modules.

* Comprehensive data framework enabling drag-and-drop form creation with corresponding updates to hierarchical models. Transparent data handling. "

So my plan is, while I am finishing up my current project, to work on this new platform. I have already started with some of the implementation. I would very much like to avoid getting another "regular job" or gig when my main project is complete, and so I was hoping against hope that somehow I could crank out a simplified version of this new platform and miraculously turn that into my day job immediately. Or perhaps get a few thousand dollars from kickstarter.com or some such.. but most likely not try to raise much money at all, and probably not do any fundifying until I had a prototype of some sort.

Anyway, supposing I can live on just $3,000 per month, and I need exactly 1 person to help me who also only needs $3,000 per month. Suppose that includes all of our expenses for servers etc. and we are working out of our homes. 3000 * 18 = 54000 * 2 = $108,000.

I'm sure people will tell me I am wrongheaded, doing something wrong, or misinterpreting, but I think that this article is quite clearly saying I should try to get $108,000. This seems completely unrealistic to start going around trying to get $108,000. And actually, once I have a prototype, I still doubt I will even want that much money -- I will probably be happy to try to sell the system for 2 or 3 months, so maybe 3 months would be nice, but after that, I can't see going 5 or 6 months spending someone else's money without significant money coming in, so the $108,000 doesn't even seem prudent.

Anyway, if someone reading this wants to give me $108,000, I am sure I can build the system I described.. just not sure if people would be smart enough to adopt it. You can PayPal the money to email@example.com (lol)

<comment><USER15> Wow -- minus 2 points? Don't understand why this is downvoted so hard? I think I asked a good question by relating the article to my specific situation.

<comment><USER16> My guess for the downvoting is some mixture of these reasons or others:

* This posting isn't the place for your comment--try an "Ask HN: evaluate my idea" or something.

* Your point "I need $100k for my idea, I can't see why this is necessary nor why anyone would give it to me nor what I'd do with it all anyway" took too long to get to and you probably would have gotten some responses if that was all you had.

* Perceived money-grubbing. "Are you a sociopath?"

* Perceived reasons why your idea Won't Work

* Complaining about being downvoted

* Your comment is structurally similar to some spam comments I've seen--greetings, link(s), bullet points, ALL CAPS at places, already downvoted. Instinctive downvoting.

* "lol"</comment></comment></comment>


Seeing the World (and Writing It) with Alice in Wonderland Syndrome - <AUTHOR> https://lithub.com/seeing-the-world-and-writing-it-with-alice-in-wonderland-syndrome/ <comment><USER2> I've thought about trying to portray my TLE auras artistically, but they're difficult to describe and probably won't make much sense to anyone. They're also not visual or wacky like that

The small ones are brief periods of receptive and expressive aphasia. I imagine the only other people that have felt similarly are brain damaged stroke victims.

The more intense ones feel like being in a crowded bar, but my auditory filter turns off and I'm suddenly having a hundred conversations at the same time (but with my inner monologue, there's no auditory hallucination). It's like an overwhelming vortex or swirl of words and understanding. It's also pretty terrifying because it means I might slip off the edge into unconsciousness. Fortunately, they're rare. Also unfortunately, they're random.

<comment><USER3> Had auras associated with migraines. Especially when I was younger.

For myself I found that things in my periphery would disappear — like a kind of tunnel vision. As the condition progressed this region that I could not perceive would grow, the tunnel narrow.

I feel like at times it was as though to my mind I simply could not focus or resolve the areas in my periphery. At other times the areas in my periphery seemed to be occluded by arbitrary shapes of light — often flickering or pulsing in a fast cyclic way.

Often the condition could instead be that the place I was looking directly at would suffer the same degradation. Out of focus, not resolvable, maybe overlaid with some sort of light region.

Looking elsewhere showed that the distortion was relative to where my eyes were looking. So if the thing I was looking straight at would not resolve, I could look slightly askance and see it clearly.

When I was younger the condition would soon progress to nausea. Throwing up (even dry heaves) meant the condition was passing and I would be fine in a few minutes.

As I have gotten older the nausea has never returned and the frequency of the auras has become more infrequent.

</comment></comment><comment><USER4> This is a cool article. I've definitely experienced similar things when I was younger, particularly during a fever, but grew out of it. Experiences included waking up and seeing my bed was elongated out hundreds of feet in front of me, or the sizes of my limbs were somewhat randomized, e.g. small arms and stretched, rubbery fingers.

But one thing about this article that bothers me is how it says "many have speculated that Lewis Carroll took some kind of mind-altering drug ... the truth is that he too suffered from the condition"

Is that actually proven true or are they speculating?

<comment><USER2> > This is a cool article. I've definitely experienced similar things when I > was younger, particularly during a fever, but grew out of it. Experiences > included waking up and seeing my bed was elongated out hundreds of feet in > front of me,

Hah, I had some similar experiences as a kid. In particular I imagined my bed was suddenly stretched into "outer space" and I was looking to earth through a tunnel or hole of some kind. Only happened a few times when I was <12 probably.</comment></comment>


Is it just me, or eyes react differently to ebooks and real books? - <AUTHOR> I've noticed for a long time that my eyes can never retrace quickly where i was in a eBook if i look away for even a second. Yet for physical books i can do it quickly after relatively long time. Any science behind this? <comment><USER2> [Not science:] Hmm maybe because holding the book in your hands gives you physical coordinates in addition to the visual landmarks. An onscreen ebook is behind glass, removed from all senses but vision. I just watched Bret Victor's _Humane Representation of Thought_ talk yesterday, which is extremely relevant - wanting media (of communication, information work, programming) to involve more of our senses and abilities. Books are a huge advance over PDFs in that way. Touch them, doodle on them, argue back in the margins... Although the smell and sound of a book aren't used to deliver information, if books had no smell or made no sound, they'd be much more like ebooks.

<comment><AUTHOR> I really enjoyed the talk and it was very relevant thanks. But the speakers vision is almost improbable in my opinion. Not because it's not possible but because the target consumers won't bother for it. Majority of population are already out of touch of their senses with how they use technology. Kinda like how the VR is now marketed, even though the initial ideas blew everyone's minds.

</comment></comment><comment><AUTHOR> "Mangen et al. say that this is because paper gives spatio-temporal markers while you read. Touching paper and turning pages aids the memory, making it easier to remember where you read something. Having to scroll on the computer screen makes remembering more difficult."

[https://insights.uksg.org/articles/10.1629/uksg.236/](https://insights.uksg.org/articles/10.1629/uksg.236/)

</comment><comment><USER3> Absolutely!

Page turns pace you down and it leads to better attention and retention. Offers retraceability, kind of like a memory palace building exercise.

Also, books are not files. So what we've online isn't truly a piece of software inspired off of books. Ebooks are like those enterprise-y TPS reports that no one wants to read. :-)

</comment><comment><USER4> Are you using a backlit screen or e-ink?

<comment><AUTHOR> backlit screen. I heard of e-ink for the first time from you

<comment><USER4> Yeah, backlit screens are much harder to read on than paper. I believe there have been studies done on this. E-ink e-readers are awesome for e-books. Very similar to the printed page experience, tho there's still some work to be done on color and contrast.</comment></comment></comment>


Reasons to use protocol buffers instead of JSON - <AUTHOR> http://blog.codeclimate.com/blog/2014/06/05/choose-protocol-buffers/ <comment><USER2> > Schemas Are Awesome

No reason you can't implement schemas over JSON. In fact, you typically implicitly do - what your code is expecting to be present in the data structures deserialized from JSON.

> Backward Compatibility For Free

JSON is unversioned, so you can add and remove fields as you wish.

> Less Boilerplate Code

How much boilerplate is there in parsing JSON? I know in Python, it's:

        structure = json.loads(json_string)

Now then, if you want to implement all kinds of type checking and field checking on the front end, you're always welcome to, but allowing "get attribute" exceptions to bubble up and signal a bad data structure have always appealed to me more. I'm writing in Python/Ruby/Javascript to avoid rigid datastructures and boilerplate in the first place most times.

[EDIT] And for languages where type safety is in place, the JSON libraries frequently allow you to pre-define the data structure which the JSON will attempt to parse into, giving type safety & a well define schema for very little additional overhead as well.

> Validations and Extensibility

Same as previous comment about type checking, etc.

> Easy Language Interoperability

Even easier: JSON!

And you don't have to learn yet another DSL, and compile those down into lots of boilerplate!

I'm not trying to say that you shouldn't use Protocol Buffers if its a good fit for your software, but this list is a bit anemic on real reasons to use them, particularly for dynamically typed languages.

<comment><USER3> > structure = json.loads(json_string)

Not quite. Let's say your JSON data contains the following attribute:

        "access" : [ "view", "edit", "admin" ],

This field should be represented (in the language) as a set of values from an "access-levels" enumeration.

In C#, you'd have the following boilerplate:

        [DataMember(Name = "access")]
        public HashSet<AccessLevels> Access { get; private set; }

In OCaml, it would be:

        access : Access.Set.t ;

The simple "json.loads" solution would return a list of strings instead. What's the Python code for turning it into a set of enumeration values, and failing if one of the values does not match ?

<comment><USER2> Python doesn't have enumerations, per se. Here's how I'd represent that:

        if 'edit' in structure['access']:
             # can edit

In which case it really doesn't matter if there's junk in access. If I really felt the need to validate the structure, I could do so with:

        if not set(structure['access']).issubset(all_access_privs):
            raise ValueError('invalid access types passed in')

but more realistically, I'd rely on the ORM object to validate against the authoritative source - the database - and key off the errors there.

<comment><USER4> Python 3.4 has enums, if that's what you meant: [https://docs.python.org/3/library/enum.html](https://docs.python.org/3/library/enum.html)

</comment></comment></comment></comment><comment><USER5> Or, another alternative is Cap'n Proto [1] from the primary author of Protocol Buffers v2. It smooths some of the bumps of protocol buffers.

[1]: [http://kentonv.github.io/capnproto/](http://kentonv.github.io/capnproto/)

<comment><USER6> Came here to write this. Promise pipelining is an especially interesting attempt to solve latency in RPC (although it doesn't always work).

<comment><USER7> I'd love to see Go support for capnproto RPC; I wish I had spare time.

</comment></comment></comment><comment><USER3> Easy language interoperability as a reason to choose Protobuf over JSON ? Mainstream languages support both JSON and Protobuf equally well, and the others tend to support JSON more often than Protobuf.

Free backwards compatibility ? No. Numbered fields are a good thing, but they only help in the narrow situation where your "breaking change" consists in adding a new, optional piece of data (a situation that JSON handles as well). New required fields ? New representation of old data ? You'll need to write code to handle these cases anyway.

As for the other points, they are a matter of libraries (things that the Protobuf gems support and the JSON gems don't) instead of protocol --- the OCaml-JSON parser I use certainly has benefits #1 (schemas), #3 (less boilerplate) and #4 (validation) from the article.

There is, of course, the matter of bandwidth. I personally believe there are few cases where it is worth sacrificing human-readability over, especially for HTTP-based APIs, and especially for those that are accessed from a browser.

I would recommend gzipped msgpack as an alternative to JSON if reducing the memory footprint is what you want: encoding JSON as msgpack is trivial by design.

</comment><comment><USER8> Reasons not to use protocol buffers (in C++ at least):

        1) Doesn't support Visual Studio 2013.
        2) Doesn't support Mac OS X Mavericks.
        3) No "nice" support C++11 (i.e. move constructors)

(These can be at least partly solved by running off svn head, but that doesn't seem like a good idea for a product one wants to be stable)

With JSON I can be sure there will be many libraries which will work on whatever system I use.

<comment><USER9> All 3 of your points are the fault of Protobufs being an almost stagnant project. Nothing significant has changed for a number of years. You only have to look at the public repo commit log to see Protobufs may as well be a release tarball only distribution[0], with already infrequent releases[1].

[0] [https://code.google.com/p/protobuf/source/list](https://code.google.com/p/protobuf/source/list)

[1] [https://code.google.com/p/protobuf/downloads/list](https://code.google.com/p/protobuf/downloads/list)

<comment><USER10> The management chain for Protobufs goes up through the internal infrastructure org. Sadly, they never really seemed to understand the importance of the open source release. Even though Chrome, Android, and other open source Google products rely on it, those orgs generally don't work with internal infrastructure very much, so they naturally seem distant and unimportant.

Meanwhile, there are two branches of Protocol Buffers: internal and external. They contain mostly the same code, and there are scripts that automatically merge changes back and forth, but those scripts do require some amount of human supervision. And since the internal users are a lot more demanding than the external ones, most development occurs internally.

This is a pretty crappy way to run an ostensibly open source project, and that's my fault. I probably should have put in the effort to better unify the two branches so that changes could be integrated automatically. It would have been a pretty significant amount of work, though, and I was mostly a one-man team (with a few "20% time" helpers), and most of my time was spent trying to figure out how to convert millions of lines of existing internal application code over from proto1 to proto2 (where proto1 is the original version of protobufs which has never been released publicly).

What I did do was make sure to run the fiddly release process on a semi- regular basis, so that the open source release did not fall behind. Luckily the core code was pretty stable, so it wasn't necessary to do releases all that often. But pushing releases was something I pretty much had to do on my own initiative; management never cared.

So when I eventually moved off protobufs, the replacement team (which management didn't even realize was needed until about six months later) naturally deprioritized open source releases. They've done a couple over the years, but as you've noted, it's rare.

On the "bright" side, judging from the way things were going when I left the company in early 2013, it's unlikely that there has been any significant change in the internal code from which you'd benefit, so maybe it doesn't really matter.

<comment><USER9> Wow, thanks for the insight in to behind the curtain :}

</comment></comment></comment></comment><comment><USER11> We at Spotify use them extensively and are actually moving away from Protobufs, which we consider as 'legacy'. The advantages of Protobufs don't make up for its disadvantages over plain JSON. With JSON you have universal support, simple parsing, developer and debug friendly, much easier to mock, etc etc.

</comment><comment><USER12> I think the main advantages are:

        - network bandwidth/latency: smaller RPC consume less
          space, are received and responded to faster.
        - memory usage: less data is read and processed while
          encoding or decoding protobuf.
        - time: haven't actually benchmarked this one, but I
          assume CPU time spent decoding/encoding will be
          smaller since you don't need to go from ASCII to
          binary.

Which means, all performance improvements. They come, as usual, at the cost of simplicity and ease of debugging.

<comment><USER13> "I assume X is more performant ... I haven't actually benchmarked it"

I believe that's usually spelled "I am making this up".

<comment><USER10> The vast majority of performance judgments are made without benchmarking, because most of the time the answer is obvious enough without the need to measure.

This is one of those times. Parsing the text "1234" is obviously going to be slower than loading its binary value, and text obviously takes more space than binary.

That said, the internet is full of benchmarks backing this up if you care to Google it.

</comment></comment></comment><comment><USER14> > _When Is JSON A Better Fit?_ > _Data from the service is directly consumed > by a web browser_

This seems to me like a key issue, you need to really know beforehand that this won't ever be the case, else you need to make your application polyglot afterwards. A risky bet for any business data service.

Maybe if it's strictly infrastructure glue type internal service. But even then, maybe someone will come along wanting to monitor this thing on the browser.

<comment><USER15> I thought the reasoning behind JSON was that Javascript has a parser built in (eval), rather than it's incapable of being used to parse other formats?

</comment></comment><comment><USER16> Not so sure about "backwards compatibility" part.

From Protocol buffer python doc: [https://developers.google.com/protocol- buffers/docs/pythontu...](https://developers.google.com/protocol- buffers/docs/pythontutorial)

"Required Is Forever You should be very careful about marking fields as required. If at some point you wish to stop writing or sending a required field, it will be problematic to change the field to an optional field – old readers will consider messages without this field to be incomplete and may reject or drop them unintentionally. You should consider writing application- specific custom validation routines for your buffers instead. Some engineers at Google have come to the conclusion that using required does more harm than good; they prefer to use only optional and repeated. However, this view is not universal."

So basically I will be in trouble if I decide to get rid of some fields which are not necessary, but somehow were defined as "required" in the past.

This will potentially result in bloated protobuf definitions that have a bunch of legacy fields.

I will stick to the JSON, thanks.

<comment><USER17> That argument never made sense:

" old readers will consider messages without this field to be incomplete and may reject or drop them unintentionally."

That means the old readers -- the ones that are _expecting_ required fields, can't accept new messages. That's good! The readers don't know how to read the new messages! The readers need to be updated to a new version before they can correctly start reading new version of the schema.

<comment><USER10> Yeah, the problem is that because "required" is checked at the protobuf parser layer, it will be enforced whether or not the application itself actually depends on that field being present. In practice this tends to escalate minor bugs into full outages. Like, there have actually been outages in Google Search, Gmail, and others that wouldn't have happened if all required fields were treated as optional instead.

I've written more about this here:

[https://kentonv.github.io/capnproto/faq.html#how_do_i_make_a...](https://kentonv.github.io/capnproto/faq.html#how_do_i_make_a_field_required_like_in_protocol_buffers)

</comment></comment></comment><comment><USER18> This is a fine reason to use protocol buffers instead of JSON:

       [ 4738723874747487387273747838727347383827238734.00 ]

Parsing that universally is a shit.

</comment><comment><USER19> The biggest thing is that its smaller over the wire.

however if schemas scare you (shame on you if they do) then msgpack might be a better choice.

</comment><comment><USER20> Definitely the right direction for performance. My company ended up going with python-gevent and zeromq to implement an asynchronous API server with persistent TCP connections. Our application servers are able make remote calls over a persistent tcp connection without any noticeable overhead. You could still use JSON, and we tried it--but since we're all python anyway we decided to just pickle the objects which is way faster. We looked at protocol buffers, but found it to be a bit cumbersome. It's been stable for two years and completely solved our scaling problems.

</comment><comment><USER21> > There do remain times when JSON is a better fit than something like Protocol > Buffers, including situations where:

> * You need or want data to be human readable

When things "don't work" don't you always want this feature? Over a long lifetime, this could really reduce your debugging costs. Perhaps protocol buffers has a "human readable mode". If not, it seems like a risk to use it.

<comment><USER10> You can run the binary format through `protoc --decode` to get text, or use the `toString()` method in your code. It's an extra step, but for the 99.99% of queries that no human looks at, it saves a lot of CPU.

</comment></comment><comment><USER22> ...in Ruby. For some applications.

With Node, I'd have to see a very good argument for why I should give up all of JSON's great features for the vast majority of services. Unless the data itself needs to be binary, I see no reason why I shouldn't use the easy, standard, well-supported, nice-to-work-with JSON.

<comment><USER23> In javascript, JSON is also much faster to deserialize than protobuffers.

</comment></comment><comment><USER24> Anyone tried ProtoBuf.js "Protocol Buffers for JavaScript." on the client side?

[https://github.com/dcodeIO/ProtoBuf.js](https://github.com/dcodeIO/ProtoBuf.js)

<comment><USER23> Yes. It's a decent implementation. However, binary data access (particularly DataView which is used by protobufjs) is embarrassingly slow in all browsers at the moment, so JSON (possibly gzipped if you're worried about bandwidth) is much better if you're going to be mainly targetting browsers.

</comment></comment><comment><USER25> What a huge step backwards. We had decades of binary protocols. They sucked. Then everyone moved to non-binary protocols and it was much better. Let's not do it all over again.

<comment><USER10> Don't forget about XML, MIME, SGML, SOAP... We've had decades of protocols both binary and text, and they've all sucked.

The thing it seems we've learned more recently is that the more features and complication you add to a protocol, the more it sucks. At the end of they day your data is composed of primitives, records, and lists, and if your protocol offers to structure things in any other way, it's just creating confusion. This is why JSON beats XML, and Protobufs beats many of its binary predecessors.

</comment></comment><comment><USER9> I'd rather use Avro. The binary encoding is more dense and there's an officially supported JSON encoding (the text encoding for Protobufs is mostly intended for debugging)

</comment><comment><USER26> When you convert an object from language X to JSON, validate it using a schema validation before deserializing, then is it not the same as JSON. Also now with JSON you have the opportunity to have human readable data which is great when debugging issues. I am not seeing the advantage of protocol buffers. It would be great if you can compare payload sizes and see if there is a significant savings from that perspective.

</comment><comment><USER27> Personally, I prefer Thrift over protocol buffers. I'm surprised Thrift wasn't mentioned.

</comment><comment><USER28> "Reason #3: Less Boilerplate Code"

Anyone who has used Avro in Java knows that this is not true.

<comment><USER9> Avro code is generated though?

<comment><USER28> For anything non trivial, putting data into an Avro object and pulling it out is manual and tedious. Instead of json_parse("{'nice json':'string'}) you have to assemble the object and for large hierarchical objects this is a pain. And then you want to return that object to the UI. Well it's not standard JSON. For example the arrays aren't simple arrays. My team has code to fix these kinds of things but it's not nearly as easy to use as JSON.

tl;dr Avro JSON != Standard JSON

The OP's assertions that the protocol buffer's are awesome and reduce boilerplate conflict with my experience.

<comment><USER9> I don't see how "standard JSON" could be any easier when it's even less structured.

</comment></comment></comment></comment><comment><USER29> Use protocol buffers because you get versioning? How hard would it be to add a version number to your JSON struct?

(Answer: Trivial.)</comment>


The Sound of Space Filling Curves – Check Gosper Curve - <AUTHOR> http://www.win.tue.nl/~hermanh/doku.php?id=sound_of_space-filling_curves <comment><USER2> [https://news.ycombinator.com/item?id=16139404](https://news.ycombinator.com/item?id=16139404)

108+ points</comment>


Microsoft Announces Continuum, Turning Windows 10 Phones into Desktops - <AUTHOR> http://techcrunch.com/2015/04/29/microsoft-announces-continuum-turning-windows-10-phones-into-desktops/ <comment><USER3> This gets incrementally closer to an ideal computing model I call "personal application omnipresence" [1]. Notably it brings a presumably-standard means for applications to scale their views to myriad input/output capabilities on the fly. Attach a monitor and the view expands and adjusts accordingly; attach a keyboard and the UI adjusts accordingly.

This is great progress, but I remain fixed in my desire for singular running instances of my personal applications to run on an application server I control and to which I attach views from all of my devices. I want to have a singular e-mail application that I see on all of my devices. I want to have a singular web browser application that I see on all my devices. And so on.

We need to make my many devices appear as one rather than making a single device act as many devices.

[1] [http://tiamat.tsotech.com/pao](http://tiamat.tsotech.com/pao)

<comment><USER4> You can technically do this today albeit with some overhead.

Spin up an Azure VM, install all the apps you desire and configure it as you want.

Every other PC you own, becomes just a head display, using RDP you can use a single dedicated VM.

The overhead here becomes that you still need to have full blown OS installed on the heads, however their specs can be very limited (compared to the VM).

<comment><USER5> As well as double-digit latency, maybe even triple-digit at times, solely from general internet transit.

<comment><USER6> And being blocked by basically everything in existence. I installed a desktop on Linode and Google blocked me from even their search product. Many other sites had blocks set up or at least CAPTCHAs. If you have browsing activity coming from a datacenter, everyone assumes it's a bot. Geo IP gets messed up too. Really hard to get any work done like that.

<comment><USER7> Does this blocking also apply to VPNs which are likely routing through data centers? One would think that most botnets are running on compromised consumer networks.

<comment><USER5> Botnets must leverage their infected host's internet connection. Almost all anti-bot tools use IP/rate metrics to identify the classic DOS: a large number of connections from a few IPs.

To get around Threatstop, Distil, and other solutions, we see attackers having to use 100+ different source IPs during their coordinated attacks.

<comment><USER7> Low-traffic botnets could be clicking on ads, simulating normal usage patterns.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This is something Canonical and Ubuntu have been trying to do for a while. It's definitely interesting to think about as phones become the de factor computing devices.

<comment><USER9> It appears Canonical are already doing it: [https://www.youtube.com/watch?v=c3PUYoa1c9M](https://www.youtube.com/watch?v=c3PUYoa1c9M)

I found the demo pretty impressive.

<comment><USER10> This is really really nice. I'm glad to see that they didn't abandon the phone to desktop model that they originally promised. This is the future right here. Its just so bland looking. I know that doesn't really matter, but they need some good ui/ux people to really sell this thing.

</comment></comment></comment><comment><USER11> As a long time Android developer this has me super interested!

After years of writing apps (toys), struggling with design decisions made to get java running on 2007-level hardware like: 64k method limit, components with crazy life-cycles making concurrency difficult without leaking things, frankenstein Java ecosystem, brittle and complicated build system...

Microsoft comes along and says "screw that shit", write mobile Applications as /desktop/ applications using C#, F#, or C++.

This is also masterful because, as Windows Phone market share is hovering at almost zero, many people who simply need a low-powered device like chromebook, tablet, can just get a phablet Windows Phone and presto, they are now Windows Desktop /and/ Phone users.

From an app monetization standpoint, its great because now I can make money on form factors from phone, tablet, laptop, desktop with one code base - <USER2> of Android (phone) and which has more or less failed on tablets.

<comment><USER12> What do you mean by "write mobile Applications as desktop application"? How would it be possible on mobile devices e.g. with limited RAM?

</comment></comment><comment><USER13> This was demoed in the Build Keynote presentation, jump to 3:55:15:

[http://channel9.msdn.com/?wt.mc_id=build_hp](http://channel9.msdn.com/?wt.mc_id=build_hp)

<comment><USER14> Wow. Parts of that demo really seem to be inspired from Android. The hamburger menu, the black navigation bar at the bottom, the slide out menus etc.

But the potential really is in the Phone->PC continuum. If I can take a beefy x86 phone (Intel seems to be inching closer to that reality) running windows and use it like phone most time and then dock it onto a big screen with keyboard and mouse - that really is a killer feature. It could change things in Microsoft's favor if they manage to get the integration and hardware parts right.

(I should say that the concept is not new - Motorola tried that with the Atrix - but it was underpowered hardware, flakey software and little integration that killed it. From the looks of it Microsoft seems to be geared to address all three rather well.)

<comment><USER7> This future would benefit from universal, non-proprietary docking stations, for the same reason we have standardized plugs/sockets for power, ethernet, USB, etc.

<comment><USER15> The new USB Type C standard can provide up to 100W of power, while at the same time letting you use it to send DisplayPort (and you can connect to HDMI or DVI devices with a simple adapter) signalling. And your network connection.

But with wireless charging + wireless data/display casting chances are it won't be that long before you won't need a wire for any of this most of the time.

<comment><USER7> There are still some security advantages to dedicated KVM ports, compared to shared transports like wireless and USB.

<comment><USER15> That may be so, but how many people do you think will care?

<comment><USER7> The few with financially valuable digital assets?

<comment><USER15> In my experience, the people I know with the most assets are also the most careless people I know when it comes to security (passwords includes initials + birth date, name of children, name of the family dog and similar...)

That includes several quite wealthy tech founders...

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> I'm no MSFT fanboy, but this is a big deal. Within 10 years, if not 5, we'll plug all of our phones into keyboards and monitors; and only the odd geek nerd will have a desktop or proper laptop.

<comment><USER17> I'm excited about this, too, but I'm not going to hold my breath. I can't connect a bluetooth keyboard to my Lumia 920, or treat it as a USB mass storage device, or mount a thumb drive in its USB port, etc. Why should I believe they'll let me connect "future devices" to an external display? When I install Windows 10 on my phone, will I be able to remote desktop to it? Probably not.

<comment><USER18> >I can't connect a bluetooth keyboard to my Lumia 920

You can since WP8.1 GDR2.

>Why should I believe they'll let me connect "future devices" to an external display

People can connect latest Lumias with Miracast support to external display for mirroring. Sadly, 920 is not one of them.

[http://www.windowsphone.com/en-us/how- to/wp8/connectivity/pr...](http://www.windowsphone.com/en-us/how- to/wp8/connectivity/project-my-phone-screen)

> mount a thumb drive in its USB port

This will be supported on future devices according to this:

[https://msdn.microsoft.com/en- us/library/windows/hardware/dn...](https://msdn.microsoft.com/en- us/library/windows/hardware/dn957036.aspx)

>treat it as a USB mass storage device

This will probably be never supported because implementing it will require disconnecting storage from phone's OS and MTP is supposed to be enough.

Edit: miracast is not supported on 920.

<comment><USER19> I wish I knew enough about Android USB to write a USB gadget driver that emulated FAT and Mass Storage - no reason it couldn't read/write sanely back to the host FS. Sure it wouldn't be as quick as native but it'd be enough to play MP3s on car stereos and the like.

</comment></comment></comment></comment><comment><USER20> Two thoughts here. I love the contrast between Apple and Microsoft. That is Microsoft frequently announces products/technologies with no shipping dates. While on the other side of the spectrum Apple builds out their products in secrecy announcing only when they have a ship date. As a developer building on their platforms I prefer Apple's approach as it lowers my risk of developing against a vapourware product.

Second, I'm betting Microsoft announced this before its ready in order to get out ahead of Apple and Android's mobile dominance and be seen as a leader in mobile. Though, I'd also bet that given where current technology is Apple's Continuity approach provides the better experience today. But, no doubt what Microsoft showed is the future.

<comment><USER21> Microsoft did invent the term vaporware and they've been using it to their advantage for decades:

[http://en.m.wikipedia.org/wiki/Vaporware](http://en.m.wikipedia.org/wiki/Vaporware)

<comment><USER22> I suspect it doesn't work as well when you're a marginal player (as they are in mobile today) as when you're the 800-lb gorilla.

Edit: I suppose this is a case of them trying to pull the conversation back to the place where they ARE an 800-lb gorilla. I just don't see them as being as dominant even on the desktop as they once were.

</comment></comment></comment><comment><USER23> This is the first thing Microsoft has done in 10 years that truly interests me. This is exactly what I was hoping for with a Linux based smartphone similar to what Ubuntu was going to do.

</comment><comment><USER24> I was hoping for this from Android phones. My Note 4 has 3 gigs of RAM and a fast processor. I bought a HDMI converter to hook it up to a large monitor but the connection was problematic.

I would argue that the amount of SSD storage on phones is not too big of an issue. More as a learning experience than anything else, I augmented my Linux and Mac laptops with a little Windows 8.1 HP Stream 11 this year that only has a 32 gig drive (with another 32 gigs added via a memory card). With OneDrive, not having much disk space is not much of an issue. I installed git, bash, IntelliJ, Java 8, and my current writing projects with enough room to spare because a lot of what I access (infrequently) can live in the cloud and only be cached locally if needed.

Anyway, my Android Note 4 has a pretty good Java IDE, useful apps (including Office 365 and my favorite games) and really could be my primary computer with excellent docking support. Add cloud development tools like nitrous.io, web version of visual studio, etc., and we are getting close to what should end up being the future of the way most people interact with productivity and entertainment devices.

</comment><comment><USER25> They said they're waiting for hardware for this to actually work. I believe they're waiting for new Intel chips for phones.

<comment><USER26> They mentioned HDMI (presumably MHL) in the article, which surprised me, since I expected it to be USB type C that they're waiting for. That would allow the monitor to act as a docking station. 11-pin MHL would also allow this, but it's uncommon and not on any current generation phones, AFAICT.

<comment><USER27> It depends how you want the hardware to work. If you want people to bring their own monitors then you need to support HDMI.

I would expect a docking station that charged the phone and had a built in USB port. Said docking station could hook up via USB-C and use a displayport mode to send the data across of course.

In either case though saying HDMI is for the best as it sends the signal of "works with your hardware" versus "works with hardware we will be releasing".

<comment><USER26> I expect that USB type C support on monitors will become ubiquitous in the next couple of years.

</comment></comment></comment></comment><comment><USER28> I'm surprised the technology isn't "fast enough" yet. Most top end phones are quad core, output 1080p, have 2-4gb ram, etc. Specs like that easily meet the listed minimum requirements of windows... odd.

They're now basically giving google and apple time to easily catch up to what could of been a killer feature that sells windows phones.

<comment><USER29> This seems an all too obvious entry into the enterprise environment for their mobile platform whilst strengthening the moat to their current desktop. Possibly for the education market too.

I'm surprised this hasn't come earlier and would be further surprised if this isn't a top priority. I'm 100% sold if it remains a snappy platform running a couple of screens and heavy-ish excel files in a native environment.

</comment></comment><comment><USER30> This was what excited me the most about Ubuntu's Edge smartphone (2013): [https://www.indiegogo.com/projects/ubuntu- edge](https://www.indiegogo.com/projects/ubuntu-edge) [https://www.youtube.com/watch?v=EtNhlVn3ETQ&t=1m56s](https://www.youtube.com/watch?v=EtNhlVn3ETQ&t=1m56s)

Happy to see someone copied it.

</comment><comment><USER31> i remember this article from ten years ago by Phil Greenspun; he predicted that this was going to happen some day.

[http://philip.greenspun.com/business/mobile-phone-as-home- co...](http://philip.greenspun.com/business/mobile-phone-as-home- computer.html)

</comment><comment><USER32> It annoys me that Apple didn't ship this a few years ago. We had business units test switching to 100% iPad with VDI, and many of them actually enjoyed it.

It would be fairly trivial to deliver a great experience like this. In my case, I'd have 20,000 iPhone user ditching laptops.

</comment><comment><USER33> HTML5 with CSS3 (offline) web apps offer that, Motorola Android offered that called "WebTop" ([http://en.wikipedia.org/wiki/Motorola_Atrix_4G](http://en.wikipedia.org/wiki/Motorola_Atrix_4G)), Ubuntu Phone offers that, Apple's continuity offers that. Windows RunTime apps may offer that in future - no specific date.

Microsoft had all the technology already for years inbuilt in Windows and Win32 API, called Windows Terminal Server and Remote Desktop (RDP) - it works great with all Windows applications in enterprise. Yet Microsoft hasn't delivered it yet to consumer devices.

      Microsoft to agree to license Citrix technology for
      Windows NT Server 4.0, which resulted in Windows Terminal
      Server Edition in 1998

[http://en.wikipedia.org/wiki/Citrix_Systems](http://en.wikipedia.org/wiki/Citrix_Systems)

</comment><comment><USER34> Heh. So after everyone accused Windows 8 of turning your desktop into a phone, Microsoft has decided to shift into reverse?

</comment><comment><USER35> Not exactly announced today...but hey who really fact checks these days?

</comment><comment><USER36> reminds me of [https://youtu.be/c3PUYoa1c9M?t=55s](https://youtu.be/c3PUYoa1c9M?t=55s)

</comment><comment><USER37> Will you have administrator privileges? And side loading? Otherwise it is of no use at all.

<comment><USER27> I think the huge ecosystem of apps out there thoroughly disproves your point.

Honestly I love the permission scheme of the app stores compared to my desktop. Being able to control what the app can do is massively better than the desktop system of "runs as user".

On the topic of root, I would hope we would work towards a time when it wasn't necessary rather than using it as a crutch.

<comment><USER37> On desktop you have more control - you can firewall, code inject, rewrite dlls, crack, cheatengine stuff and so on. Root means ownership of your device. And not being confined to a walled garden ... so while a future in which root is not used is terrific, a future in which root does not belong to the user is terrifying ...

<comment><USER27> I would agree that root being an option is a huge win for consumers but I still believe that root not being the default is good for computing as a whole.</comment></comment></comment></comment>


Doron Zeilberger on computer-assisted proofs - <AUTHOR> http://www.math.rutgers.edu/~zeilberg/Opinion36.html

<comment><USER2> I had a multivariable calculus class with Dr Zeilberger and he was one of the best math professors or teachers I've ever had the privilege of being a student of. More than other teachers, I got the feeling that he genuinely cared about everyone succeeding: he ran multiple early morning study sessions several times a week, and didn't slouch this duty off to his TAs but was there himself, from 7am until the lectures started at 10. Not to say that my other teachers didn't also care, but he really put the time in to show it. I was always impressed because this was just a sophomore undergrad class, and I'm sure he had "more important" things to do.

</comment><comment><USER3> His "Opinion 37: Guess What? Programming is Even More Fun Than Proving, and, More Importantly It Gives As Much, If Not More, Insight and Understanding" is also very interesting: <http://www.math.rutgers.edu/~zeilberg/Opinion37.html>

Fun fact: Doron is known for crediting his computer "Shalosh B. Ekhad" as a co-author.

</comment><comment><USER4> I found the responses linked in the article interesting as well:

<http://www.math.rutgers.edu/~zeilberg/fb36.html>

</comment><comment><USER5> His (co-authored) book "A=B" is also very good.

<comment><USER6> It's also available online for free: <http://www.math.upenn.edu/~wilf/AeqB.html></comment></comment>


Instagram API changes 2018: get ready for new Instagram Graph API - <AUTHOR> https://elfsight.com/blog/2018/02/instagram-graph-api-changes/ <comment><USER2> The article mentions : These are the Instagram plugins you can rely on: Instagram Feed – the best plugin to create galleries and portfolios with pictures from Instagram;

If you read the deprecation notice, this will not be possible anymore after December, 11, 2018.

</comment><comment><AUTHOR> tl;dr: Instagram is significantly tightening up access to their platform. The existing API is being deprecated in favor of a heavier permissions based system, and functionality available to all today, will be restricted to medium-to-large businesses down the road.

This is relevant to the HN community: builders who have enjoyed access to Instagram will now be severely restricted, which will limit future applications.

Finally: this is probably not a huge surprise. LinkedIn did this a couple of years ago, and of course Facebook has been tightening up access for years.</comment>


MVP Spec - <AUTHOR> https://blog.ycombinator.com/practical-design-mvp/ <comment><USER2> > _The criticism of the MVP approach has led to several new approaches, e.g. > the Minimum Viable Experiment MVE[19] or the Minimum Awesome Product > MAP[20]._

[https://en.wikipedia.org/wiki/Minimum_viable_product#Critici...](https://en.wikipedia.org/wiki/Minimum_viable_product#Criticism)</comment>


San Francisco Information Retrieval Meetup live now - <AUTHOR> http://www.justin.tv/irsf

<comment><AUTHOR> Brian Pinkerton from Webcrawler / A9 and Jon Gifford from Loggly / LookSmart now speaking.</comment>


Node v0.10.0 (Stable) - <AUTHOR> http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/ <comment><USER2> It's great to see Node mature. When it first came out I was among the many people who said "That's neat.", played with it a bit and moved on.

But I wanted to make a meeting agenda site, since I don't like any of the ones out there right now. So the last 4 days I worked on one writing it as a JS web app that talks to a Node backend. It was quite painless. Anything I wanted to do (whether generating uuids, date formatting, etc.) there was a module available on npm. Couldn't be easier.

The platform has really matured a lot, and I didn't run into any issues with Node itself.

If you haven't yet, the next time you're doing an experiment, give it a try. I will probably write my next project this way too.

<comment><USER3> I really like nodejs as well but i have some concerns, i built an app in tornado and then i wanted to try out node, so i built it in node as well with a postgres backend. I was surprised how much faster my tornado app was: using bcrypt blocking module for tornado with a factor of 8 gives me 42.51ms for login, on node i get 153ms, geting a user profile 6.7ms on tornado and 16ms on nodejs. These results are consistent across the app, where tornado seems to about 3 times faster. I am assuming that maybe this is due to the quality of the libraries, since i assume node is faster. Reading this article,([https://hacks.mozilla.org/2012/11/fully-loaded-node-a- node-j...](https://hacks.mozilla.org/2012/11/fully-loaded-node-a-node-js- holiday-season-part-2/)) helped to understand node more as well as how some of the libraries deal with threading and async.

<comment><USER4> 1) are you using the synchronous or asynchronous version of bcrypt?

2) cached or uncached templates?

3) throw 1k+ requests per second and tell us which one is faster

<comment><USER3> I am using the aync bcrypt module for nodejs. I am using it as an api for ios app. I will do the 1k test and let you know.

</comment></comment></comment></comment><comment><USER5> I find the strength, openness, and responsiveness of the community (mailing list, freenode IRC chat) to be node's greatest asset. They've done an amazing job in building culture and that should serve node well as it matures.

</comment><comment><USER6> This is probably a stupid question that can be answered if I read the docs, but how does versioning work? I love using node, but seeing 0.10.0 makes it appear like such young, teething software that people might immediately dismiss it if not for its user base. Why not call this node 10.0 and start at 0.1 instead of having another 0 that looks like it won't ever increment. Does it reflect a developer's sense of completeness or confidence in his/her software or does it come from quantifiable steps toward stability/speed?

<comment><USER7> Node uses semantic versioning: <http://semver.org/>

<comment><USER8> Not perfectly: "If your software is being used in production, it should probably already be 1.0.0."

<comment><USER5> The public API is not stable, hence a 0.xx number is justified.

<comment><USER8> That doesn't seem to match what the semver.org site says.

Node's public API is not changing in a backward-incompatible way every day (or even every week, or every month). The software is widely used in production.

I think node 1.0.0 should have been some time ago, and this release should have bumped the major version again.

<comment><USER5> "Major version zero (0.y.z) is for initial development. Anything may change at any time. The public API should not be considered stable." -- from semver.org

"The software is widely used in production."

Depending on how you define the "public API", things have changed from 0.8 to 0.10 (streams API, for example).

Your definition of Node 1.0.0 is based on your conception of how others are using node. People can use experimental software in high-profile places without deeming the underlying technology stable.

"Node's public API is not changing in a backward-incompatible way every day (or even every week, or every month). "

Also: in general, development is highly nonlinear. I would say the API is stable when the core developers deem it stable.

</comment></comment></comment></comment></comment></comment><comment><USER9> Can some recomend some decent source material to learn about Node.js and some best practices about it? I've read "The Node Beginner Book" and found it quite easy but somehow it didn't click.

<comment><USER10> I would read the core documentation (maybe takes 4 hours), then find a project you to do in node and do a lot of googling on ways to get certain aspects done. It is an unstructured way to learn and can be slightly inefficient since you will go down a few rabbit holes, but I think you will learn a lot more and have a lot more fun.

When you are in the docs make sure you focus on stream, callbacks, and event emitters. Once you have those down start gluing NPM modules together.

</comment></comment><comment><USER11> I'm neither a user nor a fan, but congratulations on the release and good luck for all of Node's future endeavours.

</comment><comment><USER12> I hope that nodejs debian maintainers will package it into sid soon. v0.8 was never there.

<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=692312>

</comment><comment><USER13> Very cool. I just tried it with my app. Can't run it until a few npm modules are updated to support it and of course Heroku needs to be updated to use it too. How bleeding edge. =)

</comment><comment><USER14> probably most happy off the bat to see performance gains (who doesn't like that?). I'm hoping the fs readstream boost will help with static hosting.

</comment><comment><USER15> Why 0.10 and not 1.0?

<comment><USER6> This is a better version of my question. Why use dot decimal notation unless just a fun way to model versions after network addresses

<comment><USER16> The dot indicates division of something into smaller parts. For most things we choose our range for the minor denomination to coincide with our base or a multiple thereof like having 100 cents in a dollar, but software being what it is we need to be slightly more flexible.

</comment></comment></comment><comment><USER17> very excited about the new version but probably won't bother upgrading my app until a few weeks. Is there a 'one liner' command to update node on OSX?

<comment><USER18> Well, there's a 'one double-clicker': you just run the OS X Installer package and it will update you.</comment></comment>


JPS+: Over 100x Faster than A* (2015) [video] - <AUTHOR> http://www.gdcvault.com/play/1022094/JPS-Over-100x-Faster-than <comment><USER2> Title's misleading. A* is also 100x faster than A* ;) It depends a lot on the graph you give it.

JPS by itself (not JPS+ in this video) is notable for not requiring any precomputation to achieve some speedup.

If you're willing to precompute some things, there are lots of other techniques available for unweighted grid maps. [http://www.cs.du.edu/~sturtevant/papers/GPPC-2014.pdf](http://www.cs.du.edu/~sturtevant/papers/GPPC-2014.pdf) has an overview of techniques and some benchmarks that use real-world game maps (Baldur's Gate, Dragon Age).

I believe the "goal bounding" from the video is called "arc flags" in the literature.

<comment><USER3> Yes, was just about to post, "Exact Routing in Large Road Networks Using Contraction Hierarchies" which, after a one-time pre-processing step returns an optimal route on a continent-scale network in milliseconds.

[http://dl.acm.org/citation.cfm?id=2351896](http://dl.acm.org/citation.cfm?id=2351896)

<comment><USER4> What's the memory usage there? Is it on the order of what can be used for games? Often memory is even more constrained than CPU time

</comment></comment></comment><comment><USER5> Paper: [http://www.aaai.org/ocs/index.php/SOCS/SOCS12/paper/download...](http://www.aaai.org/ocs/index.php/SOCS/SOCS12/paper/download/5396/5212)

Previous HN thread: [https://news.ycombinator.com/item?id=9714774](https://news.ycombinator.com/item?id=9714774)

<comment><USER6> A somewhat more detailed paper (by the same authors): [http://users.cecs.anu.edu.au/~dharabor/data/papers/harabor-g...](http://users.cecs.anu.edu.au/~dharabor/data/papers/harabor- grastien-aaai11.pdf)

</comment></comment><comment><USER7> Not to take anything away from the work but I think the title is misleading. A* is an optimal algorithm for graph search so you cannot make it 100x faster. What this does is make path finding faster by changing the structure of the graph.

<comment><USER8> It's a very practical optimization (not just a theoretical algorithm) so I don't think it's really misleading in the context of game development.

That being said there's an important gotcha, those techniques require a significant amount of precomputations (especially the bounding box one) so it might not be practical if you have very dynamic maps.

<comment><USER9> The map in my game is completely dynamic and every pathfinding technique I've tried is way too slow. I've had to resort to a really stupid path finding algorithm where the enemies just looks a few tiles ahead (meaning they get stuck very easily). Any pointers?

<comment><USER10> Check out "influence maps" or "potential fields" or "scents" or however they may be called -- google any of those phrases in combination with pathfinding, look at 1-2 videos and you'll grok the idea in a minute, I promise.

They may not solve all your problems or even any of them (hard to tell knowing nothing about your game, after all), but I was absolutely dumbfounded when I played around with them at how cheaply you can get some rather complex (seeming) behaviors (e.g. put the player and some enemies in a maze, give the players a scent that strongly attracts the enemies, but also give them a slight scent that makes them repulse each other, and they'll automagically split up and surround the player).

At the very least, if you're stuck with what you're doing at the moment, play around with those, and maybe you can at least find a use for them that frees up some processing resources for precise path finding where nothing short of it will do.

<comment><USER11> Have you seen any efficient algorithms that avoid local minima/maxima[0]? All my research leads to either algorithms resembling Dijkstra, or complicated research papers I'm not sure how to implement.

[0] Potential fields can't tell you a route is a dead end until you reach the dead end. Then they only tell you you're at a dead end, but don't tell you how to get out and find a viable route. Add-on exit-a-dead-end algorithms I've seen have very inefficient movement.

Algorithms to avoid the dead end in the first place have to look ahead so far that you might as well use Dijkstra/A*.

\----

Some papers I've turned up:

Potential fields:

\- [http://www.gamedev.net/page/resources/_/technical/artificial...](http://www.gamedev.net/page/resources/_/technical/artificial- intelligence/motion-planning-using-potential-fields-r1125)

\- [http://www.heikohoffmann.de/htmlthesis/node56.html](http://www.heikohoffmann.de/htmlthesis/node56.html)

\- [http://www.researchgate.net/publication/222662144_Solving_th...](http://www.researchgate.net/publication/222662144_Solving_the_potential_field_local_minimum_problem_using_internal_agent_states)

\- [https://randomaccessmaths.wordpress.com/2013/10/27/potential...](https://randomaccessmaths.wordpress.com/2013/10/27/potential- field-nav/)

Harmonic Potential Functions (related to potential fields, they attempt to solve the local minima/maxima problem)

\- [http://repository.cmu.edu/cgi/viewcontent.cgi?article=1625&c...](http://repository.cmu.edu/cgi/viewcontent.cgi?article=1625&context=isr&sei- redir=1)

\- [http://www.itst2007.eurecom.fr/site/var/html/h1053/file1221....](http://www.itst2007.eurecom.fr/site/var/html/h1053/file1221.pdf)

\- [http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=429591...](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=4295916&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4295916)

\- [http://ncsu.summon.serialssolutions.com/search?s.cmd=addFace...](http://ncsu.summon.serialssolutions.com/search?s.cmd=addFacetValueFilters%28ContentType,Magazine+Article%29&s.fvf\[\]=ContentType,Journal+Article,f&s.fvf\[\]=ContentType,Conference+Proceeding,f&s.fvf\[\]=ContentType,Dissertation,f&s.fvf\[\]=ContentType,Journal+%2F+eJournal,f&s.fvf\[\]=Language,English,f&s.fvf\[\]=ContentType,Book+Chapter,f&s.light=t&s.q=harmonic+potential+field+ship+navigation)

<comment><USER10> You're way ahead of me, I really just dabbled, and I kinda embraced the inefficiency. Though when I did the calculation on the GPU the bottleneck kind of became reading pixels of the texture data for individual agents to make decisions on - otherwise, the potential field updated way faster than the agents could move, and local minima didn't exist long enough to matter. But of course that all really depends on the game map (resolution) and gameplay, and even just having requirements like map sections where some agents don't fit through, while others do, might make it kinda useless.

I think the main power is that potential fields reduce the complexity of the calculation to the map and the number of goals, with an infinite number of agents being able to use that at little cost, but you pretty much always have to build additional pathfinding on top of it. For example, for some games it might be fine for agents to follow the potential field generally, but every tick one of them gets to use Dijkstra/A*, and if that points the other way it follows that path until coming close to another agent or something. Too much efficiency can be off-putting, but also be too predictable and easy to exploit as a player, that's also worth noting. But of course, I'm kind of rationalizing my lack of deeper knowledge here, I'd love to be able to do it perfectly, and then tone that down for realism/gameplay. Alas :)

</comment></comment></comment></comment></comment></comment><comment><USER12> I wonder if any games use a landmark approach to bound their A* search.

The basic idea of landmarks is that you choose a small number of landmarks (e.g. four corners of a map) and for every landmark, you pre-compute the distances to every node. You can then use this information to get a lower- bound for the distance to the target via the triangle inequality: d(p,t) >= |d(p,LM) - d(t,LM)|.

This is obviously weaker than the goal bounding explained in the video, but the precomputing only takes O(n). We used it quite successfully in a global router (for EDA), where the heuristic lower-bound is often _much_ better than a standard A-star heuristic based on geometric distances, because edges could have wildly different costs.

<comment><USER13> I'm curious: what does "global router (for EDA)" mean?

And yes, A* & landmarks is really nice :) !

<comment><USER14> its something no remotely competent engineer uses, but tool providers love to dick wave around

[https://teespring.com/shop/autorouter](https://teespring.com/shop/autorouter)

<comment><USER12> You do know EDA is about more than just PCBs, right? Good luck routing millions of nets in a microprocessor design by hand...

The _really_ competent engineers use the tools for the bulk of the problem, and fix up by hand where it makes sense.

<comment><USER14> Yeah, I automatically went into what I know :/ Its impossible to route manually there days, which doesnt mean automagic tools are even remotely good, same goes for synthesis (fpga).

</comment></comment></comment></comment></comment><comment><USER15> Just watched the entire video - very interesting; however, there are two major caveats the speaker mentions that is worth noting.

1) This requires expensive precomputation. He mentioned it took 10 hours on one of the large starcraft maps. 2) (I may have misunderstood this point) This does not necessarily respond well to map changes - so in maps where you have the map changing structure (new walls, etc) you will have to run the precomputation again.

With that said, very interesting stuff coming out of Digipen.

<comment><USER16> I think the Goal Bounding Gate optimisation he talks about could help with both: it's still O(N²), but if N is limited to those gateway nodes that would cut down on costs tremendously. But that all depends on whether it's cheap to find those gateway nodes automatically.

</comment></comment><comment><USER17> So, basically, it is about a much better heuristics, not a general algorithm.

Of course, with a specialized heuristics one could get a lot of pruning, but generally, if there is no way to come with a specialized heuristic when there is no way to have a jumping heuristic (one have to take one step at a time) and there is no way to look ahead for a specialized nodes, the A* is still the king.

But in AI almost everything is about finding a good-enough heuristic.

<comment><USER18> JPS+ is also about skipping operations. It's a skip list expanded to grid format.

</comment></comment><comment><USER19> And i just implemented A* yesterday...

JPS is great. I remembered it from a former talk a while ago.

From the little experience i have with pathfinding, it seems to be an interesting topic with many little details to be explored. Like smoothing a path, smoothing/tuning a path in regards to loss of "speed" when turning, avoiding dynamic obstacles like other "agents", "flocking" of groups, various different ways of representing a "map", and probably many more.

</comment><comment><USER13> Contraction Hierarchy (CH) is also at least 100x faster as A* . CH has nice properties of having good memory efficiency, optimality, any graph etc. And I am very sure JPS is not that generic applicable like CH. Still all 'fast' routing algorithms have their own drawbacks of engineering complexity, pre- processing time and memory requirements, potential lack for time dependent support etc.

If you want to have the best summary of routing algorithms currently available then read 'Route Planning in Transportation Networks' (2014) [https://arxiv.org/abs/1504.05140](https://arxiv.org/abs/1504.05140)

And if you want fast implementations for routing algorithms like Dijkstra, A*, CH and Landmarks check out GraphHopper: [https://github.com/graphhopper/graphhopper](https://github.com/graphhopper/graphhopper) (note: I'm one of the founders)

<comment><USER20> Hello from OSRM :-) I would've quoted exactly the same paper, it's the best overview that I know of.

<comment><USER13> Hi back :)

</comment></comment></comment><comment><USER21> I had an idea when I took my algo class to overlay a small graph of "highways" on a map and computer all pairs shortest path to that sub graph. Then when you do your search, you do BFS from both the start and goal till you reach a *highway node" and then you have a short but not optimal path between two points without too much computation.

<comment><USER22> Something like that is an essential optimization when pathfinding over long distances. You often need to answer the question _can_ I go from A->B->C long before you need to say _how_ exactly you do it.

</comment></comment><comment><USER16> I had trouble watching the video on GDC (it kept breaking when changing chapters, for some reason), so for anyone else with the same problem, here's a Youtube Mirror:

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

</comment><comment><USER23> In a sense the JPS+ algorithm seems to be to be turning the grid into s kind of nav mesh and if you were to explicitly do this instead you might actually get a better and more general solution that's also easier to update in real time.

The boundary checking improvement would be simplified by dividing the map into islands divided by gates (per his closing remarks) limiting the damage to precalculated data from changes to the map (assuming they occur in one island at a time)

</comment><comment><USER24> This seems to be specifically for grids. Of course essentially no modern AAA game uses grids for navigation anyway, they use convex polys in a nav mesh.

</comment><comment><USER25> Sounds similar to [https://en.wikipedia.org/wiki/Contraction_hierarchies](https://en.wikipedia.org/wiki/Contraction_hierarchies)

There was a paper by Microsoft Research where they find shortest path from one point to another in time equivalent to 5 memory reads + they sped up significantly the precomputation times and lowered memory requirements.

</comment><comment><USER26> Wait. 100× faster than an _algorithm_?</comment>


How do groups work on Linux? - <AUTHOR> https://jvns.ca/blog/2017/11/20/groups/ <comment><USER2> One of the most useful group-related tricks (introduced in BSD Unix, I believe) is the setgid bit on a directory. If this is set, new files and subdirectories created within the directory will have the same group as the directory, rather than the group of the process that created them.

<comment><USER3> I use this as a basic indicator of someone's Unix competency. Not as a straight binary thing, but if I'm talking to someone (interviewing or maybe debugging something) I've found that if you know about _setgid /setuid_ you have probably been interested enough to know what you are doing.

<comment><USER4> I've seen interviewers ask for the sticky bit and the difference between hard and soft links as similar shibboleths.

<comment><USER5> I've seen them ask how to restore execution permissions after `chmod a-x /bin/chmod'. I usually answer to those smartasses that I my favourite way is to run the very non-executable /bin/chmod without any file juggling. I'm yet to meet anybody who wasn't surprised that it's possible.

<comment><USER6> explain?

<comment><USER7>
        shabble@host:~$ cp /bin/chmod /tmp/chmoo
        shabble@host:~$ chmod 600 /tmp/chmoo
        shabble@host:~$ ll /tmp/ch*
        -rw</comment></comment></comment></comment></comment></comment><comment>- 1 shabble shabble 59K Nov 21 17:15 /tmp/chmoo
        shabble@host:~$ /tmp/chmoo
        -bash: /tmp/chmoo: Permission denied
        shabble@host:~$ /lib64/ld-linux-x86-64.so.2 /tmp/chmoo
        /tmp/chmoo: missing operand
        Try '/tmp/chmoo --help' for more information.

<comment><USER8> Well, that's a new one on me. I'd just have 'cat'ted the chmod executable onto some other executable, which keeps the permissions.

</comment></comment><comment><USER9> The book she mentions, "The Linux Programming Interface," sounds pretty useful, but it's seven years old at this point. Does anyone know how much has changed or if there's a new version coming any time soon? Seems like it's worth $70 but the age has me concerned. I'm sure the basics, like the things this article is about, haven't changed, but I bet all the stuff around cgroups would be useful for how setgid works with a process.

<comment><USER10> Useful is an understatement of The Linux Programming Interface (TLPI), yes seven years old but the only major thing that has probably changed is the number of syscalls has risen, other than that, still solid for understanding the OS primitives and interfaces that the Kernel uses to interact with user land. On the BSD side "The Design and Implementation of the FreeBSD Operating System (2nd Edition)" is also a great book to further one's understanding of operating system interfaces on the BSD side.

<comment><USER9> Cool, thank you for the feedback!

</comment></comment></comment><comment><USER11> I absolutely love Julia Evan's writing. I find her articles / zines to cover interesting and useful technical topics while remaining _extremely_ accessible to me (especially when I was a student)! I really admire her ability to present technical topics in plain language.

<comment><USER12> I fully agree. Even on topics I feel I know well, she's 1) shown me something I didn't know, and 2) shown me how a "newbie" could see the topic, making it easier for me to help teach/mentor someone else.

<comment><USER13> It's pretty interesting how one can make a subject look accessible. Often the main factor for ignorance is ceremony.

</comment></comment></comment><comment><USER14> Ohh, so THAT's why I have to log out and back in to have my group changes take effect. That, along with having to start a new shell to pick up new env vars from ~/.profile, are my two biggest annoyances with the Linux process model. Reminds me a bit of the Windows 98 days when you had to restart to change your IP address. I really wish someone would sit down and figure out how to propagate group and environment changes to already running processes and implement them.

<comment><USER15> Take a look at the command "newgrp"

<comment><USER16> I think the op is looking for something like

addgroup && newgrp

</comment></comment></comment><comment><USER17> Some highlighted words do not appear using Firefox 57 on my Ubuntu 16.04.3, like the word "julia" at the third line. It's OK with Chromium.

EDIT: Seems a Firefox related bug, i noticed this strange behavior with other websites inc. Stack Overflow since then. Will investigate asap.

<comment><USER18> i am also using firefox 57 on ubuntu 16.04.3 and it looks fine to me. it must be something with your specific setup.

</comment></comment><comment><USER19> Regarding setuid, this is why when you run programs like ping(8) it doesn't require root access to open a raw socket. ping's setuid is set so upon execution it executes as root since ping is owned by root and then calls setuid(getuid()) to run as the intended user.

<comment><USER20> In some distributions, ping is now no longer setuid, but instead setcap with CAP_NET_RAW to narrow down the privileges gained.

</comment></comment><comment><USER21> Also "newgrp" can be used for join "new" groups without re-login.

<comment> yjftsjthsd-h And here I've been using `su - $ME` all this time. Thanks!

<comment><USER22> Worth noting that it's not functionally all that different in that newgrp spawns a new shell under the current one; aside from the - creating a login shell anyway - but you can do that with newgrp too

</comment></comment></comment><comment><USER23> "dr--r--r-- 1 bork awesome 6872 Sep 24 11:09 file.txt"

This doesn't make sense.

<comment><USER24> $ mkdir file.txt

$ ls -l

drwxr-xr-x 2 USER GROUP 4096 Nov 21 11:49 file.txt

$ chmod -xw file.txt

$ for i in {1..180}; do touch file.txt/long_name_$i; done

$ ls -l

dr--r--r-- 2 USER GROUP 12288 Nov 21 11:50 file.txt

File size is a bit off, but that's based on sector size and may be separately configurable - that's a bit beyond my knowledge.

<comment><USER23> but she says right above it:

"So, for example, if a process is owned by the julia user and julia is in the awesome group, then the process would be allowed to read this file."

<comment><USER24> I'm not sure what you aren't understanding. Directories are just a type of file, so that's not wrong, the dir/file is owned by the `awesome` group, and the group permissions are `r--` so the group can indeed read it.

<comment><USER25> Or one could apply Occam's razor and admit that "d" was a typo.

<comment><USER24> Of course, that's a much more likely scenario. I was attempting to show that the line was not completely nonsensical is all.</comment></comment></comment></comment></comment></comment>


Ask HN: What are you working on this week? - <AUTHOR> What projects are you working on for work or pleasure?<p>Please be descriptive and don't hesitate to ask for help, advice or other guidance. <comment><USER2> Working on some marketing collateral - specifically a document titled "Working with Fogbeam" that describes our approach to engagements, and how we work to ensure that we maximize the business value a customer receives from working with us.

Beyond that, still tinkering with this AI bot[1] that I've been building as a sandbox to work with AI techniques, and doing a lot of reading and studying. Still working on leveling-up with both R and Common Lisp.

[1]: [https://github.com/mindcrime/LearningAIML/tree/master/xmpp-a...](https://github.com/mindcrime/LearningAIML/tree/master/xmpp- aiml-osgi-bot)

<comment><USER3> _Something something the OpenGenera "port" to Linux_

</comment></comment><comment><USER3> Another post just like this one was posted 4 hours afterwards: [https://news.ycombinator.com/item?id=10292247](https://news.ycombinator.com/item?id=10292247)

I say, track both ;P

</comment><comment><USER4> Getting used to my new macbook and then starting my new news sharing project

</comment><comment><USER5> LDAP integration for weblogin</comment>


Limbless master of micrographia featured at the Met - <AUTHOR> http://www.nytimes.com/2016/01/15/arts/design/astounding-feats-in-pen-ink-and-magnifying-glass.html <comment><AUTHOR> also [http://www.nytimes.com/2016/01/17/arts/design/ricky-jay- and-...](http://www.nytimes.com/2016/01/17/arts/design/ricky-jay-and-the-met- conjure-big-magic-in-miniature.html)</comment>


Tell HN: We need p2p DNS - <AUTHOR>

Looking at the trends going on in government it would appear that some of them have an idea of what DNS does. It feels as though without being technical people they are improperly using DNS as a means to regulate the internet. We must stop things like the PROTECT IP ACT and all the Domain seizures going on. if we open the flood gates now we will never regain control.
I have thought of how this could possibly implemented. Recalling some people working on a p2p DNS I couldnt help but think how it would be too complicated for non techies to use.
To me the only logical way to implement this would be to have it as part of a browser. Firefox obviously comes to mind.
I see no reasons why Domain registrations could not follow the same model.
Are my feelings wrong on this? Do you all not feel the same way? The internet is really our last true free space of innovation and freedom.
While groups like Anon and LulzSec may seem to be pushing on the verge of bad guys at times. I feel that in their sometimes convoluted methods is a message that someone has to do something.
I think its up to us all to take as much control away from third parties and call for a Declaration of the Internet. <comment><USER2> DNS is already fully decentralized. Just register a domain somewhere the US can't readily fuck with. They're not going to get the IANA to pull an entire sovereign nation's gTLD delegation because one of their registrants is doing something they don't like.

PS: Namecoin is a fork of Bitcoin, as pointed out by vasilov already. It's completely stupid and ill-conceived, which is irrelevant because it'll vanish from disuse in short order just like AlterNIC.

PPS: Making hostname lookups "part of the browser" is the same kind of "the internet == the web" thinking that got us abominations like WebSockets. Please... just don't.

</comment><comment><USER3> _"I think its up to us all to take as much control away from third parties and call for a Declaration of the Internet"_

Were you thinking of something like this:

<http://w2.eff.org/~barlow/Declaration-Final.html>

So far, I think Namecoin is the only P2P DNS solution that can work. I think the guy working on Phantom protocol (code.google.com/p/phantom) was planning on using something like DHT for a decentralized DNS.

Right now there are only 2 choices if you want to keep a free Internet:

1) Try to stop them from passing bills like Protect IP, by making a lot of noise online and offline, and trying to gather as much support for this.

2) Let them do what they want, and eventually we all move to something like Phantom.

Obviously this 2nd solution doesn't seem ideal, at least in the short term. Long term, it might be better to have a completely anonymized and decentralized Internet. But it seems like such a hard task to get to the point where many people would use it. It took a decade for Bittorrent to be used by many people, even though I wouldn't say it's exactly mainstream right now.

So the _easier_ way to keep our Internet freedoms would be to speak out against such measures and do whatever it takes to stop them (even revolutions). And it seems that Anonymous is already moving to do just that:

<http://www.youtube.com/watch?v=j_9T1SPJXRI>

</comment><comment><USER4> I agree that we must stop legislation that aims to control our freedom and our will. I don't necessarily agree that a P2P DNS system is either necessary nor will it be successfully adopted by the masses, who are exactly the people that need protection from oppression the most.

Rather than treating the symptom (DNS) treat the disease (governments that do not exist for the good of their people).

</comment><comment><USER2> Oh, one other thing: Tor hidden service .onion hostnames already operate outside of DNS (they are encoded keys). Last I checked, Tor is p2p, so this is is IMHO a solved problem.

</comment><comment><USER5> You should look into Namecoin.It's a fork of the Bitcoin project. <https://en.bitcoin.it/wiki/Namecoin>

</comment><comment><USER6> Governments not interested in the wills of the people is old news. Most of them are just a proxy to turn the interest of few into regulation.</comment>


Ask HN: Requesting a Few Hackers to Volunteer - <AUTHOR> I think I found a quick and easy solution to distribute food to needy individuals during this covid pandemic.
I need a few hackers to volunteer their time to help me code and throw something up online.
I will provide funding for servers.
Skills desired: Geocoding/image manipulation/twilio api/etc
This is purely a nonprofit social project. If you are able, please contact me at p2pfoodproject at google's email service.
I will post an update to HN community once we have an MVP up and going. <comment><USER2> I did some geo-coding a while ago but anything large scale is going to be costly as all the APIs have non-trivial fees for > hobbiest usage. Have you asked any geo-coding companies for free access? I bookmarked this site a few days ago because I still have a few itches I'd scratch if it didn't cost me an arm and a leg ... it should give you some idea of what a large-scale deployment of your application would cost - [https://getlon.lat/](https://getlon.lat/).

I'd be interested in helping with your effort but I think you should describe your architecture and technology choices a bit. How do I know if I'll fit in? (and if you want to launch quickly, now isn't the time to have engineers learning on-the-job).

<comment><AUTHOR> Thank you for the feedback. Sent you an email.</comment></comment>