Comparative Macrology (2014) - <AUTHOR> http://www.wilfred.me.uk/blog/2014/09/15/comparative-macrology/ <comment><USER2> What if x and y may be assigned, but their evaluation has side effects (e.g., array[i++])?

Common Lisp's most interesting contribution to this discussion is that places (~lvalues) are (should be) expressed in a common framework which lets macros use standard helpers like get-setf-expansion [http://www.lispworks.com/documentation/HyperSpec/Body/f_get_...](http://www.lispworks.com/documentation/HyperSpec/Body/f_get_se.htm) to avoid doubly evaluating subexpressions.

</comment><comment><USER3> Does the syntax of most programming languages get into the way of macro systems? Is that why most of the languages in the article are Lisps?

<comment><USER4> It's possible to have metasyntactic variables in languages with more syntax than a Lisp. Some examples are MetaML, MetaOCaml. Terra (a Lua-like language) also has metaprogramming[1]. Or TemplateHaskell.

Having a complicated grammar does make it more complicated because you have to allow metasyntactic variables at different places, vs s-expressions where you just need a comma (which is just shorthand for the unquote form).

[1] [http://terralang.org/getting-started.html#meta- programming-t...](http://terralang.org/getting-started.html#meta-programming- terra-with-lua)

<comment><USER3> It's possible, but I only really see successful, integrated metaprogramming done in low syntax languages.

<comment><USER5> Julia has a macro system that's suspiciously close to CL's.

<comment><USER3> Quasi Quote looks to be ':', comma is '$', but syntactically, Julia looks pretty sparse other than mathematical expressions:

Reference: [https://docs.julialang.org/en/release-0.4/manual/metaprogram...](https://docs.julialang.org/en/release-0.4/manual/metaprogramming/)

But the question is, do people actually do much metaprogramming in Julia? Unlike CL, which is almost what it's designed for (or something that fell out of the design), rather than an after thought addition to the language (although Julia's does look rather well designed or an addition).

</comment></comment></comment></comment></comment><comment><USER6> All of these have a problem: they evaluate the places multiple times, which produces surprising behavior if the place expressions contain side effects and is inefficient if they invoke expensive computation.

TXR Lisp:

      (defmacro swap (a b)
        (with-gensyms (ga gb gt)
          ^(placelet ((,ga ,a) (,gb ,b))
             (let ((,gt ,ga))
               (set ,ga ,gb)
               (set ,gb ,gt)))))

REPL:

      1> (sys:expand '(swap (car (g)) (cdr (h))))
      (let ((#:g0255 (g)))
        (let ((#:g0254 (h)))
          (let ((#:g0241 (car #:g0255)))
            (sys:rplaca #:g0255 (cdr #:g0254))
            (sys:rplacd #:g0254 #:g0241))))

The place expressions here contain calls to functions _g_ and _h_ ; but as you can see, these functions are each called just once.

placelet: [http://www.nongnu.org/txr/txr- manpage.html#N-0393C970](http://www.nongnu.org/txr/txr- manpage.html#N-0393C970)

placelet lets you easily turn incorrect, multiply-evaluating macrology for manipulation of places into correct singly-evaluating code while retaining its basic form. The kernel of the above swap looks like the native three-point rotation. The only difference is that it's done through the _placelet_ aliases for _a_ and _b_ , rather than directly with those expressions.

This is just one of the items of my personal research into the advancement of practical Lisp that I imbued into TXR.

The implementation of _placelet_ is tricky:

[http://www.kylheku.com/cgit/txr/tree/share/txr/stdlib/place....](http://www.kylheku.com/cgit/txr/tree/share/txr/stdlib/place.tl#n891)

The places implementation has no concept of lexically scoped place expansion: places are are all global. (Just like "setf expansions" in Common Lisp are global). However, placelet needs to create a scoped place expansion: a lexical alias for a place. That's why you see the _unwind-protect_ form and the manipulation of the * place-update-expander * hash. The effectively local place expander produces getter/setter macrolets which just forward to the real ones.

Though the hash table is a special variable, this is happening at macro- expansion time during the tree walk so it is effectively a lexical mechanism: the dynamic scope of the code walker at expansion time corresponds to a piece of lexical scope of the code.

For reference, here is the actual _swap_ from the TXR Lisp library (same source file as _placelet_ ):

      (defmacro swap (place-0 place-1 :env env)
        (with-gensyms (tmp)
          (with-update-expander (getter-0 setter-0) place-0 env
            (with-update-expander (getter-1 setter-1) place-1 env
              ^(let ((,tmp (,getter-0)))
                 (,setter-0 (,getter-1))
                 (,setter-1 ,tmp))))))

It doesn't use _placelet_ but update expanders directly, The placelet aliasing mechanism is built on this, basically. It produces exactly the same expansion.

This shows how the "update expanders" implementation of places also has the nice property that you can use update expanders to write straight-forward code templates to implement place updates.

Update expanders differ from setf expanders in Common Lisp but achieve the same thing.

(There are also "clobber expanders" for situations when a place is overwritten without being accessed and "delete expanders": TXR Lisp supports "place deletion".)

</comment><comment><USER7> > Macros in CL are just functions that run at compile time

Macros work fine in a Common Lisp interpreter at runtime.

Here we use an interpreter:

Define a macro, which prints a message when it is running.

        CL-USER 13 > (defmacro swap (x y)
                      (print '(> running the swap macro function))
                      (let ((tmp-sym (gensym)))
                        `(let ((,tmp-sym ,x))
                           (setf ,x ,y)
                           (setf ,y ,tmp-sym))))
        SWAP

Use it:

        CL-USER 14 > (defun foo (a b)
                      (let ((a1 a)
                            (b1 b))
                        (print (list a1 b1))
                        (swap a1 b1)
                        (print (list a1 b1))
                        (values)))
        FOO

The macro function wasn't running, otherwise we had it print something.

Run the code. The macro is run, too.

        CL-USER 15 > (foo 20 30)

        (20 30)
        (> RUNNING THE SWAP MACRO FUNCTION)
        (30 20)

Run the code again. The macro is run, too.

        CL-USER 16 > (foo 10 40)

        (10 40)
        (> RUNNING THE SWAP MACRO FUNCTION)
        (40 10)

Compile the code, the macro now runs, too.

        CL-USER 17 > (compile 'foo)

        (> RUNNING THE SWAP MACRO FUNCTION)
        FOO
        NIL
        NIL

In compiled code the macro is no longer needed to run:

        CL-USER 18 > (foo 10 40)

        (10 40)
        (40 10)

Note also what pkhuong said, the SWAP macro will run the place forms twice.

Additionally it's possible to observe the change:

        CL-USER 25 > (let ((a (vector 10))
                           (b (vector 20)))
                       (swap (aref a (progn (print (list :a a)) 0))
                             (aref b (progn (print (list :b a)) 0)))
                       (values a b))

        (:A #(10))
        (:A #(10))
        (:B #(10))
        (:B #(20))   ; <- here a is already changed when we get the place value for b
        #(20)
        #(10)

Common Lisp has a built-in ROTATEF, which takes care of that and which we can use as a replacement for SWAP:

        CL-USER 27 > (let ((a (vector 10))
                           (b (vector 20)))
                       (rotatef (aref a (progn (print (list :a a)) 0))
                                (aref b (progn (print (list :b a)) 0)))
                       (values a b))

        (:A #(10))    ; <- only once computed in the first subform to ROTATEF
        (:B #(10))    ; <- only once computed in the second subform to ROTATEF
                      ; also the computation of the new value for B does not observe
                      ;  the new value of A

        #(20)
        #(10)

Thus a 'real' SWAP macro will need to look to be different from what the article presents. Otherwise it will not play nicely with the rest of the language: multiple evaluations and side effects are the problems to address.

</comment><comment><USER8> I have a more substantive comment below, but I have to say the use of "recurse" grates on me, unless of course you are screaming "fuck, fuck!".

"recur" has the same root as a "occur" \-- in fact it means "to happen again."

occur -> recur occurrence -> recurrence

The thought didn't "occurse to me", it "occurred to me".

Thanks, I just had to get that out!

<comment><USER6> It's a mess.

The English word "curse" (swearing or evil spell) appears not to be derived from the Latin "currere" (to run).

These are though: course, current, currency, recur, concur, incur, cursor, cursory, precursor, cursive, excursion, corsair, corridor, corral, ...

An argument might be made that the verb form of _recursion_ should have followed the existing _excursion_ pattern. Which is to say, _excursion_ is both the noun and the verb form, as in _to excursion_ ( _excursioned_ , _had excursioned_ , _excursioning_ ). Just replace "ex" with "re".

Interesting: etymonline presents a view that _horse_ might also trace back to _currere_ : [http://www.etymonline.com/index.php?term=horse](http://www.etymonline.com/index.php?term=horse)

Hey, look; this is is also very handy: [http://www.etymonline.com/index.php?term=*kers-](http://www.etymonline.com/index.php?term=*kers-)

<comment><USER8> > The English word "curse" (swearing or evil spell) appears not to be derived > from the Latin "currere" (to run).

Hence my joke about "fuck, fuck"</comment></comment></comment>


Working on Chrome made me develop a tool for reading source code - <AUTHOR> https://medium.com/@egraether/why-working-on-chrome-made-me-develop-a-tool-for-reading-source-code-7111ba21a6f0#.2m1e4m8yy <comment><USER2> The symbolic lookups and diagrams described are already implemented in modern IDEs. People who rely on relatively simple text editors and text / regex search may be less aware of this, of course.

I do agree that visualizations are lacking. In part this is because of difficulties in complete analysis, and rather than do half a job, they don't do any job at all. And in other parts its because different tools do a better job: for example, instrumenting profilers are better at showing control flow.

I generally want three kinds of things in my head when reading code: control flow, data flow and data shape.

But there are different resolutions to this. Control flow may be simple, at the method level; or it may be more complex, with asynchronous callbacks, queuing systems, RPC, web service requests and orchestrations controlled by configuration.

Data flow may be simply knowing where in the code a particular attribute is updated and where it is read and used to make a decision. But it's also about where the data came from ultimately - what all the ingredients are that go into its formation - and also what other data it in turn affects.

Data shape has to do with the simple shapes of structures, but diagrams are scarcely needed for that - a glance at the definition of the structure is enough to commit it to short-term memory. More interesting is global invariants, local invariants, longer chains (how you get to one distant structure from another via links), the database model, configuration data model, static data vs dynamic data.

Most of the interesting information is at a higher level than can reasonably be analyzed in most Turing-complete languages. The best info comes from profiling or debugging.

<comment><USER3> In the past working on a large c++ codebase I've tried using a debugger to get an understanding on how a function gets called.

Even the debugger fails when you come across indirect calls. Also in gdb multiple threads make it easy to miss something when stepping through code.

<comment><USER4> Visual Studio's debugger has some really nice features and interface for dealing with multi-threaded code [https://channel9.msdn.com/Shows/Visual- Studio-Toolbox/C-Plus...](https://channel9.msdn.com/Shows/Visual-Studio- Toolbox/C-Plus-Plus-Debugging-Tips-and-Tricks#time=19m42s)

</comment></comment></comment><comment><USER5> As someone looking in from outside, the Chrome codebase is a treat. Anecdote.

Once during the start of my career I was asked to implement a caching layer in an HTTP library. I had no idea what it was, so there was some reading up to do. There were the excellent guides from mnot.net, as well as the nicely written RFC 2616. But Chrome's code was the best of all - [https://github.com/adobe/chromium/blob/master/net/http/http_...](https://github.com/adobe/chromium/blob/master/net/http/http_response_headers.cc#L990). If you want to know for a fact how Chrome decides caching, that code is kind of the heart of it.

Recently I needed to retrieve the "Rendered Font Name" that is available in the DevTools "Computed CSS" section. This is the name of the system font that Chrome finally picks, based on the Font-Family property. This is platform specific and so not in DOM, nor available to Chrome Extensions directly. The only way it could be done was by making an extension running in debug mode and communicates to the browser thru its remote debugger protocol. (This part of the documentation is lacking, but it is an esoteric topic anyway). The good news was that the code that does this is well encapsulated and could be easily extracted into a command line utility. For the curious: [https://chromium.googlesource.com/chromium/src/+/master/thir...](https://chromium.googlesource.com/chromium/src/+/master/third_party/WebKit/Source/platform/fonts/mac/FontFamilyMatcherMac.mm#129) (there is a nugget about real-world software in the comments)

This is, at a surface level, good code to me. Things are easy to find, there is a rhyme and rhythm to the system, and feels welcoming. The thoughts of the people who designed that system over years would be great to hear. Most writing about good code on the internet comes from an OO background, mostly wrt information systems. I wonder what people who've written these systems have to say about building and engineering complex software.

<comment><USER6> I'm not a fan of the comments. There's comments that are utterly useless like:

        // Of course, there are other factors that can force a response to always be validated or re-fetched.

Gee thanks, what might those factors be? A comment like that is worse than not commenting at all.

Or the real ones that get my goat, comments which just tell you what the code that follows obviously does:

      // If there is no Date header, then assume that the server response was
      // generated at the time when we received the response.
      Time date_value;
      if (!GetDateValue(&date_value))
        date_value = response_time;

There's even a line (1019) where they divide by 10 but don't explain why they do it. That's what I personally would comment.

The code itself is fairly easy to read (though I do wonder why they bothered using TimeDelta as it just seems to make the code more complicated, and results in confusing code like this:).

        return TimeDelta();  // not fresh

<comment><USER7> While I'm not on the net team - I just mangle the UI and annoy Ben ;) - I can wager a good guess: The net team used TimeDelta because for any software project of Chromium's size strong types are crucial.

If they just returned an int, you'll sooner or later see it passed through five different places, and at the end location, nobody remembers if it's ms, time ticks, seconds, or even a unix time instead of a delta. TimeDelta removes that question.

It also does things that have subtle issues you might miss if you did it "by hand", like saturated adds, multiplying with an integer value while handling overflow correctly, etc.

These things might be overkill for smaller project, but once you have something with hundreds of contributors, every little bit helps keep the code base sane.

As for the division by 10 - look up at line 953 :)

Yes, it should be a named constant. And some of the comments could certainly be better. It's a work in progress. (And if you want to help with that work, we happily accept patches!)

<comment><USER6> Yes, that seems like a good reason to use TimeDelta.

</comment></comment></comment></comment><comment><USER4> The visualization aspect looks quite interesting, but I'm not sure how many things this can do that a quality IDE already doesn't.

The example uses the author mentions ("Following code paths from method to method", "Finding where an interface is implemented and which methods get overridden", "Exploring dependencies between types and functions") all sound like pretty standard features today. Plus with an IDE you get the benefit of having them right there in the editor/debugger/etc. and much more.

I would however really like something for inspecting the _run-time_ structure of an application's objects. Most debugger views are really clunky for looking at large amounts of data, and even the pretty-print features often don't help much. Having a zoomable graph with the objects right there in front of me would really bring my productivity to the next level.

<comment><USER8> I'm working on a new kind of tool on those lines—would appreciate any feedback on whether the format I've designed so far would be useful to you (or others). [http://westoncb.com/projects/avd](http://westoncb.com/projects/avd)

(I've been thinking about ways of getting to deal with arbitrary object graphs, but an important requirement was to keep it language-independent, so it just deals with common data structure formats at the moment: lists, trees, tables, graphs, hashmaps, etc. —my thinking is most difficult to debug algos are performing operations on these anyhow.)

<comment><USER9> This is amazing! Is the UI OpenGL? Is the visualization program a separate process? I'm guessing the main process sends info about the monitored data structures over a socket?

<comment><USER8> > I'm guessing the main process sends info about the monitored data structures > over a socket?

Correct!

The UI/server is Java/OpenGL.

</comment></comment></comment></comment><comment><USER10> I see comments that "an IDE can do this". Perhaps so. But there are lots of data-discovery missions where you need to learn a codebase quickly that you won't be fully compiling or building yourself. Perhaps you need to replicate an approach, or understand where something in your code needs to change in order to work with the other code that you can't touch. Tools like the OP's could become very handy in understanding a codebase without bringing the entire thing into your IDE.

I agree that some pieces only are really comprehensible runtime, but I applaud tools that reflect the need to learn a codebase without necessarily having to (or being able to) bring all the code into your IDE.

<comment><USER11> > learn a codebase quickly that you won't be fully compiling or building > yourself.

I used early versions of Coati (0.5 I think) and it used clang for the backend, loading a new project took ages, probably longer than compiling it in my case. I should try again as they released 1.0 not too long ago.

</comment></comment><comment><USER12> I feel obliged to mention this talk by Zed Shaw: [https://vimeo.com/53062800](https://vimeo.com/53062800)

It gives an overview and interpretation of a body of neuroscience research in the context of teaching programming. I can't quite summarize the whole talk succinctly (and don't want to lure anyone with catchy titles either) — but my takeaway from it is that those "visual" programming tools are mostly useless and not going to help significantly.

The reason for that being how the brain works: switching back and forth between "visual" and "linguistic" cognition is hard, and requires specific training to do efficiently. Please turn to the talk for references.

</comment><comment><USER13> Trial does not allow to try it... You can only try it on some predefined small projects. As I understand the only option for me to try it is to buy a license. Ok, author says that I can get refund in 1 month if I will not like it. But anyway - too much movements for trying. Author please consider to actually give an option to really try it. Another: please add retina icons.

<comment><USER14> I was curious about this as well. You can mail them for a "real" trial.

</comment></comment><comment><USER15> Chromium Code Search sounds sort of similar to Hoogle. Can anyone with experience of both confirm this?

Also -- sort of offtopic, but motivated by TFA -- I'd love some way to find out about quirks that native speakers of $lang have when they speak $otherlang.

A few common "tells" that I know, for $otherlang = Englishf are Hyphenating- Things-Like-This and also spaces before exclamation points or question marks !

<comment><USER16> "spaces before exclamation points or question marks !"

This is probably related to typographic rules. For example in french you put a space before and after double punctuation marks (!?:;" etc) and a space after single punctuation marks (.,) one exception is the single quote which should not be precedeed nor followed by a space.

</comment></comment><comment><USER17> This company is tackling the same problem with a slightly different approach. I like that they have made their tools open source and modular. Theoretically you can use their system with any language by writing a few modules.

[https://sourcegraph.com/](https://sourcegraph.com/)

</comment><comment><USER18> If it was hosted, and you could point it at a GitHub repo, I'd use it.

Otherwise I'd rather use whatever IDE JetBrains has for it. It might not have the exact same capabilities (or maybe it does, I didn't look closely enough) but why use another tool and context if the current one is good enough.

</comment><comment><USER19> This reminds me a little bit of the IDA disassembler. There are moments where you might face production issues with external JS code and have no source maps available. A tree view to dissect what is going on would be useful in these situations.

</comment><comment><USER20> This is really cool. One killer feature that I don't know if you have considered is some kind of visualization of the stack trace, showing how control passes between the objects & functions. That would really help with dynamic languages, or large codebases that have been Greenspun-d heavily. It would be very difficult to implement, especially in a cross-platform way, but I bet if you pick a language community like c++, java or something else and focus on it, you might have better results.

</comment><comment><USER21> This tool looks quite useful for weird build environments with tons of completely undocumented native code such as AOSP (Android) where IDEs regularly fall over.

</comment><comment><USER22> Trying should be made more accessible.

"Looks" promising.

</comment><comment><USER23> Java provides an easy way for tracing control flow during program execution: when I join a new contract and am responsible for maintaining legacy java code, I use AspectJ with logging aspects with before and after pointcuts. This helps me figure out the application control flow.

I wonder if something similar is available for C/C++.

</comment><comment><USER24> It's closed source?

</comment><comment><USER25> Reminds me of the code bubbles and debug-canvas I used to use in Visual Studio

</comment><comment><USER26> Incidentally, Webkit is the hairiest pile of code I've ever seen.

</comment><comment><USER27> How does it compare to Google Kythe (internally known as Code Search): [https://github.com/google/kythe](https://github.com/google/kythe)?</comment>


Bitcoin could be disastrous for climate change - <AUTHOR> https://www.greenism.com/bitcoin-mining-and-climate-change/ <comment><USER2> Bitcoin will drive innovation in cheaper energy sources faster than any amount of carbon tax could hope to achieve.

Miners revenue can only decline as the block subsidy halves, as more miners participate in the network and the difficulty increases. The miners themselves have only one major expenditure, which is electricity used to run the mining hardware and the cooling equipment.

This means that for miners to continue to increase their profits, the single most effective solution for them is to invest some of their profits into the creation of renewable, low maintenance energy solutions.

Since those miners will be able to run their equipment from renewable, cheaper energy, the remaining miners who are using expensive biofuels will end up unprofitable and be put out of business.

Eventually, the competition in mining will be driven _entirely_ by who can generate the cheapest and most abundant source of renewable electricity, for which they will want to acquire the intellectual property rights because they don't want to hand it to their competition. A highly competing clean energy market is what is needed to push innovation.

The main problem we have now is that clean energies are just not competitive enough. They usually need subsidizing by governments. That practice is simply not sustainable, because eventually the subsidies will dry up and they'll be back to being more expensive than biofuels.

<comment><USER3> If I'm understanding you correctly, you seem to imply that miners will invent wholly new energy technologies because they want to be first to market with a no-brainer solution for cheap, and essentially passively-profitable, green AND long-term-sustainable energy.

Don't you think that the need for that already exists not just in the bitcoin world, but for anyone, anywhere who needs electricity? That if they could develop such a product it would already be many times the value of all crypto markets combined? Not to mention they'd probably decrease in value with cheaper energy.

Your optimism is something to admire but I think energy seems to be an industry that is not lacking in smart people already driven by the rush to be first to market with a comparative advantage. Maybe I'm wrong, if so, I'd like to know it!

<comment><USER2> I'm not suggesting that miners will invent new solutions _themselves_. I'm suggesting that they will put some of their profits towards research and development of new solutions, and they will acquire promising startups to cut out costs.

The need for cheaper electricity exists, but it's not clear where and when investors can make money. People aren't going to put their money into something that might bear fruit 10-20 years down the line, when there are many other investment opportunities available which have more promise of larger, or quicker profits.

The bulk of the investment into clean energies comes from (or is subsidized by) governments who are notoriously bad with money. There's a limited market and it is not very competitive because they're not even able to compete with oil without subsidies. Having smart people is simply not enough. You need smart people who are willing to risk _their own_ money to achieve their goals. Most academics are risking _other people 's_ money, which is why socialism does not work and capitalism produces the results.

<comment><USER4> Miners use energy for their ASICs and whatever else the algorithms of the coins need. We are seeing innovations in chips. I can imagine there is or will be innovation in decreasing energy usage of said chips. For example, a chip that can't melt doesn't have a cooling cost. But a global solution to cheaper and cleaner energy is probably the #1 way to rule the world if you can figure out how.

<comment><USER2> Chips will get better, but we're approaching the limit of Moore's Law in terms of shrinking them to get the exponential gains we've seen over the past half century. The improvements in Hash/W are going to continue to slow until they're not worth the additional cost to fabricate. (Unless some radically new transistor technologies arise)

My assumptions about the cost of mining were assuming that one can count the cost of the mining chip as negligible, which is certainly not the case now, but I believe will be the case in future as the chips get much cheaper, much more abundant and the period between iterations of the chips increases. Industrial miners will use the most efficient chips on the market, but their primary cost will be the electricity.

</comment></comment></comment></comment></comment><comment><USER5> > the process involved in a single bitcoin transaction could provide > electricity for a home in Britain for an entire month

Perhaps British homeowners should then travel to remote regions of China and set up a power line direct to their home.

The analogy is meaningless as electricity is not easily exportable and transportable. A new power plant in Denmark does not affect electricity pricing in Australia.

Bitcoin miners are opportunity buyers that rely on bottom-shelf pricing from the source - as soon as any industry is ready to pay a penny more, miners' margins are affected accordingly and they will move on elsewhere.</comment>


Researcher controls colleague's motions in first human brain-to-brain interface - <AUTHOR> http://www.washington.edu/news/2013/08/27/researcher-controls-colleagues-motions-in-1st-human-brain-to-brain-interface/ <comment><USER2> How to replicate this study in your living room:

Get a 'remote controlled cockroach' kit, a Star Wars Force Trainer, some wires to hook the force trainer's trigger to the cockroach kit's remote control, stick the receiver on your friend's head.

This seriously doesn't seem to have broken any new ground, only mashed together two existing technologies for a easily misinterpreted headline

<comment><USER3> _> doesn't seem to have broken any new ground, only mashed together two existing technologies_

I'd argue that new inventions are created by mashing existing technologies, often emerging or bleeding edge, and creating something new. Henry Ford didn't invent the combustion engine, transmission, suspension, etc, but he did mash these things together into something new. What we are seeing in the video and research is something new and pretty exciting if you take it a couple steps further. Think about replaying these signals, building a play book, etc.

ps. If you have some time to kill, I would check out this video called, "Everything Is A Remix", which talks about this idea @ [http://www.youtube.com/watch?v=coGpmA4saEk](http://www.youtube.com/watch?v=coGpmA4saEk)

<comment><USER4> I agree with your larger point, but the example is flawed. Ford did not invent the car, he "just" made it much cheaper by inventing the assembly line.

<comment><USER5> Interestingly he didn't even invent the assembly line; just made it a lot better...

</comment></comment></comment></comment><comment><USER6> an extraordinarily gimmicky headline orientated experiment.

However, it is still genuinely cool despite that. Nowhere near a precision brain to brain interface that could be useful _, but its the suggestion that one might be possible

_ and if people are twitchy about mobile phones radiating the brain, I doubt they will go for a TMS machine that focuses huge magnetic pulses into the brain. Pulses that are so strong the virtually unferrous bio matter still sheds electrons making your brain do unknown chemistry that makes your finger twitch slightly.

</comment><comment><USER7> Strangely, I was literally just discussing the near-term inevitability of this with someone last night.

 _While an ever-more subjugated, time poor mass of humanity walls themselves in to ever smaller apartments in ever larger cities, stringing along their physical bodies through ever more artificial means, moving ever further from nature and sustainability, we see the rising tide of ever more immersive virtual experience: writing, phonographs, radio, television, computer games, three dimensional environments - now with depth - eye tracking, motion tracking, direct nervous system stimulation, even virtual emotion through the megacoroporate pharmacopia ( "ever feel tired? hard to focus? unhappy? ask your doctor about...").

Humanity nears a fissure of potential future realities: constrain our engine of consumption, or face handing a once virtuous and verdant home planet down to succeeding generations as a biological desert demanding ever more artificial means of sustenance for an ever-smaller elite, clinging desperately to a bygone quality of life through the corporate-military force of dynastic capital._

Well, not quite so hyperbolic, but that was the gist: it'd be a shame if instead of dealing with the issues facing our planet we all just shut down and went virtual.

</comment><comment><USER8> If the detection accuracy can be improved, one can theoretically telepathically communicate with another using Morse code :) Also, since we have the ability to 'write' a low res image onto a person's retina, I can also communicate with that person by just typing on a keyboard. The receiver would see alphabets flashing in his mind.

<comment><USER9> i'm sure the translation would be a very difficult problem, but the idea of transferring an image from one person to another telepathically is ground shattering in terms of impact. Take every day tasks when working with a team right now. I spend days writing documents solely for the purpose of communicating ideas from my own head to others. Still even with extensive documents with images, and text, miscommunication is not uncommon.

Even still, when I program I mostly have an "image" of the program in my head. Imagine if a computer knew me well enough to translate that "image" to actual code.

This kind of stuff is a LONG ways away... but it seems like the basic concepts are being proven, and its both exciting and scary. What it means to be human could be different in 2100. If this technology is expensive, and we still have capitalism, and there's still a large class of poor. The digital divide could turn that casim into the grand canon. I'm scared that the technology is coming faster than our capability to handle it socially.

<comment><USER9> Thought of another application. Let's say you're a teacher. One of the hardest parts of education today is relating a concept by using other concepts that are more familiar to students. Its a translation problem, but there's an unknown variable. The teacher (especially if they're talking to a large class) may not actively know how well or how correctly their students are understanding the topic.

Assuming that a system is good enough to commercialize, there's probably some AI tech that's gaining traction too. If you could use AI to analyze a students understanding, the computer could interactively forge the lesson. The result would be faster, more accurate learning.

Learning, in my opinion being one of the biggest barriers to progress, the pace of change would be incredible!

</comment></comment></comment><comment><USER10> I await the day we get a brain API that can read generic actions and perform the same actions (e.g. read when someone bends their index finger and equally force the bending of said finger)

</comment><comment><USER11> A powerful version of this is central to the plot of Gamer (2009).

</comment><comment><USER12> I wouldn't put this beyond the possibility of an incredibly elaborate prank. This is about as trust worthy as a Las Vegas magician's act.

...and now, I will saw my assistant in half!

</comment><comment><USER13> Oh boy! Sense/NET here we come!

</comment><comment><USER14> It's habbiding! What next, communicating via thoughts?</comment>


Ask HN: How to get clients as a team? - <AUTHOR> Hi there,
me and my friends started a small company where we focus on creating (mostly) backend services (as we all have rich experience with that).
We would like to find a startup or some comapny that would be interested in hiring such team - basically team that can deliver for them implementation of their ideas. How common is such scenario? What would be the best route? We don't even know where to start... can anyone share their experiences? <comment><USER2> Do you have a portfolio of what you have built?

You can apply to some of the HN: Whos Hiring companies - I have seen people respond to ads on those threads as teams.

Where are you based? You don't sound like you're based in the US.

Do you have a consulting page setup, detailing skills and experience?</comment>


All Mac Store Apps Stopped Working Due to Expired Security Certificate - <AUTHOR> http://techcrunch.com/2015/11/12/all-mac-store-apps-stopped-working-due-to-expired-security-certificate/ <comment><USER2> I miss the days when I could download software and it would just work, and people would be alarmed if that software "phoned home" for any reason.</comment>


Facebook Had an Impressively Bad Day - <AUTHOR> https://www.bloomberg.com/view/articles/2018-07-26/facebook-had-an-impressively-bad-day <comment><AUTHOR> _It is also a little tempting to divide that $150 billion number by another number disclosed yesterday, Facebook's 2.5 billion monthly active users across its various platforms.

Like: If yesterday's results are an indication that Facebook is going to grow more slowly by being less rapacious with user data and privacy and targeting, then the cost to Facebook's shareholders of that reduced rapacity looks to be about $60 per user.

Is that … a good trade? Would you pay $60 (once) to use a somewhat more chill version of Facebook? Is the right way to think of yesterday's results as a $60-per-user transfer from Facebook's shareholders to its users?_</comment>


The Horrors of Upgrading Etcd Beneath Kubernetes - <AUTHOR> https://gravitational.com/blog/kubernetes-and-offline-etcd-upgrades? <comment><USER2> Hey thanks for the article. I know etcd upgrades can look complex but upgrading distributed databases live is always going to be quite non-trivial.

That said for many people taking some downtime on their Kube API server isn't the end of the world. The system, by design, can work OK for sometime in a degraded state: workloads keep running.

A few things that I do want to try to clarify:

1) The strict documented upgrade path for etcd is because testing matrixes just get too complicated. There aren't really technical limitations as much as wanting to ensure recommendations are made based on things that have been tested. The documentation is all here: [https://github.com/coreos/etcd/tree/master/Documentation/upg...](https://github.com/coreos/etcd/tree/master/Documentation/upgrades)

2) Live etcd v2 API -> etcd v3 API migration for Kubernetes was never a priority for the etcd team at CoreOS because we never shipped a supported product that used Kube + etcd v2. Several community members volunteered to make it better but it never really came together. We feel bad about the mess but it is a consequence of not having that itch to scratch as they say.

3) Several contributors, notably Joe Betz of Google, have been working to keep older minor versions of etcd patched. For example 3.1.17 was released 30 days ago and the first release of 3.1 was 1.5 years ago. These longer lived branches intend to be bug fix only.

<comment><USER3> > upgrading distributed databases live is always going to be quite non- > trivial.

I understand that the implementation of live upgrades for a distributed database will be complex but this post is about the user experience. Given enough resources, is there a reason that it can't be a single "upgrade now" command? Or maybe slightly more real-world, a 3 step process like: "stage update" -> "test update" -> "start update".

<comment><USER2> That is the process: [https://github.com/coreos/etcd/blob/master/Documentation/upg...](https://github.com/coreos/etcd/blob/master/Documentation/upgrades/upgrade_3_1.md#upgrade- procedure)

      for i in members
        Replace etcd binary
        Restart etcd process

</comment></comment></comment><comment><USER4> I don't know about you, but my application is tested on a single platform/stack with a specific set of operations. When the operation of the thing I'm running on changes, my application has changed. It just can't be expected to run the same way. Upgrade means your app is going to work differently.

Not only is the app now different, but the upgrade itself is going to be dangerous. The idea that you can just "upgrade a running cluster" is a bit like saying you can "perform maintenance on a rolling car". It is physically possible. It is also a terrible idea.

You can do some maintenance while the car is running. Mainly things that are inside the car that don't affect its operation or safety. But if you want to make significant changes, you should probably stop the thing in order to make the change. If you're in the 1994 film _Speed_ and you literally can't stop the vehicle, you do the next best thing: get another bus running alongside the first bus and move people over. Just, uh, be careful of flat tires. ([https://www.youtube.com/watch?v=rxQI2vBCDHo](https://www.youtube.com/watch?v=rxQI2vBCDHo))

<comment><USER5> Picking a dependency for a system that does not have a live method of updating, is a terrible idea for a software system.

Physical systems, like a car, have obvious limitations on what can be modified when. Similarly, software will have some limitations on what happens when you are updating. But accepting "upgrades can't be done easily" for software is putting much more limitations on the software than makes sense.

<comment><USER4> With the exception of like, binary patching of executables that use versioned symbols or some craziness like that, virtually all software cannot be upgraded while it is running _and expected not to produce errors_.

I mean, if you use a plug-in style system, you can program it to block operations while a module is reloaded or something. But most software is not designed this way. Especially with ancient monolithic models like Go programs.

Upgrades just can't be done easily in a complex system. You can do them without concern for their consequences, but that doesn't mean they're safe or reliable methods.

</comment></comment></comment><comment><USER6> I'm old school. I look at containers as jails and all the work to isolate applications in containers as of indifferent value given a flat plane process scope with MAC and application resource controls in well designed applications.

That is I default to good design and testing rather than boilerplate orchestration and external control planes.

All containers have done (popularly) in my opinion is add complexity and insecurity to the OS environment and encouraged bad behavior in terms of software development and systems administration.

</comment><comment><USER7> This may be an unpopular opinion, but I'm not a big fan of containers and K8S.

If your app needs a container to run properly, it's already a mess.

While what K8s has done for containers is freaking impressive, to me it does not make a lot of sense unless you run your own bare metal servers. Even then, the complexity it adds may not be worth it. Did I mention that the tech is not mature enough to just run on autopilot and now instead of worrying about the "devops" for your app/service you are playing catch-up with upgrading your K8s cluster?

If you're in the cloud, VMs + autoscalling or fully managed services (eg S3, lambda, etc) make more sense and allow you to focus on your app. Yes there is lock-in. Yes, if not properly arhitected it can be a mess.

I wish we would live in a world where people pick simple over complex and think long term vs chasing the latest hotness.

<comment><USER8> > This may be an unpopular opinion, but I'm not a big fan of containers and > K8S.

It is unpopular for a reason.

Disclaimer: if you can run solely on cloud managed services + serveless, please do that and do not even look at the rest of this message. This is a very nice approach, although there are some things you need to setup before calling victory (deployment pipeline is one). And, as you mentioned, there is vendor lock-in.

Now, containers. Look, no-one WANTS containers. Or VMs. Or anything else. We just want to run our stuff. It just so happens that containers are one of the most useful abstractions there are. Unless someone else comes up with a new abstraction, containers it is.

Because a container is at the end of the day, a process. Are you against processes? Or against process isolation in general?

You cannot lift an existing service and run serveless, you need to modify it. In many cases, it is not practical. In other cases, they need to be an actual server-like application and hold a connection. Lambda doesn't help there.

> While what K8s has done for containers is freaking impressive, to me it does > not make a lot of sense unless you run your own bare metal servers.

One thing has nothing to do with the other. These are different levels of abstraction, there are challenges when running bare metal servers which are not present in cloud environments. Kubernetes can do so much more in a cloud environment (persistent volume claims, etc). Rolling out network attached storage on bare metal servers is a pain. It is also a pain with Openstack, but at least there is a standard interface there.

> If you're in the cloud, VMs + autoscalling or fully managed services (eg S3, > lambda, etc) make more sense and allow you to focus on your app.

Sorry, I respectfully disagree. I have spent the last two months implementing automation for deploying a cluster on AWS, with auto-scaling, auto-healing, the works, automatically deployed through Jenkins. It is NOT easy, it is not simple, and it is not focusing on my end application, _unless_ you are ignoring all the technical debt you are incurring. And we DO have several k8s clusters, I will be moving that crap to k8s as soon as I can.

Let me make a quick list of what you need:

Prep:

You can use a barebones (ubuntu|redhat|coreos|etc) VM. In which case, provisioning is not complete once the VM is up by the ASG, you need to install the app. If you use an AMI, you now need to build automation to construct these AMIs. Note: if at this stage you are building AMIs by hand, this is a technical debt, which you will have to pay. Alternatively, you can use something like cloud init. If so, see below:

* Create the auto-scaling group * Create the launch configuration * If your AMI is not entirely complete, add user data (or equivalent) here * Set the health checks

And you are done! Right? No.

What about log rotation? Do you have centralized logging? No, tech debt. Go set it up. What about monitoring? Are you using cloudwatch? Prometheus? Go set that up. What about alerting? Not everything requires a VM to be destroyed, you need to set it up. What about upgrades? Are these cattle servers? Then you have to modify your AMI and launch config. Go automate this (tech debt if not) How are you controlling access? Do you have a team? Are they allowed to SSH? Where and how are you storing the keys? How do you invalidate if a key gets compromised? I could go on, but let's keep at this level because the point is to draw a comparison.

With K8s, here's what you do:

Create a container image. Dockerfile, fancy Jenkins script, some other mechanism, I don't care. Create an image, put it in a registry somewhere. Create a YAML file describing your 'deployment'. It can be a few lines of code if you don't care about most of the stuff. If you need external access, you can create a service, which is another YAML If you don't have an existing HTTPS load balancer, point to the k8s workers (trivial with something like ingress on GKE)

And you are done. This automatically gets you:

• Self healing • Scheduling among worker nodes. You can control it or let K8s decide • Bin-packing • Logging (centralized logging requires a one-time step, with fluentd or similar, may be handled by cloud providers) • Similarly, monitoring and alerting require a one-time investment in deploying something like Prometheus, after that is done. Getting prometheus to scrape your pods is very easy to do, easier than deploying in a VM by VM basis • Upgrades: deployments handle that for you. Even replica sets before it, you just needed to apply a new YAML with an updated version • There are no SSH keys to mess around. K8s has certificate-based user access control, with an optional RBAC • The SSH equivalent is kubectl exec • Service discovery: you have DNS records for all local services created for you. The cluster will direct you to the correct node. • Scaling is trivial, but most importantly, quick. kubectl scale deployment --replicas=X. It only takes whatever time is required to download the image and run it. You don't have to spin up a whole operating system • Optional: you can have horizontal pod auto-scaling, so your services can scale up and down automatically.

It is not perfect, but it can be a game changer. I cannot imagine how we would be running our operation without K8s. Actually I can: version 1.0 of the app was a bunch of VMs, one for each service. It was nightmarish. Now the push, company-wide, is to move everything to K8s. All VMs, all data stores, all of it. And it has absolutely nothing to do with hype, it has everything to do with proven advantages, compared to most of other alternatives.

I guess you could also do Mesos. They have a similar concept, only it's not K8s.

Note that SOMETHING needs to run the K8s cluster itself. That something is precisely your auto-scaling groups and VM images. It is less painful with a container-optimized OS (like CoreOS or whatever Google uses)

<comment><USER7> A container is not a process. The fact that you say this makes me wonder if you understand what K8s and how it works.

K8s is not going to solve the issues you outline above (logs, proper monitoring, etc). Even worse, you're gonna have a bad time migrating them to a proper solution.

<comment><USER9> While k8s does not in and of itself solve some of the issues pointed out above, it does centralize a lot of these problems. These centralized problems are then often easily addressed by the cloud providers actually running the k8 cluster. GKE automatically sends log data and metrics through fluentd to their Stackdriver platform including error alerting. If something even prints something that looks like a stack trace to stdout or stderr, Stackdriver sends alerts and creates an issue for us.

</comment></comment></comment></comment><comment><USER10> The clustering story for etcd is pretty lacking in general. The discovery mechanisms are not built for cattle type infrastructure or public clouds. ie it is difficult to bootstrap a cluster on a public cloud without first knowing the network interfaces your nodes will have or it requires you to already have an etcd cluster OR use SRV records. From my experience etcd makes it hard to use auto scaling groups for healing and rolling updates.

From my experience consul seems to have a better clustering story but I'd be curious why etcd won out over other technologies as the k8s datastore of choice.

<comment><USER11> > From my experience consul seems to have a better clustering story but I'd be > curious why etcd won out over other technologies as the k8s datastore of > choice.

That'd be some interesting history. That choice had a big impact in making etcd relevant, I think. As far as I know, etcd was chosen before kubernetes ever went public, pre-2014? So it must have been really bleeding edge at the time. I don't think consul was even out then - it might have been they were just too late to the game. The only other reasonable option was probably ZooKeeper.

<comment><USER12> I was around at CoreOS before Kubernetes existed. I don't recall exactly when etcd was chosen at the data store, but the Google team valued focus for this very important part of the system.

etcd didn't have an embedded DNS server, etc. Of course, these things can be built on top of etcd easily. Upstream has taken advantage of this by swapping the DNS server used in Kubernetes twice, IIRC.

Contrast this with Consul which contains a DNS server and is now moving into service mesh territory. This isn't a fault of Consul at all, just a desire to be a full solution vs a building block.

<comment><USER13> My understanding is that Google valued the fact that etcd was willing to support gRPC and Consul wasn't -- i.e., raw performance/latency was the gating factor. etcd was historically far less stable and less well documented than Consul, even though Consul had more functionality. etcd may have caught up in the last couple years, though.

<comment><USER14> At the time gRPC was not part of etcd - that only arrived in etcd 3.x.

The design of etcd 3.x was heavily influenced by the Kube usecase, but the original value of etcd was that

A) you could actually do an reasonably cheap HA story (vs Singleton DBs)

B) the clustering fundamentals were sound (zookeeper at the time was not able to do dynamic reconfiguration, although in practice this hasn't been a big issue)

C) consul came with a lot of baggage that we wanted to do differently - not to knock consul, it just overlapped with alternate design decisions (like a large local agent instead of a set of lightweight agents)

D) etcd was the simplest possible option that also supported efficient watch

While I wasn't part of the pre open sourcing discussions, I agreed with the initial rationale and I don't regret the choice.

The etcd2 - 3 migration was more painful than it could be, but most of the challenges I think were excacerbated by us not pulling the bandaid off early and forcing a 2-3 migration for all users right after 1.6.

</comment></comment></comment></comment></comment><comment><USER15> To sidestep upgrade issues, we're pursuing stateless immutable K8S clusters as much as possible. If we need new K8S, etcd, etc., we'll spin a new cluster and move the apps. Data at rest (prod DBs, prod Posix FS, prod object stores, etc.) is outside the clusters.

<comment><USER16> Where do you run your persistent apps?

<comment><USER17> Not the OP, but I have two kinds of persistent data.

1) Images / files / etc. It all lives in cloud storage ("s3"), outside of K8s

2) RDBMS data. You can just run as hosted sql (say CloudSQL) or a not-in-k8s VM. I have found no compelling reason to move my RDBMS into my k8s cluster.

<comment><USER18> That's a bit distressing. Most everywhere I've worked, the infrastructure that matters to the business has fallen into roughly two categories:

Category 1: stateless-"ish" workloads. More than 90% of hosts/containers used . . . less than 25% of operations headaches and time. Issues that happen here are solvable with narrow solutions: add caches, scale out, do very targeted, transparent fixes to poorly-performing application code.

Category 2: stateful workloads. Less than 10% of hosts/containers. 75% or more of operations headaches and time. Issues that happen here have less visibility, fewer short-term fixes ("just add an index and turn off the bad queries" only works so many times before you're out of low-hanging fruit), and require more expertise to solve in a way that doesn't require the application/clients to change.

If k8s and other next-gen technologies are only easing the first category, that makes me sad. It's like we have this sedan (off-the-shelf web technologies) that we have to take off-roading and it falls apart all the time. I don't want a better air conditioning system and more cushions in my seats; I want the vehicle to not break.

<comment><USER19> In k8s you can easily host stateful services. You have persistent disks that you can attach to containers, and you also have StatefulSets if you have a stateful service that you want to have automatically scaled ([https://kubernetes.io/docs/concepts/workloads/controllers/st...](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)). You can use both to run a database (postgres) for example.

<comment><USER20> I thought that this was the case too, but OP had a link ([https://gravitational.com/blog/running-postgresql-on- kuberne...](https://gravitational.com/blog/running-postgresql-on-kubernetes/)) to previous post that got me worried.

<comment><USER8> From TFA

> Kubernetes is not aware of the deployment details of Postgres. A naive > deployment could lead to complete data loss.

That sounds ominous, but is actually a tautology.

You have the exact same challenges anywhere else, but since K8s makes some operations so easy to do, you need to be careful. RDBMs are specially tricky because most of them expect a single "master" which holds special status. And it so happens to hold all your data too (as do your replicas, provided they are up to date).

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This article really hits home.

A K8s cluster can survive just about anything. Worker nodes destroyed, meh, scheduler will take care of bringing stuff up. Master nodes destroyed. Meh. It doesn't care.

ETCD issues though? Prepare for a whole lot of pain. They are very uncommon though. Upgrading is the most frequent operation.

</comment><comment><USER21> I'll have to read this later this weekend, my home k8s cluster that broke did so because of etcd. Grrr

</comment><comment><USER22> From my experience, running etcd in cluster mode simply creates too many problems. It can scale vertically very well and if you run etcd (and other Kubernetes control plane components) on top of Kubernetes you can get away with running only a single instance.

</comment><comment><USER23> Etcd misbehaving during upgrades or when a VM was replaced was a _massive_ source of bugs for Cloud Foundry.

There is no longer an etcd anywhere in Cloud Foundry.

<comment><USER24> Aren't they introducing Kubernetes as part of Cloud Foundry: [https://techcrunch.com/2018/04/20/kubernetes-and-cloud- found...](https://techcrunch.com/2018/04/20/kubernetes-and-cloud-foundry-grow- closer/)

<comment><USER23> Sort of. Kinda. It's complicated. But insofar as Kubernetes becomes the container orchestrator, I imagine we will encounter some or all of those problems again.

Cloud Foundry's current orchestrator, Diego, is of similar vintage to Kubernetes. It now relies entirely on relational databases for tracking cluster state. Ditto other subsystems (eg, Loggregator). It scales just fine. MySQL, while not my personal favourite, has proved more reliable in practice than etcd. Some folks use PostgreSQL. Also more reliable in practice.

Paying customers care more about being more reliable in practice than being more reliable in theory.

I've ha-ha-only-seriously suggested we throw engineering support behind non- etcd cluster state. For example: [https://github.com/rancher/k8s-sql](https://github.com/rancher/k8s-sql)

</comment></comment></comment><comment><USER25> What problems exactly is etcd trying to solve?

<comment><USER26> Interviewer here -- "If you want to form a multi-node cluster, you pass it a little bit of configuration and off you go." .. "Raft [etcd] gets you past this old single-node database mantra, which isn't really particularly old or even a wrong way to go. Raft gives you a new generation of systems where, if you have any type of hardware problem, any type of software instability problem, memory leaks, crashes, etc., another node is ready to take over that workload because you are reliably replicating your entire state to multiple servers."

</comment></comment><comment><USER27> Lol. CoreOS and Hashicorp products often throw "cloud" and "discoverability" around but lack crucial features for ops supportability found in solutions that came before. Zookeeper, Cassandra, Couchbase didn't evolve in a development vacuum chamber. New != better.</comment>


Nissan pledges commercially viable autonomous drive by 2020. - <AUTHOR> http://nissannews.com/en-US/nissan/usa/releases/nissan-announces-unprecedented-autonomous-drive-benchmarks

<comment><USER2> "Work is already underway in Japan to build a dedicated autonomous driving proving ground, to be completed by the end of fiscal year 2014. Featuring real townscapes - masonry not mock-ups - it will be used to push vehicle testing beyond the limits possible on public roads to ensure the technology is safe."

Meanwhile Google has driven +200K miles on real highways and streets with their autonomous car.

<comment><USER3> > Google has driven +200K miles on real highways and streets

I have got to say, I am pretty amazed they have managed to swing that. Permission to drive autonomous robot cars around the everyday streets of litigation and safety-obsessed California? An accomplishment of equal size to any one technical challenge in the car's making, I would say!

<comment><USER4> As I understand, they didn't ask permission. They simply announced one day that they'd been doing it for a year, and then lobbied California to legalize it afterwards. Given the potential benefits of being the state that makes autonomous cars a thing, I imagine it was an easy sell.

</comment></comment></comment><comment><USER5> Meanwhile... California is trying to build a 100 billion dollar bullet-train boondogle that will be ready in 20 years. By that point our efficient electric cars will be able to link together in high speed freeway 'trains'. What if that money was invested in developing the autonomous cars?

The public thinks everyone else is going to ride the train and free the highway up for them... what a waste.

<comment><USER6> Cars cost something like $15+ per (calendar) day, and cause congestion when used in big cities. Making them autonomous won't help with either of those, but replacing them with usable mass transit does.

<comment><USER7> Automation will certainly help with congestion by optimizing who is doing what when. I am not a network engineer, but I cant imagine that people are driving the most efficiently to even attempt to maximize throughput.

<comment><USER8> especially when you think about the fact that a lot if not most traffic jams are ghost jams, where a slight overreaction ripples through the following cars causing them all to stop for no apparent reason.

<comment><USER7> Exactly the kind of stuff I am talking about!

</comment></comment></comment></comment></comment><comment><USER9> I don't see any feasible way to transition to high speed linked autonomous cars. Unfortunately, there are a lot of people who need to get to work via car, and these people will not be able to afford a new car. Transitioning from a driver based to a driverless technology would take a government intervention in the economy that is unacceptable to most Americans. If we utilize the same road system, there would need to be massive subsidies for the poor to swap out their cars and we would need to outlaw classic automobiles. Creating a separate road system would take a massive public investment.

<comment><USER10> Nonsense. You start with driverless cars that can use existing infrastructure with everybody else, then as the density of driverless cars goes up over time, you take advantage of the other economies that emerge. At some point, probably decades later, eventually society will simply ban driverless cars, but you don't have to _start_ there. There's no need for a "big bang" event.

By the time that happens, the "poor" won't have to "replace" their car, because they'll already have dumped the expensive rust-buckets for time-shared rent-a-cars. It's the rich that will be the last holdouts, not the poor.

<comment><USER9> By simply adding autonomous cars to the current infrastructure, it doesn't improve peoples lives in a directly obvious way. They can't go any faster, and traffic does not get reduced. Yes, there is the imperceptible benefit of a slight reduction in the probability of death, but a recent New Yorker article pointed out that antisepsis was slow to be adopted because the benefits were not as easily measurable -- in contrast, anesthesia, invented at the same time, was adopted worldwide almost instantly. I personally would only buy a driverless car if it meant I could immediately get where I am going twice as fast. Otherwise, I rather enjoy driving.

<comment><USER10> It benefits the person owning the driverless car, who can now do something other than drive while still moving from A to B. You seem to be insisting on thinking collectively, but that's not how people decide or act. It only has to benefit the owner for it to sell.

The rich will be the last to let their human driven cars go, but they'll also obviously be the first to adopt them, once they're safe. In this case, the rich other than the ultra rich, who can already afford cars-they- don't-drive... giving further evidence that, yeah, people want this.

Your argument would, for instance, seem to explain why cars never took off... why, one car hardly benefits anyone. There aren't even any car suitable roads, after all, and think of all the horses the smelly, loud thing will spook! But... that's not how people buy things.

The collective benefits come later. The individual benefits come first.

</comment></comment></comment></comment><comment><USER11> Cars are way too dangerous. We accept the absurdly high number of injuries and deaths they cause only by lack of a better mean of transportation.

I hope self-driving cars will have hyper-efficient safety mechanisms, especially to protect pedestrians and bikers, not just the car's passengers. This would be a huge progress for humanity.

<comment><USER12> Making self-driving cars safer than people-driven cars is trivial. The hard thing will be handling the tidal wave of FUD when the inevitable happens and someone dies as a result of one. Google or Nissan or whoever will need a mountain of good PR and safety statistics to be able to push it back. That alone is enough reason to motivate the creation of "hyper-efficient safety mechanisms".

</comment></comment><comment><USER13> I'm really wondering about how the social change will occur. Creating the technology will end up the easy part. How do we deal with our cars being software driven, and that software being created by companies which may not have the best track record on consumer privacy? (That's a concern I have about the hyperloop as well- wouldn't these proposed futuristic transportation involve a lot of surveillance by default, compared to old-fashioned modes?) How do we deal with the transition when the majority of cars are still people driven? How does government handle this revolutionary shift?

</comment><comment><USER6> What is "within two vehicle generations"?

<comment><USER14> The auto industry works in cycles on the scale of approximately 5-6 years. So technology that is not practical right now is 6+ years out.

They are basically promising to sell this as soon as possible. They have 1-3 years for the go or no go decision.

</comment></comment><comment><USER15> From no working prototype to multiple commercially available vehicles in 7 years. Yeah, okay.

I hate to be that guy, but it took ~3 years to get the Leaf to production. And the Leaf uses well-known technology that had been shipped by other vendors a decade earlier. I'd be happy to be proven wrong, but this feels like a very long reach.

</comment><comment><USER16> No thank you.

I am very dubious about other people's driving skills, I tend to assume everyone else on the road is out to kill me and will do the dumbest thing possible at any given moment.

But even so, I am also an experienced software developer, and I know that software is only as good as the author(s). Bugs happen. It's inevitable. And I don't want to die or be injured because of software errors. I'd rather it be human error.

Now you might say to this, "Planes fly on auto pilot constantly. Every time you fly you're basically in the hands of software." And this would be true. But my response to that is:

1) The air is much less densely packed than the roads and highways.

2) In the air, even though you are traveling much, much faster than in a car, the pilots have more time to react to a problem than a driver in a car.

3) The pilots are highly trained, experienced and hopefully alert. Drivers in automated cars will be complacent and texting on their phones.

I think this is a terrible, terrible idea and misuse of technology, despite the fact that humans are shitty drivers. I think it's only going to exacerbate the problem, not improve it.

<comment><USER17> Have you seen car accident stats? I'll concede that bugs do occur, but it would take some _serious_ failure to make it any worse than the average driver. Even decent or good drivers are not that great, especially when you factor in distraction, tiredness, poor judgement of road conditions, etc.

<comment><USER16> If you were to replace every human driven car on the road with only autonomous cars, I will agree with you that the accident rate would likely be much lower over all.

But there's two problems here:

1) We won't be replacing all the cars overnight. The problem comes with the interaction between terrible human drivers doing wildly unpredictable, insane things and the inflexible, unadaptable automated cars.

And

2) I'm not comfortable with dying or being injured due to a software error regardless of whether its likelihood is higher or lower. The roads are far more dangerous than the air, and this is why I'm uncomfortable with the whole concept of automated cars on the road and I'm not uncomfortable with autopilot in planes.

<comment><USER14> My experience as a human driver is that most accidents can be avoided by either (A) slowing down in ambiguous situations, or (B) aborting that lane change (usually because two cars are attempting to go into the same space).

Those behaviors are easily improved upon by software. Dealing with lane changes is something software is likely to be vastly better at, because they can point sensors in all directions -- I only have one set of eyes.

Furthermore, a lot of horrific accidents are because of bizarre unexpected things that the human does not react to in a timely fashion precisely they are so far out of the normal scope of traffic flow.

For example, what if a car coming the other direction drifts in front of you on a rainy night? This is an unfortunately common and very lethal kind of accident in rural areas. It will take you 1 to 3 seconds to interpret the scenarios and react appropriately. (You only get 3-4 seconds before your are killed.) A computer can instantly recognize that car 100 yards away is maneuvering in a potentially lethal manner and begin slowing down right now. That buys more time for everyone.

<comment><USER18> Strangely, this might kill autonomous cars entirely. Any failure to properly respond to something bizarre can be the subject of a lawsuit that could kill the autopilot manufacturer.

Engineering solutions are a tiny part of getting this stuff to market.

</comment></comment></comment></comment></comment><comment><USER19> Why doesn't Google just buy Tesla already?

<comment><USER20> What a great idea! That way the NSA can know your real-time location on the roads too, even if you have your cellphone off.

<comment><USER19> That's a bug with the american government (your?), not Google. Tesla on its own can't fight it any more than Google can, them both being american companies.</comment></comment></comment>


Why the brain sees maths as beauty - <AUTHOR> http://www.bbc.co.uk/news/science-environment-26151062

<comment><USER2> This story mentions Fermat's theorem that every prime congruent to 1 modulo 4 is a sum of two squares. Fermat provided no proof of this theorem. There are at least four different proofs, attributable to Euler, Lagrange, Dedekind and Zagier. See [http://en.wikipedia.org/wiki/Proofs_of_Fermat's_theorem_on_s...](http://en.wikipedia.org/wiki/Proofs_of_Fermat's_theorem_on_sums_of_two_squares)</comment>


Ask HN: Back end as a service or CMS? - <AUTHOR> I'm building a content based service right now and since I don't have a big team, I'm thinking about using a BaaS or something.
I have a few professionals who create the content, upload it and manage the restrictions, but besides filming they aren't very technical people.
I need a mix of WordPress and Parse.
On the one side a CMS with a nice, pre-existing admin UI, for not-so-technical people to upload and manage the the content and users.
On the other side just a HTTP-API I can use within my App to deliver the content and eventually save some user data with. <comment><USER4> Welcome to programming - where there is no right answer and theres 1000 different ways to do what you want to do.

Years of experience wouldn't make this an easy question to answer - <USER2> has their preferred stack; way of doing things; etc...

(personally) I like Wordpress for just a strait up blog. Anything more should get some custom code / CMS. It's not to say you couldn't do this in WP, but why lock yourself into a framework which may do more then you need it to do or less and you need to write custom code anyway?

If you write a custom API / CMS, you need to do everything yourself - <USER3> authentication, data storage, UI, the API, etc... It's a lot more work, but you'll get exactly what you build, no more, no less.

I would do a custom API, and use a CSS framework / JS framework where you can to save a bit of time. Plugin stuff like Bootstrap to get started quickly with the layout; there are thousands of JS script for JQuery, React, Vue, Angular to add any frontend features you'd like, etc... Then, if you ever decide to build a mobile app, the API is already written and you just need to hook up the app frontend to it.

It won't hurt to start on WP and see how far you get; if you out grow it or are feeling limited, start new and switch to a custom API / frontend. While it may be a PITA, It's not uncommon for new products to go through multiple revisions in the first year, especially when there isn't a huge team behind it to prototype different ideas.

<comment><AUTHOR> Thank you.

WP seems to be a nice fit, but I wanted to avoid deploying my own servers.

Does this work with the SaaS version of WP?

And does this allow access control of the content based on roles?

<comment><USER4> Wordpress can do roles for sure - admin, author, editor, etc...

You can look at something like this - [https://wordpress.org/plugins/user- role-editor/](https://wordpress.org/plugins/user-role-editor/) \- if you don't want to try to build it yourself.

There are many ways to use Wordpress without rolling your own servers; can configure a Digital Ocean droplet with WP pre-installed; use wordpress.com, even AWS has a Wordpress autoscale template.

My concerns with using WP is always what comes down the line. Once your stuck inside a box, sometimes it's hard to get out of it or change the box into something else. You can change WP all you want with custom plugins, custom functions, etc... but at what point do you say, this would be easier with something custom then to try to make WP do what you want.

Plus - WP has a colorful security history. Google Wordpress security updates and such and you'll get very mixed reviews on if you should use it for anything security sensitive.

</comment></comment></comment><comment><USER5> You've see [http://v2.wp-api.org/](http://v2.wp-api.org/) right?

Are you sure there's anything you need that WordPress 4.7+ doesn't already have?

<comment><AUTHOR> Thanks, sounds nice.

Does this also work with the SaaS version of WP or do I have to host my own WP instance to get this going?

And does it support role based access? I will probably have 2 kinds of front- end users. Free users and subscription users.

<comment><USER5> If by "the SaaS version" you mean WordPress.com, dunno - I doubt it. But you don't need to host it yourself - there are heaps of WordPress hosting specialists (I use and have been very happy with WPEngine).

For role based access, yeah - WP has simple role based accounts built in (admin, editor, author, user, and non-account public access) - and that's easily extensible with plugins.

</comment></comment></comment><comment><USER6> I suspect that a mix of Wordpress and Parse probably reduces to Wordpress and some programming. There might even be an existing addon that does what you want, but probably not exactly.

</comment><comment><USER7> I'm building a product that can solve your need. Check - [https://www.laktek.com/2016/11/29/introducing- pragma/](https://www.laktek.com/2016/11/29/introducing-pragma/)

It's still in private beta, so please request for an invite.</comment>


Mont Saint Michel Reveals New Secrets - <AUTHOR> https://news.cnrs.fr/articles/mont-saint-michel-reveals-new-secrets <comment><USER2> Mont Saint Michel is certainly a fantastic place, however I must admit that I got a bit bored of walking around the cathedral after about the 20th empty room of pillars ;)

Unfortunately a lot of monuments/castles in France suffer from that feeling of emptiness; I assume they were cleared out during the revolution. Your best chance of seeing interesting things as well as interesting buildings seems to be to look for privately-owned/smaller castles that are open to the public. I went to a particularly nice one a couple of years ago where I believe the tour guide was a member of the family who owned it, and they had a fantastic collection of old furniture, art, weapons etc. And the biggest holly tree I have ever seen (we're talking castle-wall height).

It's something we kinda take for granted in the UK. We have a lot of ruined castles that are obviously pretty empty, but if it's got a roof it probably has lots of old stuff to see inside too.

I do like the number of castles in France though; there's always something to see nearby. It's fun to be in a place with so many historic buildings, like here in Wales (~600 castles)!

<comment><USER3> Castels are nowhere close to the most interesting things to see in France.

"Le puy du fou" ([https://www.puydufou.com/fr](https://www.puydufou.com/fr)), "le palais idéal du factor cheval" ([http://www.facteurcheval.com/histoire/palais.html](http://www.facteurcheval.com/histoire/palais.html)), "le gouffre de padirac" ([https://www.vallee-dordogne.com/grottes-et- gouffres/le-gouff...](https://www.vallee-dordogne.com/grottes-et-gouffres/le- gouffre-de-padirac/visiter)), la via ferrata de peille ([http://peille.free.fr/index.php](http://peille.free.fr/index.php)) or "la cité des sciences" ([http://www.cite-sciences.fr/fr/accueil/](http://www.cite- sciences.fr/fr/accueil/)) are exemples of much more exotic, fun, interesting and unique things to do in France.

Stop doing the things they tell you to do on TV.

Cheese and wine will only take you so far.

<comment><USER4> Thank you for these examples. I visited the links but I am not entirely sure what I'm looking at (sorry, this may also have to do with being a non-French speaker). Would you be so kind as to provide your thoughts on what's the interesting bit about these places?

<comment><USER3> That would take a lot more time that I'm willing to invest.

</comment></comment></comment></comment><comment><USER5> For anyone interested in going there, try to do so off season or even in the middle of winter when there's almost nobody there. It's an amazing place regardless, but it's even better when you can enjoy it without all the crowd.

</comment><comment><USER6> [https://www.youtube.com/watch?v=P8y4lttBvFM](https://www.youtube.com/watch?v=P8y4lttBvFM) (headphones highly recommended)

<comment><USER7> Although i can't help but think he was thinking of the Cornish one, being Cornish: [https://en.wikipedia.org/wiki/St_Michael%27s_Mount](https://en.wikipedia.org/wiki/St_Michael%27s_Mount)

<comment><USER6> He was thinking about both! The track is 2 parts, the first is Mount St. Michel, second is St. Michael's Mount. I believe it was written in France, as he wrote the following on his site a few moths ago: "Been asked quite a few times about the bell at the beginning of Mt Saint Michel. Yes it is from the bell in the smaller chapel on the island, I was staying in a house very close to it with a lovely french girl, I sampled it while I was having my breakfast on a very lush sunny morning. Track was about half written by that point and fitted in just right at the beginning. Just recorded it with the internal mic on the laptop :)"</comment></comment></comment>


Selling a 300-Year-Old Cello - <AUTHOR> http://www.nytimes.com/2012/01/15/magazine/bernard-greenhouse-cello.html?_r=2&pagewanted=all <comment><USER2> This is a bit of an aside from the article but I am an antique pocket watch collector. I have dozens of watches over 100 years old and a few in the 250 year range. The obvious first thought is to say I 'own' those watches. However, when you have an object of that age in your hand, and you really consider its age, how many other people have cherished it for their lifetime, and that it will probably exist long after I am forgotten, you realize that you're really just the next temporary caretaker. For me anyhow it puts things into some perspective.

<comment><USER3> [http://patekwatch.blogspot.com/2011/05/patek-philippe-ad- ref...](http://patekwatch.blogspot.com/2011/05/patek-philippe-ad- reference-5205g.html)

[http://patekwatch.blogspot.com/2011/11/patek-philippe- calatr...](http://patekwatch.blogspot.com/2011/11/patek-philippe-calatrava-ad- reference.html)

<comment><USER2> Brilliant! Thank you, hadn't seen those before.

</comment></comment></comment><comment><USER4> For the love of God, do NOT let the buyer use Paypal.

</comment><comment><USER5> Old string instruments get pretty insane in price. My old teacher plays on a cello that's worth ~$1 million, and interestingly enough, he got a group of 10 investors to each put down $100k (not unlike angel investing I suppose). It's win-win: the instrument is pretty much guaranteed to appreciate in value, especially with a serious artist performing on it, and the artist gets to play on a instrument that doesn't hold them back in terms of expressiveness/tone quality.

<comment><USER6> _pretty much guaranteed to appreciate in value_

Well, that's not how an efficient market behaves. But then this isn't an efficient market. It's a market with gigantic...gigantic...inefficiency. What price would I put on a strad? 500 dollars maybe. After all, it sounds about as good as other 500 dollar violins, worse for wear and tear.

At some point, the evaluation of real value and the romanticism of history are going to collide. This is more common in art, where the name "Picasso" out- values all the beauty that man ever produced. You can buy many thousands of prints for the price of single original. Why? Romance.

124 thousand pounds:

<http://en.wikipedia.org/wiki/Artist%27s_shit>

<comment><USER7> You're pretty much completely wrong.

1.) String instruments (possibly others too? I've no idea) generally improve by being skilfully played, a cello that has been played for a long time by Yo Yo Ma will _actually_ be better than it was before he played it.

2.) As with any piece of art, or antique, age is a factor, and as such instruments appreciating in value as time goes on is pretty understandable.

3.) It's _exactly_ how an efficient market behaves - items are valued at what people are willing to pay for them. That's how markets always work.

<comment><USER8> _"1.) String instruments (possibly others too? I've no idea) generally improve by being skilfully played, a cello that has been played for a long time by Yo Yo Ma will actually be better than it was before he played it."_

Do you have any sources for this? I've never heard this before.

It's easy to imagine how unskilled players could make an instrument worse, but it's hard for me to imagine how it would work the other way. Is it really related to the skill-level of the player, or are skilled player just more likely to care for the instrument properly?

I'm not trying to start an argument, I'm just genuinely curious...

<comment><USER9> There has been a lot of research into how instruments change by being played; nobody completely understands the mechanisms involved, but it is clear that there are changes in the crystallization of the varnish which affect the sound. Any good violinist can tell you that after an instrument hasn't been played for a while, it takes a few months of playing -- the louder the better -- before it will start to "speak" properly.

<comment><USER8> Do you know of any papers or articles you could point me to? The only thing I could find was this article: <http://www.phys.unsw.edu.au/jw/powerhousetwins.html>

It sounds like an interesting experiment, but probably needs more time to really provide solid data. At the time the article was written (2005) the two violins were only three years old and the results were inconclusive. It would be interesting to hear if they've done any follow-ups.

</comment></comment></comment></comment></comment></comment><comment><USER10> WNYC interviewed Elena Deblanco today - very poignant: [http://www.wnyc.org/npr_articles/2012/jan/15/daughter- auctio...](http://www.wnyc.org/npr_articles/2012/jan/15/daughter-auctions- stradivari-cello-to-hear-it-again/)

</comment><comment><USER11> When I worked at Lloyds of London I met some of the guys that focus on antique instruments - and one of the claims they had was a professional musician that ran over his 300 year old violin with his car. oops.

(and yep, the "no strings attached insurance" puns never ended)

<comment><USER12> How does the insurance even work on something like that. New for old just doesn't even begin to come close.

<comment><USER11> They got it repaired I believe; I think I read somewhere that it took a year.</comment></comment></comment>


How the opening scenes of Blade Runner were made (video) - <AUTHOR> http://douglastrumbull.com/key-fx-sequences-blade-runner-hades-landscape

<comment><USER2> I agree entirely with the various posts as to why Blade Runner has held up so well - the keen visual style, the incredible craftsmanship of Trumbull, and least of which - Ridley Scott's brilliant directing.

There is one other thing that I pointed out 10+ years ago in a film class that's often overlooked - the hair styles of the film (and also Alien 1).

Seriously, think about what a smart/bold design move it was to have everyone in such short hair - it's timeless. If you think I'm joking compare Alien 1 or Blade Runner to Aliens By James Cameron - a movie can be dated by mishandling such a small detail.

The other thing I love is how thorough Ridley Scott, Sid Mead, Dan O'Bannon and Trumbull's vision is in both Blade Runner and Alien (1); so dense and fully realized you get the sense that the doom shipped _Nostromo_ departed Blade-Runner earth. Classic, incredible films.

<comment><USER3> I don't get it, not having an immediate mental picture of the haircuts in the various Alien movies ready to hand.

But is the fact that movies with short hair look less "dated" just due to the fact that we live in a time where long hair is out? In thirty years if long hair becomes popular again will our short-haired movies look horrendously dated and Luke Skywalker look up-to-the-minute?

<comment><USER4> There's less variation possible in short hair cuts. Thus it's harder to look dated.

If you want to go all the way, shave your characters heads.

</comment></comment></comment><comment><USER5> It amazes me how that scene today still looks realistic.

It reminds me of Alien 1's ship interior built with spare parts of vacuum cleaners I think, it just brought so much more details that you couldn't get from CGI for at least 20 years.

I miss these old scifi movies where the special effects were crafted by hand. They had a real feel, that I still don't get from 'so clean yet dirtied' CGI.

<comment><USER6> As someone pointed out over at MetaFilter, a big part of the realism of that scene is thanks to a solid understanding of how cameras, lighting, and film work and interact, rather than super-detailed modelling. Trumbull is a photographic effects wizard, but he also had 80 years of earlier work to build on. I'm not sure we're quite there yet when it comes to CGI.

</comment></comment><comment><USER7> I try and watch BR at least once a year. Future L.A. is a place so detailed that it seems absolutely real.

Not only is it a brilliant movie, it holds up amazingly well given its age. It could probably be released today and nobody would know the difference.

<comment><USER8> No it couldn't. There is no car chase, no explosions and only a couple of violent deaths.

Plus it has all this plot stuff that you have to 'like' concentrate on ...

Although it did invent the concept of anti-product placements. People would pay not to be placed in the remake!

<comment><USER3> _No it couldn't. There is no car chase, no explosions and only a couple of violent deaths.

Plus it has all this plot stuff that you have to 'like' concentrate on ..._

I'm sure if you went back to read the movie reviews from the year Blade Runner came out, you'd find them full of similar sentiments. "Blah blah, they don't make sophisticated movies any more, people only care about spectacle and car chases and explosions." No doubt people will be making similar complaints in another 30 years while completely ignoring the sophisticated movies being produced in their own time ( _"Man, nobody makes movies like Primer or District 9 any more, do they?_ )

(Yes, I know District 9 has explosions.)

</comment></comment></comment><comment><USER6> Two shorter Blade Runner clips can be found here.

<http://douglastrumbull.com/videos>

The one about how they filmed the blimp was pretty amazing.

<comment><USER7> Something that keeps coming up over and over in his descriptions is how they kept trying to do this amazing work on a very tight budget. Which is astounding both because of the quality of the result, and how it seems like effects budget today is virtually unlimited.

(didn't we move to CGI to try and cut costs?)

<comment><USER4> Reduced cost per unit often leads to greater demand.

</comment></comment></comment><comment><USER9> Pretty amazing website. He also built a scale model solution for the BP oil spill (while most people were just waxing philosophical about what to do):

<http://douglastrumbull.com/bp-spill-fix-prototype-solution>

Can't believe I didn't hear about this in the news.

</comment><comment><USER10> Kind of reminds me of how they made the HBO "Starship" intro video from the 80s:

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

It's boggling to think about the amount of time and energy spent to make each of these 30 seconds of work. It's never going to be done this way again.

<comment><USER7> I remember watching that at the time and think it was a cool bit of movie wizardry. However, I don't think it's stood the test of time in the same way the Blade Runner effects have. The effects scenes in Blade Runner are nearly _flawless_. There is so much detail, some of it almost compulsively unnecessary. There's a scene where Decker is walking to his apartment, and you get a long view shot down the rows of buildings -- every time I see that I think "that's totally unnecessary, they could have just angled the camera such that you don't see the externals of the building, but oh man does it build a sense of setting". If you freeze one of those frames, it tells so much story about future L.A.

<comment><USER10> Well, Trumbull is just a cut above. Hands down.

I still want a computer setup like the one in 2001: A Space Odyssey. Or a tape scanner like the one from Brainstorm (a very underrated movie btw)

</comment></comment></comment><comment><USER11> BoingBoing interviewed Syd Mead, who designed the "look and feel" of the world of Blade Runner. <http://tv.boingboing.net/syd-mead/> Note that page has a three-part interview in reverse chronological order. It's all interesting, but the third part is the one that deals with Blade Runner specifically.

</comment><comment><USER12> Some Bladerunner DVD collections have the 3:53 hour long documentary "Dark Days", which is excellent and goes into Trumbull's work in great detail.

</comment><comment><USER13> Blade Runner holds up well EXCEPT...phone booths? That really makes me pause when I've watched it in recent years, no one has a phone. The one thing Blade Runner got wrong, but understandable considering when it came out.

<comment><USER3> Also we don't have off-world colonies, flying cars and replicants. Judge it as a movie, not as a prediction.

If you really want to fanwank it as correctly representing some future level of technology, though, imagine that in the future radio-frequency communications have been found to cause cancer and have been banned.

</comment></comment><comment><USER14> Thanks, coffee.

</comment><comment><USER15> So it would seem that creativity trumps the massive budgets and state of the art technology that are the hallmarks of just about all modern day SciFi flicks; hmmm ... wonder if that principle is somehow applicable to the startup scene?

<comment><USER16> I dunno. That setup looked pretty darn expensive. Did you see the number and size of all of the pieces involved? Custom etched and built models. Huge amounts of high-powered explosives. Not to mention the cost of the film. I don't mean to undercut your point of finding creative solutions, but I'm not sure this is a good example.

<comment><USER17> well if wikipedia is to be believed it had a 28 mill budget so 67 mill today. 67 doesn't sound like much compared to Avatar or Lord of the Rings but it's still a hell of a lot. And IIRC Harrison Ford was the only big name at the time, which saved them some money I'm sure.</comment></comment></comment>


Nokia Is Set to Return to Smartphones and Tablets: What to Expect? - <AUTHOR> http://www.anandtech.com/show/10333/foxconn-and-hmd-to-return-nokia-smartphones-and-tablets-to-market <comment><USER2> \- Foxconn finances this operation and engineers and manufactures the phones, essentially building a new non-bidding customer for itself and Sharp displays (owned by Foxconn)

\- Nokia maintains its brand recognition in consumer products. It retains the power to protect the reputation of the brand and quality of the products.

\- Nokia Research and Nokia Bell Labs continue doing research and they have tons of patents that this company has instant access.

Basically this deal replaces Nokia Mobile Phones division (Sold to MS) with Foxconn/HMD Global. It's a smart move but success is not guaranteed.</comment>