C++17 and other future highlights of C++ - <AUTHOR> http://meetingcpp.com/index.php/br/items/cpp17-and-other-future-highlights-of-cpp.html <comment><USER2> Looks like C++17, like C++14, is just going to be a spit shine over C++11.

Concepts, modules and coroutines were perhaps the three most anticipated features, and they failed to deliver all three. No STL2 either. Woeful. The field is now wide open for the next 5 years for Rust to come along and eat C++s lunch.

The whole TS/std::experimental idea is just a folly. As a C++ programmer I just don't care if a library is available via a TS vs Boost. There's literally zero advantage to a TS. None. I'd rather stick with Boost, because then at least I only have one implementation to test against, instead of three, each with their own bugs, omissions and performance characteristics.

I've even taken to using boost::container::string where I can, instead of std::string, because the libc++ and stdlibc++ implementations have different performance characteristics.

<comment><USER3> > Concepts, modules and coroutines were perhaps the three most anticipated > features

Were they? They're great and all but from a practical standpoint I'm most excited about networking being baked in. I do almost nothing nowadays that doesn't require some form of networking. Now I can do it without bringing in any extra dependencies beyond the STL? And it's portable? Yes please!

I'm not a huge C++ developer. Maybe if I was other things would be more important to me. But adding in networking makes me want to use the language again.

<comment><USER4> Networking is a very particular set of features that you only need if you are, well, doing something with the network. I'm not and probably never will, for example. But concepts and modules (and perhaps coroutines) were general features that would have potentially benefitted every single problem domain, since they are fundamental to how you use the language, not what you are trying to do with it.

<comment><USER2> Doing networking in the standard library without introducing a proper async framework is just more madness. Polishing off promises and futures, and getting coroutines nailed down, would have made introducing an intuitive network library a doddle.

Instead we'll get something carved out of ASIO, which is a complete mess full of gross unintuitive APIs and callbacks.

<comment><USER5> What's wrong with ASIO interface? My only issue with it is that once a socket is bound to an io_service it can't be easily rebound to another one.

For many applications where C++ is used, promises and futures introduce unnecessary overhead. On the other hand an ASIO-like interface works just fine.

Additionally, ASIO, and by extension the network proposal, have transparent opt-in support for futures via a special callback type.

<comment><USER2> Example terrible API: You have to create a socket for a new connection before calling async_accept. Try using this with coroutines.

> opt-in support for futures via a special callback type.

Which is ugly. The coroutines opt-in as well. Coroutines actually have the potential to be faster than callbacks.

</comment></comment></comment></comment></comment></comment><comment><USER6> Special functions?[1] Why do they keep wanting to add that to the standard? They've been trying to get special functions into the standard since C++11 (née C++0x). That seems like such a very niche use, better left for specialised libraries where numerical researchers can work out the very best algorithms rather than for a standard system library. I mean, compared to accessing a filesystem or parallel processing, how many C++ users regularly need the Riemann zeta function or a modified Bessel function of the second kind?

\---

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

<comment><USER7> Maybe because the need for them has popped up enough times and they tought it would be a good idea to add them to the standard? Also that addition wouldn't hurt no one.

<comment><USER6> > Also that addition wouldn't hurt no one.

Library implementors would have to implement it. Most of them are probably unqualified to do it, so they'll probably just grab Boost's implementation. And Boost's implementation would be unreadable to most implementors. Thus everyone would get a slightly subpar implementation, because most numerical researchers are not keeping an eye on Boost and making sure it has the best methods available. The end result is that those in the know will avoid the C++ stdlib, just like Qt did and reimplemented strings and maps.

We've seen this problem before with valarray and with export. There is a problem with standardising something that nobody wants or nobody can implement correctly.

<comment><USER8> The flip side is that I would rather use a "slightly subpar" implementation than having to roll my own from a Google search and some smart guessing.

For example, if you want to implement a Student's t-test, you soon will run into the problem that you want to have a Beta function or the gamma function.

One could probably copy-paste a somewhat working version together from search engines, add asserts to prevent me from ever calling them with arguments out of the range where it seems to work, but for most of us, the result likely will be slower and less precise than a version that gcc, clang, or commercial compilers would provide.

And yes, I could probably buy an implementation somewhere, but in the real world, that often isn't a real option, and even then, I wouldn't know how well it worked, either.

</comment></comment></comment></comment><comment><USER9> Before they heap yet more into the language, I think they need to go back to previously-standardized classes and seriously critique them, ideally replacing some of them with entirely new designs.

For instance, it is _crazy_ that something as critical and commonplace as "std::iostream" is riddled with error-prone design decisions. The "<<" operator choice is _wrong_ , and it fails basic localization requirements before you even get into its other problems. To this day, I see people who don't handle stream errors correctly in every case (and who can blame them, when you have stuff like "bad() is actually not the exact opposite of good()"?). Don't even get me started on the fact that most flags have two different pairs of constants with similar names, used in different contexts, with different values, that will even _compile_ after the wrong one has been chosen (producing who-knows-what behavior?). Or the fact that global stream states can be screwed-with from anywhere, meaning that when a library call returns you can't be sure that your own "std::cerr" state is "undamaged"? And this is just from streams! The list goes on.

</comment><comment><USER10> Does it feel to anyone else like they are procrastinating on modules? C++ has been thinking about it for a very long time. Yet the actual result is a generic "soon."

<comment><USER11> I've been following modules pretty closely and attended the meeting in Jacksonville. I think the story here is actually pretty positive. I understand people are upset it's not making C++17 but those expectations were always unrealistic. Based on my read of the situation, modules were never a serious candidate for C++17.

IMO, what's happening with modules is basically the best (realistic) outcome. Up until Jacksonville, we had only a proposal and all the implementors either implementing their proposal, or implementing nothing waiting for a TS. Modules were blocked on the committee. And that's a slow place to be blocked.

Now we've cleared the major hurdles for a modules v1 TS and gotten to the point where implementors are unblocked by the committee and we can start actually building and using it. If the early-adopters want modules from their implementations, they'll actually be able get it, now, finally.

Once implementations start happening, and we gain a bunch of "deployment experience", it'll be a whole lot easier to chart a course through the remaining thorny issues with respect to macros and "middle-up" deployment to existing codebases.

<comment><USER12> Just speaking as an average C++ programmer who doesn't watch the standards process too closely, after C++14 it seemed like quite a few major features, modules included, were expected for C++17. At that point no one was saying it was unrealistic.

I was hoping for reflection, but it was clear to me a few years ago that there wasn't enough interest or agreement there. But I think a lot of people expected modules and concepts.

</comment></comment></comment><comment><USER13> I'm finding it hard to keep up with all these new features!

In C++11, I think that the most overlooked feature is attributes. Finally, a way of potentially doing AOP without resorting to hacks :-)

<comment><USER14> Always looking for yet another reason to sustain my hope of avoiding C++ forevermore, I like the argument-reversal against using other languages instead. "Most devs don't know it, they have to retrain!"

I learned C++98 pretty deeply (better than it deserved) but apart from a few things like "hey cool you guys sort of have lambdas now and auto and some new pointer types I'll learn if against my hopes I ever have to do anything important" I haven't really kept up much, but I know there's a lot that has been added. My friend (who just knows a little C++98, his main languages are higher level things for writing automation tools) was talking to me a few weeks ago about finding a bug in his boss's code and having a moment of "Nope, let's wait for him to come back tomorrow" after seeing the totally unfamiliar rvalue reference && in a constructor he tracked down as the source of the bug... If I were to become involved in any C++ project again, if it wasn't strictly maintenance work I'd feel very uncomfortable doing anything without first taking a chunk of time to learn everything new. I feel like that chunk of time would better be spent on Rust, and if I were a manager looking to build something brand new that needed to be low level, I'd also be heavily looking at Rust and hiring people who know it or people who want to learn it, vs. going with C++ and hoping that people that put C++ on their resumes actually understand the modern details on a more than academic level (which would be hard to test for in interviews) and if they don't shelling out the same cost to train them as that of training newcomers to Rust. As for what motivates me out of the office as a true C++ replacement so that companies don't have to train me on their dime, Nim is much more fun.

</comment></comment><comment><USER15> > SG14 - Games & Low Latency

Can't help but think Jonathan Blow's new language designed for games will blow C++ out of the water, and will probably arrive much sooner than these long drawn-out C++ committee features.

</comment><comment><USER16> I recently had to do some C++ again, and the amount of weird pitfalls and annoying corner cases is really starting to get to me. For example, std::cout << std::hex << myNumber prints the number in hex as expected. Well, if the number has 16 bits or more. Eight-bit integers are an alias of char, and std::hex does wrong things if you feed it a char.

There probably is a workaround for this, as there is a workaround for every other "feature" too, but the more seldom I write C++, the more I realize the language could really use a streamlining. Programming languages are weird, as they seem to develop more, not less, rough patches and glitches as they age.

</comment><comment><USER17> This article really should include links to the previous entries in the same series. I hoped the 'Back' link would help guide me to them, but it just runs

      history.go(-1)

<comment><AUTHOR> The very first link is a link to the previous part of the series.

<comment><USER17> Oh, so it is. I thought it was a link to the current Technical Specifications, most likely to move into C++ after C++17.

</comment></comment></comment><comment><USER18> Yawn. Tell me when they standardize 2,3,and 4 element vector types so I don't need to use intrinsics.

<comment><USER19> I once proposed a library for 2, 3 and 4 element vectors based on the one in Graphic Gems.[1] It was rejected because it didn't use templates.

[1] [http://www.animats.com/source/graphics/algebra3.h](http://www.animats.com/source/graphics/algebra3.h)

<comment><USER18> The nice thing about the intrinsics is that they can be passed by value or as a return type. They map nicely to modern vector hardware. Anything done with templates is going to be very generic and will not have these characteristics. But let them continue adding abstractions with funky syntax instead of optimized versions of widely used constructs. ;-)

<comment><USER20> I don't see why template-based types would be able to be passed by value or returned?

An interesting library is Boost::SIMD (!! not part of Boost !!): [https://github.com/NumScale/boost.simd](https://github.com/NumScale/boost.simd)

</comment></comment></comment></comment><comment><USER21> I think they should stop C++ standard updates for a five year period during which we can learn from the recent changes.</comment>


Ask HN: What's the best non-Paypal way to transfer money internationally. - <AUTHOR>

Paypal has it's issues (they've been documented), but I'm trying to find a way to pay people internationally and I can't find anything very comparable. Does anyone have any suggestions?<p>Bitcoin is an option - but looking at other suggestions for services. <comment><USER2> I assume you are talking in the form of ACH or direct debit payments and not credit card payments. Unfortunately I am not aware of any service outside of PayPal where you can transfer via ACH internationally. The two promising upcoming options Dwolla and Balanced both only current support US bank accounts for ACH payments. With credit cards there are numerous options (i.e. Stripe, Braintree, Balanced, Authorize.net, etc...).

</comment><comment><USER3> Western union, banks ?</comment>


Controlling the Spice, Part 1: Dune on Page and Screen - <AUTHOR> https://www.filfre.net/2018/11/controlling-the-spice-part-1-dune-on-page-and-screen/ <comment><USER2> I've always held that the David Lynch version of Dune was an underrated masterpiece. Tastes vary, but the film was visually stunning and I can't think of another director from the time that would have done justice to the novel. Obviously Dune is a big deal but I'm frequently surprised at just how little attention it's gotten in pop culture beyond the odd references to Butlerean Jihads and the odd pumpkin spice joke. What I wouldn't give for an expansive HBO season-length treatment of the first book.

<comment><USER3> > I can't think of another director from the time that would have done justice > to the novel

Alejandro Jodorowsky?

<comment><USER4> I hope someone eventually reworks their massive storyboard into a Dune movie. They literally did all of the work already.

<comment><USER5> Storyboards are just the beginning. There is a _lot_ of work between even the most polished storyboards and the final product.

Go find one of the Marvel films, skip to the credits, and watch them all the way through; pretty much everyone in that list would have been hired after the boards were done, and worked for a year or three. Don't fast-forward. Don't get up and pee. Don't get distracted by Deadpool popping up and making a fart joke. Just let the amount of _work_ that goes into modern effects-heavy movies sink in.

</comment></comment></comment></comment><comment><USER6> I'm hopeful about the news that a new Dune adaption is currently in the works.

[https://www.theverge.com/2017/2/1/14471312/dune-movie- adapta...](https://www.theverge.com/2017/2/1/14471312/dune-movie-adaptation- director-denis-villeneuve)

Does anyone have other news about this? (Anticipated release date?) Googling around, the bits of news seem to indicate it will be a movie that covers only the first half of the Dune book.

In the meantime I'll need to check out the documentary "Jodorowsky's Dune", which appears to have been well received.

</comment><comment><USER7> As an aside, the Dune audiobooks are excellent. They are the voice acting sort and are done very well. I recommend them to anyone looking for commute/travel material.

<comment><USER8> I recently listened to them and I agree. Also the Butlerian Jihad series would probably make a better movie by today's standards and become a gateway to a dune TV series.

</comment></comment><comment><USER9> Terrific read, can't wait for the sequel.

Having read the book once, and having seen the Lynch movie, and the miniseries (as well as Children of Dune) various times, I don't hold my breath to see a remake of Dune. At some point there's this thing where there's a certain fatigue of familiarity which is hard to impress.

I believe I'd gain more from reading the sequels. For my child however (who never read/seen Dune, and is too young for it now), I'd wish a remake for her, yes. However, the same is true for Neal Stephenson's "Snow Crash" and "The Diamond Age" the latter of which reminds me somewhat about Dune.

</comment><comment><USER10> To anyone else who would enjoy reading more about the creation of Dune (the original novel) I would recommend _The Road to Dune_.</comment>


Open source R in commercial Revolution - <AUTHOR> http://www.theregister.co.uk/2010/05/06/revolution_commercial_r/

<comment><AUTHOR> Somewhat surprisingly, Revolution's enhancements have been packaged for Ubuntu since sometime last year:

<http://packages.ubuntu.com/karmic/revolution-r>

So it looks like they're committed to playing well with the open source community.

Getting R to work with data sets larger than available RAM is going to be a huge help, too.</comment>


Rust on BBC micro:bit - <AUTHOR> https://github.com/SimonSapin/rust-on-bbc-microbit/blob/master/README.md <comment><USER3> Very cool, and very persistent. Good job!

I can see myself losing a month on something like this.

<rant> Now, I like the tech and hacker side of it, but it made me think again of how complicated modern hardware and software have become compared to staying with plain C, not even C++. This is not wholly due to more complicated hardware, but so many people building stuff without going back to first principles. I think the Rust crowd are doing their homework here though.

I understand the benefits of Rust, since I am learning it at the moment, but I guess at my age it is a harder sell for something like this micro. It is so easy to just drop into C for small micros. The BBC micro:bit has a C/C++ interface, of which I bet the C interface is cake. It's small enought that all a good programmer has to do is dot their 'i's and cross their 't's anyway (or they should). </rant>

<comment><USER4> It's become more complicated because C is _much_ more cumbersome to write than a higher-level language, so everyone prefers the latter. If I'm working on a project for fun on my spare time, I don't want to spend an hour fighting the compiler figuring out why array bounds are being weird, or why the compiler is complaining about the type, or whatever.

Python is much more do-what-I-mean, for example, and it's much more appealing to me when I want to write something quickly. I've tried other languages and, with the exception of Rust, I always feel like development shouldn't have to be this yak-shavy.

<comment><USER3> I used to think similarly to you about C, or even Python for that matter, but after years of leaving C, I am back at it. This is while also learning Rust. Why? Because the easy languages are never self-contained to perform a specialized task, and you wind up going through dependency hell, or rolling your own libraries. C takes work, but you stay in the same arena while sussing it out. And, in the end, it is truly portable and usually the fastest of any other implementation. Horses for courses I guess.

<comment><USER5> I don't understand how using C lets you avoid dependency hell or rolling your own libraries. This comment doesn't make sense to me - <USER2> management/rolling your own libraries seems to be there in all languages.

<comment><USER3> I am specifically referring to it in the context of the OP about an embedded device. For general computing, your objections may hold. In all my years of doing small devices, Python's libs wouldn't fit in the space of the unit if you could find the exact library to run on different architectures.

The only other languages I have used aside from C for the small devices is Forth or assembler. There are usually ready-made libs or interfaces from the manufacturer. I haven't seem much provided in Python or other high-level languages. The NodeLua project is an exception, and it is promising. I have already began work on a Lisp of mine (written in C) for this device. Others have done so too.

I guess if you have a Raspberry Pi or other, you can afford the space, and it is basically a small Linux box, so you can run anything you like. I was sticking to a discussion of small, embedded devices where those are not yet options. In the future, I am sure they will be big enough to fit high-level languages.

</comment></comment></comment></comment></comment><comment><USER6> This was quite entertaining! Having worked through many such build systems adventures myself, it's a genre I do appreciate. As always, the story is more captivating than the end result.

\--

Also, yay! a shout out to my RFC 1133.

<comment><USER7> NB, Rust RFC 1133 "Make Cargo aware of standard library dependencies" isn't the same as IETF RFC 1133 "Routing between the NSFNET and the DDN".

I first searched for just "rfc 1133" and the matches didn't really make much sense :]

Rust RFC 1133: [https://github.com/rust- lang/rfcs/pull/1133](https://github.com/rust-lang/rfcs/pull/1133)

<comment><USER6> Hmm, I feel obligated to read up on routing between the NSFNET and the DDN now.

</comment></comment></comment><comment><USER8> This is by now a familiar sight:

      #[lang = "eh_personality"] extern fn eh_personality() {}
      #[lang = "panic_fmt"] extern fn panic_fmt() -> ! { loop {} }

But it's a little unsatisfying.

What does eh_personality actually do, and how would you write a 'real' implementation?

I can guess what panic_fmt is for, but exactly what is it supposed to do, and how would you write a 'real' implementation?

<comment><USER9> I now have a "more real" panic_fmt in the repository:

        #[lang = "panic_fmt"]
        extern fn panic_fmt(details: ::core::fmt::Arguments, file: &'static str, line: u32) -> ! {
            println!("Panic at {}:{}, {}", file, line, details);
            let row_2 = ::gpio::Pin::output(::pins::ROW_2);
            let col_3 = ::gpio::Pin::output(::pins::COL_3);
            row_2.set_high();
            loop {
                col_3.set_low();
                ::busy_loop::wait_approx_ms(5);
                col_3.set_high();
                ::busy_loop::wait_approx_ms(200);
            }
        }

Note that println! is a macro I defined myself, it writes to the serial port.

I still don't know about eh_personality, though.

<comment><USER10> wrt eh_personality, there's a good short answer with a link to a good (very!) long answer here:

[http://stackoverflow.com/questions/16597350/what-is-an- excep...](http://stackoverflow.com/questions/16597350/what-is-an-exception- handling-personality-function)

<comment><USER11> So basically if I got it right, non-terminating panic_fmt and empty eh_personality means that we don't get stack unwinding at all, which also means that destructors don't get called. That could be fairly important for RAII heavy code.

<comment><USER9> Is it important, when there is no other thread or process that could use any resource you're holding?

<comment><USER11> Resource wouldn't necessary be something internal in the application, it could be also some external system or something like that. You might want to close TCP connections cleanly in destructors, or maybe more relevantly for embedded systems the resource might be some actual physical gadget that is activated/deactivated.

Of course this is all hypotheticals and it could very well be argued that relying on destructors to do something actually critical would be a bad design.

<comment><USER12> > Of course this is all hypotheticals and it could very well be argued that > relying on destructors to do something actually critical would be a bad > design.

Eh, I'd only argue that in the case of garbage collected languages. In RAII languages like Rust and C++, it's the preferred way.

<comment><USER8> There's a classic interview question about RAII along the lines of "in what situation can a RAII resource be acquired, but not released?". The key answer is "if someone turns the power off".

panic_fmt entering an infinite loop leads to pretty similar results as someone turning the power off. The stack will not be unwound, destructors will not be run, and bad designs will leave external resources in an inconsistent state.

<comment><USER12> I mean, sure.

loop {}

^--- That'll also cause destructors to not be run.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Would xargo help with the cross compiler setup? [https://github.com/japaric/xargo](https://github.com/japaric/xargo) I've been meaning to look more at rust on ARM Cortex-M chips and recently saw tools like xargo that appear to make it a bit less tedious to setup.

<comment><USER9> Looks like it would help get libcore for your target more easily, yes.

Still, I'd like similar functionality to get in standard Cargo eventually.

</comment></comment><comment><USER14> As a Rust fan and electronics enthusiast, I find these kinds of projects awesome. Thank you for the write up and keep on hacking!

</comment><comment><USER15> These micro:bit look pretty interesting from an embedded controller perspective - does anybody have any useful comparisons between them and others, eg Arduino etc?

I've been working on a project where I will end up having to make a simple stepper motor to drive an analogue clock and I think I can use this to control it (advance x% of turn every minute, currently x=50) though I was initially thinking of a small PICAXE circuit as we have some equipment at the school I work at. I like the thought that I could access it over BLE though, and that it could be programmed to handle DST automatically and even drive a few LEDs for good measure

Also, what is the power consumption? As my project involves a clock, I'm thinking it needs to last a while on some batteries, though at least its big enough that I can pack a few in.

<comment><USER16> Just get a bog-standard STM32 board for very-cheap.... don't bother with one of these.

e.g. A standard STM32F103 board can be had for around $3.

<comment><USER15> Hm, thanks.. I will look closer at this kind of thing over my holidays. That looks like I can program it over RS-232 and operates at battery voltages, which is really what I require.

</comment></comment></comment><comment><USER17> Did he mention he integrated this with the mbed ? i though that was hard, because of c++.

But if he did so, that would be really valuable - it's a good solution for the problems of portability and software support , mnajor issues for embedded developers.

<comment><USER9> Yes, I've had Rust code and C++/mbed code in the same program. But C++ is still an issue, I wrote a C wrapper for the one C++ method I was using. Doing so for all of mbed would be very tedious and fragile.

Servo's fork of rust-bindgen [https://github.com/servo/rust- bindgen](https://github.com/servo/rust-bindgen) has some C++ support and might be able to generate bindings for all(?) of mbed (at least for a given hardware configuration), but I haven't tried.

</comment></comment><comment><USER18> > _" Rust on BBC micro:bit"_

OT: I just did a double-take. For a moment there, when I saw the title, I thought of a rusty computer part.

<comment><USER19> glad I wasn't the only one.</comment></comment>


Redditor provides comprehensive guide to SEO - <AUTHOR> https://www.reddit.com/r/startups/comments/hqgahk/seo_is_easy_the_exact_process_we_use_to_scale_our/ <comment><USER2> Great article, thanks!</comment>


Watch music videos in style - <AUTHOR> http://www.vawk.com/ stream music from youtube without any advertisements <comment><USER2> Does it _really_ need all the Facebook permissions it asks for?

</comment><comment>==

 _Access my basic information_

 _Send me email_

 _Post to my Wall_

 _Access posts in my News Feed_

 _Access my profile information_

 _Access my family & relationships_

 _Access my photos and videos_

</comment><comment>==

Maybe I'm overreacting but that seems like a bit much to ask for before I'm able to even tell what the web site does.

Note: I bit the bullet and logged in anyway, too curious to help myself. It wants me to watch "Just A Dream" by Nelly, but when I attempt to skip the video and find one more suitable to my tastes, it loads Nelly again. And again. And again.

<comment><USER3> sorry, i just sorta checked everything ;) i'll remove some of those. it's seriously not used for anything. you can actually just watch videos by going to /watch.

this was hacked together in a few nights so it's very incomplete. (collaborative) filtering coming soon.

</comment></comment><comment><USER4> If your're in Germany, try our neat little site: <http://putpat.tv> . Can be found ipad and on latest samsung tvs, too.

Explanation can be found here : <http://www.youtube.com/watch?v=9EAkuKwS1JM>

</comment><comment><USER5> Apparently it's not 'my' music it's Facebook's.... no Facebook, no play.

<comment><USER3> you can just go to /watch. i probably should've added a link ;-)

</comment></comment><comment><USER6> iStockPhoto background and Facebook account required?

Bawhaha. Smells like a phishing attack.

Edit: Stock Photo was removed and you no longer need a Facebook account to play.

</comment><comment><USER7> lost me at 'login with facebook'

</comment><comment><USER3> the pitch is: "pandora for music videos"

</comment><comment><USER8> iStockPhoto?

<comment><USER9> LOL</comment></comment>


The Great GOP Bot Debate - <AUTHOR> https://medium.com/@gerrithall/the-great-gop-bot-debate-ca3cd5c68c59

<comment><USER2> All of the candidates who've written books should have their content spliced and categorized for simulated debates.

</comment><comment><USER3> Thanks for posting @warrenmar

We'd like to host another debate, if any HN-ers would like to build a bot to compete in the debate please let me know, should be great fun! :)</comment>


Texas governor signs bill bringing Uber, Lyft back to Austin - <AUTHOR> https://www.forbes.com/sites/johnkartch/2017/05/30/with-governors-signature-uber-and-lyft-return-to-austin/#6bd5d8c22241 <comment><USER2> I wonder if these new regulations would override city level ones. I'm thinking about Dallas in particular that has quickly latched onto the background check stuff as a way to fleece everybody that they can and to write expensive ($600!) tickets to Uber/Lyft drivers they catch not participating in their scam. Only way to avoid it is to not pick up anybody in the City of Dallas.

</comment><comment><USER3> There's an ad blocking paywall but if you're using Brave it will bypass, just remove those numbers on the end of the link.

<comment><USER4> Here are some articles without a paywall:

[https://www.texastribune.org/2017/05/25/uber-lyft- returning-...](https://www.texastribune.org/2017/05/25/uber-lyft-returning- austin-monday/)

[http://www.economist.com/blogs/gulliver/2017/05/not- missed](http://www.economist.com/blogs/gulliver/2017/05/not-missed)

[https://www.theverge.com/2017/5/27/15705060/lyft-uber- return...](https://www.theverge.com/2017/5/27/15705060/lyft-uber-returning- austin-texas-fingerprinting-requirements)</comment></comment>


J can look like APL or English - <AUTHOR> https://wjmn.github.io/posts/j-can-look-like-apl.html <comment><USER2> I want to like J, but I find that most of my programs get too cluttered with @: all over the place. I see the k-means example shown here has a similar problem (7 usages of @: in only 4 lines of J). I find implicit programming a more elegant paradigm, but lambdas with pre-declared argument names (like x,y,z in k or α and ω in Dyalog APL) more comfortable to work with (and, at least for the time being, more productive).

I think part of the reason is that J's syntax for function composition is too heavy. In an improved visualization of J like the one shown here, I would find very interesting to try something like, for example, composition by simple juxtaposition and trains with under(or over)lining, maybe even playing with colors to indicate if verbs form a train or other composition. I understand that is a quite different problem from just substituting @: with o̲.

Nevertheless, very nice work. It is interesting to see the English and APL versions next to each other. The video is also very good.

<comment><USER3> > maybe even playing with colors to indicate if verbs form a train or other > composition. I understand that is a quite different problem from just > substituting @: with o̲.

With regards to how different of a problem that would be, J's syntax is context-sensitive. If you were to accurately identify trains and forks, you could not use regex, and would probably end up implementing a subset of the J parser.

<comment><USER4> Charles Moore did that with Color Forth and even though only he was using it, I remember several comments on how that is unfair to the color blind or visually impaired which is an interesting point.

<comment><USER2> ColorForth has a color-blind mode, but I do not remember the details.

The main idea is to change visual representation instead of using delimiters. Different fonts or text sizes sizes or cursive/inverse/underline are also valid ways of displaying different "colors".

<comment><USER4> Yes I remember that reply which came from him, but forgot to mention. It is an interesting idea.

</comment></comment></comment></comment></comment><comment><USER5> There is something so charming about the attached video [0]. It's very reminiscent of the original APL demonstration [1] from 1975. I love it!

0.[https://youtube.com/watch?v=jTeENcpUZdM](https://youtube.com/watch?v=jTeENcpUZdM)

1.[https://youtube.com/watch?v=_DTpQ4Kk2wA](https://youtube.com/watch?v=_DTpQ4Kk2wA)

<comment><AUTHOR> That 1975 APL demonstration is lovely. Much has been preserved in Dyalog and GNU APL - it's very interesting to see how timeless the core APL functions are.

I'm very fond of a number of videos by the late John Scholes narrating APL solutions step by step, including the well-known demonstration of Conway's Game of Life in APL (0). His videos on depth-first search (1) and solving sudoku (2) are also brilliant.

(0) [https://www.youtube.com/watch?v=a9xAKttWgP4](https://www.youtube.com/watch?v=a9xAKttWgP4) (1) [https://www.youtube.com/watch?v=DsZdfnlh_d0](https://www.youtube.com/watch?v=DsZdfnlh_d0) (2) [https://www.youtube.com/watch?v=DmT80OseAGs](https://www.youtube.com/watch?v=DmT80OseAGs)

</comment></comment><comment><USER6> People who are interested in a more readable APL should have a look at Nial:

[https://github.com/danlm/QNial7](https://github.com/danlm/QNial7)

It is a fairly standard APL which inherently uses english-like notation instead of symbols.

</comment><comment><USER7> I thought that "making J look like English" would refer to creating a DSL in it, not substituting J symbols for English keywords. But still, pretty cool.

<comment><USER8> Yeah, this is really cool. While the grammar remains the same, seeing something like:

``` kmc =: right (step power infinity) initialise initialise =: (left deal tally at right) from right step =: (left groupby allocate rank 1 2) then (mean every) allocate =: euclidean then (equal minimum) then indices then head euclidean =: (minus then square then sum) vectors ```

That's quite readable and compact. I'm fascinated by J now.

</comment></comment><comment><USER9> Readable APL is like writing (125 divided by 5 then add .3) instead of (125/5)+.3 defeats the entire notation as a tool of thought.

</comment><comment><USER10> Well, I'll be the dark cloud here. As someone who used APL professionally for a decade, having studied and interacted with many of the early APL pioneers, including Ken Iverson, everything related to J, including this article's proposal, is an absolute abomination to me.

What many people lack is a sense of history. Why does something like J even exist? Do you know? I do. It was a horrible mistake on the part of Iverson in response to the limitations of the hardware issues we had to deal with at the time (think 80's).

How does a man who authored a paper exalting the advantages and power of notation as a tool for thought [0], turn around and create something like J?

Simple answer: Business, for the most part, and, if I am going to be benevolent, a naive attempt to bring something to the masses (while destroying APL).

Here's what you had to do at the time if you wanted to run APL on IBM PC's (or clones):

        - Buy a specific motherboard (if it was not an original IBM PC)
        - Buy a specific graphics card (which really wasn't a graphics card at all, just text)
        - Purchase or program a character EPROM that replaced rarely used characters with APL characters
        - Swap out the stock character ROM with the custom EPROM
        - In some cases install a toggle switch outside the computer to be able to switch between APL and standard ROM's
        - Purchase either an IBM Selectric or pinwheel printer
        - Purchase an expensive character ball for your IBM printer or an equally expensive APL character for your printer
        - And then you had to buy your APL interpreter from a company like STSC for hundreds of 1980's dollars

This meant a number of things:

        - APL was outside the purview of "civilians"
        - Normal office environments were never going to consider something like this
        - There was a cost and technical complexity to wanting to use APL
        - Installing a modified APL character EPROM broke applications that relied on the characters
          in the character table that were replaced (mostly characters you could use for basic drawing on a terminal)
        - APL was very much limited to those who absolutely-positively had to have it
        - That meant academia and very niche applications (financials)
        - Widespread adoption was pretty much impossible

It is in that context that Iverson thought-up the idea of transliterating APL symbols into combinations of ASCII characters. It was a failed attempt to make things more accessible to the masses by compromising the very foundation of APL. This was very short-sighted. Computers evolved very quickly and very soon both displaying and printing APL characters was within the reach of any 15 year old with a computer.

And it was a failure. Not the least of the reasons for this being that, to the average person, J code looks like ASCII vomit. APL has distinct symbols, just like mathematics. One might not be able to understand the code but the end product not only looks very different from ASCII vomit, it is. Because notation has power.

The correct path would have been to understand technology would catch-up to the requirements of APL and focus on extending and improving the language. A simple example of this would be adding an object-oriented programming layer to the language. Compilation and distribution through executable files and (civilian) installation packages, which are valuable for commercial closed- source security and deployment, would also have been a valuable add-ons. I was working with Assembler, FORTH, C, and C++ at the same time I worked with APL. I could deliver executable user-installable programs in any of those languages --and sell them!-- while my use of APL was limited to a range between academic and internal tools. It would have been brilliant to have been able to deliver finished user applications indistinguishable (by the user) from those written in C or C++. That was impossible. They should have worked on that, and more.

Frankly, I have been wishing, for decades now, for someone to stand on the shoulders of APL and develop it's successor. A rich SYMBOLIC language capable of allowing rich and effortless expression of ideas at an entirely different level of thought and abstraction than for-loops and indenting lines by four spaces.

Anyhow, it's a soapbox. I know. Getting off it. I need to go do some useful work.

[0] [http://www.eecg.toronto.edu/~jzhu/csc326/readings/iverson.pd...](http://www.eecg.toronto.edu/~jzhu/csc326/readings/iverson.pdf)

<comment><USER11> _having studied and interacted with many of the early APL pioneers, including Ken Iverson, [..] Why does something like J even exist? Do you know? I do._

From reading, because the glyphs were too hard to deal with in a pre-Unicode world. Too hard to type, to display and to print. J was intended to be ASCII based, column-first and play more with natural language grammar features. But I have wondered, was Ken Iverson happy with J? Did he _like_ it? Regret it? Is there any record of anyone asking him or him discussing or writing about this?

 _Frankly, I have been wishing, for decades now, for someone to stand on the shoulders of APL and develop its successor. A rich SYMBOLIC language capable of allowing rich and effortless expression of ideas at an entirely different level of thought and abstraction than for-loops and indenting lines by four spaces._

What properties might this have?

A brief touch of APL has left me chiding mainstream languages for not having vector/collection oriented transforms, and for not having a core of carefully thought out compose-able symbols for common operations. But it has also shown me a view of people having to work around APL's limitations. The whole environment feels a little like watching Prof Kernighan demonstrating a Unix pipeline to spellcheck a document from a text file of known words in the 1970s, and being impressed that it happened, but comparing it to a probabalistic context-aware spelling and grammar checker today and thinking "you couldn't build that with a shell pipeline" \- but with my dim view, I'm not able to see much room for a notation which is significantly better across (m)any domains without just being "build your own DSL". Even APL implementations don't agree on the exact behaviour of the core APL functions. I believe NARS2000 and Dyalog handle ⊆, ⊃, ↓, ↑ differently. How much room is there for a notation to be bigger and more capable but still agreeable to enough people?

What does " _effortless expression of ideas at an entirely different level of thought_ " mean in concrete terms? What level? What ideas? I'm enticed, but unseeing.

 _Compilation and distribution through executable files_

Dyalog APL can make executable files. The main catch is that you need a license to run them, as well as a license to develop them. There seems to be no way to buy a Dyalog APL license then distribute free (unpriced) executables. They have an object system, and .Net integration, and have been filling in some of the symbol combinations over the years - as a beginner I can't really comment on that except iota underbar is now a builtin function.

<comment><USER12> One of core things (ideas, requirements) in APL is to make mathematical notation in one line.

Another thing (restriction) was to use available hardware. So some symbols were created in a way which was possible to achieve with teletypes of the days.

It's possible one should start with careful (re-)reading of "A programming language".

And maybe we should think once again about the power of the whiteboard and how we could express that into an executable language.

<comment><USER10> Right! Some of the characters were over-types! The teletype would print one standard character, advance to to the next position, then backup to the character it just printed and over-print it with a second. The quote-quad is an example of this. It would print a quote and then backup and print a rectangle standard drawing character over it.

</comment></comment></comment></comment><comment><USER13> What is it with picking un-googleable names for programming languages? C, D, J, R, Go? Stahp.

<comment><USER12> Google has a long way to go to figure out the intent of the request instead of dumb text search. I don't think creating J in 1980-s Iverson had to be bothered with that.</comment></comment>


Appleseed, a Diaspora alternative, goes public - <AUTHOR> http://twitter.com/appleseedproj/status/29017132391 <comment><USER2> Hasn't Appleseed been open source for years? I don't understand what "going public" means or why "invites" are needed.

<comment><AUTHOR> Hey Wes. As I understand it, they've now setup a "test" hosted service for anyone to use... the wordpress.com equivalent i guess</comment></comment>


How to write assembly code for the iPhone - <AUTHOR> http://www.shervinemami.info/armAssembly.html#howto <comment><USER2> Writing assembler for iPhone is a pain in the ass. I don't know which version its gas is based on, but it is definitely a very very old one. The most important feature missing is to create a macro that takes arguments. A most recent change is that some guy in Apple decided to switch conditional instructions like ldrneb to ldrbne, ruining my existing code base (> 10K lines). Now I need to remember what's the right way for iPhone, and what's for Android.

Btw: there is zero support from Apple, so your only chance is to find this kind of blog posts, and they are very few. Bookmark it now if you may need it someday.

<comment><USER3> Apple (NextSTEP, really) forked their version of gas so long ago that it predates the formation of "GNU binutils". While Apple has occasionally gone back and merged updates for some files, as far as I've been able to tell, most of the code has been stagnant since ~1990. The version of GAS they are using is pretty much 1.38. :(

(One of the most irritating things I had to do while supporting all of the initial iPhone jailbreak efforts was to reimplement a ton of gas macro features from later versions of the assembler so I could compile the "normal programs" that people expected to work on this system.)

<comment><USER4> The current Apple devtools default to using the (much more modern) llvm-mc assembler, not gas. Patches and bug reports are always welcome!

<comment><USER3> FWIW, this would not have particularly helped me (even with a time machine to take the current compilation chain back to when we are talking about, which is December of 2007), as Clang is unable to compile a bunch of the kinds of things I need to compile (it barely often even compiles my stuff correctly: the compiler itself often crashes; this was certainly the case a few years ago, when the project we are discussing was actually relevant... arguably my main contribution to the iOS toolchain community was to do the work required to get us off of the LLVM compiler and onto mainline gcc).

To the extent to which that is then some kind of veiled challenge or poke (as I'm having a very difficult time understanding why you are telling me to do something now when I've been talking about work I did five years ago, although work that I still rely on), I will then make the counter-poke: GCC is open source, as is gas; it is certainly the case that "patches and bug reports are always welcome". Just because something exists does not mean it is entitled to "patches and bug reports" when there are better alternatives. I personally have no real interest in being able to use Apple's off-the-shelf toolchain, nor do I appreciate their reasons for forking so far.

A key problem here, of course, is that many people in the Apple development community have a strong negative impression of both GCC and GAS; but, as far as I can tell, this is almost entirely the fault (and probably strategic plan) of Apple, who have been working with a 5-year old version of GCC hooked up to a 20-year old version of GAS. It is incredibly painful for me to see all of this great work and effort being ignored and rewritten from scratch by a new generation of people whom Apple have brainwashed into thinking this is then a technical issue and not a licensing one.

Regardless, in my attempts (two weeks ago) to use LLVM MC (disassembler), I found a handful of issues that I had to fix (on SVN head) to get it to even generate correct disassembly (although one or two of the bugs were in the table definitions and should also affect assembly) on the first project I tried to disassemble with it: I thought it would even be a simple case (a bootrom, which would thereby have no relocations or anything particularly tricky to understand or decode: just some instructions).

The result of that is, from being on the IRC channel (where after having a vague discussion about some MC API and usage issues, I attempted to bring up some of these bugs), I did and still do not get the impression that anyone there really seems to care about these kinds of encoding issues, so the bugs I found are likely just going to rot.

Honestly, I do not feel even remotely bad about this, because binutils (which I have already recoded my project to use instead) does not have any of these issues, and is also open source. I really believe that Apple's forking of the community efforts are harmful to the cause, and I would frankly rather not encourage their behavior: if they want their toolchain to work well, and they want my help to make that happen, they are going to need to accept the licensing requirements of GCC; otherwise, I'm quite happy to watch them have to do all of the reimplementation work entirely on their own.

(Some might now point out that binutils doesn't provide all of the same data that LLVM theoretically provides, but the way LLVM provides it is actually sufficiently useless--in addition to being incorrect--that I do not mind. The LLVM API, especially at the MC level, is highly overrated: it was seriously sufficiently bad that I ended up in a situation where parsing the string output it provides was more useful than attempting to extract meaning from their MCInst objects. I could find the attitude "stop using that thing that works and instead contribute patches to LLVM" defendable if LLVM were better designed, but it sadly simply is not; it is slightly easier to use as a library to do backend compilation, and it has better error reporting, but both of these would have been simple and welcome contributions to gcc.)

</comment></comment></comment></comment><comment><USER5> Your C compiler can also generate NEON instructions if you use NEON intrinsics:

<http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html>

[http://blog.llvm.org/2010/04/arm-advanced-simd-neon- intrinsi...](http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics- and.html)

</comment><comment><USER6> I ve heard that ARM assembly is easier to grasp than x86..

<comment><USER7> ARM is still a bit icky, but nearly anything this side of a VAX mainframe will be easier to grasp than x86.

If anyone's looking to learn, MIPS is really easy to pick up. There's a good simulator (SPIM[1]) with terminal and GUI interfaces and lots of tutorials, as it's used in a lot of undergrad computer architecture courses.

[1] <http://spimsimulator.sourceforge.net/>

<comment><USER8> As I grew up with x86 I beg to differ.

<comment><USER9> Opinions are trivial to hold. Backing them up, OTOH, is an entirely different matter.

"x86" instructions now number in the hundreds. Almost any RISC ISA will max at 30% of that, with less than half of the addressing modes. "Easy" is an adjective, but "easier" is an ordering relation: ARM is _easier_ than x86.

<comment><USER4> ARMv7 has 426 distinct instructions (counting sections in the architecture reference manual).

x86 does have somewhat more instruction names, but not dramatically more (and the blowup is largely because of differences in naming conventions; Intel, for instance uses different names for [vector|scalar][single|double]float operations, whereas they are all the same name on ARM).

What makes ARM nicer (and it _is_ somewhat nicer, in my experience as someone who spends hundreds of hours writing assembly code for both architectures every year) is:

1\. non-destructive operations (finally coming to Intel too!)

2\. better orthogonality, fewer weird holes in the ISA (especially in the vector ops)

3\. no piecemeal vector extensions (all the various extensions that may or may not be available on x86 are madness).

When you really get down to it, though, none of these make a huge difference; they're just niceties.

</comment></comment></comment></comment></comment><comment><USER10> Interesting that After all these years Compiler still haven't catch up with self written Assembly speed. Or is there some LLVM optimization not used yet?

<comment><USER4> Compilers and assembly programmers serve two different roles.

\- A compiler is expected to produce reasonably fast code in microseconds.

\- An assembly programmer is expected to produce the fastest code possible in hours or days or weeks.

Given hours or days, and development work focused on such a task, compilers would be able to compete with good assembly programmers; it simply hasn't been the focus of much compiler development, because most users don't want to wait three days for their code to compile.

What's remarkable is that compilers are able to fairly consistently _beat_ assembly programmers of average skill, while delivering results thousands of times faster.</comment></comment>


Microsoft Claims Silverlight Beats HTML5 - <AUTHOR> http://www.pcworld.com/article/204883/microsoft_claims_silverlight_beats_html5.html?tk=rss_news

<comment><USER2> Original: [http://team.silverlight.net/announcement/the-future-of- silve...](http://team.silverlight.net/announcement/the-future-of-silverlight/)

From the HD Guidelines: "Please submit the original source. If a blog post reports on something they found on another site, submit the latter."</comment>


A VC: What Trumps Email? - <AUTHOR> http://avc.blogs.com/a_vc/2007/05/what_trumps_ema.html <comment><USER2> He is talking about a problem which is simply not there. Spam is not a big problem, (keep track of who you're giving your address to), but most importantly spam is not unique to email: give them (spammers) a channel to reach you and they will.

Besides, WHAT IS an email? How exactly is it different from SMS if I trip&forward; it to my cell? Email is not even limited to a protocol or any specific software. Any kind of technical definition of "email" that one can come up with will probably evolve around SMTP, i.e. server-side.

<comment><USER3> The article is unclear on what "trump" is supposed to mean, and in what context.

Does twitter trump E-mail for persistent storage of long messages? Does blogging trump E-mail for personal exchanges among a select group of friends? Does IRC trump E-mail for secure delivery?

</comment></comment><comment><USER4> You would think a tech investor would realize AOL email is ancient. Gmail trumped Email a while ago.

</comment><comment><USER5> xobni trumps email :)

<comment><USER6> You beat me to it!

I feel there are two options: reduce the number of emails you care about, and get through the emails you care about faster. Xobni is working on both.</comment></comment>


Can you take programmers seriously if they don't know C? - <AUTHOR>

I know it is an arrogant thought. But I myself have trouble regarding someone in the computing field as knowledgeable or 'good enough' if they do not know C .
C was my first language and is still my favorite. Those who know it understand computers on a far deeper level than those who stick to all high-level languages.
I would go a step farther and say that I wouldn't hire someone to work for me if they were not sufficient in C. Maybe this is just because I am mostly a low-level junkie...
Any one else feel this way? Furthermore, do you know anyone who doesn't know C but is still excellent at coding/computer-science? <comment><USER2> I think this question smacks of elitism and in-group bias. For projects that require C, not knowing C is obviously a deal breaker. But most projects do not require C, and usually "understanding computers on a far deeper level" is much less valuable than being able to properly and elegantly build on top of existing systems/frameworks and leaving useful code in your wake, regardless of language. Due to the massive adoption of the Linux and Windows kernels as a basis for almost everything else done in computing, there will be a pretty major correlation effect between those who are good programmers and those who know C. Since many in the computing field share your sentiment, it drives others to "prove themselves" by making sure to learn C. Also, C is taught in CS classes. But all of this does not mean that knowing C is a precursor to being a good programmer- it's just a correlated effect.

The ability to build massive (and interesting) projects on high-level languages is growing sharply, and the reasons people would have learned C in the first place are shrinking, since there is plenty to work on without even caring about C. I hope the continued proliferation of quality high-level libraries and frameworks spurs a gradual decline of the divisive and self- congratulatory mindset demonstrated here, since it is not knowing C that makes programmers good. It is the ability to get things done right with whatever language(s) they need to.

(I know C)

</comment><comment><USER3> _Furthermore, do you know anyone who doesn't know C but is still excellent at coding/computer-science?_

I think this guy somehow did OK, even without knowing C: [http://en.wikipedia.org/wiki/John_McCarthy_(computer_scienti...](http://en.wikipedia.org/wiki/John_McCarthy_\(computer_scientist\))

<comment><USER4> Bah! Sounds like a typical academic. <http://blog.fogus.me/2011/04/07/academics-vs-the-real-world/>

</comment></comment><comment><USER5> That depends: if they will need to write C code, then of course, they need to know the language. But if all they're gonna do is write Haskell, Erlang or Lisp, what's the point of knowing C?

I do know a lot of people, who are excellent programmers, but their C is read- only at best, because their language of choice has been something else.

I see nothing wrong with that. A good programmer usually doesn't think in a language context anyway, he translates his thoughts to a language, yes, but when designing, he thinks a few levels above the language. Thus, the lack of C knowledge does not, in my opinion, does not mean one's insufficiently skilled. Nor does good knowledge of C mean one's a good programmer.

I've also met with people who were excellent C coders: they could code down whatever they were told to, blazingly fast, using every trick the language had to offer. But they couldn't design their way out of a paper bag, because they lacked vision: they could only think in C, and not beyond that. They couldn't see the bigger picture.

</comment><comment><USER6> I'm not sure I can take someone seriously as a programmer if all they know for operating systems are Windows, Mac OS and flavors of UNIX/LINUX.

Seriously though, C is a good language but for back to basics you are talking assembly language at least. Preferably several assemply langages.

</comment><comment><USER7> Last place I worked had a guy who viewed C as the enemy and would not code in anything put Fortran - it was a production system running a totaliser.

However it's a silly assertion. Unless you need someone to program micro- controllers, devise codecs, do low level memory management etc. etc. understanding C is hardly going to be a mandatory requirement. If you're running a software company building web apps I'd much rather have someone that understands user interfaces and codes in a productive language - C expertise is superfluous.

I have worked professionally with C myself and studied it at uni. However you won't see me volunteering for C work. It's painful to go back to C after C#, Ruby etc.

</comment><comment><USER8> After learning the syntax of a language (let's say C), you are left with the formidable task of learning best practices, idiomatic expressions, frameworks, debuggers, libraries... and then, how to deal with managers, how to hire employees, how to do taxes. And in spare time let's all spend a few years learning C. ;-)

Or rather, a designer is not a good designer if he doesn't have the human anatomy memorized, and no UI specialist is a good UI specialist if s/he's not a good designer. So let's all us who make web forms, go and study human anatomy for 2 years.

</comment><comment><USER9> Soooo.... if a statistician doesn't know C but knows R then that's a deal breaker? How about if a 3d game programmer knows lua, but can't do function pointers ? I'm way too late to this party, but I'm sorry it's horses for courses here.

Know the tools for your trade. Nothing more, nothing less.

</comment><comment><USER10> _do you know anyone who doesn't know C but is still excellent at coding/computer-science?_

You don't? How parochial. I recommend tht you study a good functional language for a while. It helped me understand coding on a "far deeper level".

</comment><comment><USER11> Not knowing C is fine, but not having an understanding of the machine you use to make a living, well, you can get away with it, but before i started learning C and reading about low-level issues, i felt like I was cheating.

</comment><comment><USER12> One might just as easily say:

:%s/C/Lisp,Haskell,OCaml or Erlang/g

It all depends on what you want. And yes, I know a few excellent computer scientists who don't "know" C.

</comment><comment><USER13> What's wrong with not knowing C? Programmers will program in tools they know in the domain they're familiar with.

</comment><comment><USER14> Yes, I would agree. Although I would take it a step further for web engineers (developers) to say that if you don't have your N+ and/or Cysco certs, you shouldn't be designing.</comment>


Ask HN: Back end engineer trying to build a mobile app, would love some guidance - <AUTHOR>

my app will need account creation, a map, REST requests, and notifications.  what's the fastest way to get from 0 to mvp?  do I need to build a native app for every platform?  can I get away with a web app? <comment><USER2> The first thing I would do is think about what capabilities you need in order to successfully execute the product, and equally important how you would want to distribute the product. Depending on the answers, I would then find a framework (or multiple frameworks) that facilitate the approach you want to take. This will allow you to prototype faster (and reiterate faster as you learn from your customers). This would also play in to how you approach building the back end.

From reading your replies to other comments, it sounds like you want access to a phone's local resources, and you are possibly interested in using web technologies. I would look into Apache Cordova (aka PhoneGap) or something similar (there are many). This allows you to build once with HTML/CSS/JS, and then distribute via Android/iOS and more (differentiation being each platform would need specific front end JS code to access the phone's local resources). This approach is commonly used in conjunction with a back end that accepts API Requests (aka front end makes Ajax request, back end responds with Data). I'm using this approach for one of my current projects.

<comment><USER3> I agree with the above, and additionally you can check out [http://ionicframework.com/](http://ionicframework.com/) to build once for web (with backend REST API) and then port it to iOs and Android pretty easily. They offer nice-looking UI elements as well specially suited for mobile use cases. I found porting a simple angularjs based webapp to android and iOs pretty easy (thought only tested it as development prototype). Should be worth checking out.

</comment></comment><comment><USER4> To get to a mvp and prove that you're concept work, you don't have to (and maybe shouldn't) build a native app for every platform. The goal of the mvp is to get the product in front of people as fast as possible, to see if they would spend a few minutes using your products, or if it's not useful for them. Once you validate this, you can think of expanding to other platforms.

I would suggest to only go for the platform where you're most comfortable developing with. Web app can be good indeed, but if you already know objective c or java then you'll be probably better off going for native iOS or Android first. Good luck!

<comment><AUTHOR> yes, I certainly need to stay in the mvp frame of mind, thanks for that reminder.

</comment></comment><comment><USER5> I've recommended a "web app first" approach to some of my clients.

You might find parse.com services cover your user and notifications requirements, and perhaps even your REST backend.

<comment><AUTHOR> thanks, the web app approach certainly makes a lot of sense. my only concern is whether html5 can get access to the phone's resources like the camera, dialer, etc.

<comment><USER6> Cordova will provide access to the camera:

[http://cordova.apache.org/docs/en/2.5.0/cordova_camera_camer...](http://cordova.apache.org/docs/en/2.5.0/cordova_camera_camera.md.html)

And maybe the dialer:

[https://github.com/gibsosmart/cordova-phone- dialer](https://github.com/gibsosmart/cordova-phone-dialer)</comment></comment></comment>


Quarter life crisis: A question to those at the top of their respective fields. - <AUTHOR>

A short background paragraph is in order. I'm suffering through what I believe is a quarter life crisis. I have either lost, or never had, the ability to recognize my own intelligence or that of others. It has lead me to be incredibly insecure about my own ability to perform in both the career path that has evolved from my passion and my ability to be a good human being. The additional true understanding of my mortality that I never had as an adolescent has also caused me to think about death on an almost daily basis. All of this has caused me to come to a silent panic and feel lost with... everything.
Now on to my question.
To all those at the top of their fields, be it STEM or otherwise. To those who help drive change, discover, and develop what we did not have before: How did you get there? How did you manage to become a part of a force that pushes humanity forward? How did you deal with your own shortcomings? Did you ever feel like you simply did not have it in you? Was there ever any significant emotional challenges that you had to overcome? How did you overcome them?
What I am asking for is not unlike those who ask where to start studying but I ask a different question: How did you manage getting there? Share with me a bit of your autobiography in hopes that I can find some common ground with the people I look up to. <comment><USER2> One simple way to look at it is to ship things. Get your work in front of eyeballs. You can endlessly debate the value or the intelligence of your work when it's behind closed doors. Getting this work in front of other people simplifies this a bit I think.

Writing which never sees the light of day becomes far more valuable the instant it is accessible to others. The same is true for anything you create. Simply creating a blog post produces value when others read it. The key here is creating and shipping. Otherwise it just rots unseen and it might as well be some virtual thing in your head driving you crazy.

Often just doing something helps a lot. I have a friend who has horrible at photography eventually become an awesome professional photographer. I watched his progression on Flikr over the years. He started out taking a crazy number of the worst pictures I have seen. He took pictures of anything and everything and posted them all. As time went on, he posted fewer pictures but with increasingly better quality. Today, I find his pictures to be stunningly beautiful.

I have seen the same with writers and of things I do every day as well.

Just create stuff. Get it out there and don't dwell too much on how good it is. Let other people do that for you while you continue building. It's a release. You feel better getting it out there. You know you have done something because your creation is at a point where people are consuming it. If you don't think it's valuable enough, then build something else. Just keep going. Don't hold it in your head or you will go crazy.

<comment><AUTHOR> That makes quite a bit of sense. Thanks.</comment></comment>


Show HN: Jove – financial stability for the self employed - <AUTHOR> http://joveapp.co.uk/ <comment><AUTHOR> Jove is a financial concierge service for the self employed. We're trying to make financial products cheaper, transparent and accessible to freelancers. The free messenger beta launches with income protection insurance. It also features a COVID calculator to help freelancers access various government help schemes. We're very early into this, and would be extremely grateful for any feedback/suggestions!</comment>


Big data: are we making a big mistake? - <AUTHOR> http://www.ft.com/cms/s/2/21a6e7d8-b479-11e3-a09a-00144feabdc0.html#axzz2xH3TZgd9

<comment><USER2> I think there are two things here.

First is the suspect notion that mere statistics can supplant understanding. It sort of boils down to "with enough data, correlation now equals causation."

But the second I think is AI.

I'm not sure all these systems are truly theory-free. What they are is AI creating its own body of "theory" within its own quite alien "mind." There is understanding here.

I'm not sure how to distinguish the two except to ask whether the data analysis system in question is merely correlating or whether it has induced a model -- a Bayesian model, a trained neural network, any number of other sorts of computer models that can be induced from training data.</comment>


Burger King 'O.K. Google' Ad Doesn't Seem O.K. With Google - <AUTHOR> https://www.nytimes.com/2017/04/12/business/burger-king-tv-ad-google-home.html <comment><USER3> Previous discussion [https://news.ycombinator.com/item?id=14101182](https://news.ycombinator.com/item?id=14101182)

</comment><comment><USER4> I like the fact the ad managed to show the potential unwanted side affect of such device in a manner that everyone understand. I do see the appeal of smart devices and it has to start somewhere and all such start would be painful. But with the issues of IoT, the rampant ignoring of privacy by big corp and govt. alike, the lack of understanding of potential impact by even the knowledgeable, the apathy of the masses makes it a very dangerous time for some of these innovations.

<comment><USER5> The device really should implement speaker identification before accepting commands, yeah. Seems like a task a machine learning focused company like Google really should be able to accomplish.

<comment><USER6> There exists a far simpler solution to this problem.

Just allow every buyer to give the device their own unique wake name.

<comment><USER7> But there is a reason they have the wake names they have - they're unique and don't sound like other phrases. I recall reading something about how Alexa was chosen because "ah-LECK-sah" is a very unique sound. I strongly suspect this is why we have "oh-kay Google" and not just "Google".

So if people have to choose their own, they'll have to choose one that is also not easily mistaken. Something tells me that would be a very annoying process.

<comment><USER8> I have friends who have an alexia. It wakes up to unrelated words on its own all the time. How can a company like google or amazon know what words are commonly used in a household anyway? protip: they can't.

It's not that they chose those keywords for uniqueness, they chose them for branding purposes.

<comment><USER6> Yeah and presumably to head off a million YouTube videos of people naming it dumbass, then saying "Hey dumbass what's the weather" and so on.

</comment></comment></comment></comment></comment></comment><comment><USER9> I don't live in the US and I never saw an ad for Alexa or G Home - and I have a problem understanding how can they be useful beyond a fancy gimmick. Can you seriously trust it with your pizza order even if you don't know what the menu is and what you want? Then how many times a week do you order a pizza? Maybe I it is just me being old, please educate me.

<comment><USER10> My fiance and I have just finished serving up a plate of food for dinner. We go and sit down on the couch and want to start eating, but someone has to futz around with their phone for a couple of minutes to get an episode of TV to play while their food gets cold.

After getting a home one of us can just say "Ok google, play The Next Generation from Netflix on the TV" while walking towards the couch. It plays the next episode right were we left off yesterday.

One of us gets up to go to the toilet, normally it means screwing around with the phone, and oh look, the chromecast disconnected from the phone so we have to reconnect again. It's easy to spend a whole minute just to get the damn episode to pause.

After getting a home it's just a matter of saying "Ok google, pause the TV"

<comment><USER11> _One of us gets up to go to the toilet, normally it means screwing around with the phone, and oh look, the chromecast disconnected from the phone so we have to reconnect again. It 's easy to spend a whole minute just to get the damn episode to pause._

Reality: if you have a slightly non-standard accent, you will be shouting at your device five times before anything happens. While I could just have pressed the play button on my Apple TV remote and be done with it (no fiddling with a phone necessary).

Then there are all kinds of cultural realities that are apparently not considered in Silicon Valley. My favorite five pet peeves:

(1) Our family name is 'de Kok'. Very often these assistants totally mess up when I ask e.g. to call family (either they start complaining about dirty language or literally search for 'cock').

(2) We are a multilingual family, languages used in our household are German, Dutch, and sometimes English. None of these voice assistants work with multiple languages. So, the only alternative is to choose one language and stick with it. Unfortunately, if you choose English you are having a hard time navigating in Germany, looking up a German TV program, or calling a Dutch or German friend. If you set the language to German, you forgo looking up shows on Netflix by their English titles reliably.

(3) Usability goes down the drain once you have kids. Voice assistants typically do not work well when multiple people are speaking at the same time. If you are lucky, they are just confused, if you are unlucky they start doing whatever they infer from a semi-random mix of words. You cannot tell your three year old to be quiet, because mom or dad has to tell Siri what to do. (I use Siri sometimes, and our daughter currently likes to scream 'hey siri' repeatedly when I use Siri.)

(4) Voice assistants are unusable in most environments where there are other people.

(5) Voice assistants, especially in-house voice assistants are a potential privacy violation. So, you have to ask people that visit you if they are OK with your conversations being recorded (accidentally or intentionally) and switch off the device if they do mind the latent spying.

tl;dr: voice assistants only work well in monolingual families where all of the family members have a perfect accent and where none of your acquaintances mind the privacy violations.

Edit: added some more annoyances.

Edit 2: heavy downvoting :/. Please explain why!

<comment><USER12> Exactly this. And you're getting downvoted because it works for people in their situation, so either you must be lying or you must be using it wrong.

<comment><USER13> Uh, or it just doesn't work perfectly in all situations or for all people. That's true of most products.

</comment></comment></comment></comment></comment><comment><USER14> This is genius. The best ads do their work not in the 15 seconds they play -- but in the lifetime that follows.

Well done Burger King, after all -- what good is Google if you can't stand on their shoulders, right?

</comment><comment><USER15> It is clever? Is it intrusive?

No.

It's Brazil.

[https://en.wikipedia.org/wiki/Brazil_(1985_film)](https://en.wikipedia.org/wiki/Brazil_\(1985_film\))

<comment><USER16> Which bit?

(Agreed it's all becoming a bit surreal)

</comment></comment><comment><USER17> Still waiting for a shock jock to say "ok google, show me pictures of naked kids" during the morning rush. People will die scrambling for their phones, but it will finally be the end of this silliness.

<comment><USER18> This is the example I use to show people the dangers of these kinds of devices.

Every now and then someones device activates while I'm giving the example and all the talk of, "But its so convenient!" dies pretty fast.

</comment></comment><comment><USER19> Firstly, if Google et all, allowed us as users to customise the name of our assistant. That would be appreciated by all users. Alas they do not and no sign they will either anytime soon.

Second aspect, they have no voice recognition tied in to these assistants and that would curtail all this. Though not ideal it would be a high improvement from what we have currently.

But until we have customisable names for our assistants, voice recognition, then this and much more will carry on happening.

Do you have a landline and screen calls, well somebody could ring you up and speak to your assistant currently, that is an issue still.

For me I don't see things getting any better until we have the above tied into some additional user biometrics, be that array microphone tracking that is checked with visual recognition of some form.

Though a cheap simple solution would be a watch with one button that you pressed and spoke into and that was linked to the assistant. That would not be hard and work much better.

</comment><comment><USER20> This is a clever hack, and arguably appeals to a core Burger King demographic. Whether they experienced it themselves, or just read about it. Because it'll get shared and discussed. And the next time you want a burger, maybe ...

What's evil, I believe, is that ultrasonic cross-device tracking technology. This was just cute.

<comment><USER21> This 100%. They are OBVIOUSLY using your device from a commercial in a funny way. You know about it.

But apparently what we don't know we don't care about when you tell us and we know but we can bury our heads in the sand.

</comment></comment><comment><USER22> I think it's a great move to show the general public how insanely insecure and intrusive the IoT and always-listening cloud devices can be. People brought it to light with google and with amazon - nothing changed and unaware people lapped up the devices, hopefully a demonstration thats more tangible to the general public phones home (pun intended).

</comment><comment><USER16> It seems to me Google could easily mitigate against this by fingerprinting the query. If anomalously high levels of the same fingerprint appear at the same time, ignore it.

<comment><USER23> Google did find some clever way to stop it working. The article says within hours of the commercial being reported on, it had stopped activating the device.

<comment><USER24> Easy to make an exception for that particular pattern but that doesn't stop someone else from doing this again.

The more successful a medium is the bigger the chance that it will be abused for the equivalent of spam. Burger King is acting like those two lawyers that wrote a how to spam guide ('How to make a fortune on the information superhighway').

<comment><USER16> Don't know what you mean by "that" in your comment, but fingerprinting all requests (which they probably already do) and then looking for elevated rates is surely a generalisable pattern?

<comment><USER24> Good one, the simultaneous hits should trigger a block. Hadn't thought it through.

<comment><USER16> Makes you wonder what else they could do (in theory). cf. [https://en.wikipedia.org/wiki/Gunfire_locator](https://en.wikipedia.org/wiki/Gunfire_locator)

</comment></comment></comment></comment></comment></comment><comment><USER23> I think this is totally fine by Google. "O.K. Google" would be a trade or service mark of Google, and you'd need to obtain permission in order to use this mark in an advertisement.

The way the ad depicts BK and Google "working together", to speak a favourable description of a BK product, suggests some sort of Google endorsement for BK.

Without that endorsement being approved, it's right that Google would act to stop the ad from suggesting or using an endorsement.

From my point of view, this is pretty risky for BK to do so. And either they didn't understand the risks, or they knew the repercussion would not be expensive for them, or they just decided to take the risk.

To give BK the benefit of the doubt from a strategic perspective, maybe the thinking was, "We know Google will react negatively or shut it down, but that reaction will also get coverage, and will promote talk of our ad even further. Thanks Google!" Still, I'm not marketing person, but that type of thinking, seems to me sort of like "poke the bear" for benefit, and seems quite bizarre to me. I feel it's strange if that is really how marketing people calculate.

<comment><USER25> The interesting question is if "Google" is even still a trademark of Google.

Considering many dictionaries list it as "to google: to search in the internet with a search engine, e.g. Google® or Bing®", one could argue it has become generic, and the invocation isn't actually "O.K. Google: ", but "OK, google: ", using it as imperative form of a verb.

That said, this argument is today very silly, as it relies on the letter-of- the-law interpretation, and wouldn't fly in most courts yet. In a few years, with "to google" being used more commonly, it might actually.

<comment><USER26> This is something that Google is actively working to prevent, see [https://en.wikipedia.org/wiki/Google_(verb)#Etymology](https://en.wikipedia.org/wiki/Google_\(verb\)#Etymology)

</comment></comment></comment><comment><USER27> There are radio ads running in Australia or New Zealand (I forget which) that instruct Siri to turn airplane mode on. They are PSAs about texting or dicking with your phone while driving, so I guess they're helpful, but still.

<comment><USER28> That's not helpful in the slightest, people may have passengers or be using their phone for something like GPS.

<comment><USER29> GPS would work, but maps would stop working after a while.

<comment><USER28> I guess I mean GPS in the colloquial sense. Stuff like traffic/accident/closure information would also be lost.

</comment></comment></comment></comment><comment><USER30> > "Most people don't trust advertising, and having advertisers continually > listen to what happens in our homes is scary," he said.

Well then don't buy a fucking microphone that runs 24/7 in your living room, you dolt! Play stupid games, win stupid prizes.

<comment><USER31> That doesn't seem like very useful advice.

Don't visit any of your friends who have bought it.

Don't go out in public.

Don't be a part of society.

Don't even SMS or email anyone since they might have one too.

The fight to reduce surveillance must happen even when the people who are fighting for privacy don't purchase the products that everyone else buys. If 99% of people have bought Google Home in the future, what good does it do to tell someone "hurr durr don't buy it?" No good at all.

<comment><USER32> I mean, he has a point. I'm all for fighting for privacy but what good does it do to pretend we're winning? We're losing / already lost.

<comment><USER33> Or, perhaps, that is part of the story of submission we're fed as propaganda.

</comment></comment></comment></comment><comment><USER34> Oh boy. But of course, autonomous driving AI will turn out just fine, right!

<comment><USER35> "All right _pmf_, I'm turning right!"

</comment></comment><comment><USER36> I don't know much about this, but when I set Siri up I think it does some voice recognition so that I am the only one who can control the phone.

Couldn't the same thing be done with Google and Alexa?

During installation, one could add his own voice, and then your command "Google, add this voice" would allow you to add another member of the household.

<comment><USER37> You can, although it seems to be well hidden on recent Android:

      - <USER2>
      - Languages & input
      - Keyboard and input methods > Virtual keyboard
      - Google voice typing
      - "Ok Google" detection

There are options in there to train / retrain the voice model by saying "OK Google" to it several times, and then it should respond only to you.

<comment><USER36> Yes, I would make it like a first-run thing, that you _have_ to do it during setup (like Siri).

</comment></comment></comment><comment><USER9> In my childhood I always imagined the word to active these devices will be simply "Home".

<comment><USER38> Childhood-you did not consider the indoctrination effect saying "OK <company>" multiple times a day.

\--

Sent from my someDevice.

</comment></comment><comment><USER39> [http://www.mtv.com/news/2592934/robert-downey-jr-on- burger-k...](http://www.mtv.com/news/2592934/robert-downey-jr-on-burger-king- in-iron-man-a-disgusting-lifesaver/)

汉保王 is, by contrast, wonderful

</comment><comment><USER40> Ah well, just go with Cortana then.. =)

</comment><comment><USER41> That is awesome and kinda scary

</comment><comment><USER42> I laughed. Who watches burger ads and has a Google Listening Device installed?

By the time this shit becomes useful, it will be able to recognize my voice, like any good servant. And it will not be tethered to the cloud.

<comment><USER43> No company will give up an information vacuum in a busy living space. And if a company did they would just get acquired by a company that would change the software and TOS to become an information vacuum.

<comment><USER42> What do you mean by information vacuum?

<comment><USER44> A device designed to passively harvest as much information as it can.

<comment><USER42> Ah ok. Yes it's our job to let these companies go out of business.

<comment><USER44> Interesting. Why?

<comment><USER42> Because it's an invasion of privacy.

</comment></comment></comment></comment></comment></comment></comment><comment><USER45> As soon as they can do good voice fingerprinting and add it to the device, this becomes a non-issue.

</comment><comment><USER46> I'm sure most people are okay with it.

This is a clever trick. Get over it.

</comment><comment><USER47> They could have gone for "Hey Siri", but did they study junk food consumers as Android users? [http://www.businessinsider.com/android-is-for-poor-people- ma...](http://www.businessinsider.com/android-is-for-poor-people-maps-2014-4)

It's sad that Google just deactivated the phrase. There's so much potential in playing with device-originated communications:

\- Siri and Google could work together a script to detect each other (usually setup by users who want fun) and start an actual discussion, perhaps from a movie, a comedy, etc. Bam! Movie advertising, and the surprise effect makes people share it virally.

\- TV ads-triggered events could generate a health discussion next time the person goes to Burger King, or detect friends who were triggered at exactly the same time and suggest to start a convo about this particular TV show. Would be fun if watching TV became a social experience thanks to Android or Alexa.

At that point, instead of being triggered and filtering out wrong occurrences, they could build something upon it.

<comment><USER48> Worth pointing out that the always-on `Hey Siri` on iPhones is trained and responds only to the trainer's voice.

<comment><USER49> The Norwegian submission to the Montreux comedy festival in 1983 [1] had as a plot point how one of the characters got locked out of his flat because he had a cold that changed his voice enough that it wasn't recognised by his building security system. It'll take a long time before we have all of the kinks sorted out...

[1] Happy New Century: [https://tv.nrk.no/serie/montreux/fuha00005782/30-04-1983](https://tv.nrk.no/serie/montreux/fuha00005782/30-04-1983) (in Norwegian only; it's set on New Years Eve 1999 - it's quite dated)</comment></comment></comment>


Ravens can plan for future as well as 4-year-old children can - <AUTHOR> https://www.newscientist.com/article/2140668-ravens-can-plan-for-future-as-well-as-4-year-old-children-can/ <comment><USER3> I had a pet magpie as a child and in the short time we had it it was clear it was such an intelligent creature.

Its nest had fallen from a tree in a storm - we found it a day or so later in a not great state. But within a day of feeding it was hand tame and happily came to live in the house. By the end of the summer though it learnt the skills it needed and flew off.

While it lived with us it quickly learnt the places we were happy for it to be in the house, where its 'bed' was and when we would feed it. It continually picked up small toys to play with and would delight in dropping things off the table for us to fetch and return for it.

In some ways I was so sad when it left, and as a child regretted not clipping its wings - but I'm pleased we didn't and was hopeful it went off to lead a normal magpie life ;)

<comment><USER4> That's really interesting.

As a kid I once rescued a humming bird that got tangled in a spiders web. I walked around with it for a few minutes and carefully cleaned the web off. Then suddenly after realizing it was ok. The bird was all too happy to fly off.

It must have been fun to have a bird stick around like that.

<comment><USER3> It really was - they were properly part of the family for a few months - <USER2> it used to go out and play in the garden and come back in the house when it was ready to rest or hungry - at first we locked it in a cage at night but soon we didn't, and it was very happy.

But for ages it couldn't feed itself and relied on me dropping cat food into its open beak with tweezers - I'm pretty sure it did this longer than it would in the wild. Then one day when it was playing in the garden it learnt how to catch worms and insects, and then the next day it started drinking from puddles and then the next day it just flew away.

It might have returned, but to be honest even then it would have been hard to recognise amongst other magpies - but it never tried to come in the house again, even though we left the doors open.

For a few years after (and even now to be honest) I sometimes shout 'Marilyn' when I see magpies - hoping it will recognise me ;) (we chose 'Marilyn' as I'd recently read it was historically a mans name, so I thought it was good to choose something gender neutral)

</comment></comment></comment><comment><USER5> TL;DR

Researchers trained ravens to exchange some tokens for food. Presented with a choice of 15 different objects, majority of the birds picked the food tokens and stashed them for up to 17 hours until an opportunity for exchange came again.

The author believes this passes as the pinnacle of a 4 year old's planning abilities.

<comment><USER6> I'm kind of used to New Scientist misreporting my own and others research. If someone has a link to the original study I'd be interested in taking a look.

Overall, is it really useful to compare Ravens and human children for their long term planning ability? Human children are still under the care of their parents. There's no real pressure on them to store food tokens...

<comment><USER7> I believe this is the link you're looking for (haven't read it yet, but I did verify that the full text is available):

 _A raven 's memories are for the future_

[http://science.sciencemag.org/content/357/6347/126](http://science.sciencemag.org/content/357/6347/126)

When searching, I also found this, which I missed the first time around, and it might be interesting to some:

 _Subadult ravens generally don 't transfer valuable tokens to conspecifics when there is nothing to gain for themselves_

[https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4484978/](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4484978/)

<comment><USER6> Thanks for the links. If the first link is what they're referring too, then it's a pretty dumb headline.

That article is a non-peer reviewed perspective on some recent research. To provide background they make a throw away comment about some work done in 2007 [1] and say it's kind of similar to what you see in 4 year old children (in another study).

The original researchers don't seem to have made that statement, or attempted to support it. So... par for the course for New Scientist I guess...

[1] [https://www.ncbi.nlm.nih.gov/pubmed/17314979?access_num=1731...](https://www.ncbi.nlm.nih.gov/pubmed/17314979?access_num=17314979&link_type=MED&dopt=Abstract)

</comment></comment></comment></comment><comment><USER8> General intelligence evolving independently in another distantly related species implies there is a degree of evolutionary convergence towards this trait given the right selective stimulus. This has implications for the possibility of extraterrestrial intelligence and might allow us to rule out the possibility that 'general intelligence' is an astronomically unlikely event - one of the main candidates for a 'Great Filter'.

<comment><USER9> Dawkins mentions this, or maybe indirectly acknowledges it, in _The Selfish Gene_. Organisms that can pass their ability to adapt on to fast acting nervous centers or even better: large brains, eventually gain a huge advantage.

The Great Filter on the other hand, relies on assuming the steps from evolved intelligence (now) to solar system colonization/FTL travel are not only possible, but just a matter of a few millennia or so. Which is a huge assumption.

</comment></comment><comment><USER10> I feel like one day I'm going to land on Hacker News and I'll read _Team of Ravens Beat Lee Sedol 4-1 in Latest Go Championships_

</comment><comment><USER11> I have a 3 year old who has all kinds of plans for Christmas. I seriously doubt a Raven is capable of that.

<comment><USER12> Indeed. Raven are not very much religious and don't tend to celebrate religious holidays.

<comment><USER11> Serious question (I don't know that I know any atheists): do atheists not eat ham and turkey, and give their kids presents on Christmas? I would have thought this was more cultural than religious in the USA.

<comment><USER12> Winter solstice is December 21. It makes sense to have gatherings around equinoxes and solstices since they are turning points in the year.

That being said, most atheists come from religious regions or families. They consider those holidays their heritage and celebrate them. Christmas is seen equally to, let's say, Halloween. Nobody cares about Samhain but they care about candies. Nobody cares about the birthday of Jesus but they care about receiving their family and giving them gifts.

</comment></comment></comment></comment><comment><USER13> Not a raven, but you can see a sample of bird planning in this funny video

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

</comment><comment><USER14> This is reminiscent of the Bicameral mind concept presented in Westworld. The ability to have a sense of time and plan for it and meet a goal is essential to sentience.

</comment><comment><USER15> Is that why my 4 year old keeps saying "nevermore"?

<comment><USER16> Be very concerned if the child starts hearing heartbeats from under the floorboards.

</comment></comment><comment><USER16> There was a great episode of PBS' _Nature_ on corvids' cognitive abilities and tool use:

[http://www.pbs.org/wnet/nature/ravens-discover-the- brainpowe...](http://www.pbs.org/wnet/nature/ravens-discover-the-brainpower- of-the-bird-in-black/1507/)

</comment><comment><USER17> I'll believe that when a raven starts tenaciously suggesting we go for ice cream any time we are even discussing the possibility of being anywhere close to the ice cream shop.

</comment><comment><USER18> TIL ravens are smarter than politicians and CEOs.

<comment><USER19> Ravens would have known not to take a meeting with the Russian Government attorney

</comment></comment><comment><USER20> I've seen 4-year-old's play with their food.

It's not going to go well under our new Raven Overlords.

My only hope is to taste like chicken fingers and therefore die quickly.

</comment><comment><USER21> Ravens have a concert of future? Amazing!

What if ravens just act accordingly to environmental cues instead?</comment>