IPv6 Exhaustion Counter - <AUTHOR> https://samsclass.info/ipv6/exhaustion.htm <comment><USER2> This counter is completely inaccurate. I used to work for a company that was doing email marketing (I quit because I disagreed with their practices). My employer was buying about one /48 per week. What does this mean? We alone exhausted 2^80 ip addresses per week, or 2e18 addresses per second (that's 2 quintillion!). So this counter showing 2 addresses exhausted per second is wrong by an order of 1 quintillion.

In fact, with the proper paperwork you can still relatively easily buy an entire /40 or maybe even /32\. With these practices, IPv6 WILL run out of addresses within the next 100 years. Well, to be pedantic, it will run out of allocatable subnets, but the vast majority of their addresses will remain unused.

<comment><USER3> I've wondered about that. My ISP gives me a /64.

On the one hand, it seems cheap to give me one-four-billionth of the relative amount of space as the one IPv4 address they give me.

On the other hand, I can't possibly imagine which consumer home network needs four billion times more IP addresses than _all of IPv4 combined_. (EUI-64 notwithstanding.)

It would seem like /112 would be way more than enough for home use (131,072 unique IPs), even for complex setups with lots of subnetting, and /96 for small business use.

I understand that giving out /64s will still take 4 billion times longer to exhaust all IPs than IPv4, but ... it still feels like they're being overly generous. 64-bit IPs would have more than enough to outlast our sun going supernova if we were smarter about allocating them.

<comment><USER4> This is part of the design of IPv6. There are (amost) never networks other than /64\. This allows the possibility of generating addresses based on a mac address, and frequently changing addresses for privacy reasons.

Most devices will not work on a network with a mask longer than 64. The only common exception is point to point links between routers, which may be a /127.

Removing variable length subnet masks from end networks makes routing and configuration a lot simpler.

<comment><USER5> Honest question, how does privacy come into play here? If you're given a /64, even if you change the last 64 bits, isn't it trivial for someone to assume everything from the first 64 is you?

<comment><USER6> Two things:

1\. The /64 is the same for your whole local network. Granted that at home that is usually not many devices, but it's almost certainly more than one.

2\. The /64 changes when you change networks, and unless you have a static IP address it will change for your home network too. On the other hand, if the low 64 bits is derived from your MAC address, it _never_ changes (unless you replace your NIC of course.)

<comment><USER7> > The /64 is the same for your whole local network.

This means that -at best- IPv6 "Privacy Extensions" give advertisers no more information than they get today with non-Carrier-Grade IPv4 NATs. That's not a big win, in my book. :/

</comment></comment></comment></comment></comment></comment><comment><USER8> Relevant [https://xkcd.com/865/](https://xkcd.com/865/)

</comment><comment><USER9> What about the 10^40 years between IPv6 exhaustion and proton decay? No one plans for the future these days.

<comment><USER10> Let's start working on IPv8.

<comment><USER11> you might not be far off. I imagine there will be an ipv8 not because of address allocation but protocol standardization changes. Just a guess.

</comment></comment></comment><comment><USER12> Notes from when we get close to exhaustion of IPv9:

[https://tools.ietf.org/html/rfc1606](https://tools.ietf.org/html/rfc1606)

<comment><USER13> > 1 April 1994

</comment></comment><comment><USER14> Reminding us once again why 64 bit addresses would have been just fine.

<comment><USER15> Large address spaces give you more than just more addresses. There's room in IPv6 addresses to put meaningful information such as cryptographically significant identifiers. It also allows for stateless auto-configuration with ridiculously small chances of collision.

There are issues and missed opportunities in IPv6 but that isn't one of them.

<comment><USER16> One man's "meaningful information" is another mans "privacy leak." If I visit foobar.com and they can find out from my ipv6 address what make and model of motherboard I am running, is that really a good thing? There is a reason why MAC addresses were not included in ipv4.

The ipv6 designers seem to have hated the idea of network address translation (NAT). But a lot of people have come to depend on it for security. For example, with ipv4 my wireless router only exposes one IP address to the world, no matter how many devices are behind it. But with ipv6 in its default mode, all the devices are exposed. So if I visit evildude.com on my laptop, they will know my ipv6 address. This will then map back directly to the device (no NAT), and they can port scan me and try to do bad things to any ports I have open. You can fix this with firewalls or just with NAT, but you lose a lot of the supposed benefits of ipv6 by doing so.

I think there's a strong argument to be made that point-to-point communication is more useful for evil than for good. Most of the time when you're doing something legitimate you don't mind going through a gateway. For example, I don't need to talk to my bank's backend servers directly... I can just use their public IP address and let their load-balancer send me to some open server. But if I'm a hacker, maybe I want to target something deep inside the internal network, and ipv6 makes that easier.

<comment><USER7> > I think there's a strong argument to be made that point-to-point > communication is more useful for evil than for good.

It's not true in meatspace. It's also not true in cyberspace.

> ...they can port scan me and try to do bad things to any ports I have open.

It's _software_ that's behind those ports, and _software_ that's the target of attack. :)

> For example, I don't need to talk to my bank's backend servers directly... I > can just use their public IP address and let their load-balancer send me to > some open server. But if I'm a hacker, maybe I want to target something deep > inside the internal network, and ipv6 makes that easier.

...IPv6 _still_ supports stateful and stateless firewalls. Those haven't gone away, yanno? What's more, ULA space exists for a couple of reasons. If you _really_ want to give something a non-publically-routable IP address, creating a ULA prefix and going to town is the preferred way of doing this.

</comment></comment></comment></comment><comment><USER17> Does this take into account that we're creating devices that connect to the Internet at an increasing rate? :)

<comment><USER18> I was also wondering this. For example, they were talking about the debunked idea of solar panel roadways. If something like that took off in the future, literally every panel would require its own ipv6 address.

Perhaps we can at least make it until solar systems no longer exist.

<comment><USER19> Why do they need an Internet connection at all? Even if they do need to be connected to the Internet, why can't they connect through NAT?

<comment><USER20> Because NAT is a hack to cope with IPv4 address space exhaustion. The main benefit of using IPv6 is that it allows you to get rid of NAT.

<comment><USER19> That might be, but it's a hack that works pretty well on a lot of real-world systems.

<comment><USER7> If you think that, you've not read the details of any NAT traversal schemes that _aren 't_ uPnP.

</comment></comment></comment></comment></comment></comment><comment><USER21> So why don't I get at least an /48 if I rent a server online? Hetzner gives you a /64 and a lot of providers only provide something like /80 or /112.

Having a /48 oder /44 would make deploying IPv6 VPNs a breeze because of ULA and prefix translation. [https://tools.ietf.org/html/rfc6296](https://tools.ietf.org/html/rfc6296)

Where is the problem?

<comment><USER22> Router hardware cannot keep up with any real number of IPv6 addresses. You'll quickly overflow router tables if you try to use even a tiny fraction of that /48 at once.

For example, Cisco Nexus 9000 can deal with 30k IPv6 neighbors. Once you cross that, things start blowing up.

This isn't really a limit for the backbone routers, because they're all dealing with routes, not individual IPs (they know that 2001:DB8::/32 goes to peer A, which only consumes one routing table entry). It's only a provide when you get to the network edge.

<comment><USER21> > ...when you get to the network edge.

I'm not a networking guy. Where is the difference? One table entry for the /48 should be enough? Where is the difference to a /64 that still allows enough IP addresses to blow something up? I can't image that a lot of people map their ULA network 1:1 to a /48 or is this the reason? As far as I undetstand it it shouldn't matter because the prefix translation is happening on the server itself on not on the router. So a single router should suffice?

Wasn't at least the IPv6 header explicitly designed to be more router friendly?

<comment><USER22> At the edge, the last router before your server has to have a mapping that a single particular IPv6 address maps to a specific MAC address. You can't really condense this down to a single entry, because any given switchport might have multiple MAC addresses active (think of the case where you have a dumb switch attached to your router, and 20 servers attached to that dumb switch. You're looking at 20 different mac addresses, so no way to condense that down to a few entries).

Even a /64 is more then enough to blow up a router at this point. The /48 just makes it a lot more likely that that will happen.

The simplest solution here is to route the entire /48 at a specific IPv6 address. This brings you back down to a couple table entries, but requires that your customer configure things properly.

<comment> X-Istence That's when you do DHCP-PD and the router (last hop before your server) sets up a route for that entire /48 to the link-local address of your server.

Or you set up a static route (as a provider this would be recommended) or let the edge do a BGP announcement of it's address space.

<comment><USER7> Why do either of these solve the problem mentioned, and _why_ would you allocate a /48 to a single server?

<comment><USER7> Wait, when you said

"...the router (last hop before your server) sets up a route for that entire /48 to the link-local address of your server."

Was "your server" the ISP's server, or the customer's server? If the former, why are you saying "server", rather than "router"?

<comment> X-Istence It's the customers server. If they need a /48 of address space, you just want to route all of it to them.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER23> The best ones are gone already though.

</comment><comment><USER24> This is lovely for end users but for server admin, how do you firewall countries for IPv6 without memory exhaustion?

<comment><USER25> What?

Differently from IPv4, IPv6 addresses are strictly hierarchical. You block areas by blocking their root network.

Now, why do you need to firewall entire countries again? Are you working at the Great Firewall of China or some similar project?

<comment><USER26> How about working for a company with sensitive defense or financial information, for which access from China/Russia/Ukraine is completely unnecessary?

GeoIP blocking is not one's only defense, of course, but it's one of many tools to keep the low-to-mid level groups at bay.

</comment></comment></comment><comment><USER15> Hmm... still could be a problem:

[http://www.multivax.com/last_question.html](http://www.multivax.com/last_question.html)

</comment><comment><USER27> Small point of grammar: AD goes in front of the date. IPv6 will be exhausted in AD 5,395,000,000,000,000,000,000,000,000,000, not 5,395,000,000,000,000,000,000,000,000,000 AD.

Explanation: AD stands for anno Domini, "in the year of our Lord...." You would say "in the year of our Lord 2015," not "2015 in the year of our Lord."

BC and CE go after the date.

<comment><USER28> This sounds like a convention that is begging to be broken. No-one speaks Latin anymore, so let's start now :)

</comment></comment><comment><USER29> All of this discussion of the accuracy of the counter also overlooks the cosmology- Sol is projected to expand into a red giant, which while it will certainly destroy the Earth, will not actually explode. Our sun isn't heavy enough to go supernova.

</comment><comment><USER30> I first heard about IPv6 on the front of a British computing magazine in 1997.

For an industry that is supposed to be so cutting edge and innovative and disruptive (urgh), we sure have been slow as shit in transitioning to IPv6.

<comment><USER31> Sky are certainly looking at a roll out:

[http://www.ipv6.org.uk/wp-content/uploads/2014/11/SKY- IPv6-T...](http://www.ipv6.org.uk/wp-content/uploads/2014/11/SKY- IPv6-Technology-Update-IPv6Councilc1.pdf)

BT are apparently going the opposite direction (and looking to create a lot of hurt) with CG-NAT: [http://www.alphr.com/news/broadband/381646/customers-fume- as...](http://www.alphr.com/news/broadband/381646/customers-fume-as-bt- introduces-ip-sharing)

</comment></comment><comment><USER32> Is there something like this for IPv4 ?

<comment><USER33> [http://www.potaroo.net/tools/ipv4/](http://www.potaroo.net/tools/ipv4/)</comment></comment>


AWS Lambda Destinations - <AUTHOR> https://aws.amazon.com/blogs/compute/introducing-aws-lambda-destinations/ <comment><USER2> Some of the use cases are already covered by Step Functions.</comment>


Modern C++ Won't Save Us - <AUTHOR> https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/ <comment><USER2> > Dereferencing a nullptr gives a segfault (which is not a security issue, > except in older kernels).

It's a segfault on many C++ implementations, but it has undefined behavior, so there's no guarantee.</comment>


According to Google 999999999999999 – 999999999999998 = 0 - <AUTHOR> https://www.google.com/search?q=999999999999999+-+999999999999998&rlz=1CADEAC_enUS712US712&oq=999999999999999+-+999999999999998&aqs=chrome..69i57j69i64.260j0j7&sourceid=chrome&ie=UTF-8 <comment><USER2> even 999999999999999 - 999999999999997 = 0

instead using 999999999999996 it return the correct result.

</comment><comment><USER3> Should a hacker be surprised by floating point math?

<comment><USER4> This actually is quite surprising. If you play around, you quickly discover the epsilon does not correspond to any standard mantissa sizes.

In fact, Google appear to represent numbers to a precision of 1 part in 333333333333333:

[https://www.google.co.uk/search?q=333333333333334+-+33333333...](https://www.google.co.uk/search?q=333333333333334+-+333333333333333) and all smaller positive successive integer pairs yield 1

[https://www.google.co.uk/search?q=333333333333335+-+33333333...](https://www.google.co.uk/search?q=333333333333335+-+333333333333334) and all larger positive successive integer pairs yield 0

what the hell kind of numeric representation does _that_?</comment></comment>


Show HN: Who's Mentoring? - <AUTHOR> http://www.whosmentoring.com/ <comment><USER2> My experience of 'mentoring' like this has been not requests for mentoring, but 'solve my problem please, and do it for free'.

I was thinking a 'solution' to this would be mutual mentoring: exchange your expertise in X with another's expertise in Y.

<comment><USER3> If you go to codementor.io you'll find exactly that. Apparently people do pay, but they don't want a mentor at all (also, the sheer majority of people who request a mentor end up not hiring any -- or even replying to their messages).

The whole thing is a mess.

</comment></comment><comment><AUTHOR> Thanks for having a look at the site. I have added the 15 or so new submissions - except the butcher (!).

Tech stack, if you are interested is: Hugo to generate the page. Originally I had to create one "post" markdown file per entry. That got tedious, so now it reads from the CSV I download from the contact form. Hugo supports this natively so no coding.

Hosted on Google cloud storage. I presume there have been no problems with slowness!

</comment><comment><USER4> Hey, I am not sure how this works. I am learning on my own and have occasional doubts where I can't find a clear answer via googling and would love to chat about it with someone. So do I need to pay for such mentorship? If so, how? Monthly? Hourly? Is it like a consultation where I have to pay for each session?

</comment><comment><USER5> In the longer term it makes sense to implement Craigslist-like email proxying and eBay-like (-ish) reviews on behalf of both parties involved in mentorship. ("I didn't learn anything" vs. "never answered an email in less than two weeks" and all the other things that will go wrong as various motivations limit particiation.) Perhaps an opt-in to publish interactions could protect both parties?

A larger focus on simplifying the process of preserving mentorship sessions with the intention of developing a collection of recommendations made available publicly could provide monetization options down the road. Recording Skype sessions, integrating a collaborative editing environment with archival, etc. A tremendous amount of value is being transferred and any attempt to capture and multicast that could pay off even just in allowing a later read- only opportunity to learn. (I would encourage anyone signing up to perform this archival themselves with full awareness and approval of both parties involved.)

Tie in deep LinkedIn and GitHub integration to tick all the buzzword boxes on future resumes and recommendations (somehow without driving the wisely paranoid/most experienced mentors away) and this tool could really help people improve their standard of living by getting a better job!

</comment><comment><USER6> This is a really nice address book, thanks :) The UI is bare but does what it says on the tin. I hope this list keeps growing!

</comment><comment><USER7> Is the expectation that mentors get compensated hourly? I'm not sure how this arrangement works.

<comment><USER8> I wouldn't expect compensation if someone is sincere in wanting to learn and shows ability.

As Confucius said: If I hold up 3 corners of a square and the student does not hold up the 4th, I do not go over the point again.

</comment></comment><comment><USER9> Apparently, it was inspired by this HN post which was flagged by mods for some reason: [https://news.ycombinator.com/item?id=15148619](https://news.ycombinator.com/item?id=15148619)

<comment><USER5> > flagged by mods for some reason

It is uncharitably disingenuous (at best) to imply there somehow remains any confusion as to why the post was flagged. A complaint about someone having to ask for an explanation might be legitimate.

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

>dang: _we 're pretty rigorous about moderating this sort of thread out, because it's not the core focus of the site. HN's core focus is the goose that lays the golden eggs. Taking care of HN means taking care of the goose and (mostly) foregoing everything else_

Props for the link to the previous discussion, and props to the whomevers persevering through to this implementation of an MVP getting which will hopefully support getting this process off the ground.

</comment></comment><comment><USER10> There is not much here to tell a given mentee if they should expect to pay people for their advice or if the mentor expects to be treated like a consultant.

</comment><comment><USER11> For programing subjects, what is the advantage of this over a specialised subreddit or mailing list / usenet?

</comment><comment><USER12> I am surprised to see no one in blockchain/cryptocurrency in the list.

<comment><USER4> Ye, I too have been searching someone knowledgeable about blockchains.

</comment></comment><comment><USER13> Details field should not be allowed to be blank.</comment>


Baby names in England and Wales: 2015 - <AUTHOR> https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/livebirths/bulletins/babynamesenglandandwales/2015 <comment><USER2> Only two boys' names feature as the most popular in the 10 regions comprising England and Wales. These are Oliver (in 8 regions) and Muhammad (most popular in 2 regions).

As with the boys, only two girls' names feature as the most popular in the 10 regions comprising England and Wales. These are Amelia (in 8 regions) and Olivia (most popular in 2 regions).</comment>


Hot Swap java code: unlimited class redefinition at runtime.  - <AUTHOR> http://wikis.sun.com/display/mlvm/HotSwap

<comment><USER2> If you are looking for something you want to use right away, check out JRebel. Mechanisms for hot swapping classes is still very premature in the JEE and I'd recommend WAR/EAR deployments in any environment other than development. I find hot swapping more useful for development as it gives me a faster dev/deploy cycle similar to PHP.

<comment><USER3> Actually the project offers a free patch for the VM to download that you can use today.

But I agree that JRebel is the more robust solution right now.</comment></comment>


One Born Every Minute (about Backupify) - <AUTHOR> http://pl.atyp.us/wordpress/?p=2698

<comment><USER2> If you're going to say something, just say it.

Unless it's not true, in which case you wouldn't want to, because that would be libel.

<comment><USER3> If _you_ are going to say something, just say it. If you're going to accuse someone of libel, just accuse them. Don't be all passive-aggressive when you're accusing others of being passive-aggressive. It looks kind of like you're projecting a bit, y'know?

In this case, I wasn't making any accusations about Backupify. I was merely pointing out how their _external behavior_ is indistinguishable from phishers'. For all I know they're stand-up guys with the best of intentions, but I object to business models that are based on encouraging bad security practices. They could do everything they do by providing software that verifiably keeps passwords and keys on the user's computer, never storing anything unencrypted in Backupify's AWS cloud. That would be just as useful, and it would be the responsible thing to do, but offering a service instead of software is easier - no platform-support issues. If they're using GPL programs (probably) then they also get to take advantage of the "service provider" loophole to avoid distributing their modifications, and if Backupify ever becomes popular then a service model has better revenue-generating potential. All good for them, so apparently they don't care that it depends on users doing just about the dumbest possible thing security-wise. They might have no intention of abusing their access to users' data, but can they guarantee that every disgruntled employee or contractor will be so noble? Hardly. That's exactly why giving your password to _anyone_ else is a Bad Idea. Business models based on encouraging users to do stupid things are IMO worthy of derision, so I gave them some.

<comment><USER2> You're not wrong about the issues involved, but the way you went about it was attacking Backupify, not directly for bad security practices, but indirectly through the "Backupiphish" scare-mongering.

And as for your accusations, you started with setting up a hypothetical company that looks like them and commits massive bank fraud, then saying that it "has nothing whatsoever to do with Backupify. No sir, not at all. Pure coincidence." If you want to make those accusations, back them up. If not, write a post about their bad security practices, instead of a post about a (hypothetical) web service backup company that's (ahem) entirely unrelated's crime.

<comment><USER3> Gee, so sorry I didn't write the post you would have, and chose to approach the issue satirically instead. You do understand satire, don't you? You do understand how _A Modest Proposal_ was more effective than some dry exposition of the underlying issue, right? Maybe my "wrong choices" about how to raise awareness of an issue are the reason that you were reading my blog and not vice versa. Everybody loves a kibitzer.

<comment><USER2> Maybe I wasn't clear: my main issue with the post isn't that it approached the topic from a non-factual angle, it's that it does so in a way that looks like an accusation of a very serious crime.

The line at the end isn't subtle, it's clearly sarcasm intended to mean the opposite of what it says, that is, that this post _is_ about Backupify. Well, the post is about a company that provides the same service as Backupify but instead steals bank account details.</comment></comment></comment></comment></comment>


HTC One X and One X+ will not receive KitKat; stuck on Android 4.2 forever - <AUTHOR> http://arstechnica.com/gadgets/2014/01/htc-one-x-and-one-x-will-not-receive-kitkat-stuck-on-android-4-2-forever/

<comment><USER3> By coincidence HTC haven't received a penny from me other than my very first Android phone on which they took almost a year to upgrade to 2.3. I wouldn't consider another phone from them until they have a sustained track record of updates.

Perhaps the most striking turnabout in the Android space is Sony. Outside they have a reputation for being proprietary, crappy software, quick on the legal guns etc. Within the Android space they are exemplary. XDA love them, and Sony keeps stepping up with specs and software releases.

[http://www.xda-developers.com/holiday-guide-2012/oem-of- the-...](http://www.xda-developers.com/holiday-guide-2012/oem-of-the-year/)

<comment><USER4> I was thinking about getting am HTC One to replace my nexus 4 since my contract is up. one thing I was worried about was updates. so this helped me decided not to make the switch.

<comment><USER5> Can't get the Nexus 5?

</comment></comment></comment><comment><USER6> I am an ios user but have considered more and more switching to android - <USER2> stuff like this scares me away. I have heard many stories about phones not being updated or taking a very long time to update, including phones that were expected to be able to. How can you know which phone to pick that should get updates for at least 2 years if not longer?

<comment><USER7> It's really a non event. So much of what you need is no longer at the OS level but at the "Google Play" level if you will. iOS trains you to equate "great new stuff == OS upgrades" but Google has taken a very different route to ensure customers get the latest and greatest without worrying about OS fragmentation.

<comment><USER8> It isn't a non-event; you may not get some (or any) security fixes because the vendor didn't provide the latest Android update.

Given how much many people depend on their phones and how much information they usually have on them, I think security is pretty important.

That's why I got a Nexus 5; I'm confident I'll continue to see updates for some time.

<comment><USER9> This is the really important point. We've been protected so far by the fast evolution of phone hardware and the mass migration of people to smart phones. It's hard to perceive it but the game is now changing: we're into an iteration of phones now that the masses are purchasing that they may well hold onto for 5 years+. If security updates stop after 1.5 years, that's a terrifying mass of insecure phones holding everything from email accounts to bank details. Google can update a lot of things via the Play Store, but they can't patch kernel vulnerabilities or driver exploits.

Google really needs to include in their play store agreement some kind of requirement to ship critical security updates within a defined period of time. Yes, that's going to hurt - the maintenance burden of shipping an Android phone is going to rise dramatically if you inherit a burden of 5 years of updates. But then, critical security updates should be extremely incremental updates that rarely involve any functional changes to the user.

I'm not sure how the Android ecosystem is sustainable without something like this. At some point there will be an Android security apocalypse: an exploit that can't be fixed without a kernel update that affects hundreds of millions of legacy phones that have been abandoned by their makers.

</comment></comment></comment></comment><comment><USER10> HTC has been letting customers down since the days they failed to bring Android 2.3 to the Desire.

They lost me there.

</comment><comment><USER11> The article claims "The HTC One X and One X+ are dead!"

The thing to understand about HTC is that from a strategic perspective, they're trying to stand over a rift that only gets wider every month. On the one side, they can't afford to develop an operating system, runtime, and ecosystem on their own. On one other side, they need to somehow "add value" to the Android experience, either through software (i.e. "extras" or "rethinks") or through hardware (in which they have plenty of competition) or, at best, finding overlooked combinations of the two that they can provide (e.g. a power button that's also an IR remote for your TV.)

They don't have a truly stable platform on which to add these improvements. In many cases the platform will beat them to whatever it is they want to add, and they won't have anything "new" to promote as their own.

As (or if) Android matures gets closer to the point where each new version matters less than the last, then they'll eventually have something like a stable platform to further focus their efforts on making the smartphone they want to make. It all depends on how much their users care about new Android.

I don't have any armchair advice this decision, but it's interesting to consider the trade-offs they're making.

Disclosure: I used to work for HTC.

<comment><USER12> In your estimation, how much would it cost for them to do the KitKat update?

<comment><USER11> I've no idea. I'm just saying it's a trade-off, and possibly not aligned with their desired strategy.

</comment></comment></comment><comment><USER13> The HTC One S (released at the same time as the One X) didn't get anything past Android 4.1 Jelly Bean. I've taken my money elsewhere.

</comment><comment><USER14> Where this hurts HTC is now people will avoid buying the HTC One because it probably won't get 4.5 (or whatever the next Android upgrade is).

Although by "people" I mean "tech-savvy people attuned to the existence and importance of OEM upgrade support"

</comment><comment><USER15> Sad news for the android community and for the environment. What is the safest handset choice for android and how does it compare to the iPhone when it comes to updates after it has been discontinued ?

<comment><USER16> I previously thought that was the Nexus series, but my Galaxy Nexus isn't getting KitKat either, so even Google's own flagship phone series doesn't even get their own updates. They made some excuse about TI not being able to provide new OMAP drivers since they sold off that business...

<comment><USER15> Hmmm, that's just a lame excuse! Should take it for granted that was covered by the SLA they have with TI.

</comment></comment></comment><comment><USER14> Consider this an inbound marketing opportunity for Cyanogenmod...

</comment><comment><USER7> Sounds like a battle over camera software</comment>


Ask HN: Customer requires HTML 5, what do I say to convince otherwise - <AUTHOR>

A client of mine has requested HTML 5 to be used for their new website.  I suggested to go for the normal HTML since they have "only" static pages.<p>What bottom line should I use to convince them to use the normal HTML? <comment><USER2> Is this a joke?

If not, HTML5 _is_ normal HTML, not even a requirement to support IE8 will stop you using HTML5, though individual things in the various standards have different levels of support, and not all fallback gracefully or have polyfills available.

There's some starter kits that you can use that will provide the basics of an HTML5 site, like [https://html5boilerplate.com/](https://html5boilerplate.com/) or Bootstrap.

</comment><comment><USER3> If you're not willing to learn or be adaptive to your customer' needs then you have no place creating websites as a profession

<comment><AUTHOR> Its not me doing a HTML5 but does the website require is more of a question.

<comment><USER4> Using HTML5 or not makes no real difference for simple pages, so why wouldn't you do it? As far as I know it doesn't really have downsides.

If they mean something more than just HTML5, figure out what exactly they mean and decide about that.

</comment></comment></comment><comment><USER5> You can go ahead and use HTML 5 compliant markup. As these are static websites, you won't need any Canvas or other advanced stuff.

<comment><AUTHOR> This is a max 10 page static website, no db etc.

</comment></comment><comment><USER6> Why do they mean by HTML5? Semantic markup? CSS3 Animations? Audio or video maybe? Or did they just hear the buzzword and find it cool? It's your job to explain them what it is and what it implies. But technically just using the correct doctype means you are doing HTML5...

<comment><AUTHOR> Their requirement is a static webpage and to have HTML5 ("As they say") on a static page? There is no media and/or animations etc</comment></comment>


iOS 8 Adoption at 46% After Five Days - <AUTHOR> http://techcrunch.com/2014/09/23/ios-8-adoption-nearing-half

<comment><USER2> Whatever your personal thoughts are on iOS and Apple, you can't deny that it's amazing how fast Apple can push through new updates which is a good thing for both developers who can rely on a larger userbase for new APIs and security.

<comment><USER3> Even more amazing to me is the high rate of adoption given how massive the download (~4GB) was. I had to clean up apps from my 64GB ipad to make room (though with 64GB, I tend to carelessly collect apps, and Amazon Instant video will just download tens of GB if I'm not careful). Anecdotally, I can think of a couple friends this past month in which, on a normal day, had to stop taking pictures/selfies because their phone HD was too full...It's easy enough to delete GB of movies, but _photos_?

It doesn't help that deleting media/apps just from the phone is a pain in the ass, and syncing with iTunes is arcane even to a longtime iOS/Apple user as myself. So I have to imagine this 46% are the folks who happen to have well- maintained disk space...but 4GB won't be trivial for people with 16GB phones that have collected music/photos/video for a couple years now.

<comment><USER4> I installed iTunes over the weekend (I don't own a Mac) just to perform the update. It was fairly quick and painless, and saved me from needing to delete a ton of stuff from my 16GB iPhone, which I foolishly did for the iOS 7 update. I uninstalled iTunes as soon as it was complete.

</comment></comment></comment><comment><USER5> I'm really surprised, it seems pretty much on track with iOS7, that was 58% after 7 days [1].

I thought that the space requirement would slow down adoption (I still have to change because of that).

[1] [http://9to5mac.com/2013/09/26/ios-7-adoption-rate-much- highe...](http://9to5mac.com/2013/09/26/ios-7-adoption-rate-much-higher-than- previous-releases-now-approaching-60-percent-overall/)

</comment><comment><AUTHOR> By contrast...

[https://developer.android.com/about/dashboards/index.html](https://developer.android.com/about/dashboards/index.html)

</comment><comment><USER6> I sold an iPhone not long ago, one that still had iOS 6. Seems that it sold at a bit of a premium, and that was the likely reason.

<comment><USER7> Funnily enough, one market for those is people who want them for testing; iOS6 in particular is a problem, because the only device that got left on it was the 3GS.

<comment><USER8> iPod Touch 4th gen also tops out at iOS 6.

</comment></comment></comment><comment><USER9> I suspect that there are quite a few people like myself who are waiting for a jailbreak to be released before upgrading.

<comment><USER10> I thought that you couldn't use the App Store if you jail broke your phone? That's how Apple gets it statistics.

</comment></comment><comment><USER11> i feel the ios 8 is still a bit buggy!!

<comment><USER6> Sometimes my custom keyboard disappears (using SwiftType). Numeric unlock in Cloud Magic doesn't work; I have to close and reopen. I have 2 apps with swipeable photo-galleries that get "stuck" and cant' swipe (one of which has released a big iOS 8 update and still has behavior). (These may be app issues, not OS necessarily, but that's mostly irrelevant)

<comment><USER12> Exact same here, I'm using Fleksy keyboard app and it sometimes just disappears; and Redditur's swipable photo gallery gets stuck.

</comment></comment></comment><comment><USER13> Maybe it's just me, but 'adoption' sounds like a purely voluntary action. Don't mean to sound negative, but is there a word with less negative connotation than 'infection'?

<comment><USER14> Why do you believe ios8 is being forced on people?

<comment><USER15> You do have a choice, but it's between an OS with unpatched vulnerabilities and iOS 8. If you care a little about security, you're forced to upgrade. Attackers don't necessarily need much time to compare the two versions and understand the vulnerabilities that were fixed.

It's not about Apple being evil, it's the nature of computer security today. However they could backport security fixes, if they wanted to leave a period of time where people have a meaningful choice between freshness and stability.

<comment><USER14> It looks like Apple supports IOS releases with the same frequency as OS X, that being n-1. IOS6 probably won't be getting any more patches, but IOS7 should be for the next year or so.

So even patching is not forcing anyone.

<comment><USER15> According to [http://support.apple.com/kb/HT1222](http://support.apple.com/kb/HT1222) the last time version n-1 was updated for a security vulnerability was 6.1.6, and it was updated at the same time as version n.

There's no iOS 7.1.3 that would fix any of the many vulnerabilities fixed in iOS 8: [http://support.apple.com/kb/HT6441](http://support.apple.com/kb/HT6441) , and it's likely there won't ever be.

For example, CVE-2014-4377 ("Opening a maliciously crafted PDF file may lead to an unexpected application termination or arbitrary code execution") or any of the WebKit vulnerabilities are a pretty big deal.</comment></comment></comment></comment></comment>


It's yer data – how Google secured its future, and everyone else's - <AUTHOR> http://alecmunro.blogspot.com/2014/08/its-yer-data-how-google-secured-its.html?m=1

<comment><AUTHOR> Something I've been thinking about for a while. Probably could have used more polish, but I would rather get it out there for comment (even those lambasting nee.)</comment>


C++ pitfalls - <AUTHOR> http://www.horstmann.com/cpp/pitfalls.html <comment><USER2> It's missing my favorite, std::(unordered_)map::operator[]

      map<int,int> a;
      cout << a[11] << endl;
      cout << a.size() << endl;

This works fine and has well defined behavior: it will print '0' followed by '1' since the middle line actually inserts a {key=11, value=0}.

This is a landmine I think every journeyman c++ programmer steps on a few times.

<comment><USER3> The amazing shittiness of std::map and friends drove us to write our own, with blackjack and hookers.

I really wish there was an API "Hall of Shame" with attached discussion minutes showing the exact points where a group of otherwise sane people decided to kludge these things in.

<comment><USER4> I agree this particular example can be confusing the first time you hit it, especially coming from other languages.

It's better than the alternatives though, I would be interested to hear how you handle this in your version. Leaving the behaviour undefined for non- existent keys is likely to cause far worse bugs, throwing an exception would be inconsistent with the rest of the stl.

The could have left it out altogether, but would mean losing some nice properties - operator[] returning a reference makes it possible to assign into the map directly ( a[3] = 5; ). Also since the value is default initialized, you can write something like a counter easily, much like a python defaultdict:

      for (auto id in ids) {
        a[id] += 10;
      }

You can always stick to .find and .insert if you prefer the more explicit behaviour.

<comment><USER5> In the version we ended up writing, 'operator []' is equivalent to a call to 'Get', which also returns a reference to the mapped value. In the event that key is not mapped, it asserts. If you handle the assert or have disabled runtime asserts, it returns a reference to a static value instance, so you can handle this kind of error yourself or even use the static value as a 'default' (though we never use it that way).

Though not consistent with how STL works, it is consistent with how our containers work and how we use maps. YMMV.

Also, since we wrote it, we're free to change the behavior if a better way manifests itself. So, if you have any suggestions, let fly.

</comment></comment></comment></comment><comment><USER6> This is an interesting list to look through, but things are not as bad as they look.

Many of these are warned about on modern compilers, if you use '-Wextra -Wall'. Some of them are even on by default. I think compilers should warn more eagerly. I would put -Wextra -Wall on by default -- it is easier to turn off things you don't want, than to discover things you do not know exist. But I know this is not a popular opinion!

</comment><comment><USER7> C++ provides high level stuff at the expense of making the programmer part of the compiler that must give it hints about memory, types or cope with multiple page error outputs because of one missing semicolon.

C++ exists because real high level languages does not have very efficient compilers yet.

And where high performance is really needed and programmers time or effort is not a problem C++ is preferred.

I expect that with the increasing processing power compilers will get some AI incorporated and get smarter in the future and high level languages will output binaries that are at least as fast as those produced by C++ or C compilers.

<comment><USER8> C++ exists because processing power and RAM _used_ to be at a premium; these days, hardware is so cheap, you can get away with writing inefficient code in any language. However, two things are of note here: C++ has had a lot of higher level features bolted on after the fact, including compiler warnings and tools to help reduce burden on the programmer, and higher level languages have had a lot of performance "bolted on" (plus hardware has gotten so much faster and cheaper) so that if you code properly (in any language), performance differences are near negligible.

C++ mostly hangs on because of backwards compatibility and a large user base; I suspect that as time goes on, we'll see it fall more and more by the wayside (and I say this as someone whose bread and butter is C++), especially with the fact that programmer time is a big cost driver.

<comment><USER9> If you're writing games or scientific programs, you still need C++, if not Fortran or assembly.

</comment></comment></comment><comment><USER10> This article is from 1997, you should at least mention this in the title.

<comment><USER11> Which of the listed pitfalls are gone in C++11?

<comment><USER12> Not with the C++11 by itself but with better compilers we've got since about 2000 (don't forget that the earliest C++ standard is from 1998):

1\. Member initialization order being broken in the constructor initialization is a warning pretty much everywhere (except Microsoft compilers, I think).

2\. Having a virtual function and no virtual destructor - a warning even in Microsoft compilers.

3\. Trivial infinite recursion (i.e. Manager::print() { print(); } is a warning at least in some compilers. I have seen only a handful of projects where such code existed at all so I cannot say how widespread this warning (For me it popped due to problems with scripts generating code, people don't write this stuff ).

This is just from glancing over the article, I am sure if you tried all pitfalls with a modern compiler like clang or even gcc, you'd get a few more warnings.

Though I agree with the main point the author is trying to make - C++ is not just Java with pointers so if you are coming from Java background you should be very careful not to assume the conventions you've got used in Java are the same in C++.

<comment><USER13> I never understood the need for blanket warnings for member initialization order on gcc. 99% of the time the order doesn't matter (who cares if I assign zero to one int or another first). And when it does, it is better to move initialization to the body of constructor anyway. Basically I have to do annoying reordering every time I do some changes on msvc and then compile on gcc just to remove the warnings.

</comment></comment></comment></comment><comment><USER14> All languages have pitfalls. Including the author's beloved Java. For example:

       String x = "foo";
       String y = "foo";
       // Appears to work but compares references
       System.out.println(x[0] == x[1]);

There's no substitute for knowing your tools well.

<comment><USER15> I assume you meant to say:

        System.out.println(x == y);

<comment><USER14> Yes. In a previous version I was trying to bypass string caching to make x==y return false.

</comment></comment></comment><comment><USER16>
      template<typename T>
      Array<T>::Array(int size)
      :  _size(size),
         _data(new T(size)) // should have been new T[size]
      {}

That's not the only thing wrong here.

      private:
         T* _data;
         int _size;
      };

The order of initialization is the order of declaration, NOT the order you use in your constructor.

_data depends on _size being initialized first. Therefore _size must be declared above _data.

Note: I understand the next example goes over this issue. I just think this example should've been declared properly as to avoid distracting the reader from the main problem, "() vs []".

<comment><USER17> Why does _data rely on _size being initialized first? It uses "size" not "_size" in the expression.

<comment><USER16> Good catch. You're correct. I wish I could delete my original comment.

</comment></comment></comment><comment><USER18> This is 15 years old.

<comment><USER19> And C++ is approx. twice as old as that. What's your point? :)

Seriously, though: I'm no expert, but many people upthread have suggested these are still applicable even in C++11. Compiler warnings help, though you still have to learn what they mean and how to fix them.

</comment></comment><comment><USER20> Do you go to SJSU? Hit me up! firstname.lastname@example.com</comment>


ASH HN: How do I turn my Beta into Pay-ta - <AUTHOR>

Ok so fool on me, I thought I'd found a nice little niche market that needed to be fulfilled which I could do easily.  You know, something small and simple.  So I built it, and launched the site looking for Beta Members to try it out, of course offering those that qualify free access.  That was last Friday.  Today, Monday I have over 13000 hits and 4000 beta applications and growing at about 1000 a day.  So what the heck do I do with the other beta applicants to entice them to become clients?  What kind of buy-in can I expect?  30%, 5%?  And does anyone have any ideas on how I can suggest this to the other applicants without turning them all away or insulting them?
Usually I just do what I would want done for me but I have never had this kind of momentum before.
Help. <comment><USER2> First, what's your site's url? There could be many more beta testers here that would be valuable. Also, what you're selling certainly guides how you want to go about handling this issue.

With that stated, generally, I'd say close the beta application process and let in the first x number of applications you got. Send each application a thank you note and tell them that you'll let them know once you've moved out of beta. You may piss off a few people here, but 100% of zero is still zero, so you're better off with the money.

That's my take, but again, background information would be nice.

<comment><AUTHOR> I appreciate that but I already posted it here and the response was mute. That aside, I'm keeping it quiet until I launch as I still want people to sign up so I can at least market to them when it goes live. Besides, I have already set a close date at the end of the month and I'd hate to sound disingenuous from the start.

<comment><USER3> Under a different user name? I checked out your three posts and none of them seemed to mention your site.

<comment><AUTHOR> Yeah and I'm ashamed I did it... It's just that I didn't want it to be affect by what I say online as a developer. I guess I'm uber paranoid that all this good fortune is going to run disappear because I posted something stupid.

<comment><USER4> Well, the decision is yours, but we can hardly help you without context. Post the website, everyone else does so freely!

</comment></comment></comment></comment></comment><comment><USER5> I think a "Jolly good going", a pint at the pub and a pat on the back is in order here. Those are great numbers - it really seems like you made something people want.

It's really hard for us to judge what kind of buy-in, etc. you'll have without knowing what you're offering. For porn it's 0,1% or less - for Rolls Royce engines it's 50%.

I would use the momentum you have and compose a mail telling your beta applicants, and potential customers, that everything is going much better than you could ever hope to excpect, and that you're happy that you can solve so many problems for so many people yada yada, and that you don't have space for more betatesters but will soon be offfering the real deal, and will send them an e-mail when this happens. And don't wait too long, they'll have forgotten about it in a month.

</comment><comment><USER6> can you invite them in waves? send 500 invites, see how many join on day 1, maybe assume 50% more will join over the next week. Repeat to get to the number you want in the beta.

also, many will sign in once or twice and never come back. not all beta members will be active members.

Be open & honest with those you turn down. until you can invite them, keep them in the loop with a periodic newsletter. maybe even poll them if you need customer input.

</comment><comment><USER7> Tell the people who are signing up that the premium service is free for 30 days, after which they can either keep on using the free service or join the premium service for 25% off. Put everything in big fonts with no small print or ambiguity and probably 5% will be up-sold.

</comment><comment><USER8> Typical "conversion ratio" is 0-2%

</comment><comment><USER9> We had a similar situation with one of our apps–although not with the numbers you quoted.

If it's a monthly service, I'd say offer a 30 day free trial (if you don't already) and possibly a small ongoing discount.

</comment><comment><USER10> Why not just make it free?

<comment><USER11> _"... Why not just make it free?... I have over 13000 hits and 4000 beta applications and growing at about 1000 a day. So what the heck do I do with the other beta applicants to entice them to become clients? What kind of buy- in can I expect? 30%, 5%? ..."_

Because the question is how do I increase paying users and the (unstated constraint) growth is increasing which costs. At some time the service has to become ramen profitable.

<comment><USER10> you can sell advertising or you can raise capital - if you are growing that quickly you should have no problem raising capital. Charging people is one way to drastically halt your growth, though - if that is what you are after

<comment><USER11> _"... if you are growing that quickly you should have no problem raising capital. Charging people is one way to drastically halt your growth, though - if that is what you are after ..."_

Good point.

Do you think it would it deter users if they wanted extra features? Casual users might want to stick with zero cost but I wonder if business users might be willing to be charged for extra features that free users cannot use?

</comment></comment></comment></comment><comment><USER12> Make it free and develop a iPhone app people can buy. Or limit the free version and ask a (small) amount for the premium services...

</comment><comment><USER13> How'd you get that many applications?!

<comment><AUTHOR> I was featured in a few industry blogs and it has caught on like wildfire.</comment></comment>


Google just made it really easy for strangers to email you - <AUTHOR> http://www.theverge.com/2014/1/9/5292310/gmail-now-lets-you-send-emails-to-other-google-users?utm_content=buffera4bd3&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

<comment><USER2> > When the company does turn on the feature it'll send emails to Gmail users > letting them know of the change.

No matter what you think about this feature (or other features), you must admit Google never fails to tell you about it, and give you options.

</comment><comment><USER3> Looks to me like it's opt-in (you need to select the feature).

Is there any actual evidence that it's opt-out?

</comment><comment><USER4> i appreciate that they sent a warning email about this. It did default to "anyone" which will become the norm no doubt.

General Settings > Email via Google+: >

Anyone on Google+ | Extended circles | Circles | *No one</comment>


Why F.E.A.R.'s AI is still the best in first-person shooters - <AUTHOR> https://www.rockpapershotgun.com/2017/04/03/why-fears-ai-is-still-the-best-in-first-person-shooters/ <comment><USER2> I've been using Orkin's Goal-Oriented-Action-Planning (GOAP) in my own game development. Let me tell you an amusing story of how an AI agent outsmarted me, the developer.

So I had set up a test scenario, with an agent that could travel, buy stuff at shops, use axes, cut trees, and so forth. When I ran this test, I had set a goal of procuring timber.

What I expected the agent to do:

1\. Go to shop

2\. Buy axe

3\. Go to forest

4\. Cut tree

5\. Drop axe

6\. Pickup timber.

So I ran my GOAP test, and saw what the agent came up with:

1\. Go to forest.

..

When I saw that step 1, I was disappointed, because the agent clearly should not be going to the forest when he has no axe yet.

But then, as a proud parent of my AI, I saw what the agent had actually planned:

1\. Go to forest

2\. Pick up firewood

3\. Go to store

4\. Sell firewood

5\. Buy axe

6\. Go to forest

7\. Cut tree

8\. Drop axe

9\. Pickup timber

Hooray! I simply forget to give my agent money. But GOAP made him smart enough on how to get some money on his own.

I had of course equipped the agent with 'sell' action, and I had placed firewood in the forest, which I promptly had forgotten about when writing a test scenario.

I was so proud of that smart little agent!

Cool stuff, that GOAP!

<comment><USER3> I love examples like these but where lack of real world or common sense knowledge gives funny results.

I tried writing a text adventure game generator once that would combine puzzle templates you gave it like "object X you need is in a tree and you need a climbable thing Y to get it" and "object X is in a vending machine and you need a coin to get it" to create basic chains of puzzles. Without more constraints it would do silly things like create a vending machine containing ladders, vending machines in trees, vending machines containing other vending machines and trees, and vending machines that gave you a coin for a coin.

<comment><USER4> I was just reading about a bunch of weird bugs found in dwarf fortress. For instance, someone found all the cats were throwing up all over the place from alcohol poisoning. They looked into it and found the dwarves were spilling alcohol on the floor of the tavern. The cats didn't drink it though. No, they walked through it and got it on their fur. Then when the cats went to clean themselves, they ingested the alcohol. The game then calculated their blood alcohol content to be very high and gave them alcohol poisoning. Because it counted it as one standard of unit of alcohol, and the cats have much smaller body mass than dwarves.

All sorts of amazing, um, features, have been found in that game.

<comment><USER5> I don't see the bug there. Maybe you mean that the cat simulation is not accurate enough: cat's wouldn't walk through puddles if they could avoid it.

<comment><USER6> I think the bug was that it counted as "one mug of alcohol" on the floor, and the entire thing stuck to their fur, which wouldn't happen in real life.

</comment></comment></comment></comment></comment><comment><USER7> For those with a modest automated planning background, F.E.A.R. is inspirational because it shows even the most ambitious and inefficient planners, i.e. STRIPS, which is the grand-daddy of automated planning that searches across flat goals based on a known global state... even that, which is known to be an NP-complete problem in many domains, can be made practical in specific domains with tweaks.

Much of the automated planning literature is about finding ways to find the balance between computational tractability and expressivity of the domain & goals. Many attempts to fuse logic and imperative programming with an aspect of history: hierarchical task networks for example, which are like a high level procedural language with non-deterministic method dispatch. Games like Killzone 2 for the PS3 also had an interesting followup use of automated planning via hierarchical task networks, to do squad tactics; [http://aigamedev.com/open/coverage/htn-planning- discussion/](http://aigamedev.com/open/coverage/htn-planning-discussion/)

Another thread is Golog as a variant of Prolog that uses Reiter's Situation Calculus to formulate complex goals and domain constraints in a relatively consistent syntax and applied towards "Cognitive Robotics": [http://www.cs.toronto.edu/cogrobo/main/systems/](http://www.cs.toronto.edu/cogrobo/main/systems/) .. it's unfortunate a lot of that work seems stalled since Reiter passed away.

With all the recent hype around connectionist, deep learning AI, etc., there still is a lot of important work going on in the symbolic logic side of AI, particularly in this space of working in dynamical domains. Fusing the two will be really interesting.

</comment><comment><USER8> PDF describing the AI system written by the Author was discussed previously: [https://news.ycombinator.com/item?id=12235532](https://news.ycombinator.com/item?id=12235532)

If you read this article and want to learn more, click that link.

<comment><USER9> Jeff Orkin's GOAP page, tons of resources on GOAP. [http://alumni.media.mit.edu/~jorkin/goap.html](http://alumni.media.mit.edu/~jorkin/goap.html)

[https://github.com/stolk/GPGOAP](https://github.com/stolk/GPGOAP) has an implementation of goap in C, the code is really clear and easy to understand.

</comment></comment><comment><AUTHOR> Don't know how many gamedevs are here but I've always wondered if within gamedev, there's differences in how much info/best practices are propagated within the field. Graphics seems to be something that devs keep tabs on with each other. But maybe AI is more siloed off? I'm not sure what 10 years in improvement in AI looks like (as I do with graphics), but the algorithms and details [0] seem straightforward, or at least not impossible for a talented team with resources to build upon. I haven't played F.E.A.R. so maybe there's something about the game that vastly simplifies the factors?

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

<comment><USER10> Gamedev here.

First, remember the first principle of game AI, the goal is not to defeat the player but to entertain him. A simple way to say it is that too good AI is not what you want.

Secondly, for most games, the fun is simply not on the AI component of the game.

If you take those two points together, 1) good game AI is tricky concept, 2) that's not where the fun is anyway, then you got that not a lot of people cares about game AI.

<comment><USER11> Former gaming-addict here.

Does the fact that people tend to spend more time on the multiplayer component of a game rather than the single player play any role in this 'not caring about AI'.

I mean, I really did not enjoy playing against AI because they are quite stupid in most cases, and the only way to make a singleplayer become harder does not seem to be to make the AI smarter, but rather have some 'modifiers' against the player.

For example in L4D, the damage you take from a hit by a common zombie on normal difficulty is 10HP (out of 100HP), but on expert the same hit is worth 20HP.

Other things to make it harder would be to spawn in more NPCs and just get the player more busy, or speed up the events in the game (like tetris).

But in all games with a decent multiplayer, it is just _way_ more fun to play against other human beings rather than shooting a bot. Because it actually poses a challenge.

EDIT: typo fix

<comment><USER12> I second this... the only reason I jump straight into the multiplayer when I try a new game is because the single player AI, at every difficulty level, in almost every game, is dumb as rocks. Making the AI "way too fucking smart" at insane/hard difficulty and then dumbing it down seems way, way, way better than hitpoint modifiers. I don't think smart AIs are written and then scrapped... that cannot possibly be what really happens?! Horrible if true.

<comment><USER13> >the only reason I jump straight into the multiplayer when I try a new game is because the single player AI, at every difficulty level, in almost every game, is dumb as rocks.

There's more to it than that for me. No matter how good the AI is, shooting at AI feels empty and dull compared to shooting at actual people. Not only are you assured cunning, but also someone who hates your guts and lets you know in chat! I suspect many others feel that way too, deprecating singleplayer in favor of multiplayer from the get-go.

>Making the AI "way too fucking smart" at insane/hard difficulty and then dumbing it down seems way, way, way better than hitpoint modifiers.

It sure does. Have you ever played Civilization? The AI is always dumb; the only way to make the game harder is to make the game fundamentally unfairer. In this case, making the AI smarter is a much harder problem than in a shooter game though.

<comment><USER14> > _Not only are you assured cunning, but also someone who hates your guts and > lets you know in chat!_

Wow, this is precisely what turns me _off_ multiplayer. I don't want to chat with someone who hates my guts, or tells me I'm a newbie, or mocks me for not playing perfectly. I remember CounterStrike 1.6 used to be toxic like this, populated by teenagers with too much time in their hands, outplaying you at every turn, and constantly insulting you.

No, thanks. Singleplayer doesn't belittle me, and is more immersive.

<comment><USER15> I completely agree! I like the "idea" of multiplayer, but, in general, the best thing about multiplayer is also the worst thing: other players.

Being punished for being new or not that good or not having as much time as the teen players (who are often the largest percentage of the game) is not my idea of fun. I remember I played an FPS a few years ago (won't say which one) and it felt like I was being punished for trying to get into the game. So I uninstalled it. As far as I can tell, the game is more or less dead now. By punishing new players, the fans killed the game. Yay for them. Instead, I moved on to some great single player games which treated me well and were much more fun for me to play.

<comment><USER11> Being punished to get into the game is annoying. I have been on both sides of it, and I actually understand the other side pretty well.

On Left4Dead(1 and 2) I was part of those people "punishing" new people in a way. There was this rule that we would kick anyone who had less than 500 hours on the game, or less than 1k if everyone of the friends we played with had more than 1k hours.

We were not insulting to the new guys in any way and usually just asked them to leave. But if they would not leave, we would kick them. But to be honest, if they would stay in the game, it would not have been fun for any of us. For us it would have made the game too easy, and for them they would just quit after a few minutes of getting dominated anyway.

When you are new to a game, I think it makes more sense to just play with friends who don't mind sticking up with you being new, or trying to find a way to play with other new people. When I got kicked from playing a game like Payday, I did not mind because I know that I am a noob and that If I end up playing against people who are far above my level, it would be fun for neither of us.

Sorry that you had that experience though, if you stick with some of the multiplayer games - through the horrible community sometimes - it actually can be quite fun. But my advice would be to find some dedicated people to play with, they really make any game more fun.

<comment><USER15> Interestingly, I did play L4D2 for a while without any problems. I also sometimes played other multiplayer games, for example league of legends (which does have some very toxic players, but for the most part wasn't too bad, although I typically played with at least one friend on my team).

I've also had games where I think the games design actually greatly influenced how much new players were being punished, for example by giving players who've played longer much better equipment. I've experienced that too and that was extremely not fun. That particular game also isn't active anymore as far as I know. So it's not just the players. My gaming time is too limited these days to play something toxic, be it players or the game itself.

 _But my advice would be to find some dedicated people to play with_

I'd love to, but after work and other obligations, time is short and syncing up with my game-playing friends is hard. Most of them also play different games to what I enjoy so it's hard. The best I've managed is to get a friend to play dark souls 3 with me maybe one night a month... :(

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> It was also the enemy of 'fear' itself, in that the game is a horror game with an omnipotent enemy. So while dealing with these clever enemies you're also facing the supernatural, adding to the experience. And the lighting/environmental effects.

The original Halo:CE had great enemy A.I. too. Though I think was more 'scenarios' being programmed in. What made the campaign fun asides from the big levels was that the enemy encounters were different every time.

<comment><USER17> RE Haloe CE:

Especially on the Legendary difficulty. To this day, the Halo series has the best set pieces and is overall the best single player experience of any FPS save for Half-Life

<comment><USER16> To add, the higher difficulties added new behavior and tactics to the A.I.

Unlike a lot of newer games where it seems higher difficulty is just more enemy health and damage.

<comment><USER18> My favorite was Crysis changing the enemy soldiers' language from English to their native Korean

</comment></comment></comment></comment><comment><USER19> F.E.A.R is definitely one of the top 10 best PC games I've ever played. There are not many games that blend Action and Horror so delightfully (other than Half-Life). That being said, I haven't been around in the gaming scene for a while and playing catch up after recently building a gaming rig.

I do agree with the author about the lack of progress in FPS enemy AI. The recent releases from the Call of Duty franchise are nice games, but the AI enemy combatants look dumb next to their FEAR counterparts. Why has not FEAR's AI strategy been adopted by other games/studios? The article does not mention anything about this.

<comment><USER20> _I do agree with the author about the lack of progress in FPS enemy AI._

I follow AI much more than I following gaming. I definitely find it curious that enemy AI has hasn't made a lot of progress when game-playing in a different form is such a focus of deep learning.

<comment><USER21> 1\. HW resources: games run on _extremely_ tight HW budgets. It's probably the most competitive, cut-through industry in terms of what you can afford to do with a given CPU/memory/bandwidth per frame. While DL is still in the "let's throw a thousand GPUs at it, wait for a week, see what happens".

2\. Quality control: DL is a blackbox. Bad for the playing experience for obvious reasons. And even if just using pre-trained models, the lack of control goes directly against what both the designers and players typically want (predictable fun).

3\. Finally, DL hasn't made THAT much progress here, actually. There have been serious efforts to apply DL to modern games (e.g. DeepMind with Starcraft), but what you've probably seen is "just" DL applied to some finite-state, 100% deterministic, complete-information, zero-sum games. A far cry from complex dynamic environments.

Which is not to say it cannot be done. Just that the incentives (both business and technological) are aligned differently -- too little bang for a lot of buck.

<comment><USER22> > HW resources: games run on extremely tight HW budgets

Come on, you could have decent AI back in the day that pinned me down and made me run for cover, then had me at that _cling_ _gling_ _oh shit_ moment when a perfectly timed grenade lands at your feet just as you were starting to take a breath†. Today we're stuck with scripted sequences and playing whack-a-mole with sniper rifles.

† only HL1, Halo and FEAR seemed to manage that.

<comment><USER21> You may be under appreciating how much effort goes into good old hacking in games, to make things look "natural" but with minimal HW footprint :) Cutting corners.

 _Especially_ back in the day!

It's more of an art. Applies to graphics, AI, audio...

</comment></comment></comment></comment></comment><comment><USER23> I think the runaway smash success of Call of Duty changed the direction of FPS games considerably. The focus on advancing AI was replaced with spectacle.

<comment><USER24> No one plays CoD for the single player. Spectacle isn't the focus, multiplayer is.

The whole genre of linear single player FPSes is sort of dead. Lots of mixed genre games that tie in RPG elements with big open worlds and character customization though that are doing quite well and could benefit from better AI.

Even with a friend though we can't reliably beat the top level AI in Ghost Recon Wildlands so it can't be that bad.

<comment><USER25> I love FPS but hate multiplayer. Firstly, my ping sucks so I get killed very easily. Second, I dont play that much so get killed by the kids who are playing all day. Hence I rarely play multiplayer if I can avoid it.

<comment><USER26> yes blame the ping

</comment></comment></comment></comment><comment><USER27> AI in games is misunderstood as sophistication of reasoning. What makes AI in a game subjectively good is that it demonstrates a reasonable intent that the player can observe and anticipate. If you can see what the AI is going to do and thwart it, the AI is good. If it surprises you once and a while it is great. Surprise implies that you recognize what the AI is doing most of the time and sometimes it does something else that also makes sense.

AI is often at its best when it does something stupid that is understandable. For example, in Halo when you kill a bunch of the big guys, sometimes the little guys drop their guns and run away. This makes them very vulnerable, but it is fun. A smarter AI (one that would win more) would only pop out when you aren't facing them, or if cornered just shoot back very accurately from two points. But getting hit from behind isn't much fun, and getting shot at head on from two directions is also not much fun.

Good AI is usually a mix of good game design (and art) as well as good engineering.

<comment><USER28> Depends on the game, RTS players want an AI that does not cheat and is still a challenge.

<comment><USER29> Every AI has to "cheat" or it would utterly destroy you.

For example, AI can micro manage way better than you can, it can do a billion APMs. It has complete situational awareness at all times and never gets distracted by real-life. In an RTS where scouting is key, it could fan out with as many drones as it can produce and gather way more information than a human player could.

You need to constrain your AI so that it's not impossible to defeat. For example, limit how many actions it can perform in a given situation, or make it stubbornly cling to some losing strategy for a while even when it could easily flip to the most optimal one in an instant.

<comment><USER28> It's not hard to make a bot do worse, however in many games there are no bots that play well without cheating.

Watch some StarCraft/StarCraft2 bots, it seems like an easy challenge, but they can't beat a good human player when they have to deal with the fog of war.

PS: Multi drone scouting tanks your economy and becomes a really bad idea. You want to send out one scout that can both gather useful information, not die, and not significantly hurt your economy. To the point where some very high level players don't always scout early.

<comment><USER29> An unshackled bot will eventually destroy even the best human players once they can lock in the right approach. It's only a matter of discovery.

Tic-tac-toe, checkers, chess, even Go have all fallen to computers.

As for scouting, the ability of an AI to endlessly harass and endure minimal damage because of precise unit movement becomes a problem. A human can't finesse that as well and still have attention left over for other, more urgent priorities.

It's probably the case that at a strategic level the AIs generally suck, but on a highly situational level they have an advantage that needs to be kept in check.

<comment><USER28> And when that happens we can nerf the bot. But, RTS like StarCraft are really difficult and with constant re balancing the optimal strategy keeps changing.

Remember, at the meta level you need to have just enough army to survive an all in, while maximizing resource collection and research. Further, if you don't use a range of strategy's people will just pick the counter to your game style. Do you build static defense vs harassment? What do you do for vision? And everything has a cost in time or resources.

Further, things like army composition, baiting, high ground, choke points etc. make combat very tactical which bots have issues with.

<comment><USER29> It's too bad that there's no official Starcraft 2 bot league. There's only various student leagues and the occasional contest.

<comment><USER30> Blizzard worked with DeepMind to release a SC2 API recently, see here: [https://us.battle.net/forums/en/sc2/topic/20751114921](https://us.battle.net/forums/en/sc2/topic/20751114921)

When they released an API for Brood War, an AI competition popped up shortly thereafter, and I expect that there will be one announced shortly for SC2.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER31> I found FEAR's AI not as impressive as people made out (and still do).

I felt like the tactics used by every enemy in the game basically involved flanking the player from two sides, and never approaching directly unless there were no other ways around (which was rare, as the levels were basically one combat arena connected to another in linear fashion).

It was pretty easy to exploit this by basically charging the enemy and aiming for the head as if you were playing an old-school strafe shooter, which didn't give them enough time to formulate their flanking plan.

I found by doing this the game became trivially easy, even without using the bullet-time thing.

<comment><USER32> This guy plays on easy.

<comment><USER29> I play on hard or harder if possible, and yet F.E.A.R. still wasn't that challenging.

I found the enemies to be less dumb than your usual cannon fodder, but you'd mulch through them pretty fast if that was your goal. They did _try_ a lot harder than those in other games, which was nice, but they weren't that much of an obstacle. Their patterns are somewhat predictable, so you can often anticipate where they're going to go, or what they're going to do.

The problem with the F.E.A.R. AI is they don't necessarily adapt to the player like real people will. You can do the same thing a hundred times and they'll fall for the same trick.

Getting ambushed? Well, poke out, draw their attention, and fall back to a more advantageous position. Human players would just wait it out, they know you have to go through there, but the AI, ironically, gets impatient. Their goal is to kill you, not to defend things.

I'd _like_ an AI that gets wise to my tricks, that starts to react differently. If you're using grenades frequently they might field more heavily armored troops. If you're sniping they might snipe back. That'd force you to adapt, to switch it up, to avoid becoming predictable.

The problem is that requires a pretty robust AI to manage troops and a deeper objective than "kill player".

<comment><USER33> I think AI, in this case, is overkill. Create ~10 common enemy class and spawn them based on your strategy history, equipment and game pace. Each and every enemy would act differently like if you were more on sniping side, you would get snipers and fast units spawned. With mediocre AI this would make the game appear as having very good AI to regular player.

<comment><USER29> A large part of the predictability is how the units come in at pre-defined locations and/or based on pre-defined triggers. There's very little randomness in this department.

If that was more unpredictable, if each death switched things up slightly, you'd have a far harder time gaming the system.

Like you observe, that might also make the AI appear smarter since the flaws are less obvious.

</comment></comment></comment></comment></comment><comment><USER34> In Half Life, when they yell "cover me", one tries to flush you out and another cuts you off. What's really interesting is what all the other soldiers do: they run to random positions. Early builds didn't do that and the AI was just plain mean. Game AI is a constant balancing act between being good/engaging and not killing the player.

Civ is the same: the AI has routines that try to win, but also a whole bunch that role play.

</comment><comment><USER35> I'm old enough to remember the reviews of HL2 which marveled at the same kind of AI. I distinctly remember my experience first playing, when enemy AI ducked behind a crate, and radioed for help. At the time this was amazing, as most enemy AI in other games would blindly run into your stream of virtual bullets - let alone radio for backup.

<comment><USER14> And I'm old enough to remember the marines from the first Half-Life, who seemingly had an AI that allowed them to flank you, throw grenades at you, and scatter when you threw grenades at them. Of course, most of it was likely very simple behaviors, but it seemed amazing at the time!

<comment><USER35> I think (due to my advanced age) I got my HL's confused. It was in fact HL1 - thanks for jogging my memory, from one old guy to another.

<comment><USER36> You could be forgiven for making that mistake. The Combine soldiers in HL2 functioned in much the same way, even better in some cases. I've played through both games a number of times and the firefights play out differently each time.

</comment></comment></comment></comment><comment><USER37> [http://gdcvault.com/play/1013282/Three-States-and-a- Plan](http://gdcvault.com/play/1013282/Three-States-and-a-Plan)

<comment><USER38> > What sets F.E.A.R. apart is the fact that [...] A* is used to plan actions > as well as paths. [...] If the Player slams a door on a pursing enemy, the > soldier can dynamically re-plan and decide to fire through the window, or > flank through an alternate entrance.

Interesting idea. Clever use of a classic algorithm in a novel way.

<comment><USER39> A* was pretty new back then. Previous iteration of games just 2-3 years older used older algos, or invented new path finding algos due CPU constraints.

<comment><USER39> I was speaking about RTS and in the sense of Age of Empires 1 and Empire Earth. The main dev of both this titles Rick Goodwell mentioned A* was used in Empire Earth the first time, older AoE1 used an older less CPU intensive algo.

@omginternets:

> dates back ... extension of ... adds a few heuristics.

Blabla, BS.

Fact is Empire Earth was one of the very first computer games to use A* algo. Age of Empires 1 used a worse faster different algo.

Fact is in the age before Wikipedia and Google, decade old papers of obscure algos were more or less lost and forgotten. They were written on paper with no digital copy readly available. So game devs often reinvented things without not knowing of previous work, it took several years until the early 2000s that this old stuff got scanned and made public viewable.

<comment><USER38> > The main dev of both this titles Rick Goodwell mentioned A* was used in > Empire Earth the first time, older AoE1 used an older less CPU intensive > algo.

Citation? The only mention I can find about the pathfinding algorithm used by Age of Empires is this: [http://artho.com/age/pathfinding.html](http://artho.com/age/pathfinding.html)

A* is supposed to be an optimization of Dijkstra's. I don't know why you call it CPU intensive.

</comment></comment></comment></comment></comment><comment><USER40> Non-FPS excellent AI: DF has already been mentioned, but an excellent DOS- based game that I used to play on my 386 was Commanche Maximum OverKill. (helicopter combat sim) The game proudly stated this in the manual: (bad quote from memory) "...with a smart AI that changes it's behaviour every 3 minutes..."

This stuck with me because it actually worked. If you repeated an action long enough, the AI changed how it tried to kill you.

Scenario: You are in your helicopter trying to blow up tanks and helicopters, and "Mission Targets". The lower you fly, the longer you evade radar, and the closer you can get to your target. So you hide behind some hills, pop-up acquire a target on a fuel tank, fire your missile, and then duck down before the enemy missiles can get to you. You then repeat this process to get all of the targets, but if you take too long the tanks/helicopters will fly around the hill trying to find you (as opposed to sitting next to the targets dumbly forgetting you exist).

The game learned from your pattern, and adapted. IMHO this was superior to every other game that just had the enemy shoot faster (i.e. Unreal Tournament)

On the other hand, it might just be nostalgia.

</comment><comment><USER41> If you have F.E.A.R. on Steam, the SDK is still available and contains most of the AI code, be careful of licensing issues but it's interesting to study.

<comment><USER42> Patch the game to 1.08 first. Then install the F.E.A.R. SDK. Then find a copy of Visual Studio 2003. Now, you can even recompile the whole game in Release, Final and Debug mode. \-- JustForFun.

</comment></comment><comment><USER43> The best FPS AI I've played was the PC game "No One Lives Forever" back in 2000, created by this same studio Monolith Productions.

<comment><USER44> Wow, that's a wave of nostalgia hitting me! NOLF was also one of the funniest shooters I've ever played.

<comment><USER45> The effects for the dis-integrator pistols on the spaceship were so simple yet so classic. It's one of the early games where you got to do lots of different fun things, like scuba diving with a spear gun, driving a snow mobile, etc rather than smashing crates in a bunker.

<comment><USER44> I think it was the sequel, but I'll never forget the chase sequence, at breakneck speed through Marrakesh(?), involving deadly mimes on tricycles.

</comment></comment></comment></comment><comment><USER46> _In his presentation, he observed that the AI reminded players of the first Half Life game, which came out seven years earlier. "It seems that we haven't made much progress in seven years. There has to be more we can do with game AI."_

That's what came to mind reading this. I remember the AI and Half-Life, and while it sounds like they did better in this game (which I haven't played), it also sounds like an iterative step, and after seven years, that's not a lot. I happen to own this game on Steam from some humble Bundle pack or something, so I think I might have to break it out and have a play...

Edit: Sheesh. 17GB install for a 2006 game. That's steep.

<comment><USER47> Playing against a bot programmed to fight intelligently and efficiently just wouldn't be fun for long. A friend and I tried playing against the Reaper bot in Quake years ago. It mopped the floor with us. Which in terms of my skill probably doesn't mean much but my friend was really good at Quake. The bot didn't let up, didn't pause, memorized weapon locations, move at a constant run, and never missed. It would even jump, 180, and beam you with a rocket. That made for fun novelty one evening but no one wants that for multiple levels.

<comment><USER48> There's a difference between a bot that's been programmed to act intelligently and a bot with superhuman abilities and reflexes. You can have the first part without the second.

<comment><USER49> I bet that a game AI model of a human mind's executive function would actually be embarrassingly simple. Something like a 7 element ring buffer of tasks and their parameters, with interrupts. When the bot tries to remember or do more than 7 things, it just starts forgetting stuff, which it might notice again later. Just like me.

<comment><USER50> Agreed. This is why single player game AI can be made fun with simple FSMs and logic models.

</comment></comment></comment></comment></comment><comment><USER51> There is a goap library for C#/Unity3D: [https://github.com/luxkun/ReGoap](https://github.com/luxkun/ReGoap)

</comment><comment><USER52> you can download FEAR SDK from the link below that contains complete GOAP (Goal oriented action planning) implementation.

[http://fear.filefront.com/file/FEAR_v108_SDK;71433](http://fear.filefront.com/file/FEAR_v108_SDK;71433)

</comment><comment><USER53> I think it is important to keep in mind that AI in games often not only needs to do the smartest thing but actually the smartest thing a human would do.

So in the case of F.E.A.R. the AI is simulating humans so they shouldn't seem smarter than that.

This starts at not microing to well in strategy games and not aiming to well in shooters but is almost limitless in how complicated one can make it.

</comment><comment><USER54> AI hasn't moved on because multiplayer world has exploded in the last 10 years

</comment><comment><USER55> What a weird coincidence, I just reinstalled and played a bit last night and was thinking about how incredible the enemy AI was for a what, 6 year old game? Older?

<comment><USER56> Nearly 12 years

</comment></comment><comment><USER57> If you're interested in emergent AI I recommend Mitch Resnick's Turtles, Termites and Traffic Jams — [https://mitpress.mit.edu/books/turtles-termites- and-traffic-...](https://mitpress.mit.edu/books/turtles-termites-and-traffic- jams)

</comment><comment><USER58> I remember play-testing this game, and feeling almost certain that they "dumbed-down" the AI between builds as it was too hard for us to beat. Also had a few scary moments - such as that time our build crashed every few seconds, on a Friday!

</comment><comment><USER59> I think i have the game in my library, ill have to give it a go and see how it is.

PANICS anyone? [https://www.youtube.com/watch?v=thkcDqPsmEU](https://www.youtube.com/watch?v=thkcDqPsmEU)

<comment><USER60> PANICS is really great.

</comment></comment><comment><USER61> I seem to remember that Titanfall's mooks had really great AI. Largely wasted because the players could easily murder entire squads without reloading, but they would attempt to move in waves, shout orders, flank etc.

</comment><comment><USER62> Escape from Tarkov has an outstanding AI. Probably one of the best I've seen. You can rarely tell if the enemy is another player or a bot.

</comment><comment><USER63> How did the A.I. in the expansions or sequels compare?

<comment><USER42> Pretty good. Extraction point is really harder from time to time.

\-- JustForFun.

</comment></comment><comment><USER64> Time to re-install F.E.A.R.

<comment><USER65> I just did. :) About 2 hours ago. Have been playing it since then. Oops.

<comment><USER64> I did as well, but haven't played yet.

</comment></comment></comment><comment><USER39> Not only advanced A.I. is basically dead knowledge in modern games, also Bots.

Quake 3 Arena, Unreal Tournament and many more games had offline bots with whom you could play multiplayer maps. Most relied on predefined paths added with the map editor, but some of them worked without paths as well.

It was impressive how good Unreal Tournament 2004 bots handled cars and vast open maps.

Also RTS games category is dead, it usually also featured advanced A.I. to play against bots on random generated maps. Sadly, games like Age of Empires, Empire Earth, Command & Conquer are dead. (before an off topic comment derails the conversation: I know about the 8 year old SC2, I know about other kind of strategy games but they are not RTS, I know about Moba and tower defence but they are not RTS)

<comment><USER66> You need to give 0ad a try: [https://play0ad.com](https://play0ad.com) It's very much alive and well, and the AI gets better with every release. I'll be able to beat it on the hardest difficulty, and then the next release comes out and I have to come up with new strategies...

<comment><USER39> 0AD was great two years ago, still in alpha though. I try it once a year but the progress is very slow, and things are more broken (AI) than two years ago (tried it in Dec 16). Don't get me wrong you can play many map styles, and get hours of gameplay out of it. It's an open source project, so one shouldn't compare it with other triple-A games, for a open source game it's superb and very much comparable to Age of Mythology . The project needs more supporters. Though 0AD is my biggest hope, maybe a sister project forms that use the same graphics engine and code base to develop a C&C Generals inspired game as well. In the era when Triple-A studios forgot about RTS, it's time to solve the problem of no new games through the community.

</comment></comment></comment><comment><USER39> Half Life 1, Far Cry 1, Fear 1 had really great A.I. Where HL1 and F1 were corridor shooter, where A.I. is easier, Far Cry 1 had A.I. in open world scenario where soldiers flamked you around a hill and such. The A.I. was written mainly in Lua game script. Sadly the implementation prevented save games.

That's about it. Sadly most game dev studios don't invest resources in good A.I. The stupid mass of soldiers you know from Call of Duty franchise is now everywhere.

<comment><USER67> Half-life 1 have incredible AI from boids that present a flock behavior to coackroaches that are scared of the light or the player, just to mention two attention to detail examples.

</comment></comment><comment><USER68> I want a game where you're in a city and there are many legals jobs that AI and players can do, but also there will be illegal ones that they can pick up and players have to be able to spot suspicious activity (ie, not walking like an AI or changing uniform, etc..) to hunt each other down.

<comment><USER69> Did you ever see the game "The Ship"? [https://en.m.wikipedia.org/wiki/The_Ship_(video_game)](https://en.m.wikipedia.org/wiki/The_Ship_\(video_game\))

Similar to this; set on a cruise ship with NPCs doing random tasks, you had to work out who your (Player) target was amongst NPCs and assassinate them quietly.

I think one of the Assasins Creed games also had a similar multiplayer.

<comment><USER68> oh yes that game is pretty much what I thinking of but in a city setting.

I initially thought that if i were to make the game I wouldn't be able to simulate the same paths as a human player so would need to use a waypoint clicking system to move until you're being attacked and your cover is blown.

</comment></comment></comment><comment><USER70> Nice, I didn't know GOAP. I will try the game, generally I don't like to play against AI because they are so stupid.

Anyone with a good idea for my next game? :)

<comment><USER42> Killzone 3, Shadow Of Mordor, Transformers 3: Fall Of Cybertron....

All these 3 use planning (the planner in SOM is the grand grand son of F.E.A.R.'s -- other 2 use HTN planning) for the AI.

        ;-)

\-- JustForFun.</comment></comment>


Self-Classifying MNIST Digits Using Neural Cellular Automata - <AUTHOR> https://distill.pub/2020/selforg/mnist/ <comment><USER2> CAs have a lot of nice properties: translation invariance, locality, arbitrary population sizes, parallel computation, simplicity of implementation, and emergent complexity. Interesting to see where this line of work goes

</comment><comment><USER3> When I draw an 8 it seems to frequently classify it as a zero. In fact, most of the numbers I draw don't get correctly classified. Just the 0's and 1's are consistent.

<comment><USER4> I found the same thing. If you draw an 8 with more of an 'x' in the middle, it's fine, but if you draw two o's on top of one another, it can't figure it out. I suspect they need to increase the diversity of their training set.

</comment></comment><comment><USER5> Authors here. Had great fun making this. We think Distill is an excellent medium.

Happy to respond to any questions (although likely with a few hours delay as we are in CEST and nearing our bedtime).

</comment><comment><USER6> [Disclosure: I'm involved in Distill, so a little biased.]

Firstly, make sure you click through to the invidudal articles and try the interactive demos at the top of each one:

* [https://distill.pub/2020/growing-ca/](https://distill.pub/2020/growing-ca/) * [https://distill.pub/2020/selforg/mnist/](https://distill.pub/2020/selforg/mnist/)

I really enjoy how quirky Alex, Ettore, et al's experiments are. It isn't going after benchmarks. It has a very "what would happen if we tried this?" feel to it. If I had to bet, I don't think it's super likely to have direct real world applications, but it's immensely fun to read about and expands the space of ML systems I might imagine.

I've also been enjoying the open slack channel associated with this thread. It's pretty low volume, but there's been a number of fun experiments from people who enjoyed the original article on neural cellular automata. I feel like there's often a lot of really cool experiments and conversations that no one outside a given lab sees, because they don't make it to publication, and I like how the channel allows those to be shared with anyone really excited about this line of work. It was also really heartwarming to see people jump in to give feedback on the draft of the most recent article!

<comment><USER7> Hi there! Like this line of work. As an enthusiast of Alife-ish things, CAs (and NKS-style computational systems generally), and also an author of an ML library, I was looking forward to jumping on the slack and just having a chat with likeminded folk, but I'm having trouble finding how to actually make an account on [https://distillpub.slack.com](https://distillpub.slack.com)

<comment><USER6> Thanks for pointing this out! The slack invite link expires periodically and I need to replace it. It should work as soon as changes propagate! In the mean time, you can also join here: [https://join.slack.com/t/distillpub/shared_invite/zt- grg499d...](https://join.slack.com/t/distillpub/shared_invite/zt-grg499dz- YXx39n8P8eiIUYbp0vwx9g)

</comment></comment></comment><comment><USER8> It would be better to pick the most interesting specific article in the list and link to that. Otherwise the topic is a bit generic and a bit of a greased pole - there isn't much to grab onto and the discussion ends up being about the lowest common denominator.

[https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...](https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=by%3Adang%20denominator%20list&sort=byDate&type=comment)

Alternatively, if the intended topic is the experimental discussion format, that's fine, but then it should explicitly be about that rather than the content that happens to supply the example.

<comment><USER6> That makes sense. I think the authors actually submitted the latest article, but the community jumped on this one. Their submission: [https://news.ycombinator.com/item?id=24295756](https://news.ycombinator.com/item?id=24295756)

Any chance you could consolidate this one into that thread?

<comment><USER8> Ok, we've changed the URL to that from [https://distill.pub/2020/selforg/](https://distill.pub/2020/selforg/).</comment></comment></comment>


A child's age starts counting when it's a song in his mother's mind - <AUTHOR> http://thegodmolecule.tumblr.com/post/48146343226/here-is-a-tribe-in-africa-where-the-birth-date-of

<comment><USER3> A very interesting article.

Though I felt that this part:

"If at any time during his or her life, the person commits a crime or aberrant social act, the individual is called to the center of the village and the people in the community form a circle around them. Then they sing their song to them.

The tribe recognizes that the correction for antisocial behavior is not punishment; it is love and the remembrance of identity. When you recognize your own song, you have no desire or need to do anything that would hurt another."

was the writer interpreting the practice through their own values. "The tribe recognizes that the correction for antisocial behavior is not punishment" - <USER2> we know that this is what the tribe thinks? To me, the practice sounds more like a mix of punishment and rehabilitation (in a lot of shame-based cultures, having family and friends remind you of your wrongdoing would certainly be seen as a punishment). I'm not saying I'm right, either, just that you have to be wary of the "noble savage" delusion, the idea that more traditional societies show us how our society should be structured.

</comment><comment><USER4> Too few details. Is this a real story or only an inspiring tale? What's the name of the tribe? Is there an article in Wikipedia about this? An article in the International Journal of Anthropology?</comment>