Build your own old-school 3D shooter in a weekend - <AUTHOR> https://github.com/ssloy/tinyraycaster <comment><USER2> I think leaving the "old-school" out of the title doesn't do this justice.

My first thought was, with modern engines, or even raw OpenGL that isn't that hard... I did it in a weekend for my "Advanced Computer Graphics" elective in college using OpenGL and that was 2008. But this is kind of cool... it's more of a tiny ray tracer and... well to borrow the title... old-school arcade game.

<comment><USER3> > it's more of a tiny ray tracer

It's a ray caster, where the rays are sent out from the camera to intersect the map. With ray tracers, the rays are sent out from the light source, IIRC.

Your point on OpenGL is valid, but that just removes all the learning from it. OpenGL does so much of the grunt work for you. This kind of old-school game engine is a great learning experience.

<comment><USER4> > With ray tracers, the rays are sent out from the light source, IIRC.

Are there _any_ implementations which send rays from the light source(aka. forward ray tracing)? This is astoundingly inefficient, as most rays will not intersect the camera.

I've never seen one, other than in brief academic discussions. What you can use forward ray tracing for is to compute shadows.

<comment><USER5> I had considered making a ray tracer that worked that way, but with the slight difference that rays didn't have to hit the camera, but would just have to hit a point within line of sight of the camera. Obviously there would be massive gaps between pixels, but I would fill it in with a Voronoi diagram [0], or perhaps shaded with Delaunay Triangulation [1]. This renderer would be nothing more than a toy or proof-of-concept, and not intended for real usage.

The classic FOSS ray tracer, POV-Ray, can actually do this. You can define a light and define an object, and it will shoot rays from the light to the object and trace each ray through refraction and reflection. With this, you can simulate the way ripples in a pool concentrate light on the floor of the pool [2] or bending and refracting [3], without manually calculating it and adding extra light sources.

[0] [https://en.wikipedia.org/wiki/Voronoi_diagram](https://en.wikipedia.org/wiki/Voronoi_diagram)

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

[2] [http://www.antoniosiber.org/bruno_pauns_caustic_en.html](http://www.antoniosiber.org/bruno_pauns_caustic_en.html)

[3] [http://www.povray.org/documentation/view/3.6.2/424/](http://www.povray.org/documentation/view/3.6.2/424/)

<comment><USER6> Yeah, there are multiple techniques that do this sort of thing. Photon Mapping and bidirectional path tracing are on ends of the spectrum

</comment></comment></comment></comment></comment><comment><USER7> The readme mentions it but I think it's worth pointing out that this is a very particular (and quite dated) method for sort-of-3D rendering. It's the same type of engine used in the original Wolfenstein.

It's definitely a lot of fun to implement (and I recommend trying if you've never done it before) but it's very different and much more limited than what we expect from a 3D engine nowadays.

<comment><USER8> > the original Wolfenstein.

Well, the original Wolfenstein 3D, the third game in the series.

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

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

<comment><USER7> Uh, I had never heard about these games before. I always thought Id created the franchise. Thank you for that bit of videogame history.

<comment><USER8> The first two games were top-down 2D stealth games. The third was a pseudo-3D FPS. Most people picked up the series at the third installment, and the third installment is what made it into history books as the First Popular FPS, ignoring earlier FPSes which were Not Popular.

<comment><USER9> To be clear, Castle Wolfenstein and its sequel were written by Silas Warner and published by Muse Software, which went out of business in 1987 after going through Chapter 7 bankruptcy. Because the trademark was lapsed, Id was able to use the name for their game. But it wasn't a continuation of the original games, more like a reboot by another team and publisher.

</comment></comment></comment></comment></comment><comment><USER10> People are saying this is a "quite dated" method for creating a 3D game. Does anyone have a tutorial on creating a 3D game in one weekend (or even 1 day?) using modern tooling? It'd be cool to make a token 3D game with the kids. I'm curious myself.

<comment><USER11> This kind of engine is great as a starting place for programmers, I think, but Unity is probably what you want for the kind of thing you're doing. There's also Godot if you want to stay in Open Source land, but it probably isn't as good and certainly doesn't have the same level of coverage in tutorials and documentation.

Or there's the time-tested path to gamedev: modding existing games.

<comment><USER12> Serious question: what games would you fine folks recommend to get my kids started with modding? The oldest loves Minecraft, Zelda BoTW, and Smash Bros on the switch.

I've built a Raspberry Pi Retropie NES clone and they're all over super bomberman, and old school Pokémon.

The last game I modded was OpenTTD before my kids were born.

<comment><USER13> Minecraft is the easiest to mod of those by far.

</comment></comment></comment></comment><comment><USER11> I believe the sprites used in the video are taken directly from Andre LaMothe's original Tricks of the Game Programming Gurus. I still have a copy.

<comment><USER14> That was an awesome book

<comment><USER11> Only programming book I ever read cover-to-cover.

<comment><USER15> Oh yes! Good times! I still have my copy somewhere.

</comment></comment></comment></comment><comment><USER16> I need to dig up the code, but over the course of a week on the train rides to and from work, I built a very simple ray-caster in Pico-8 on the Pocket Chip. It was especially fun since I had figured out the math for it on my own (which, in fairness, isn't terribly complex with even a high-school understanding of Trigonometry).

I had enough fun with it that I think it might become my new "trying out a new programming language" test, since it was easy enough to get done quickly, but difficult enough to where I had to actually _learn_ the language.

</comment><comment><USER17> I'd kill for a dozen comments, esp. if a goal is to educate students. 498 lines would still be impressive.

<comment><USER18> It's a neat trick of projection, and really easy to hack on and extend yourself once you know the trick. Using your map of the space, cast a ray from the camera position through every column of the display rectangle; using the distance the ray travelled before intersecting the wall, you can calculate the apparent height of the wall seen in that column of the display; so, in that column, draw the wall that high. You can get fancier with textures for the walls, varying the floor height, walls that can appear and disappear (i.e. "doors"), and so on.

Better than my 10-second explanation: [https://lodev.org/cgtutor/raycasting.html](https://lodev.org/cgtutor/raycasting.html)

<comment><USER11> Note that the site has several more entries with extensions to that base raycaster, which you can find in the index.

Interesting note about this technique: you get perspective correct texturing for free. "Real" 3D rendering usually had to cope with affine texturing due to performance costs until dedicated hardware for it came along.

</comment></comment></comment><comment><USER19> Ok, now I see why the headline was changed before. Having the words "school" and "shooter" both in a headline really changes the mood.

<comment><USER20> This reaching for controversy is absurd.

</comment></comment><comment> n-gauge Here's a html / javascript version of simular:

[https://htmlgames.github.io/htmlgames/differences/gallery/in...](https://htmlgames.github.io/htmlgames/differences/gallery/index.html)

type something like lego into the search query and it renders pictures of lego in the maze as well.

</comment><comment><USER3> Wow, this reminds me of writing a very similar engine in the mid 90s after learning about ray-casting (and playing Doom of course). There was a very good book which covered the whole process called "Tricks of the Game Programming Gurus", which I would have killed for at the time!

</comment><comment><USER21> I did most of one of these on an FPGA in verilog for fun: [https://github.com/dormando/verilog- raycaster](https://github.com/dormando/verilog-raycaster) \- took a _lot_ longer than a weekend :)

</comment><comment><USER22> This is a great ray casting tutorial to get started:

[https://permadi.com/1996/05/ray-casting-tutorial-table-of- co...](https://permadi.com/1996/05/ray-casting-tutorial-table-of-contents/)

</comment><comment><USER23> I started something similar 2 years ago and I'm now actively pushing for a release date 1-2 years from now.

[https://github.com/glouw/andvaranaut](https://github.com/glouw/andvaranaut)

</comment><comment><USER24> Here is another Ray casting wold3d like tutorial : [https://github.com/permadi-com/ray- cast/tree/master/](https://github.com/permadi-com/ray-cast/tree/master/)

It has real legacy, was created in 1996! [https://permadi.com/1996/05/ray- casting-tutorial-table-of-co...](https://permadi.com/1996/05/ray-casting- tutorial-table-of-contents/)

</comment><comment><USER25> I remember writing this for my GCSE computer project in C. It didn't take me a weekend though back then. This is a Wolf3D style game. It would be interesting to illustrate the Doom engine that followed with the diagonal walls and lighting effect.

I looked at this after doing GCSe project, finding it to hard and skipping to a real 3D engine like quake because it was conceptually easier.

</comment><comment><USER26> Maybe it's old hat for everyone else, but this is my first time looking at Gitpod. (Link at the bottom of the project Readme.)

</comment><comment><USER27> There was a great 3D framework called Cocos3D that had a bunch of PowerVR tools for working with 3D mobile development.

They had an example app that was a FPS made from scratch. The HUD was there, enemies, weapons, environment.

There might be a Metal FPS base game available on GitHub, I can't remember what it was called.

</comment><comment><USER28> I've been wanting to write a raycaster, as I've never done it before. Might try doing it in a "slow" language like Ruby that I'm better at at first, and then try it in C. I kinda suck at C these days, but it would be a good transition into it again.

</comment><comment><USER29> I'm way out of practice with C++. (It's been since like 2006.) Framebuffer clear function appears to allocate a new vector.

Does std::vector automatically handle the memory releases? This is called every frame, so I wanted to check here to see if I'm crazy or not.

<comment><USER30> > Does std::vector automatically handle the memory releases?

Yes. What is going on here is that "img" is being assigned. The "old vector" will have its destructor called, which will call the destructor of all of its elements by default.

\</comment></comment><comment>-

I assume you're talking about this code: [https://github.com/ssloy/tinyraycaster/blob/master/framebuff...](https://github.com/ssloy/tinyraycaster/blob/master/framebuffer.cpp)

        void FrameBuffer::clear(const uint32_t color) {
            img = std::vector<uint32_t>(w*h, color);
        }

Which seems inefficient to me. But it is correct code, even if it is inefficient. There's no memory leak here, but the code probably would be way more efficient if it were instead a simple memset.

        memset(&img[0], color, w*h*sizeof(uint32_t));

This memset is likely easier to understand, since it doesn't rely upon destructors / constructors / assignment C++ Magic. And its more efficient to boot. Vectors are guaranteed to be contiguous in memory, which is why it is compatible with memset.

EDIT: Hmmm... the img is never initialized. You'd also have to do "img = std::vector<uint32_t>(w*h, color);" somewhere.

\</comment><comment>----

The rectangle is also inefficient.

        for (size_t i=0; i<rect_w; i++) {
            for (size_t j=0; j<rect_h; j++) {

If i and j were reversed, the draw rectangle function would be more efficient. As it is, "j" iterates in the wrong direction with regards to cache lines...

        // This would be faster!
        for (size_t j=0; j<rect_h; j++) {
            for (size_t i=0; i<rect_w; i++) {

Overall though, efficiency isn't a goal at all. Its designend to be a quickie project to get things done as soon as possible. Thinking about all of these details slows down development, so there's something to be said about "just getting it done"

<comment><USER31> Instead of doing a memset, I'd recommend using std::fill (which will likely call memset or another fast implementation behind the scenes): it makes it clear what you are doing, and preempts questions of "is this legal to do" (which it is, but only for POD data types).

<comment><USER32> I'm far more inclined toward

      img.assign(w*h, color);

myself.

<comment><USER31> Normally I choose the methods in <algorithm> because they take an ExecutionPolicy parameter, allowing me to make this code parallel if I wish, but both are valid.

</comment></comment></comment></comment><comment><USER33> that title does not sound right. could old-school be removed? I feel like "school" and "shooter" are somewhat misleading and potentially alarming together. could it be something like build your own 3d shooter game? or does this refer to first person shooter? I did not read the entire article so take it with a grain of salt.

</comment><comment><USER34> I love his "tiny" repositories. So cool.

<comment><USER35> I know right? ssloy is on fire, one of the few non-organizations I follow on Github. Does anyone else know some similar users that should get some more love?

<comment><USER36> I think this repo is nice to [https://github.com/petershirley/raytracinginoneweekend](https://github.com/petershirley/raytracinginoneweekend)

</comment></comment></comment><comment><USER37> That's really cool. I can't tell you how many times I started to make one and stopped half way...

</comment><comment><USER38> Thousands of french millenials getting hit by the nostalgia feels as they read through the README.

</comment><comment><USER39> I know there is a performance issue, but does anyone know of any resources to get a basic 3d shooter working in Python? It's just that my kids already know some Python...

</comment><comment><USER40> Had to reread that headline a couple times...

</comment><comment><USER41> i almost read that title wrong with the words School and Shooter in them

</comment><comment><USER42> While surely unintentional this headline is in incredibly poor taste.

</comment><comment><USER43> Announcement oddly timed with the anniversary of the Parkland shooting.

<comment><USER44> I hate to be morbid but it's not exactly difficult for any announcement to coincide with the anniversary of a shooting.

</comment></comment><comment><USER45> Unity give away a complete 6DOF FPS with multiplayer.

All source and assets included

[https://unity.com/fps-sample](https://unity.com/fps-sample)

<comment><USER8> Sometimes you want to make chili from scratch instead of going out to eat Peking duck.

<comment><USER46> Yeah, but the recipe isn't the same as when the conquistadores discovered America.</comment></comment></comment>


Historic non-stop flight between Australia and UK ready for take off - <AUTHOR> https://www.telegraph.co.uk/news/2018/03/24/historic-non-stop-flight-australia-uk-ready-take/ <comment><USER2> Hopefully it takes the pressure off Sydney as a hub and encourages British visitors to spend a few days in WA before heading to other destinations.

It's good to see that the Western Australian government is building a rail link. I have previously caught the bus - it is cheap but follows a slow meandering route through the suburbs.

</comment><comment><USER3> Looking at the great circle route, it's 9009 miles, taking the flight over Iran, Turkey, etc. Wouldn't want to divert to some of the areas its flying over in case of a problem.</comment>


Windows 10 Activity History Sent to Microsoft Even When Disabled - <AUTHOR> https://sensorstechforum.com/windows-10-activity-history-sent-microsoft/ <comment><USER2> Can you disable this on iOS?

</comment><comment> java-man The number of organizations that want to spy on you is astonishing.</comment>


RISC-V assembly - <AUTHOR> https://www.imperialviolet.org/2016/12/31/riscv.html <comment><USER2> TL;DR - RISC-V is an open source instruction set available from GitHub. This post is a two page summary of the instruction set.</comment>


Ask HN: How to Deal with a Coworker Practicing Resume Driven Development? - <AUTHOR> I'm working on a project with pretty significant potential impact where I work, but which is currently staffed pretty lightly. Myself and one coworker are the primary devs, with a few more working on things that are related. Overall the project has been going pretty well, if a bit slower than we'd all like, but recently I've been having some trouble. The other main dev's habit of practicing Resume Driven Development is starting to get in the way of progress.
At first it was fine, the tech choices we both wanted lined up with existing tech in the company, we pushed a bit further with some choices, but it was all generally stuff that was in use by our team already. Then slowly but surely they have been pushing the tech choices further to places that don't really make sense, but are rather just shiny things from the tech giants with use-cases that don't match what we're trying to accomplish.
Unfortunately the two levels of people up the chain of command from us are very hands-off managers, so despite the fact that my direct manager (different from his) has told him it's not a good idea, he's still gung-ho about his current foundational change of what we've been working on for months.
This is the first non-trivial project that I've "lead", so I'd like to see it completed.
Before this devolves into me ranting, I'll just ask, how have you dealt with co-workers that are more interested in playing with new shiny things they think will look good on their resume than working to complete something? <comment><USER2> In my experience people like this think in terms of tools they can use. They read an article about some shiny new thing and watch a conference talk about it and think "wow thats cool, what can I use it for?". Often times their shiny new tech will actually solve a problem, but it might be far from the best solution and it might bring a whole host of other problems.

IMO the key to reason about things like this is to ask "What problem are we solving?", clearly identify it, then brainstorm a list of potential solutions (including whatever shiny new toys this dev wants to use), then run through each solution and list the pros and cons.

Also, try not to start out hostile to the shiny new tech, let the proponent of it do all the talking, just ask questions but don't argue against it, save that for the very last minute. Otherwise it could go a bit sour if you are both clearly on opposing "teams". Finally, try asking the question "what are the downsides of this new technology?".

There was an excellent article published here in the last 6 months about developing in the "problem space" it was about exactly this kind of situation. I just wish I could find a link for it but I can't. Maybe somebody else remembers the title of this article?

</comment><comment><USER3> The question is, how did it get so far? If you are leading the project, those decisions wouldn't go by you quietly.

Generally, when making a choice, try to establish a process of evaluating technology. This requires your co-workers to bring arguments other than "it's new and shiny".

We've done this in our company for all major decisions in our tech and tooling stack and in the end, it gets buy-in from all parties (or "disagree and commit", which I quite agree with).

<comment><AUTHOR> I probably should have been clearer in the original post, but I put "lead" in quotes for a reason. We don't really have a explicit lead on the project, but I was the one who pushed for the project and handled most of the upfront system design work. It's not _my_ project, but it feels like my baby.

</comment></comment><comment><USER4> You could be direct with the coworker and call them out on their ulterior motive to pad their resume, but if you've misjudged their motive you'll look silly. If being direct is not an option, attempts to dissuade the coworker from using shiny tech overall won't work. Two suggestions --

* A more granular pushback is needed, for instance, "we shouldn't be using package X because it's not MIT license" or "the package has a higher memory footprint for what we need, have you tried package Y instead."Document these pushback arguments into a checklist to ensure your coworker has checked off before using new shiny tech.

* Convince others rather than your coworker of arguments against using shiny packages, articulated in terms of delay, extra cost, problems down the road, etc. It's an indirect approach but you won't be alone in pushing back on the coworker's scheme.

</comment><comment><USER5> I have been working with a younger colleague doing just this. Résumé driven dev. Every week in the daily meeting, he just feeds us with an unknown API that no one had ever hear of. In the first week I was impressed but over time, I discovered painfully he did not know, almost all the time, the thing he was talking about. Usually I actually tried these new API but discovered latter, whenever I blocked on a technical aspect, that he had never actually used it.This shocked me...

7 month later we do our daily meeting, but no one really cares when his turn is on and he talks about a 'wonderfull new API' that 'do the job better... because we know he doesn't know what he is talking about. His resume is a wonderfull resume, but I discovered recently he had been working in my company as... à salesman. This clicked in my head, : resume driven dev is like salesman resume : Shines allright but don't expect to deliver.

</comment><comment><USER6> Recently, I left a company where resume driven development resulted in projects being months behind, buggy, hard to work with, and over complicated.

The people who chose to use unproven tech for uses cases it wasn't designed for were obviously promoted.

I don't know if there is a good way to deal with the situation if your managers are hands-off.

</comment><comment><USER7> If you are the lead, call a meeting, explain the tech stack that will be used, explain that their performance will be judged based on meeting deadlines using said tech stack, summarize this meeting in an email to your leadership, in this email explain meeting deadlines depends on using the tried and true tech stack you chose. If they refuse or come up with some contrived reasons why your plan won't work, methodically and politically knock those reasons down, institute daily stand up meeting where they have to explain progress or blocking issues. If employee misses deadlines they go on probation and then get fired. If management does not support you, find a new job then give your notice.

<comment><USER8> Please tell us how that is helping retention at your company.

<comment><USER9> At some point at every company they pick a stack and go with it.

</comment></comment></comment><comment><USER10> The only thing we have is job skill management while working for others. Careers have become just that. And the shiny tech goes well on resumes, and the managers probably don't mind it if he's been allowed to put thousands of dollars of company resources to do it. Odds are that the management wants to sell it as being based on the cool new tech to help justify the project, aka we couldn't accomplish this with old tools, or we're staying up with the ecosystem. The point is that there are a lot of decisions that don't propagate down the chain.

</comment><comment><USER11> Yep, I've seen it before, its part of "short timers syndrome".

Frankly I've built some tools with weird thing (a lolcode CGI was the oddest) but when you're doing something orthogonal to what your team is working on its counterproductive for everyone. The team or project manager should have a chat with that person. If they don't fix the problem, you should probably find a new gig or ask for a transfer.

</comment><comment><USER12> It sounds like you do not believe you can stop it.

Given that, try to limit the damage.

Allow them to do 1 day a week on shiny but must do the rest on mainline.</comment>


Google said to be working on a tablet with Project Tango 3D vision - <AUTHOR> http://techcrunch.com/2014/05/23/google-said-to-be-working-on-a-tablet-with-project-tango-3d-vision-powers/

<comment><USER2> This was announced earlier when they opened public requests to test the device [https://www.google.com/atap/projecttango/](https://www.google.com/atap/projecttango/)

<comment><USER3> > 7-inch screen

Sounds like it might be similar to the Nexus 7 form factor, and slightly larger than the device you've linked to.

<comment><USER4> Also a larger production number. I didn't see it on the page but I think the phone version was limited to 200 or less or something.

</comment></comment></comment><comment><USER5> Another application of Project Tango, Quadcopter + Project Tango phone for autonomous flight accurate to 1cm

[http://spectrum.ieee.org/automaton/robotics/aerial- robots/au...](http://spectrum.ieee.org/automaton/robotics/aerial- robots/autonomous-quadrotor-flight-based-on-google-project-tango)

<comment><USER6> That's the first good use for this tech I've seen, and yet a hilarious demonstration why said tech shouldn't be stuffed in a phone.

</comment></comment><comment><USER7> How does Google's Project Tango work anyway?

It's not LIDAR, nor Stereo-camera or Kinect 1 tech (infrared laser combined with a monochrome CMOS).

Does it use time-of-flight camera (like Kinect 2) or structure-from-motion (like MS Photosynth, ETH Zurich app)?

Tango uses this special processor (so structure-from-motion could be possible, as well as time-of-flight):

      It produces over 1 teraflop of processing power on only
      a few hundred milliwatts of power

\-- [http://techcrunch.com/2014/02/20/inside-the- revolutionary-3d...](http://techcrunch.com/2014/02/20/inside-the- revolutionary-3d-vision-chip-at-the-heart-of-googles-project-tango-phone/)

The Wikipedia article is still a stub: [http://en.wikipedia.org/wiki/Project_Tango](http://en.wikipedia.org/wiki/Project_Tango)

<comment><USER8> From the iFixit teardown: [http://www.ifixit.com/Teardown/Project+Tango+Teardown/23835](http://www.ifixit.com/Teardown/Project+Tango+Teardown/23835)

Tango has a Primesense structured light system, a structure-from-motion coprocessor (or two) and a special depth sensing rear camera (IIRC).

<comment><USER9> Hehe, google threw everything and a kitchen sink in there to cover all the bases. Even Primesense ")

Looks like Movidius started out as a mobile GPU in 2005/2008 :o ... and ended up being general purpose vector coprocessor / DSP

[http://www.hotchips.org/wp- content/uploads/hc_archives/hc23/...](http://www.hotchips.org/wp- content/uploads/hc_archives/hc23/HC23.19.8-Video/HC23.19.811-1TOPS-Media- Moloney-Movidius.pdf)

50Gflops/W in 65nm. Adapteva Epiphany [http://www.parallella.org](http://www.parallella.org) did 25 at 65nm, does 70Gflops/W in 28nm. Movidius projected 450Gflops/W at 28nm :o

<comment><USER10> With that great spec, why did google release tango with limited functionally, and not as a full blown processor ? And is it their next step ?

<comment><USER11> Full blown processors lead to full blown maintenance needs.

<comment><USER9> Im sure cost is also a big factor. Endgame is a small VERY CHEAP design that can be integrated with CMOS camera silicon.

Just like FLIR. They started with big expensive uncooled bolometers that required analog amplification (+1 chip), digitization (+1 chip) and processing (+1 more chip), and ended up producing all in one Lepton chip that interfaces using MIPI like every cellphone camera. They went from sensor + 2 analog chips + fpga to one small piece of silicon.

After all Google wants every android phone of the future to be able to do this. This means making every manufacturer buy additional hardware. It needs to be cheap and easy to use.

In the end Tango will probably be a licensed core that camera manufacturers can integrate into their own designs. One camera that does vision _and_ maps environment on the side.

</comment></comment></comment></comment></comment></comment><comment><USER12> based on my participation at a Tango hackathon (details on the hackathon and the projects [http://palcu.blogspot.ro/2014/04/google-project-tango- hackat...](http://palcu.blogspot.ro/2014/04/google-project-tango-hackathon- in.html) and source code [https://github.com/sketchdown/sketchdown](https://github.com/sketchdown/sketchdown)) I think they need more space and power for the hardware</comment>


Bose headphones have been spying on customers, lawsuit claims - <AUTHOR> http://www.theage.com.au/technology/consumer-security/bose-headphones-have-been-spying-on-customers-lawsuit-claims-20170419-gvo8pq.html <comment><USER2> _" And he download the Bose Connect app, which the company said would make the headphones more useful by adding functions such as the ability to customise the level of noise cancellation in the headphones."_

I was thinking ^how^ Bose could collect info. A ^connect app^. Is software really required for a piece of hardware like headphones. This is why the head jack rules. No need for interaction with software.

<comment><USER3> The app isn't required to use the headphones

<comment><USER4> It is if you want firmware updates for your headphone.

</comment></comment></comment><comment><USER5> Previous discussion: [https://news.ycombinator.com/item?id=14148145](https://news.ycombinator.com/item?id=14148145)</comment>


IO evaluates the Haskell heap : in pictures - <AUTHOR> http://blog.ezyang.com/2011/04/io-evaluates-the-haskell-heap/

<comment><USER2> As someone who is relatively familiar with evaluation in Haskell I'm enjoying this series, but if I didn't already understand most of it I doubt I would get anything out of it. Real World Haskell has a more concrete chapter on profiling: [http://book.realworldhaskell.org/read/profiling-and- optimiza...](http://book.realworldhaskell.org/read/profiling-and- optimization.html). The Haskell wikibook also has a fairly comprehensive chapter on laziness: <http://en.wikibooks.org/wiki/Haskell/Laziness>.

<comment><USER3> It's an interesting charge. Here's my personal experience with the two cited resources, back when I was learning Haskell. YMMV.

RWH's "Here's how you get the job done" style exposition did a reasonably good job of making me feel comfortable turning on profiling of my Haskell programs, but didn't give me much sense at all of why the particular examples they chose were particularly representative of space leaks. I went on to do some amount of performance tuning of some data structures [http://blog.ezyang.com/2010/03/the-case-of-the-hash-array- ma...](http://blog.ezyang.com/2010/03/the-case-of-the-hash-array-mapped-trie/) ... but I still managed to miss some really obvious performance bugs that Tibell caught later when he revamped my benchmarks [http://blog.johantibell.com/2011/03/video-of-my-hashing- base...](http://blog.johantibell.com/2011/03/video-of-my-hashing-based- containers.html) . I just didn't know where to look! All I had were a bunch of patterns: "watch out for lazy folds", "using bang patterns can be a good thing", without any particular mental model of how to deduce these things from just looking at code.

To be honest about the Wikibooks article... I found it hard to read. (Which is terrible, since it's a wiki, and if I don't like it, I should improve the article...) Exactly why is hard to pinpoint. It might be statements like "Haskell values are highly layered"; it might be the fact that none of the examples are in motion (they don't show before-and-after; the actual operation of the program!); it might be that in many respects, its coverage is incomplete.

Obviously, this series isn't going to be the be-all, end-all reference for laziness. While it would be extremely gratifying to see other people take up the ghosts and presents metaphor, I'll be content if people walk away with a sort of visceral feeling about all the churning that goes on under the hood when they write a functional program, so that it's _not_ surprising when a trace statement shows up much later than you expect it and so that it's _not_ a matter of trial-and-error inserting bang-fields and seqs.

<comment><USER2> Really, my reason for saying I wouldn't learn anything is because I personally learn better from concrete examples. That's why I like the RWH chapter. It gives you knowledge of how GHC represents your program, and helps you use that to change your program accordingly. Perhaps I should have reserved my criticism for the end of the series. Hopefully you will show us how to apply your model to our real programs. For instance, I think it would be neat to have a simple example of, say, folding a list. Show us what happens when we make a field strict. Show why `True || undefined` doesn't blow up. Just some suggestions.

I agree with you on the wikibooks article. I included it so someone reading my comment would have a place to go for the rest of the story that RWH doesn't talk about.

(By the way you might want to reformat your links, HN seems to have misinterpreted them.)

<comment><USER3> Good suggestions, and I hope to do them.

</comment></comment></comment></comment><comment><USER4> I think the section of the Wizard book (SICP) on streams may also prove helpful to those trying to gain a deeper understanding of lazy evaluation.

[http://mitpress.mit.edu/sicp/full-text/book/book- Z-H-24.html...](http://mitpress.mit.edu/sicp/full-text/book/book- Z-H-24.html#%_sec_3.5)</comment>


Technology = Salvation: An Interview with Peter Thiel - <AUTHOR> http://online.wsj.com/article/SB10001424052748704696304575537882643165738.html?mod=googlenews_wsj

<comment><USER2> This piece is amazing. It masquerades as a critique of science, but at bottom I would argue it is really just a very complicated smokescreen for Obama- hating and anti-Keynesianism. I bet this guy Thiel just wants lower taxes.

Thiel admits that we could print money without fear if our future looked brighter. And the 20th century saw such amazing progress that we did just that successfully. But he says that things are different now. We cannot print money because growth will not support it unless we get sentient robots and nanotech red blood cells, FAST! We better support the Republicans because at least they talk tough and hate Keynes, but it doesn't matter who we support because shit will hit the fan anyway.

But really, how much has technology failed us? Of course we must agree that the Jetson's world is not yet manifest. But the hardest problems that humanity faces are not technological. If anything, the 20th century's lesson was not that we need to get deeper into tech faster, it is that we need to approach the problems in a different way. We built airplanes as soon as we could, and Hitler turned them into blitzkreig. Einstein and Bohr pushed the limits of physics and we built A-bombs. Tesla gave us AC and Radio; and we built coal power plants to power Air Conditioned McDonalds advertised on TV via mass media.

The reason we don't have undersea cities is not because we cannot build them. I believe that we have the technology. But if 100 rich people could live forever in an undersea bubble powered by green nanotech, would it really change the global situation? The real technological problem is bringing the billions of people who eke out a stone-age existence in tribal towns all over Asia and Africa into the modern world. And we are making progress every day at an accelerating rate. Tell Google that AI is a pipe dream. Urbanization, digitalization, communication; these are the things that are accelerating like electrons and oil were 100 years ago. Don't give up on Keynes just yet, HN. Of course it will not be easy for our species to survive another 100 years. But let's not give up on ourselves either.

<comment><USER3> "This piece is amazing. It masquerades as a critique of science, but at bottom I would argue it is really just a very complicated smokescreen for Obama- hating and anti-Keynesianism. I bet this guy Thiel just wants lower taxes."

I personally discussed this topic with Peter in that same cafe several weeks ago, and I find that hard to believe. He didn't seem interested in discussing near-term politics at all, or near-term stuff in general. What's your evidence?

"We built airplanes as soon as we could, and Hitler turned them into blitzkreig."

If the airplane had been built fifty years later, is there some reason that it would _not_ have been used to wage war more efficiently?

"But if 100 rich people could live forever in an undersea bubble powered by green nanotech, would it really change the global situation?"

Yes, because the technology that would need to be developed for that to happen would benefit everyone else.

"The real technological problem is bringing the billions of people who eke out a stone-age existence in tribal towns all over Asia and Africa into the modern world."

That's not a technological problem, it's a political problem. The example of China shows that a well-run country is perfectly capable of starting out from ancient-world level and catching up to the industrialized West within fifty years or so; there are no big technological barriers, just political ones.

<comment><USER2> I bet that Peter pretends not to care about taxes. But that is really besides the point. All I am trying to say is that tech is hardly failing us in the drastic way Peter supposes it is.

My point is not to delay the invention of airplanes, but to focus on the political problems first. Technology and politics are connected - that is Keynesianism is all about and that is what Peter, and you (it seems), fail to understand. The problem with medicare and social security, for example, is not "too few robots" but actually probably too many MRIs and prescription drugs. Not that we shouldn't have MRIs.

The political barriers are the hardest ones to jump over, because acts of individual genius are rarely meaningful in a political context. And try mass- producing smartphones (or solar panels) in a world where China and India are regressing towards chaos.

</comment></comment></comment><comment><USER4> Free access to the full version through Google News:

[http://news.google.com/news/search?q=%22Technology+%3D+Salva...](http://news.google.com/news/search?q=%22Technology+%3D+Salvation%22)

<comment><USER5> Full readable text here: [http://viewtext.org/article?url=http://online.wsj.com/articl...](http://viewtext.org/article?url=http://online.wsj.com/article/SB10001424052748704696304575537882643165738.html?mod=googlenews_wsj)

</comment></comment><comment><USER6> Sigh, he almost has the answer, but he is too limited by his set political believes to actually see it.

Lack of technology is not the problem, the problem is lack of demand, and there is lack of demand because most people are poor. That's pretty much it. Once there is demand the technology will catch up pretty quickly.

For example, when after WWII middle class americans ended up with money (either from their pay as soldiers, or due to the higher salaries during the war time labor shortages), the US economy and technology grew very quickly to acomodate every single desire they might have, cars, houses, highways, boats, every consumer product you may think of, etc. were built in enormous quantities.

But now the middle class is relatively poor and at their best hope is to stay at the same level. So their spending decreases or stays the same. And the economy suffers.

Why aren't there household robots? Because people are too poor. The middle class american is too poor to afford a complex piece of robotics, and also there is a bunch of even poorer people that will do your housework for cheap. So why would anybody invest in a complex expensive Jetson's like household robot?

Take Hacker News for example, full of innovative people but most of them are working hard trying to figure out how to make money from a free product. Why? Because the average American does not have much money to spend.

So IMO, Thiel is in denial when he blames lack of technological know-how and advances for the economic woes.

<comment><USER7> First of all, there _are_ robots that will vacuum/scrub your floors, clean your pool, and clear you gutter (<http://store.irobot.com>).

It's the not the Jetsons, but when I think about how complex other household chores can be (from an AI perspective), Thiel's theory makes more sense than yours. Are there even commercial/industrial robots advanced enough to collect, sort, wash, dry, fold and put away my family's laundry?

You say the middle class is relatively poor– _relative to what?_

I didn't know there was huge demand for self-driving cars–and it's cheaper to ride the bus–but Google is working on the technology.

</comment></comment><comment><USER8> "The great exception is information technology, whose rapid advance is no fluke: "So far computers and the Internet have been the one sector immune from excessive regulation."

-so true, and let's hope we can keep it that way.

<comment><USER9> Can you imagine if government had tried to pick winning information technologies the way its now trying to do with electric cars?

Yep, its all over transportation. And you can see from the daily block long backup in front of Apple's global headquarters of cars waiting to get on the clogged highway 280 that innovative entrepreneurs aren't allowed to fix it.

<comment><USER10> _Can you imagine if government had tried to pick winning information technologies the way its now trying to do with electric cars?_

For a real-world example see South Korea, where until just a few months ago government regulations mandated the use of IE for all commerce: [http://www.electronista.com/articles/10/07/01/korea.no.longe...](http://www.electronista.com/articles/10/07/01/korea.no.longer.requires.activex.for.online.sales/)

<comment><USER9> wow, that's whacked. And that was in place for over 10 years.

And the reason was so you could have ActiveX verifying your identity. Yeah, bet ya Microsoft worked real hard getting the latest and greatest browser out for that market.

</comment></comment></comment></comment><comment><USER11> Thiel also invested in a seasteading initiative to build sovereign offshore floating colonies. Maybe its his technological answer to the housing bubble, as well as a libertarian Shangri-La.

[http://reason.com/archives/2008/04/28/homesteading-on-the- hi...](http://reason.com/archives/2008/04/28/homesteading-on-the-high-seas) [http://www.wired.com/science/planetearth/news/2008/05/seaste...](http://www.wired.com/science/planetearth/news/2008/05/seasteading)

</comment><comment><USER12> >"libertarians seem incapable of winning elections. . . . There are a lot of people you can't sell libertarian politics to."

As soon as I see a Libertarian candidate on the ballot who believes in climate change, they'll have my vote in a heartbeat.

</comment><comment><USER13> I think technological progress has slowed down dramatically. in 60 years we went from the first plane to landing on the moon. We haven't been back to the moon since. The invention of electricity, atomic theory, radio, the internal combustion engine were all far more world changing inventions than anything we've developed over the last 60 years, including the Internet. For instance, we are desperately trying to keep Iran from getting hold of 60 year old technology (uranium refining)!

I love studying the period in history between the franco-prussian war and World War II (1871-1940). The speed at which technology snuck up on the world and completely changed it was astonishing.

<comment><USER14> I tend to actually think that the period during and immediately after World War 2 saw an even greater increase in terms of technology. Think about this, for example:

In 1940, the US army air force's best fighter plane was probably the P-40: a piston-driven, straight-wing, propeller-driven aircraft that had a top speed of 360mph.

A mere 20 years later they were using the F-106 Delta Dart, a jet-powered, delta wing aircraft that had a top speed of 1,525mph (Mach 2.3)...

</comment></comment><comment><USER15> When is his book coming out? This idea of technological stagnation really rings true to me.

</comment><comment><USER16> "The West, he says, needs to do "new things." Innovation, he says, comes from a "frontier" culture, a culture of "exceptionalism," where "people expect to do exceptional things"—in our world, still an almost uniquely American characteristic, and one we're losing."

Ok, the article lost me there. I really can't connect with that way of thinking.

</comment><comment><USER17> _Except for computers and the Internet, the idea that we're experiencing rapid technological progress is a myth._

First, even if this were true, that's a gigantic _except_. By comparison, one would probably not talk about the mid-1400's being a time of little progress, _except_ for the development of the printing press.

Second, the U.S. GDP has been roughly doubling every 20 years since at least 1890 (source: <http://norvig.com/speech.html>), and I doubt such a longstanding trajectory is going to change anytime soon, Thiel's pessimism notwithstanding.

</comment><comment><USER18> Theoretically speaking, in a future where the world runs itself and all notions of "scarcity" are eliminated by energy, technological, and agricultural abundance, what need would there be for capitalism, let alone money?

<comment><USER19> There wouldn't be, that's why technological progress is always hampered by politics.

And if the economical system would be a pure capitalism, we'd get there anyway, but unfortunately people feel the need for government regulation, which produces more scarcity and monopolies, ultimately hurting innovation (e.g. DMCA, DRM, patents, or my recent favorite, Net neutrality).

</comment></comment><comment><USER20> It's a pretty bizarre claim. How can anyone credibly claim that the housing bubble had anything to do with _science_? But I can see why the Wall Street Journal editors like this guy.

<comment><USER21> You're misreading.

You see, people are betting that technological progress will take of everything. You can keep inflating and there will still be price deflation. Unfortunately, that's a rather naive notion.

Technological progress are not guaranteed. You have to work at it to ensure that technological progress outpace the bad behaviors of politicians.

<comment><USER10> Right. Moore's Law vs Medicare: [http://www.ideasinactiontv.com/tcs_daily/2003/07/the- great-r...](http://www.ideasinactiontv.com/tcs_daily/2003/07/the-great- race.html)

It's clear that neither party in the US has the slightest interest in fiscal responsibility, not as long as it's a winning strategy to buy votes with tax cuts and free benefits. The only way I see to avoid the coming demographic and financial time bomb is massive economic growth, e.g. one or more of AI/robotics (replace most human labor), nanotech (make material goods much cheaper), and biotech (cure aging, radically reducing medical expenses and increasing productivity).

</comment></comment></comment><comment><USER15> Is there a full version for free? It looks like an interesting read.

<comment><USER22> Usually you can access full WSJ articles through Google News.

<comment><USER23> also through search, top result for [thiel wsj]</comment></comment></comment>


Abstract Algebra for Programmers: The String Monoid - <AUTHOR> http://www.elegantcoding.com/2011/05/monoid-for-masses.html

<comment><USER2> Nice! You'd probably like my series of posts (named similarly): [http://poincare101.blogspot.com/2012/01/hi-hopefully-you- rea...](http://poincare101.blogspot.com/2012/01/hi-hopefully-you-read-last- post-and-if.html)

</comment><comment><USER3> Are there really programmers that get pangs of fear at the bought of middle school algebra?

<comment><USER4> I guess the middle school part is a bit of hyperbole.

That said, I have noticed a lot of programmers do dislike math they don't know (it's impossible to dislike math outright, since in a way or the other a lot of programming involves some kind of math) or otherwise downplay the importance of math and theoretical computer science for programming.

For instance, look at the job interview threads on the HN front page right now: apparently a lot of programmers _really_ dislike the idea of asking/being asked to implement Pascal's Triangle in a job interview (given the definition!) or otherwise claim it has nothing to do with "real world" programming.</comment></comment>


YouTube CEO: Politicians can break our content rules - <AUTHOR> https://www.politico.com/story/2019/09/25/youtube-ceo-politicians-break-content-rules-1510919 <comment><USER2> In other YT news you cant say "shit" anymore [https://www.youtube.com/watch?v=bHvkEPL7mVA](https://www.youtube.com/watch?v=bHvkEPL7mVA)</comment>


Let's stop pretending we love our jobs - <AUTHOR> https://unherd.com/2020/05/can-we-stop-pretending-we-love-our-jobs-now/ <comment><USER2> I like my job (content writing)</comment>


Peculiar human sex differences - <AUTHOR> http://www.rationaloptimist.com/blog/peculiar-human-sex-differences

<comment><USER2> "Women generally go out in groups and search for good sources of roots, ripe berries or nuts, which they use their acute powers of observation to spot and collect. Without knowing it, [...] shoe retailers are setting up a sort of ersatz echo of the gathering field."

I'm a big fan of ev-psych, but this argument sucks. You could name dozens of counter-examples of "spot and collect" activities that are not only gender- neutral (e.g., buying music or DVDs) but also heavily male-dominated (trading cards, comic books, coins, stamps, electronics). There are even collection- simulating video games like Pokemon, which is pretty clearly a young male demographic.

There's obviously some non-random structure to what it is that men and women choose to hoard, but to suggest that evaluating and gathering in general is a female-specific adaptation is just silly.

<comment><USER3> Agreed; this sounded very post-hoc to me. The point about golf throwing back to projectile-hunting seems off to me, too. If anything, I would think we're wired for exhaustion-hunting... that is, running after prey until they collapse from exhaustion. That seems to be what we're good at, right?

<comment><USER2> Regardless of their relevance to golfing, hunter-gatherers do use spears and projectile rocks extensively for hunting. They're ubiquitous among modern hunter-gatherers, and archaeologists have uncovered wooden spears from over 400K years ago. For scale, agriculture didn't become important until 10K years ago. This is _much_ more than enough time for humans to develop complex functional adaptations specifically related to projectile weapons.

</comment></comment></comment><comment><USER4> Evolutionary psychology can sometimes provide useful insights, but "women like shoe shopping because it is similar to foraging" and "men like golf because it is similar to hunting" is weaker and hand-wavier than usual.

<comment><USER5> I have had my fair share of orgasmic fits inside boot shops.

Tony Lama was my crack-dealer until I found out they're now a Berkshire Hathaway company. No kidding. Buffet bought a family boot company.

<http://www.tonylama.com/en/guys_boots.html>

</comment></comment><comment><USER6> Weird graphic design point: the way each blue paragraph is separated by a strip of white makes each paragraph look like an entirely separate point, and destroys the flow of the writing. Usually Matt Ridley is one of my favourite writers, but this was painful to read.

</comment><comment><USER7> "It was only reinforced when the invention of the placenta and the mammary gland gave male mammals a gigantic prize to compete for: nine months and several years of somebody else's bodily efforts."

There are plenty of species, humans included, where male parental investment, over the life of the child, is comparable with that of the female. The average human child receives significant investments of time and effort from his or her father, not only in the form of playing catch and going on trips, but also because that father will spend a good portion of his working week earning resources to be used for the child's benefit. And weigh that with the fact that, until recently, it was even impossible for the man to know for sure that the child was his.

</comment><comment><AUTHOR> The Facebook friend who told me about this link is a tall woman. She says that when a woman is shopping for size 11 shoes, it's more of a hunt than a gather.

</comment><comment><USER8> How about the toilet seat up/down difference?

<comment><USER9> Oh come on, that one's at least obvious. It comes down to laziness.

Both sexes take a pee more often than they take a dump; but while women do both activities the same way (sitting), men do them differently. So for women, it takes more sense to keep the seat down, so it's ready for them the next time; for men, up is a more practical position, as they need to sit only a fraction of times.</comment></comment>


Co-founders out at S.F. payment startup Revel as investors take over - <AUTHOR> http://www.bizjournals.com/sanfrancisco/news/2017/02/06/investors-take-over-payment-startup-revel.html <comment><USER2> start a company only to have vulture capital take you out of the company you sweated and bled for with a huge chunk of your life?

please tell me how this predatory behavior remotely aligns with an entrepreneur's interests.

<comment><USER3>
        1. it's PE, not VC
        2. looks more like an exit for the founders</comment></comment>


Margaret the Dragon Slayer - <AUTHOR> https://www.lrb.co.uk/blog/2019/april/margaret-the-dragon-slayer <comment><USER2> Stories are what the world is made of. They shape how we think. They determine what is "common sense" to us.

Change the stories, and you change the reality that we live in.

<comment><USER3> They change the reality we think we live in. The school of hard knocks separates the ones who believe in viable world models from those who don't.

</comment></comment><comment><USER4> How did Pope Gelasius label her apocryphal when she was born many centuries later? Something seems wrong with this story.

<comment><USER5> I think 'life' in "In an 11th-century English life of Saint Margaret" means a chronicle.

If she existed it was in the 3rd century.</comment></comment>


William Byrd on "The Most Beautiful Program Ever Written" (2017) [video] - <AUTHOR> https://www.youtube.com/watch?v=OyfBQmvr2Hc <comment><USER2> Alan Kay said :-

      (SF) If nothing else, Lisp was carefully defined in terms of Lisp.

      (AK) Yes, that was the big revelation to me when I was in
      graduate school—when I finally understood that the half
      page of code on the bottom of page 13 of the Lisp 1.5
      manual was Lisp in itself. These were "Maxwell's
      Equations of Software!" This is the whole world of
      programming in a few lines that I can put my hand over.

[https://queue.acm.org/detail.cfm?id=1039523](https://queue.acm.org/detail.cfm?id=1039523)

<comment><USER3> Preformatted text on HN is really hard to read on mobile. Reformatted:

 _(SF) If nothing else, Lisp was carefully defined in terms of Lisp._

 _(AK) Yes, that was the big revelation to me when I was in graduate school—when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself. These were "Maxwell's Equations of Software!" This is the whole world of programming in a few lines that I can put my hand over._

Page 13 of that manual is page 21 of this PDF: [http://www.softwarepreservation.org/projects/LISP/book/LISP%...](http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf)

</comment></comment><comment><USER4> At great risk of being downvoted to oblivion (before you pile on, check your motives), this struck me on first encounter, 30 years ago, and ever more strongly since, as the most self-indulgent of all programs. People impressed by it invariably appear, primarily, pleased with themselves for the depth of perception they demonstrate by being impressed with it.

Comparing it to Maxwell's equations sharpens this. The equations are deeply illuminative of fundametal processes of reality, summarizing comprehensively and precisely decades of exacting experimentation by the best physicists of the age. The speed of light (in vacuum, and in any medium) is simply derived from them. No detail of them could be deduced without abstraction from all the experience of all who came before.

How much work went into this program? Would any two people, who just knew Lisp, but no theory of computation, asked to write it, write it differently? How long could it take? An hour, a week, a month? How much insight would it take? How much lived experience does it represent?

Think it through: A Lisp interpreter in Lisp. It demonstrates that, if you are handed a Lisp runtime, as we are today, it is easy to make it execute Lisp programs. With small changes, it runs slightly different programs.

Should that impress us? Where did this Lisp runtime come from, and why would one expect it to be tuned for anything but running Lisp programs? If it were not good for running Lisp programs, what would it be good for?

The program relies, fundamentally, on all the science (and, frankly, engineering) that came before, but illuminates none of it. It is a fleck of foam that rides determinedly at the surface, belying the depths that support it. It illuminates nothing beyond itself.

<comment><USER5> > _Where did this Lisp runtime come from, and why would one expect it to be > tuned for anything but running Lisp programs?_

In this case, it's running a program which very itself easily runs Lisp programs given to it as a source code data structure. That we normally don't expect. For instance, in C language run-time, though it of course supports running compiled C programs, it doesn't provide a straightforward way for one of these programs to itself process C programs. A C program that interprets a decent subset of C is pretty complicated. It has to provide a number of data structures, of course a parser (because C programs don't have a data structural representation) and memory management for the parse time and run- time and so on. The C-processing C program can't even ask for a function by name so that it could resolve a function call out to the native run-time. This is possible with some operating system extensions (dynamic symbols). That just solves the name resolution problem: then there is the problem of dynamically constructing the argument list for a function call and executing it. This requires a library not supplied in the C language such as GNU ffcall, or libffi. Think about it: a C interpreter for C needs to use a FFI mechanism (first F == foreign!) to expose the C run time to the interpreted C, and that FFI is far from a standard language feature. Lisp just resolves a symbol and calls _apply_ and that's it; nothing is foreign: no visas have to be issued, no passports are stamped.

<comment><USER4> C is an interesting contrast. There is no "C runtime". There is just the target machine. A C interpreter in C has no advantage over one in any other language, because every detail of the source language of the interpreter is washed away in compilation, along with the compiler.

In Lisp, everything is still there. "Resolves a symbol" relies on the runtime. "Calls apply" relies on the runtime. You don't need to write those, because you inherited them.

<comment><USER5> In fact, in a hosted conforming implementation of ISO C, there is a considerable run-time, but it doesn't have anything useful in it for building a low-effort C interpreter.

 _apply_ is just a function in Lisp. The host Lisp itself doesn't (necessarily) use _apply_ for calling functions. When an expression like _(cons a b)_ in the host Lisp is processed, it's quite likely compiled into machine code or byte code that doesn't use _apply_.

The hosted interpreter uses _apply_ because it operates at the host Lisp's run-time; with respect to that host, it's handling function calls by dynamically constructing lists of evaluated arguments and then having to solve the problem of applying a list of arguments to a function.

A C run-time could provide _apply_. Libraries exist for this like GNU ffcall, and libffi. They are low-level, hard to use and error-prone compared to _apply_.

A C run-time can provide a way to get the addresses of functions also; we can do this in modern POSIX environments with dlsym, in Win32 with GetProcAddress and such.

If we put together libffi and dlsym to call a function, and make the slightest mistake, we have corruption or a crash on our hands. Whereas _apply_ is robust; we get diagnostics about too many or too few arguments and so on.

If ISO C provided these features, then we could have ISO C "C-in-C" meta- circular interpreters. They would contain a significant lines-of-code expenditure compared to Lisp-in-Lisp.

</comment></comment></comment></comment><comment><USER5> Lisp in Lisp interpreters actually have a marginal practical use. Suppose you've boostrapped a Lisp in some other language (assembly, C or whatever). You have an interpreter in that language, and have written a compiler for that Lisp in itself (say for a VM in that other language). You can now write an interpreter for that Lisp in itself. Once that interpreter behaves exactly like the original one in the other language, you can throw that one away. Bootstrapping can proceed by shipping the interpreter in compiled form. The benefit is that there is less language-processing code written in the other language.

You could just throw the interpreter away and have a compiler only (bootstrapped with the compiled version of itself), but then it's useful to have two models of execution for programs.

<comment><USER6> This is how we got the first working Lisp implementations. John McCarthy specified Lisp in itself, and a graduate student translated it into IBM 704 assembly.

</comment></comment><comment><USER7> ...Namely, an interpreter for lisp written in lisp. William Byrd learned about it from Daniel P. Friedman (The Little Lisper, The Little Schemer, ....)</comment>


CI service that keeps the server "warm"? My tests runs in 7 seconds - <AUTHOR> My CI runs in about 9 minutes.
8m 45s of that is setting up the server, and compiling Erlang and Assets, etc.
The actual tests run in 7 to 12 seconds.
Is there are any SaaS CI product that keeps a server "warm" for me, to avoid all that overhead? <comment><USER2> Check out Buildkite. You manage a vm and run their agent, their website is to view and manage builds and so forth.</comment>


Jquery or mootools? - <AUTHOR>

<comment><USER2> I tried to ditch jQuery a couple of times, but always coming back. The reasons I dislike it:

        * Stupid API.
        * Stupid API changes.
        * Stupid API documentation.
        * Plugins are minefield.

The recent standardization of event handler attachments (see `.on`) is a lot saner than it used to be, but I believe it is still not there where it should be. (I don't know that place, otherwise I'd have written my own library.)

However, the jQuery ecosystem is hard to leave because

        * Monopoly in terms of plugins,
        * Already cached everywhere (from Google CDN),
        * Solves all cross-platform issues.

There are a few other bits like the culture of short commands because of chained functions, but I personally find that a very minor detail.

I also happen to like the author's ongoing experiments with performance improvements.

</comment><comment><USER3> MooTools makes more sense to me when you actually compare the two apis. If you're a JavaScript fan, MooTools is truer to the language.

Check out <http://jqueryvsmootools.com>

</comment><comment><USER4> jQuery is a DOM wrapper. MooTools is a JavaScript "extension." (Note the quotes and please don't crucify me)

What that basically means is that jQuery makes working with the DOM tolerable and MooTools makes working with JavaScript tolerable. I, personally, have issues with the DOM but no issues with JavaScript, so I opt for jQuery.

</comment><comment><USER5> Jquery.

In my experience, much more support, plugins, and it's been battle tested pretty well.

</comment><comment><USER6> jQuery is clearly the one being adopted the most. (Something like 90%, at least from what I've heard on a podcast). Why mess with success?</comment>


U.S.-India Agreement on Stockpiles of Food Revives a Trade Deal - <AUTHOR> http://www.nytimes.com/2014/11/14/business/international/us-india-agreement-clears-way-for-global-trade-deal.html?ref=business

<comment><USER2> >The Indian government buys food, including grain, from its >farmers and stockpiles it for a public distribution system, >where it is sold at government-run stores at subsidized >prices.

As an Indian, I have seen this works. People (in fact people who live next door to me) who has very low income (say 1000Rs or 20USD per month) or no income at all heavily rely on these government-run stores. Before Govt get rid of subsidizing food, they first need to increase the quality of these people (by creating new jobs,good governance etc).</comment>


Parallelism in one line - <AUTHOR> https://medium.com/building-things-on-the-internet/40e9b2b36148 <comment><USER2> The trouble with Pool.map is that the function you pass in has to be picklable, i.e. defined at the top level in the module you are currently in.

So you can't use it in interactive sessions:

      In [1]: import multiprocessing
      In [2]: pool = multiprocessing.Pool(8)
      In [3]: def hello(x):
      ....:     return x+1
      ....:
      In [5]: stuff = range(10)
      In [4]: pool.map(hello, stuff)
      # cryptic errors

You also can't use it with lambdas or functions defined within functions; suppose I put this in test.py:

      import multiprocessing
      def run_stuff():
          pool = multiprocessing.Pool(8)
            def hello(x):
              return x+1
          stuff = range(10)
          return pool.map(hello, stuff)

      print(run_stuff())

... I get the same errors.

This is sad because pool.map seems to be faster than anything I have written myself which might replace it without the above limitations. Unless someone out there has done better than me? :)

<comment><USER3> It works on the REPL as long as you create the pool after the function has been defined:

        >>> import multiprocessing
        >>> def hello(x):
        ...   return x + 1
        ...
        >>> pool = multiprocessing.Pool(8)
        >>> pool.map(hello, range(10))
        [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

It looks like the pool takes a peek at the module during instantiation. Maybe could be worked around by having a lazy pool that only inspects when you call map.

</comment></comment><comment><USER4> I realize this is useful for cpu-bound computations; but for network-bound here is a REAL two-liner that will instantly make your program concurrent (not parallel):

        from gevent import monkey
        monkey.patch_all()

This is a lot lighter than processes. You can combine the two- use gevent to handle network, and then multiprocessing to handle cpu stuff!

<comment><USER5> I've heard that using gevent with multiprocessing can cause problems, is that still the case?

<comment><USER6> I've used gevent in multiprocess situations, and it worked just fine. I did rig up my own gevent-based IPC, though. Just create a socketpair before forking, and attach some JSON-RPC (or protobuf/msgpack/etc) endpoints after.

</comment></comment></comment><comment><USER7> The reddit comments[1] on this article are very interesting as well. In particular, /u/driftingdev suggested it would be better to use concurrent.futures. To quote him/her:

In the last example:

        pool = Pool()
        pool.map(create_thumbnail, images)
        pool.close()
        pool.join()

would be 2 fewer lines with concurrent.futures:

        with ThreadPoolExecutor(max_workers=4) as executor:
            executor.map(create_thumbnail, images)

[1] [https://pay.reddit.com/r/Python/comments/1tyzw3/parallelism_...](https://pay.reddit.com/r/Python/comments/1tyzw3/parallelism_in_one_line/)

<comment><USER8> I have a gigantic difference in execution time between the two. Also, you can have the same behavior importing contextlib.closing;

       from multiprocessing import Pool
       from contextlib import closing
       with closing(Pool(15)) as p
         p.map(f, myiterable)

takes <30 sec vs

       from concurrent.futures import ThreadPoolExecutor as Pool
       with Pool(15) as p
         p.map(f, myiterable)

that takes > 1min.

whereas ProcessPoolExecutor hangs, and I've no clue why.

</comment></comment><comment><USER9> What I don't understand is that neither exceptions nor segfaults are handled gracefully when using multiprocessing. The former do not have the full traceback, while the latter aren't even detected and cause a deadlock. This requires running the code again in single processing mode to figure out where the bug is. The new concurrent.futures module has the same problem.

<comment><USER10> If you follow the monadic route and return a Maybe...

Stop. Let me reformulate. If you follow the standard AJAX route and return either a {'success': True, 'payload': ...} or {'success': False, 'error': ...} from your workers, your error handling will be fine.

<comment><USER9> That would not give me a traceback, and it would not catch segfaults or ctrl-C. It's a different style of programming that would work around part of the issue (only the exceptions, and only by checking for errors manually), whereas what perplexes me is that multiprocessing and concurrent.futures are not designed to handle these error conditions themselves.

<comment><USER10> Why, it would give you a traceback if your worker process collects it, as a reasonable worker would. Since workers are probably non-interactive, they can't exactly receive a Ctrl+C. The dispatcher process, OTOH, will. I suppose a pool should kill all processes on SystemExit.

When you think about more details, you grow more and more sophisticated solution that best suits your needs. But the point of the post is different: it's a dead simple way _to start_. Starting is often the hardest part.

<comment><USER9> Collecting tracebacks is the sort of plumbing you would expect a 'batteries included' library to do. I didn't expect the workers to receive the ctrl-C, I'd expect the main process to terminate, along with its children; none of that happens.

I think it's clear that these sorts of details belong in the library. Everybody could hack together their own traceback collector, segfault handlers etc., but it's difficult to get right and in a scripting language you should be able to forget about such things.

</comment></comment></comment></comment></comment><comment><USER11> see concurrent.futures for a threadpooled map :

[http://www.reddit.com/r/Python/comments/1w6h6g/parallelism_i...](http://www.reddit.com/r/Python/comments/1w6h6g/parallelism_in_one_line/cez7kj5)

</comment><comment><USER12> One liner in Java 8:

        List<String> contents = Arrays.stream(urls).parallel().map(UrlLoader::getContent).collect(Collectors.toList());

but as far as I know the API doesn't provide any way to get a String from an URL, so you need an helper class that also workaround checked exceptions ...

        public class UrlLoader {
          private static String getContent(String url) {
            try {
              return new BufferedReader(new InputStreamReader(new URL(url).openConnection().getInputStream())).lines().collect(Collectors.joining("\n"));
            } catch (IOException e) {
              throw new IOError(e);
            }
          }
        }

so not a real one liner :(

</comment><comment><USER13> Does anyone seriously think that the difficulty with parallelizing code is the amount of boilerplate? The real problem is synchronizing multiple threads; being too lenient means deadlocks; being too strict means under utilization. The map() function doesn't really help with either of those.

In addition, it looks like you are unfairly picking on Java. The producer consumer model presented isn't anywhere near what a competent programmer would do. Building your consumer from within a method called Producer? Calling isinstance (or instanceof) to check if the "poison pill" is put in the queue? These are the signs of a crappy programmer, not a crappy language.

<comment><USER14> If you do a lot of data munging, then boilerplate is definitely an annoying obstacle. Plenty of problems are "embarrassingly parallel", and the map function may be fine for those cases.

</comment></comment><comment><USER15> Just as an example from julia...

[http://docs.julialang.org/en/latest/manual/parallel- computin...](http://docs.julialang.org/en/latest/manual/parallel-computing/)

1) Put the addresses of your remote workers (via ssh) in a file, and point Julia at the file.

2) Julia connects to remote workers on each host.

3) Use one of the convenient macros or functions to run the code (this evenly distributes a map reduce to throw 200 million coins and count heads). > nheads = @parallel (+) for i=1:200000000 > int(randbool()) > end

4) You can also do all of the pool stuff, manual message passing, etc, if you need to.

</comment><comment><USER8> Sadly is very easy to leave zombie processes. Usually I put the Pool in a with statement, but is not bulletproof.

But yeah, multiprocessing.Pool.map,imap, imap_unordered are neat.

</comment><comment><USER16> I never used map for parallelization in Python, but I in .NET II used PLINQ. It's fantastic for exploiting data parallelism and very easy to use (or refactor to from sequential code).

</comment><comment><USER17> People that don't understand the problem pretending their incantations work.

In the words of a great man, it's a jolly hard problem.

<comment><USER18> Can you clarify what you mean, please?

</comment></comment><comment><USER19> Looks like a relatively decent implementation of .NET's Parallel extensions.

</comment><comment><USER20> tl;dr: if you run operations in parallel, they go faster, and if you put this code in a library, you can parallelize stuff in one line of code.</comment>


HN Feature Request - <AUTHOR>

I'd love to have the ability to define a custom date range whilst searching HN. The current options are nice, but I sometimes find myself trying to find a comment or story from 2 or 3 days ago and getting a ton of results which essentially could get narrowed down instead of having to filter for the past week.<p>What are some features that you'd like to see? <comment><USER2> Have you tried the "Custom range" filter option to select a range of date?

</comment><comment><USER3> _Please don 't post on HN to ask or tell us something (e.g. to ask us questions about Y Combinator, or to ask or complain about moderation). If you want to say something to us, please send it to email@example.com._

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

\---

I'm pretty sure that Algolia.org is a separate company from Ycombinator. You might want to contact them as well.

</comment><comment><USER4> Also, for any search specific feature requests you can open a GitHub issue here: [https://github.com/algolia/hn-search](https://github.com/algolia/hn- search)</comment>


Mind = Tools, dynamic and static typing  - <AUTHOR> http://www.victusspiritus.com/2010/02/11/mind-tools-dynamic-and-static-typing/ <comment><AUTHOR> This is an effort to force myself to learn more about the tradeoff of static & dynamic typed programming languages</comment>


Hackers at SXSW. Meetup? - <AUTHOR>

Hello, So I will be at SXSW and I am sure a few of you might be there also. We should do a mini meet-up or perhaps get together at one of the parties.<p>Its always great to connect the YC regulars with their faces. What do you say? <comment><USER2> <http://searchyc.com/SXSW>

(I just thought of a new startup idea: letmesearchycthatforyou.)</comment>


Show HN: iOS Login Screen Written in Swift 4 - <AUTHOR> https://www.iosapptemplates.com/templates/iphone-login-screen-template-swift-3-freebie <comment><USER2> Not that you're asking for a code review but a couple things I noticed:

\- You left your twitter IDs in your code. Not sure if it matters to you or not.

\- Your buttons probably have some stuff in common (corner radius at least), so consider making the them all inherit from the base LoginButton class.

\- You can put multiple lets on a single line, like `if let accessToken = AccessToken.current, let facebookAPIManager = FacebookAPIManager(accessToken: accessToken) {`

<comment><AUTHOR> Nice, haha! I'll address your comments in a follow-up diff! Thanks!

</comment></comment><comment><AUTHOR> Hi there! I hope you're enjoying the template! Please let me know if you have any feedback or ideas for improvements! Thank you!</comment>


Google's lung cancer detection AI outperforms 6 human radiologists - <AUTHOR> https://venturebeat.com/2019/05/20/googles-lung-cancer-detection-ai-outperforms-6-human-radiologists/ <comment><USER2> Having seen many specialist/doctors I generally think they suck at diagnosing, unless its something you could literally discover yourself by a google search and access to a specific test. I don't think they are bad doctors, I just learned that sometimes diagnosis can be rather difficult.

Then, you have a computer, it can reference recent studies compare symptoms with hundreds of diseases and generate a test plan accordingly based on probability of a disease or urgency. Frankly, I am surprised not more work is being done with algorithms in medicine.

Humans are biased, egoistic and most don't like being told they are wrong.

<comment><USER3> I tend to agree, doctors is going to be the holy shit moment for society when we begin replacing them across the board. I mean we still might need 100 or so (nationwide in the usa), maybe keep the top 1000 doctors/surgeons for times when creativity and unique problem solving is needed and to 'sign off' on computers' work remotely (for awhile, till they're not needed at all anymore)...

If the only job left per se for doctors is to 'okay and sign off' on prescriptions that a computer recommends, after a computer does the entire intake/evaluation, then 1 doctor can replace 100 or 1000 for 20 second evals over skype.

<comment><USER4> I don't think surgery will be done without human hand for a very long time

<comment><USER3> If you consider 2006 a very long time 'ago', then you're absolutely right... [https://www.engadget.com/2006/05/19/robot-surgeon- performs-w...](https://www.engadget.com/2006/05/19/robot-surgeon-performs- worlds-first-unassisted-operation/)

Then there's a more modern article at: [https://curiosity.com/topics/a-robot- performed-soft-tissue-s...](https://curiosity.com/topics/a-robot-performed- soft-tissue-surgery-by-itself-curiosity/)

So, it's definitely possible. Doctors will be replaced probably before software devs, so I think my job is safe(r).

<comment><USER5> I'm a doctor and a software developer. I frequently perform surgery. There's no way a computer/robot will be doing what I do as a doctor in the next 10 years.

Believe what you will. I don't really have a personal horse in this race, since I wouldn't mind if I was replaced as a doctor/surgeon. I actually took last year off medicine and focused on my tech businesses and it was great.

<comment><USER3> I have very high hopes for ai/automation. Maybe not 10 years, but can you be sure 20 years is safe? What if your kid started med school in 10 years, and by the time they get through residency they could be replaced by robots? It's a possibility...

I think specific 'parts' of medicine are more adaptable to change... PCP's could be 'mostly' automated. I'm not saying it'll be 100%, but say 20% stay around for a decade or two as management overseeing the robotic slaves -- making sure they have > levels of care and lower death rates than a human would by a magnitude big enough to avoid lawsuits.

There's not a job in sight that can't someday be done better by a robot. Even software developer. I don't know when, I just know on a long enough timeline it's almost inevitable.

<comment><USER5> > can you be sure 20 years is safe?

I think you're looking at this all wrong. If robots replace me then that means the robots are safer than I am and do a better job. That's awesome. By the time robots have replaced me, they would have long ago replaced accountants and lawyers. We'd be living in a super efficient world. The human element is extremely important in medicine/surgery so we won't be replaced for a little longer. For a long time it'll be there to help us and make our jobs easier.

It's like another industrial revolution where we all have more time to... not work.

I am not defined by my career.

But... I don't see this happening even in the next 20 years. We can't even yet trust cars to drive forward, back, left and right safely with strict rules, markings and signage to guide them.

<comment><USER3> Not to undermine what you do, or what any doctor does, I honestly believe driving a car to be something that's tougher than surgery (for a robot). Now of course, when I say 20 years, I think by then we'll have robots who can do a number of 'routine' surgeries at least. Maybe each robot is specialized and can only do 1 surgery but there's 15 different types of robots who all have mastered 1 surgery.

When performing a surgery, I'm sure you need to think on your feet a bit, but how many scenarios can you think of that might happen in a surgery ? Knick a blood vessel, throw a blood clot, drop a tool in the patient, unforseen bleeder/hemorrhage, alergy to drug, etc... I'm sure there's quite a list...

How many scenarios can happen in a driving situation - magnitudes more than a surgery, because a surgery is in an isolated room and controlled environment. Driving is not. On the road you need to worry about:

* Pedestrians from front, and sides.

* Animals from all angles.

* Rain/Snow. Hydroplaning.

* Traffic construction.

* Other idiots on the road.

* Helicopter Crash.

* Police Chase.

* Sheep stuck in the road.

* Forest fires. (Obey the speed limit or floor it to escape?)

* Billing (If you're an uber ai car).

* Drivers that are angry, sad, happy, distracted, having a medical emergency, falling asleep.

* Natural disasters like an earthquake.

* Bad directions.

* Loss of internet/connectivity.

* Running out of gas/electric.

* Curves in the road.

* Signs that could be permanent or temporary.

* Obeying traffic laws.

* Being aggressive when needed to take a lane.

* Be courteous and move over for faster traffic passing on the left.

* Sensor failures and malfunctions.

* Tire blowout.

My point is it's a LOT more than just forward/back/left/right, if you had an enclosed building w/ a driving track, and could control who was in the room, where they were standing, what their jobs were, before the car took off, then you mitigate MANY of the issues that self-driving cars have, and the technology as it exists today is good enough for that scenario.

Personally though I see us (hopefully) moving towards a post-scarcity society, sort of like Wall-e, but hopefully without the laziness (I'm sure we can find fulfillment in other ways) -- Research for instance will be a hobby instead of career because people --especially scientists will always have curiosity pushing them forward.

If we survive global warming, the next 100 years is going to be unfathomably different from the last 100...

<comment><USER5> Maybe I should mention I perform surgery on awake patients. What happens when the patient gives me feedback? I have to negotiate with them and accommodate them. What about when the surgeon communicates with the assistants/nurses? What about with the anesthetist? What if the power goes out? What about the discussion with the patient/family when things don't go as planned? What about deciding with the patient if surgery is even appropriate in the first place? Will a robot be a good judge of when it's important to ignore what the patient is saying?

You know about driving because you do it. It makes sense you think medicine/surgery is simple, since you've never done it.

<comment><USER3> Also -- if something does come up, couldn't you as a master surgeon technically have 5 surgeries on huge monitors around you, and if the robot hits a snag you can swoop in and fill in? Using a microscopic tool you couid even do that remotely, just take over the robot's hands? In this scenario you replaced 5 surgeons combined w/ robots. Still a win for efficiency.

<comment><USER5> Yes. And? Are there not millions of people in your country who need surgical procedures but aren't getting them because they cannot afford them?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> Aren't these algorithms trained on expert-annotated data? If so how does it end up performing better than radiologists? Or are these radiologists only mediocre at detecting cancer?

<comment><USER5> I'm a doctor but not a radiologist. I imagine it would go like this:

Computer makes diagnosis on image of lesion that has already been biopsied and has a known correct diagnosis.

I don't know how it would work for human false negatives that were never biopsied. Possibly the AI could be trusted enough to make a biopsy on its recommendation.

</comment></comment><comment><AUTHOR> It's only a matter of time before all X-Ray, CTScans, etc. use algorithms for secondary if not primary screens.

</comment><comment><USER7> What makes this different from where IBM Watson failed?

<comment> forgot-my-pw Watson was mostly a marketing jargon built by IBM. They marketed and sold the product before the technology was ready.

Google, Microsoft, Facebook, (and probably soon Amazon) have advanced the AI industry further than IBM at this point. You can predict this by the number of papers released by each company. Stats from 2017: [https://medium.com/@chuvpilo/whos-ahead-in-ai-research- insig...](https://medium.com/@chuvpilo/whos-ahead-in-ai-research-insights- from-nips-most-prestigious-ai-conference-df2c361236f6)

</comment></comment><comment><USER8> One thing for sure is that all these AIs (or their creators) are pretty good at marketing than the actual doctors :).

</comment><comment><USER9> What is the Google's long term goal here? Is there a plan to monetise this?

<comment><USER3> Seriously? Build AI hospital, charge 1/2 the cost across the board, begin replacing doctors/surgeons worldwide w/ google doctor. If google could take home 1/3rd of all GDP spending on medical that would make them the top company in the world.

<comment><USER10> Are not they searching for new area to expand their business? Their turnover is around $150b, if they go in healthcare they could reach $1 trillion. Which other business path can safely offer similar potential?</comment></comment></comment>


Venus – RISC-V Simulator - <AUTHOR> https://thaumicmekanism.github.io/venus/ <comment><USER2> Would be cool if the editor came with some samples so that I could check out all the features of the tool (like 8bitworkshop.com).

<comment><AUTHOR> There are labs for UC Berekely's CS61C course that use venus. They're good starting points for playing with the simulator.

[http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/3/](http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/3/) [http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/5/](http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/5/) [http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/6/](http://inst.eecs.berkeley.edu/~cs61c/fa18/labs/6/)

</comment></comment><comment><USER3> I am older and seen a lot of tech come and go. RISC-V feels to me like something that will be huge.

There is so much momentum already. Not many things catch on that quick. But when they do they end up huge.

<comment><USER4> It's worth noting the age of RISC-V, according to Wikipedia ([https://en.wikipedia.org/wiki/RISC-V](https://en.wikipedia.org/wiki/RISC-V)) it originated as a 'short, three-month project over the summer' in 2010. So ~8 and a bit years old. It's taken a while to really take-off but now it does really seem to be picking up momentum. Though no serious use in production hardware that I'm aware of.

Perhaps a good comparison point is LLVM. It too originated as an academic project. Again looking at Wikipedia ([https://en.wikipedia.org/wiki/LLVM](https://en.wikipedia.org/wiki/LLVM)) it started development in 2000, first release 2003, Lattner hired by Apple to develop it 2005, Clang released by Apple 2007 (so ~7 years from initial LLVM creation to serious production use potentially less depends when Apple were using it internally).

<comment><USER5> You can't really compare hardware with software.

It's just a question of opportunity for change.

RISC-V while take on when there's a reason to not use ARM and if it's better than the competition (eg: MIPS).

<comment><USER6> > RISC-V while take on when there's a reason to not use ARM and if it's better > than the competition (eg: MIPS).

No licensing fees.

<comment><USER5> But your company will need to pay more in R&D to develop the cores.

Most companies license ARM cores, not the ISA.

<comment><USER6> Not really, the foundries are on the cusp of fully validating rocket cores on the various processes, and you can just include them in your design like you would a Cortex-M or Cortex-R. They've recognized that 3-5 stage classic RISC cores are a commodity market now, and it's in their best interest to make it as easy as possible to add to your design.

Above those simple cores, we should expect to see more and more RISC-V cores hit the same level of "just drop it in for no licensing, already validated, the pieces like register files are already optimized for the process". BOOM is ~Cortex-A9 perf/gatecount/IPC, which puts it into greater than RPi territory (usable, but not really out crazy). There's still work to be done on the higher end still, albeit, but it's not like you can just go out and licence the highest perf ARM cores anyway (those are Apple's).

ARM has an existential threat, IMO.</comment></comment></comment></comment></comment></comment>