The Curious Field of Metamaterials - <AUTHOR> http://www.judegomila.com/2012/12/the-curious-field-of-metamaterials.html

<comment><USER2> The article mentions a potential application using lenses with incredible properties. Could one use these materials to make a lens that focuses x-rays? It has been postulated for decades that if one could use an x-ray light source for microscopy, it would be possible to observe the machinery of cells in real time (assuming the energy doesn't obliterate the cell). My understanding is that it isn't possible to make a lens to focus an x-ray as you can with visible light or using magnetic fields for electron microscopes. If these materials allowed this, it would usher in an incredible era of biological understanding.

<comment><USER3> No, the problem with x-rays is not the lens shape, but rather finding a material that will refract (i.e. bend) x-rays. X-rays tend to just go right though, or be blocked. It's hard to find something where the x-rays slow down, but keep going.

Also, the higher the frequency the harder it is to make a meta-material that works for it. (Since the feature sizes need to be about the same size as a wavelength.) We're barely there for visible light, x-rays are completely out of reach.

</comment></comment><comment><USER4> This stuff seems like science fiction. Small-object visual cloaking within five years? Room-temperature levitation? Really!? That would be, uh, somewhat revolutionary.

Does anyone have a more conservative layman's introduction to the field?

<comment><USER5> It reads like science fiction partly because there are things this makes possible that seem to go against everything the 'bedroom scientist' would think. Some of the things this mentions I had no idea about, but the core EM- cloaking seems to be described quite reasonably.

Just don't believe the timeframes. They are very optimistic from all I've read of this technology, especially if you're interested in doing much more than cloaking a coin from most visual frequencies in the next decade or two.

Long term promise in this field seems quite great, but I'd say we're way too early to be able to even guess what the drawbacks and limitations of any practical use will be.

</comment></comment><comment><USER6> This article mentions that intellectual ventures invented a type of super antenna for improving wifi bandwidth on flights. Pardon my ignorance on this subject, but aren't they a patent troll? I'm not overly encouraged that this thing will actually be built and put to market.

<comment><USER7> Patent trolling is one of their revenue streams (i.e. acquiring patents from others and then using them to get truckloads of money out of vulnerable companies already using similar technology) but they do perform actual research. Sometimes.

I'm not aware of any commercialized products based on their research, but they probably exist.

<comment><USER8> There was a lengthy article I read a number of years ago - the source escapes me (maybe Technology Review) - that described their process at length. To call what they do "research" or "inventing" is to twist those words beyond all meaning. They contract with a number of domain experts in various fields, fly them into Seattle as consultants, and hold multi-hour brainstorming sessions where they basically throw a bunch of loose concepts at a whiteboard and see what sticks.

Like all patent trolls, they basically identify where a valuable invention is likely to occur sometime in the future, have lawyers draw up a sufficiently vague patent application, and spray and pray - and then prey.

There is _zero_ follow up - no prototyping, no CAD files, no R&D, no clinical trials, no betas, no execution - it goes from nebulous "idea" straight to the legal department. If Myhrvold is an inventor, then Arthur C. Clarke's estate should get royalties on every satellite in orbit, and Gene Roddenberry's should get a piece of every iPhone sold.

Wait, I take that back - Myhrvold is an inventor after all. He's the Henry Ford of patent trolling - a pioneer in its mass production.

<comment><USER9> _There is zero follow up - no prototyping, no CAD files, no R &D, no clinical trials, no betas, no execution - it goes from nebulous "idea" straight to the legal department._

Is that uncommon?

<comment><USER8> For an inventor or a patent troll? I'm disputing them being characterized as anything but the latter.

<comment><USER9> For the average patent.

<comment><USER8> I suppose that depends on how pervasive patent trolling has become.

But yes, I would say that the development of the vast majority of inventions worth protecting would necessitate more than some scribbling on a bar napkin.

If the process begins with some vague "inspiration" about where an invention may lie, and then promptly ends with a call to your lawyer - no feasibility testing, no fleshing out of the concept, no iteration of thought, I would say that the patent system is fundamentally broken.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> tldr versioin: <http://tldr.io/tldrs/50bb074fcfbff44a4d000b00>

Impressive, hard to believe things such ad "cloaking a building to seismic waves" can actually be done!

</comment><comment><USER11> This article could use some editing.

 _super antenna's can_

super antennas can

 _companies like Hyperloop_

Not a company.

These kinds of little details definitely raise questions about the general quality of the research, especially since the article seems "too good to be true." But I hope this doesn't discourage the author; it's a really good article.

<comment><AUTHOR> Thanks Javert. Corrected. Can you ping me if you see any other mistakes via email?

</comment></comment><comment><USER12> point of clarification: quasicrystals are by definition non-periodic, most known examples of which are metamaterials. the first sentence incorrectly ignores a very interesting class of engineered compounds.

<http://en.wikipedia.org/wiki/Quasicrystal>

<comment><AUTHOR> You are correct. I just removed the word "periodic".

</comment></comment><comment><USER13> I don't get what cloaking to the naked eye means. Does it mean someone would be invisible or rather that I'd see a big black blob where they are?

<comment><AUTHOR> Black blob in the case of the EM "black hole". Invisible in the case of the standard cloak.

<comment><USER13> That's pretty incredible. So for the standard cloak does transmit the light from behind the object to the observer somehow?

<comment><USER14> I believe, from what I read in the past, that it actually _bends_ the light around the object, somewhat like the way water will flow past rocks in a river.

<comment><USER15> These cloaks typically work by converting an incoming photon into a surface plasmon, a wave of electron oscillations. By carefully tweaking the surface geometry it is possible to get the wave to interfere with itself so that the photon is re-emitted at the opposite side of the cloak, at least if the cloak shape is symmetric enough.

<http://en.wikipedia.org/wiki/Surface_plasmon>

</comment></comment></comment></comment></comment><comment><USER16> This article is 2000 and late. Next in the series we will see an article on Bose-Einstein condensation and the wacky world of atomic optics.

</comment><comment><USER17> This is so essential article. Thanks to the creator of the website. Thanks by Tutorial

<comment><USER18> You're doing it wrong.</comment></comment>


Thanks to Quora, now you can't read anonymously - <AUTHOR> http://gigaom.com/2012/08/01/thanks-to-quora-now-you-cant-read-anonymously/

<comment><USER2> Every time I read about tech companies taking away our ability to have some resemblance of privacy I get more infuriated. We've allowed big business to control how we create new technologies, then we abuse the people we depend on to use it.

It is almost like we are begging for governments to create laws in the interest of protecting peoples rights, without acknowledging that we are the ones responsible for bills like SOPA/PIPA. We create the need for protection, then we bitch about how it is implemented.

Want to make technology better? Quit abusing your users.</comment>


The Principal of Least Power; in this case – CSS - <AUTHOR> http://benhowdle.im/2013/09/26/the-principal-of-least-power/

<comment><USER2> I'm not sure a language with such a large body of very specific features (in this case, "only-child" selector) should be considered the least powerful.

This is just an example of using a domain-specific language verses using general purpose language.</comment>


Show HN: Fred-CLI - <AUTHOR> https://github.com/aamnv/fred-cli <comment><AUTHOR> Hey y'all - creator here. I'm a hobbyist dev working with Python and this was my first serious attempt at building a CLI app.

fred-cli interfaces with the FRED (Federal Reserve Economic Data) API and gives you access to the ~766K economic time series they host via your terminal. Open source and will be going forward (MIT license).

Was a ton of fun learning libraries like Click[1] and about the PyPi upload process. I do plan on maintaining the project going forward (both adding features and improving current features) - so feedback is definitely appreciated!

[1][https://click.palletsprojects.com/en/7.x/](https://click.palletsprojects.com/en/7.x/)

</comment><comment><USER2> Readme looks nice and polished. Good job on launching.

If you are looking for next steps for learning, consider writing tests. This should help get you started: [https://docs.python- guide.org/writing/tests/](https://docs.python-guide.org/writing/tests/)</comment>


Ask HN: Testing Android app on multiple devices without buying multiple phones? - <AUTHOR>

We are about to begin testing our Android app and don't want to go out and buy 40+ handsets to test on.
Are there any services that allow you to load an app on different devices for testing?
Specifically, we are looking to make sure the app functions correctly (ie: doesn't crash etc..) and the UI is consistent.
Something similar to browsershots.org but, for Android devices. <comment><USER2> What's wrong with the emulator? It is fast and works pretty well. Also check out <http://www.manymo.com></comment>


Gem in the Linux source code - <AUTHOR> https://github.com/torvalds/linux/blob/master/include/math-emu/quad.h#L29 <comment><USER2> I'm sure that has inspired more than one raised middle finger from people working on Linux-based IoT stuff.

</comment><comment><USER3> half-precision is an optional extension in arm [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205j/CIHGAECI.html)

</comment><comment><USER4> I want this on a shirt with the filename and line number on it for doubters.

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

<comment><USER6> Top comment on that thread cites the Dilbert strip that I immediately thought of.

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

Posting this comment not for karma, but just to reiterate the citation of that strip -- has always made me chuckle. I miss the original old beards.

</comment></comment><comment><USER7> Looks like originally part of glibc</comment>


Validating UTF8 Strings via Lookup Tables - <AUTHOR> http://darkcephas.blogspot.com/2018/10/validating-utf8-strings-with-lookup.html <comment><USER2> Has anyone tried to feed it strings from @glitchr_?

[https://twitter.com/glitchr_](https://twitter.com/glitchr_)

ٳٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٳٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٳٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٳٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٳٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰٰ

ه꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲҉꙰꙱҈̿꙲

#oͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦͦ

╰̩̩̩̩̩̻̍̍̍̍̍̊●̩̩̩̩̩̩̩̻̍̍̍̍̍̍̍̊ᴗ̩̩̩̩̩̩̩̩̩̩̪̺̍̍̍̍̍̍̍̍̍̍̆̑●̩̩̩̩̩̩̩̻̍̍̍̍̍̍̍̊╯̩̩̩̩̩̩̻̍̍̍̍̍̊

فͤ҈ͨͥ҉҉ͦ҈҉ͨ҈ͩ҉ͪ҈ͣͯͫ҉ͥͬͨ҈ͭ҉ͮ҈ͯ҉ͨ҈ͭͭͬ҉ͧͥ҈ͣ҉ͨ҉҉҈ͧͥ҉ͯ҈ͮͥ҉ͭ҈ͤ҈ͦ҈ͥ҉ͧ҈ͩͯ҉ͭ҈ͨ҉ͨͥ҉҉ͣ҉ͣͪ҉ͧ҈ͭ҉ͩ҈ͤ҉ͮ҈ͯͥ҈ͬ҈ͭ҈ͦ҈ͨͣ҉ͥ҈ͯ҉҉ͣͧ҈ͫ҉ͭ҈ͥͯͯ҉ͦ҈ͥ҉ͧ҉҈ͩ҉ͭ҈ͣͨ҉ͣͥ҈ͪ҉ͧ҈ͭ

<comment><USER3> thanks mentioning it.

</comment></comment><comment><USER4> > const uint16_t* asShort = reinterpret_cast<const uint16_t*>(src);

Ick. That violates the aliasing rules in many cases and is therefore UB. And it's wrong on big-endian systems.

Just do src[i] | ((size_t)(src[i+1]) << 8).

<comment><AUTHOR> That code might produce two byte reads and a shift and the bitwise-or to reformulate the 16 bit value in memory . In the original code the 16 bit read feeds directly into the lookup table.

<comment><USER4> The compiler always _might_ produce garbage. But a decent compiler won't:

        #include <stddef.h>
        #include <stdint.h>

        uint16_t read_2byte_le(const uint8_t *src)
        {
            return (uint16_t)(src[0] |
                   ((uint16_t)(src[1]) << 8));
        }

This generates the correct code with gcc and with clang. Sadly, clang is a bit fragile in this regard: [https://bugs.llvm.org/show_bug.cgi?id=39438](https://bugs.llvm.org/show_bug.cgi?id=39438)

<comment><USER5> Would a memcpy into a uint16_t be less fragile?

<comment><USER6> Just tried this with godbolt.org and yes, the memcpy() thing is consistently good while the shift-and-or version often gets an unoptimized implementation (depending on compiler and version).

<comment><USER7> In C++, not necessarily C, memcpy is how you type pun. Seeing as they often are the same compiler it's probably the fastest way.

</comment></comment></comment></comment></comment></comment><comment><USER8> While out of scope to the post somewhat, with validating utf-8 it'd be great to know of a standard way to toss out special characters like the vertical ones that can be used to interrupt page content. Seems most places just never filter it. Even back in Neverwinter nights I believe you could do some fun names.

<comment><USER9> Keep in mind those characters largely exist to allow people to write in their native languages, so you need to make sure your filter doesn't stop them from expressing themselves.

<comment><USER10> There are always trade-offs. Even written language is a constraint by itself.

</comment></comment></comment><comment><USER11> Warning: unaligned reads invoke undefined behaviour!

<comment><USER12> Not on modern x86 processors[1].

[1]: [https://lemire.me/blog/2012/05/31/data-alignment-for- speed-m...](https://lemire.me/blog/2012/05/31/data-alignment-for-speed-myth- or-reality/)

<comment><USER11> Undefined behaviour has nothing to do with CPU architecture...

<comment><USER12> It is undefined in multithreaded scenarios, not in single threaded code. In a world where memory access latencies dominate and you pay a huge penalty for cache misses, and a smaller yet significant penalty for TLB misses, there are some significant performance gains that can be gained by tightly packing fields in structures, while still maintaining alignment at a structure level. We've been doing this safely for years in prod now. I understand that the dogma of "unaligned reads invoke undefined behavior" is rather popular given how memorable it is, but it isn't always true.

<comment><USER5> It's undefined even in single threaded code. The compiler can assume it's aligned and make optimizations which depend on it.

It sounds like what you were doing is marking a struct as "packed", and accessing the fields directly (instead of through a pointer to the field). That should be fine.

<comment><USER12> This might be a bit too late to reply. It's undefined in C, but it's well defined at a processor level (on x86). IIRC, there was one particular bit of code that'd crash on AArch64 due to unaligned pointers, but would run a bit faster than aligned code on x86-64. On the other hand, this trick wouldn't work in multithreaded code even if the semantics were well defined, due to false sharing of cache lines.

</comment></comment></comment></comment></comment></comment><comment><USER13> Talking about lookup tables without using constexpr is like pissing away performance.

<comment><USER14> IMO this kind of lookup table is best computed externally, e.g. by a python script, and included as a literal `constexpr std::array` or something. I was recently trying to do something very similar with constexpr lookups, and threw in the towel due to different compilers having different levels of constexpr support. With literal tables, you know exactly what's going to happen.

Constexpr has tons of promise, but the compiler support just isn't there yet - we still have to think really hard about it and look at the generated code to verify.

<comment><USER7> What version of c++? Sounds like you are mixing 11 and 14+

<comment><USER14> c++14. I hit limits in clang relating to the depth of computation it will perform at compile-time, and those limits differ from gcc's and msvc's, so I switched.

What do you mean by "mixing 11 and 14"?

<comment><USER7> It sounded kind of like the differences in constexpr between 11 and 14 where 11 only allowed a single statement type thing.

Some people have used trampoline techniques to get around the depth limits. CRTP just did this for compile time regex.

</comment></comment></comment></comment></comment><comment><USER15> > Lookup tables perform computations in a manner such that they are in effect > creating new instructions custom fit for the algorithms specific purpose.

This is interesting. Considering validating utf8 is something a computer does _a lot_ these days, would it be practical to provide this lookup table and associated instruction hardwired in a processor ? I'm thinkink about the ISA extensions possibilities provided by RiscV for example.

I may be way off, this table is 64kB in size right ? I have no idea about how much silicon real estate that represents relatively speaking...

<comment><USER16> I think it's 2^12 = 4096 in size.

</comment></comment><comment><USER17> Wait. Does it actually validate utf8 or just checks ranges in which 1-4 byte characters are encoded?

<comment><USER18> Björn Höhrmann wrote the gold standard for a minimalist scalar decoder and didn't depend on UB to do it:

[https://bjoern.hoehrmann.de/utf-8/decoder/dfa/](https://bjoern.hoehrmann.de/utf-8/decoder/dfa/)

<comment><AUTHOR> Björn's decoder is nearly identical to the naive validity checker found here. It is about 9x slower than the superposition lookup table found here.</comment></comment></comment>


Higher-order programming in C - <AUTHOR> http://vedantk.tumblr.com/post/26182854460/higher-order-programming-in-c

<comment><USER2> For the set of features you have, with most calling conventions on most platforms you don't need to synthesize all that. You could simply have your apply function be written in assembly and handle setting up the parameters fetching them from memory.

That also isn't higher-order programming as such. Can you create new functions from doing that? There are ways to compose functions in C by hand, but the distinction is that it cannot be done elegantly. (One could always just do higher-order programming in C by constructing an abstract syntax tree, after all.)

A good first effort in that you did correctly handle calling functions without requiring them to fetch their arguments in an unusual way, which is what most people would try at first. With a varargs apply function, you can handle the case of passing values larger than a register and passing pointers without having to cast them to a list, too. Consider the case of an apply function which takes an unsigned integer as the size of the following argument. If it's zero, then the argument list is finished. Otherwise, it then fetches an argument of that size from the va_list and goes on to the next one. So then your apply function is slightly uglier (int j = 42; apply(printf, sizeof (const char _), "Hello, %s! %u\n", sizeof (const char_ ), "world"), sizeof j, j, 0) but perhaps more flexible, and at least avoids relying on a few nasty implicit casts.

Also, function pointers should not necessarily be cast implicitly to void *, but on only a few architectures are function pointers so strange that you'll have any trouble with your approach.

As it is, you could even avoid writing or generating any assembly by just having the apply routine be a static inline function that does a switch on the argument count and then casts the function pointer to a function pointer that takes the right number of arguments. The compiler could do constant propagation for the number of arguments and you'd have little overhead in your function calls. You couldn't handle arbitrarily-large argument lists, but it would work pretty well.

Keep at it!

<comment><USER3> _For the set of features you have, with most calling conventions on most platforms you don't need to synthesize all that. You could simply have your apply function be written in assembly and handle setting up the parameters fetching them from memory._

Like this? <https://github.com/davvid/libapply>

unittest.c shows how it can be used: <https://github.com/davvid/libapply/blob/master/unittest.c>

</comment></comment><comment><USER4>
      +</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----+
      |                                                           |
      |  C has support for dynamic typing (in the form of void*)  |
      |                                                           |
      +</comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>-----+

A quotable thinker.

<comment><USER5> Why are people so scared of void*? Are there any VM's that don't resort to some form of pointer tagging when implementing dynamic typing?

<comment><USER6> I don't think people is scared of void*. However, it is pretty easy to introduce memory corruption bugs when it is used in big projects.

I find very wise to avoid it when it is not necessary or when there is an equivalent safer alternative (e.g C++ templates if available and applicable).

In this case however, is not only completely fine but I don't think there is a better way to do it.

BTW, my favourite phrase of the article:

""… Why do this?" Because I can, of course."

The truly spirit of a hacker :)

</comment></comment></comment><comment><USER7> I made it simpler (and slightly more portable ;-) ) :

        typedef void* (*f)();
        extern void* apply(void* func, void** args, size_t argc) {
            switch (argc) {
                case 0: return  ((f)(func))();
                case 1: return  ((f)(func))(args[0]);
                case 2: return  ((f)(func))(args[0], args[1]);
                case 3: return  ((f)(func))(args[0], args[1], args[2]);
                case 4: return  ((f)(func))(args[0], args[1], args[2], args[3]);
                case 5: return  ((f)(func))(args[0], args[1], args[2], args[3], args[4]);
                case 6: return  ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5]);
                case 7: return  ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
                case 8: return  ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
                case 9: return  ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
                /*...*/
            }
        }

</comment><comment><USER8> If you ever want to do this in the real world, look at libffi: <http://sourceware.org/libffi/>

</comment><comment><USER9> I don't get the point. Why not use the generic function type?

        void *(*routine)(void *)

If you have a function already, just create a simple wrapper once. In the code shown, the wrapping has to be done by the caller of apply().

And this apply() doesn't work on all functions anyway. Casting an array of long into an array of void* makes quite a few assumptions and is very limited. What would you do if your original function takes a struct as an argument?

</comment><comment><USER10> I'd quite like to use bind() in C / nasm for my current project. I think you can use a similar approach - create an executable area on the heap that pushes an extra parameter and jmps to the target function, then just return a function pointer to it.

EDIT: there might be a problem with arranging the stack parameters - if you use call on the target, then you're pushing a return address onto the stack, which messes up the arguments. But if you simply jmp, then neither the caller or callee know exactly how to clean up the stack when the function returns... hmm. I guess you could permanently reserve a register for this shimming but that's hardly an elegant solution.

<comment><USER11> I think the callee expects the return address in %rbp, and by System V convention will pull certain arguments from above %ebp on the stack.

This might not help, but it's an interesting article on stack frames for all interested: [http://eli.thegreenplace.net/2011/09/06/stack-frame- layout-o...](http://eli.thegreenplace.net/2011/09/06/stack-frame-layout- on-x86-64/)

<comment><USER10> Looks like fastcall, or any convention on x86_64.

I think you can do bound functions if you do callee-cleanup, then your intermediate bound trampolines can just jmp and you don't end up with (too many) weird problems. But it means that the final return address ends up at the bottom of the stack, rather than at the top, like it would with a conventional push/call system.

In any case it looks like cdecl is out of the question.

Some further discussion in a slightly different context, if you're interested: [http://stackoverflow.com/questions/11271848/implementing- bou...](http://stackoverflow.com/questions/11271848/implementing-bound- function-parameters-in-a-compiler/11272296#11272296)

</comment></comment></comment><comment><USER12> The ability to cast a function pointer to a regular pointer is an implementation behavior (supported on every machine you'd want to use, but nonetheless it's not standard C)

<comment><USER13> That's interesting to know. Is there no general data type that's guaranteed to hold a function pointer?

<comment><USER2> Only function pointer types. An indirect function call on some architecture, for example, could require that when one makes an indirect call one sets up several registers in addition to jumping to a particular location in memory, and none of the registers that need to be set up can be derived from the jump target. So in practice your function pointers would need to actually be structures containing those register values and the jump target. Or you might need to pass around a tuple of target and calling convention, although the C standard limits the ways you could implement that (namely by requiring that function pointers cast to and from other function pointer types will compare as equal, and will still work when they are cast to the correct type.)

</comment></comment></comment><comment><USER14> The blog's github interface is annoying: in order to save-to-disk more than just the opening paragraphs in Firefox, I had to bring up Web Developer's View Generated Source function and save the result of that. Not cool for anybody who prefers to study offline.

<comment><USER15> Strange. I had zero trouble saving the blog to disk with Firefox on a Windows PC.

\- it works with both an old generation of Firefox (3.x) and a post 3.x version.

\- it correctly opens with the code, in both FF versions as well as IE.

\- NoScript also correctly blocks and unblocks the code depending on what access you give to github.com and tumblr.com.

So, not sure what you are seeing, but I am unable to replicate it. As you can probably guess, I am just as sensitive to these saving glitches when they occur as you are too... :)

<comment><USER14> Firefox 3.5.6 on Mepis Linux 8.0 here; NoScript permissions open to github and tumbler otherwise I wouldn't see code onscreen fwiw, tnx for feedback

<comment><USER16> Firefox 3.5.6? Holy cow. It probably doesn't run well in NCSA Mosaic either. Is there no newer version you can run? I find at least 4 is necessary to avoid huge with the modern Web most of the time.

</comment></comment></comment></comment><comment><USER17> Sigh, if the program is relying on undefined behavior [like this one], it's not C. Plus, gcc has __builtin_apply as extension.

<comment><USER18> This is _not_ undefined behavior. It's implementation specific behavior -- there's a huge difference. If you specify the calling convention for your functions, this is 100% deterministic and predictable. Nothing at all wrong with this approach.

<comment><USER17> Not undefined behavior, really? Run it on a 64-bit SPARC system and see if it works. Not to mention that this implementation is dog-slow (two rather slow syscalls [mmap/munmap] for each apply-invocation).

<comment><USER18> Again, you're conflating undefined behavior with implementation-specific behavior. By your definition, anything that does implementation-specific typedefs, uses inline assembly, or even makes syscalls is taking advantage of undefined behavior. That's silly and ignores the actual definition.

<comment><USER17> > Again, you're conflating undefined behavior with implementation-specific > behavior.

No, I'm not. Casting between data and function pointers (or even a function pointer to a function pointer of different signature!) is undefined behavior. Look up the C spec.

<comment><USER19> 188.8.131.52.8 - "A pointer to a function of one type may be converted to a pointer to a function of another type and back again; the result shall compare equal to the original pointer."

184.108.40.206 confirms that two function pointers that compare equal point to the same function.

From my careful study of the code, I have a nagging sensation that this might not quite be the end of the story as far as portability goes...

<comment><USER17> 22.214.171.124.7 allows for conversion between pointers to data ("objects") and 18.104.22.168.8 allows for conversion between pointers to functions; there is no provision for casting between data and function pointers.

220.127.116.11.5 and .6 allow for abritrary (implementation-defined) conversions between integer types and pointer types, so any conversion between function and data pointers must go through a suitably large integer type if such exists (converting a function pointer to a too small integer type is UB).

<comment><USER19> Yes - my response is to the suggestion that casting between pointers to functions of different signature is undefined. I took this to be a suggestion that the part of the approach that involves having a general-purpose function that can accept a pointer to any kind of function, and reliably use that pointer (after it's been casted, if necessary) to get a pointer to the function in question, is fundamentally non-portable.

I remain unconvinced that this is a serious issue, all things considered. The odd feeling that there could be other roadblocks to a fully portable implementation still remains. Nevertheless, it appears that this particular part could actually be done portably.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> Incidentally, if you want "real" higher-order programming in C, take a look at blocks (Apple).

<comment><USER21> ...if you want "real" higher-order programming in "C"...

<comment><USER22> You're just not looking at the problem objectively...

Seriously, though, is there a reason the Objective C blocks wouldn't work in C, just substituting functions for methods?

<comment><USER16> The blocks are already supported in plain C mode as long as you enable the Clang extension. You just use, for example, block_Copy(aBlock) instead of [aBlock copy]. Apple framed it as a C feature in its proposal for standardization (because Objective-C doesn't have a real standard AFAIK).

</comment></comment></comment></comment><comment><USER23> This makes me wish I could use "PROT_WRITE | PROT_EXEC" with mmap() on iOS.

<comment><USER24> You actually can by exploiting a bug in the code signing check in the kernel! [http://books.google.com/books?id=1kDcjKcz9GwC&lpg=PT92&#...</a>

</comment></comment><comment><USER25> There is a macro way to do this. It involves lots of magic and beating the preprocessor with a two-by-four: [https://groups.google.com/forum/?fromgroups#!topic/comp.lang...](https://groups.google.com/forum/?fromgroups#!topic/comp.lang.c/9G50dW26u_E)

Go down this hole with caution.

<comment><USER26> I often want to beat the pre-processor with a two-by-four</comment></comment>


Ask HN: Should I report a security vulnerability? - <AUTHOR>

Will browsing through my attendance on my schools registration system, I started playing with the URL so I could see the data I wanted, through doing this I noticed so major SQL injection vulnerabilities that gave me the ability to alter the data and view other students.<p>Given the cases of this backfiring on the person who reports it; what should I do? <comment><USER2> What you did was unlawful. Had you downloaded the software they were using and tested it yourself, you'd have been fine. But testing live web applications that other people operate is dangerous.

Speaking from the vantage point of someone who tests applications for a living and helps manage many tens of concurrent projects: it is surprisingly easy to crash a site by dicking around with URLs trying to find SQL injections (here's a classic example: some other part of the system you weren't aware of caches every hit to the URL you're testing and displays a result based on it to users elsewhere; your query generates an exception, bang, feature dead).

If you noodle around with someone's application just to see how riddled with SQL injections it is, and you blow up their app, there's a decent change your actions were tortious. You can get sued. Nobody will care about your intentions; everyone (at least, everyone who matters) will tell you you shouldn't have been testing to begin with.

I think you're in a bit of a pickle, because I think it's also unethical to sit on your hands if you know a firm is putting its users at risk by fielding a comically insecure application. I'm on the side of "report anonymously". It's obviously possible to do this safely if you try hard enough, but I don't even think you need to try that hard.

A growing number of US companies, most notably Google and Facebook, now reward people who find vulnerabilities on their sites. They've deliberately made it much harder to grief people who test them for vulnerabilities. This is a trend you could reward by giving them more of your business.

</comment><comment><USER3> Do not report it at all - even anonymously! My friends wife works for one of the top digital forensics firms in the US (they're who lawyers use to understand what happened and when). He's told me too many unfortunate cases where people reported items likes this to Fortune 500 companies, that were then prosecuted harshly. I have issues with it - but it's how the world works. I would stay away from it.

</comment><comment><USER4> I wouldn't even attempt to report it anonymously.

I found something similar on one of my schools internal sites, there was even a disclaimer that said something along the lines of 'Please don't enter any semicolons or quotation marks...'. I just walked away from it. It's not worth getting in trouble because, for some reason, schools hire incredibly shitty web developers.

</comment><comment><USER5> You should check if the software is listed on the bugcrowd bug bounty list. Its a list of websites and software which accept responsible disclosure of security issues.

[http://bugcrowd.com/list-of-bug-bounty-programs/](http://bugcrowd.com/list- of-bug-bounty-programs/)

If you can't find it there you should send them an email and suggest they add it.

</comment><comment><USER6> Report it anonymously.</comment>


FounderDating event in San Francisco April 27th - <AUTHOR> http://founderdating.com/founderdating-is-back-in-san-francisco-on-april-27th/

<comment><USER2> _Apply by April 15th. Drinks are on us, just bring great energy. Rock stars only please!_

Awesome, I was looking for a place to find a co-founder with an ego the size of Texas, who will drag into work 8 hours late, hung-over and with a gaggle of groupies (or prostitutes, whatever) hanging off his arm; and then get caught in the bathroom an hour later snorting coke off a groupies tits; then go out, get drunk, wreck a car, get into a fight with the cops, and land up in jail, and then call me at 3:00am to come bail his ass out.

Sign me up!

<comment><USER3> Wait, whats wrong with fighting with the cops?

</comment></comment><comment><USER4> I was looking for a cofounder for a year or so after my last company was acquired and found Founderdating incredibly useful. Everyone there was very high caliber and I ended up starting a company w/ two guys I met there.

I always recommend it to anyone who is looking for solid cofounders. These guys put on a high quality event.</comment>


Ask HN: What is necessary for a launch? - <AUTHOR>

I am working on a product which is an application with heavy server integration. I have this laundry list of features that I feel are necessary, but I dont know if they really are.
1. Monitoring - we currently have only the devs as users and therefore dont hit any server limits meaning that server monitoring hasnt been necessary. Going forward, I feel like this will be more important, but it seems to me like the pitfall that is always talked about where founders are worried about scaling without any users. Furthermore, we currently have no way of detecting or reporting an application crash. This will make it hard to iterate and fix problems without.
2. Server capacity - We are currently bootstrapped and running off of a single t1.micro instance. This is fine before launch as we only have devs as users. For a launch though, I do not think that it will be enough. Furthermore, we currently have the web server, blog, database, dns, mail, and application server running on the same machine. This feels like putting all our eggs in one basket. Moreover, we dont have any sort of cache setup.
3. Payments - we have no way of collecting money or even infrastructure to deal with the various plans that we will have to offer. While this feels important we arent even ready with a beta. We kinda want to get the product out and get a little bit of traction before implementing a payment system.
4. Analytics/Growth - We have no idea how our users will perceive/traverse the website. Furthermore, without things like A/B testing we have no idea what the best way to market the product is other than the experience we have from talking to people first hand.
5. Features that the users want - We want to implement the above things, but we realize that features that the users want in a way trumps the others.
So the question is how do you order these responsibilities and what level of these is acceptable for a launch? <comment><USER2> You should maximize the "wow" moment your product delivers. Since you say it is heavy on "server integration", I guess you would need to focus on monitoring & server capacity and of course, features that directly address your users' problems instead of fringe, nice-to-have add-ons. Everything else (analytics, payments, non-core features) can be left out or done in a way that minimizes effort (Stripe + Google Analytics should take up very little of your time)

Your users are not all the people who visit your site because of the "launch" but those for whom you can solve "the problem" well. I will definitely go back to a product that solves my problem, even if it has a lot of bugs. As proof, I've used buggy UML tools, code editors, video/audio editing software for years because they're very good in at least one aspect I value.

A lower-risk approach: Suppose you list out the benefits of a "launch" (example: growth from 0 to 10K users, investor interest, attract/keep talent) and then separate out the components of a launch (example: Techcrunch release, beta mailing list, investor reach-out). You may be able to de-risk by going after individual components and only building whatever is necessary for each individual component. For example you can attack the mailing list first without worrying about scale to handle traffic that a press release would bring.

</comment><comment><USER3> 1\. There are a ton of monitoring solutions out there, we need to know more about your stack first. This is easy enough nowadays to be a requirement imo, even for an MVP that actually has a semi-functioning app

2\. Gross. Get all that stuff seperated as soon as feasible.

3\. I like stripe, fwiw, and use it in all my webapps.

4\. see answer 1

5\. Talk to your users, a lot.

<comment><AUTHOR> We are currently using a LAMP stack. But we know that we need to do most if not all of these things, the question is what order? Where should we be spending our time?

<comment><USER4> I'd focus talking to potential customers and building out whatever features make the product "minimally viable" for them. If you're pretty sure you know what they need out of your product (which, unless you have credit card numbers, you probably shouldn't be), get your payment system sorted, throw Google Analytics in, and launch.

At that point you can start selling, selling, and selling some more. Dan Shipper wrote a great post about this today: [http://danshipper.com/nothing- happens-until-the-sale-is-made](http://danshipper.com/nothing-happens-until- the-sale-is-made)

</comment></comment></comment><comment><USER5> Use [http://www.segment.io](http://www.segment.io) for your analytics. You insert only one script into your site and the service lets you use up to 30 different analytic providers. Many of these services provide the first 30 days for free, so try as many as you like and see which ones you like best.

</comment><comment><USER6> 0\. A warm list of emails about people interested in the service (this really helps!).

<comment><AUTHOR> A good idea! Thanks!</comment></comment>


Metaculus Prediction Market - <AUTHOR> https://pandemic.metaculus.com/questions/ <comment><USER2> Not exactly a prediction market in the strict sense, since there's no buying or selling. It instead uses internet karma points.</comment>


The Harvard Classics: Download All 51 Volumes as Free EBooks - <AUTHOR> http://www.openculture.com/2014/03/the-harvard-classics-download-all-51-volumes-as-free-ebooks.html <comment><USER3> Great to have these, but if you're interested in a classic, five minutes' research will save you a lot of pain. The wrong translation can put you off a book or author for life, and a bad edit, abridgement, or lack of notes can render a work incomprehensible or weak.

Just take a second to look up whether there are any modern translations that might be up your alley, or whether you prefer accuracy over readability, or what have you.

<comment><USER4> Indeed, translations are products of their times, and most casual readers are better served by (non-public domain) contemporary translations. I'm reminded me of something Mary Beard said in a recent interview with the LA Review of Books [1]:

"It's very interesting to look back at classics a hundred years ago. One of the things I've done is look back at Gilbert Murray's translations of Euripides, which were huge popular success at the time. It seemed to engage with all sorts of political issues of the time. And you look at them now, and they're unreadable."

[1] - [http://lareviewofbooks.org/essay/visit-mary- beard](http://lareviewofbooks.org/essay/visit-mary-beard)

<comment><USER5> I remember when I did classical studies (studying the classics in translation) Our teacher commented that as she had been taught by nuns the version of Thucydides that she had read had all the "gay" stuff taken out.

<comment><USER3> Yeah, there's a gay aspect in the Count of Monte Cristo that got excised or downplayed as well. The question becomes do you want a biased translation that reads better or an unbiased one that reads okay? It's really a case by case thing. Any classicist will tell you Pope butchered the original Homer - <USER2> didn't even speak Greek. But his is still the best in English, I think.

</comment></comment></comment></comment><comment><USER6> Beautiful. Thank you for the reminder that these books exist. I read some of these books years back, and I still treasure the experience. I had a terrible job that started at 6:30 a.m. where by some miracle people kept assigning me tasks that could be automated, so I was about a month ahead on all of my work. In the early mornings I would read from these books on a Dell Axim that was propped up above my keyboard, next to my propped-up reversed CD-ROM disc.

One book that's not part of the collection but that I would recommend to the people here on HN is "James Nasmyth, Engineer: An Autobiography": [http://www.gutenberg.org/ebooks/476](http://www.gutenberg.org/ebooks/476)

Here's a bit from a "coding interview" that went well for him:

"I carefully unpacked my working model of the steam-engine at the carpenter's shop, and had it conveyed, together with my drawings, on a hand-cart to Mr. Maudslay's next morning at the appointed hour. I was allowed to place my work for his inspection in a room next his office and counting-house. I then called at his residence close by, where he kindly received me in his library. He asked me to wait until he and his partner, Joshua Field, had inspected my handiwork.

I waited anxiously. Twenty long minutes passed. At last he entered the room, and from a lively expression in his countenance I observed in a moment that the great object of my long cherished ambition had been attained! He expressed, in good round terms, his satisfaction at my practical ability as a workman engineer and mechanical draughtsman. Then, opening the door which led from his library into his beautiful private workshop, he said, "This is where I wish you to work, beside me, as my assistant workman. From what I have seen there is no need of an apprenticeship in your case."

He then proceeded to show me the collection of exquisite tools of all sorts with which his private workshop was stored. They mostly bore the impress of his own clearheadedness and common-sense. They were very simple, and quite free from mere traditional forms and arrangements. At the same time they were perfect for the special purposes for which they had been designed. The workshop was surrounded with cabinets and drawers, filled with evidences of the master's skill and industry. Every tool had a purpose. It had been invented for some special reason. Sometimes it struck the keynote, as it were, to many of the important contrivances which enable man to obtain a complete mastery over materials."

Anyway, a pretty fun, educational book for someone with that mindset.

</comment><comment><USER7> > It was in 1909, the nadir of this milieu, before the advent of modernism and > world war, that The Harvard Classics took shape.

I think he means zenith, not nadir. 1909 was the high point of human civilisation, before barbarism and ugliness took hold.

Also, not covering Freud, Nietzsche & Marx was no mistake: this is a collection of lessons to learn, not lessons to learn _from_.

<comment><USER8> You think 1909 was the high point of human civilisation?

<comment><USER9> Not the OP, but I think that was the high point of the particular European centric civilization that came out of the Enlightenment. There will be other high points for sure, but each will come when their own civilizations reach maturity.

And no, nobody alive today will see one of those, it is too late in the previous cycle and too early in the next one for that. But you can make the next one happen today by mastering something worthy and passing it on to the next (human) generation. There's people not yet born who will use that as raw material to create stuff that we would not be able to understand even if it hit us in the nose.

</comment></comment></comment><comment><USER10> I've owned the entire collection including the Shelf Of Fiction. The main thing to consider is that for the works written originally in english or are hard to find these are good resources. For the works which have been translated there are usually much better translations available (and worth paying for).

Very glad to see these freely available though.

<comment><USER3> Yeah, I have a few Harvards, but really the only reason is the nice binding for a few classic titles. The Arabian Nights is the Lane translation, and if you're going classic, you have to go Burton. Same for a few others - you can go older or newer, but there's no particular reason to go for the Harvards. Same for any big classics set.

That said it's not a bad place to start. I loved the Butler prose translation of the Iliad and Odyssey because it was fun to read and straightforward. Now that I have moved on and love Pope's and Lattimore's, I would recommend those over it - but if someone bought one, I wouldn't "tut tut" or anything.

My advice with translations is always to gather a few, read the first few pages or chapter in each, and go with the one that you like. There's always the chance you'll end up with a Bowdlerized version or something (I did with the Count of Monte Cristo, the old ~1850 anonymous translation) but if you enjoy the book that's what matters - you can always read it again or fill in the blanks.

</comment></comment><comment><USER11> There's also the Gutenberg project[1] which offers a huge variety of classics for free in (almost) every format.

[1] [http://www.gutenberg.org/](http://www.gutenberg.org/)

</comment><comment><USER12> Just wrote a dirty Ruby script to download them. [https://gist.github.com/lasombra/a489f715985715663595](https://gist.github.com/lasombra/a489f715985715663595)

P.S.: This is my first Ruby script. I'm still learning it.

<comment><USER13> That script comes in very handy. It would've been even more useful if it would name the files according to the book which is insde instead of: harvardclassics28eliouoft

</comment></comment><comment><USER14> Archive.org has many out-of-copyright books, but there is little support for discovery of "related books" or "all books in a multi-volume series". Sorting by download count within categories is a start, for example:

[https://archive.org/search.php?query=mediatype%3A%22texts%22...](https://archive.org/search.php?query=mediatype%3A%22texts%22%20AND%20%28cambridge%20history%29&sort=-downloads) will lead to _The Cambridge History of ____ (geography or topic, e.g. Literature, India) and _The Cambridge ___ History_ (time or topic, e.g. Ancient, Medieval, Natural). Each of these titles are several volumes, 500-1000 pages per volume, covering centuries of events from a British perspective.

German Classics, [https://archive.org/search.php?query=subject%3A%22German%20l...](https://archive.org/search.php?query=subject%3A%22German%20literature%20--%20Collections%22&sort=-downloads)

Eastern Classics, [https://archive.org/search.php?query=subject%3A%22Oriental%2...](https://archive.org/search.php?query=subject%3A%22Oriental%20literatures%20--%20Collections%22&sort=-downloads)

</comment><comment><USER15> As a Scot, I was pleasantly surprised to see Robert Burns on the list, but digging around it looks like Burns was a keen supporter of the American Revolution and even wrote a "A Toast for George Washington":

[http://burnsc21.glasgow.ac.uk/a-toast-for-george- washington-...](http://burnsc21.glasgow.ac.uk/a-toast-for-george-washington- as-well-as-an-ode/)

</comment><comment><USER16> Well, that's one ghastly website you pointed to. I have a physical edition of the Harvard Classics, and it's mostly boring stuff and speeches and political documents that are sufficiently summarized in other contexts (history books, Bartlett's, etc). One book that is worth reading is this (free):

[http://www.amazon.com/Years-Before-Mast-Richard-Henry- ebook/...](http://www.amazon.com/Years-Before-Mast-Richard-Henry- ebook/dp/B0082XP72S/)

<comment><USER17> Summaries just give you the opinion of the person who did the summarizing.

</comment></comment><comment><USER18> Whoever would like to improve that list at gutenberg.org can follow directions on the site to get access to edit it. I hope they will.

I was glad to see that some like that page. I was actually the one who grabbed that list of contents from Wikipedia, requested access to edit Project Gutenberg's "Bookshelves" wiki, and added the links there to the Project Gutenberg versions of many of the selections. It was fun and not hard.

<comment><USER18> Followup: The directions that I mentioned are somewhat buried in the site. Here they are: [http://www.gutenberg.org/wiki/Gutenberg:Wiki](http://www.gutenberg.org/wiki/Gutenberg:Wiki)

</comment></comment><comment><USER19> My wife and I recently purchased this entire set, excepting books 1 and 5, at our local library book sale. We are now looking for the missing volumes, so if anyone happens to have them laying around, and would like them to go to a good home, get in touch :)

<comment><USER20> Try a secondhand book site: I like abebooks.com, and there's also alibris.com. I'm slowly assembling a set of the Oxford Charles Dickens; every few months I pick a title I haven't got and search for a copy that's called "fine" or "very fine". ("Fair" copies are readable but may have markings, highlighting, etc., or be a battered ex-library copy.)

<comment><USER14> A used books search engine: [http://used.addall.com](http://used.addall.com). Bookfinder is owned by Abebooks which is owned by Amazon. Biblio is independent and often price competitive.

</comment></comment></comment><comment><USER21> I've spent a few years searching these out for fun in second-hand shops and used book stores, avoiding online simply for the thrill of trying to find them on the street. This is fantastic that they are available for free download now!

</comment><comment><USER22> Once upon a time when I was first learning to program, I wrote a Python script to download them from bartleby.com and make them into nice CHM files :) some good stuff

</comment><comment><USER23> And if there was ever a testament to why Copyright should expire for the public good, this is it.

<comment><USER14> There could be a browser plugin which provides links to out-of-print versions of books when they are referenced on a page, e.g. in a bibliography or other list of books.

</comment></comment><comment><USER24> It's fine to read these for the literature and/or a peek into how earlier people saw their world, but beware of ideas whose underpinnings are still touted as fact - such as those from the Wealth of Nations. Adam Smith may have been among the intelligentsia of his time, but he made claims far outside of his expertise which have long since been shown to be fantastical imaginings. And if you've ever seen A Christmas Carol, you'll have passing familiarity with the debtor prisons and Irish potato famines justified by classical liberalism (economic theory, not to be confused with the popular modern term) which has today become neoliberalism (which contains justification for neoconservatism, so let's not get partisan about it) since about 1980 with Reagan in the USA, Thatcher in the UK, and Deng in China and isn't any better for reasons I won't currently go in to. (Crosby, Harvey)

For instance, Adam Smith argued that barter was an inefficient way to make transactions because it required a dual coincidence of wants by both parties. Nevermind that communities simply didn't function this way, instead giving what they had now in a system of credit rather than debt. This is one of many examples undermining Smith's ideas, so be careful if you decide to read such books. Unless your degree concerns historiography, your time would be much better spent elsewhere. (Graeber)

Smith is easy to debunk, but ideas contained within many classical novels provide popular justification for cultural imperialism. They're not so easy to address. (Said)

<comment><USER25> There was absolutely no need to inject such politics into a seemingly innocent post about a _collection_ of old books. Your topic sentence claimed that you disputed the wisdom of old classics (notice the plural) but really your extended post was a diatribe against The Wealth of Nations and classical free market economics. Save your politics for a political topic.

<comment><USER26> I really need an extension that hides any post or article that uses the terms neoliberal or neoliberalism.

<comment><USER27> Why be a minimalist? How about one that hides anything to do with politics.</comment></comment></comment></comment>


Xkcd "Click and Drag" in a "map" interface - <AUTHOR> http://xkcd-map.rent-a-geek.de/ <comment><USER2> Wow, that's... epic.

According to the reddit comments the world is 165888x79872 pixels, and the guy at the beginning is 40 pixels tall. If we assume he's 6 feet tall, the world is ~25000 x 12000 feet, 4.7 x 2.3 miles, or 7.6 x 3.7 km.

<comment><USER3> Hence the two miles comment full west from center. I declare Randall and dividuum 1st and 2nd place winners of the internet today. What's the under- over on tech world productivity loss this morning?

<comment><USER4> Billions. Seriously, 100's of millions in short term losses, but I say we make up for it in the long run.

</comment></comment></comment><comment><USER4> There's a serious psychological phenomenon where working in a place with no windows decreases productivity by a lot. This has been attributed to the need to look out into the world in order to imagine solutions that aren't readily apparent.

Scrolling through this was like looking out the window times 100. I've already gotten more done in the last hour after looking at it than I usually do in a day.

<comment><USER4> (Wrote a blog about this btw <http://news.ycombinator.com/item?id=4544257>) - I think it's interesting

</comment></comment><comment><USER5> My favorite caption:

"Because it's there" is more poetic than, "I'm rich enough that my goals are arbitrary."

<comment><USER6> I also enjoyed:

'I'm working at a small startup. Our business model is "Taking free drinks from industry events and reselling them." Oh, hey, I should get going.'

<comment><USER7> From a couple trapped deep underground:

"Is anybody up there? If you can hear us, friend us on Facebook and follow us on Twitter!"

</comment></comment></comment><comment><USER8> Here's a similar one, made with Seadragon (Deep Zoom):

<http://dump.ventero.de/xkcd1110/>

<comment><USER9> Thanks for using Seadragon. First thing I thought of when I clicked on the angular.js version also in the top on hn.

</comment></comment><comment><USER10> you guys have totally destroyed this thing ;) the beauty was that it got me to wander around like a little kid for a while. the little spots by the beach, textures, jokes, wondering which way was out of a mine shaft, the sense of taking a hike for a while. not zooming around like an all knowing cyborg.

not that I'm trying to spoil _your_ fun of course.

<comment><USER11> I did both. Eventually got tired of wandering in tunnels, and zoomed out.

But it recaptured the joy of exploring a new video game world.

<comment><USER12> I don't know if you've ever played the 1980s-90s Spectrum/Amiga Dizzy series, but exploring this squirted pretty much the same wonderful cocktail of neurotransmitters as exploring Spellbound Dizzy did when I was a small boy.

</comment></comment></comment><comment><USER13> The interface is a powerful extension of the piece. Wonderful stuff. Thank you.

I do wish the extension somehow captured the first three panels of the comic. The last panel is a masterpiece, but it is part of a larger story.

<comment><USER14> I just added the three intro panels.

<comment><USER13> Thank you.

I'm looking forward to figuring out how you did this.

</comment></comment></comment><comment><USER15> Randall is one of those artists that truly enriches (my) life. The IP addressing visual and the other comic that illustrated the size of scale among astronomical objects were two others that impressed me. This one tops them all.

<comment><USER16> The movie maps also make the list for me.

</comment></comment><comment><USER17> I like the Minecraft part ^^ <http://d.pr/i/Ui9J>

<comment><USER18> Thank you for explaining that. It looked familiar but not having played Minecraft I really had no idea.

</comment></comment><comment><USER19> Here's a 5% version I stitched together: <http://basseq.com/fun/xkcd1110/>

It's a big world. What are those whales doing in the sky!? Silly whales...

<comment><USER20> Douglas Adams reference (though I don't see the Bowl of Petunias...) : <http://www.youtube.com/watch?v=MsK6aRuSBIc>

<comment><USER21> Not sure, they don't seem to be falling. I thought they might be a reference to the Star Trek "whale probe" from The Voyage Home [1] but they're too small for that. Maybe just some random fun like the flying or underground jellyfish.

[1] [http://en.memory- alpha.org/wiki/Star_Trek_IV:_The_Voyage_Hom...](http://en.memory- alpha.org/wiki/Star_Trek_IV:_The_Voyage_Home)

<comment><USER22> Those aren't underground jellyfish, they are underwater. That part of the word (west of center, where the ships are) is ocean. But yeah, it's confusing at first.

</comment></comment></comment></comment><comment><USER23> When you're in a region without a matching image (i.e. in the blank sky or uncarved ground), the tile is only a 1x1 image; in Firefox at least, the default image rendering technique for this is bad, as it uses something along the lines of bicubic interpolation to some shade of grey, where what is intended is that it be a solid block of colour.

My solution was to add this to the CSS:

        .leaflet-container img { image-rendering: optimizeSpeed; }

Note also that the 1x1 blank ground tiles (e.g. <http://xkcd-static.rent-a- geek.de/converted/4-4-8.png>) are #0a0a0a rather than #000000.

</comment><comment><USER24> This is awesome even though it crashed my phone so hard that I had to do a battery pull! :)

</comment><comment><USER25> If you'd like the full-screen view and ability to navigate using the keyboard, but with tiles that load when needed not just when you stop moving, try <http://ares.aylett.co.uk/xkcd/> \-- it uses the original tiles, so you've probably got at least some of them cached already :).

Only browser zoom, but I think that helps keep the mystique (and I don't want to try to implement it myself).

</comment><comment><USER26> Best interface to the full high res image yet. Love it.

</comment><comment><USER27> Is <http://xkcd-map.rent-a-geek.de/#10/-21.4805/18.7811> supposed to be the Money Pit?

[http://en.wikipedia.org/wiki/Oak_Island#History_of_the_Money...](http://en.wikipedia.org/wiki/Oak_Island#History_of_the_Money_Pit)

</comment><comment><USER28> Reminds me a little of Proteus (<http://www.visitproteus.com>) which I just came across a few days ago. There's something special about wandering around in a world where you don't know why you're there or when or where it will end.

<comment><USER29> THANKS! I saw this at XOXO but there was no name and I wanted to explore it more.

</comment></comment><comment><USER30> The software used to make this is on Github, plus some scaled down originals: <https://github.com/dagar/xkcd-1110>

<comment><USER14> Here is the real code used to run this: <https://github.com/dividuum/xkcd-1110#readme>

<comment><USER30> My link was to the code that made xkcd #1100 ;)

</comment></comment></comment><comment><USER31> Normally a curmudgeon, I love everything about this story. The original comic is brilliant, and the various HN takes on it are getting better and better. Thanks everyone!

</comment><comment><USER32> <http://xkcd.com/1110/> for those that don't have a clue what this is about (like me).

</comment><comment><USER33> Yet <http://www.isxkcdshittytoday.com/> still isn't impressed.

<comment><USER34> wow. I'm sad that this site exists.

<comment><USER35> If xkcd really was shitty, nobody would bother making such site about it.

EDIT: I actually liked <http://xkcdexplained.com>, back when they were still keeping up with Randall.

<comment><USER36> Same for <http://xkcdexplainedexplained.tumblr.com>

</comment></comment></comment></comment><comment><USER37> Finally - the way I wanted to explore it :)

</comment><comment><USER38> There's also this map: <http://sumamimasen.com/xkcd/1110/>. It has some of the usability of this rent-a-geek map while keeping the perhaps-symbolic inability to see ahead of the original comic. It also loads faster than this rent-a-geek map.

Features: use the arrow keys to scroll (you actually can't click and drag anymore). You can't zoom out, but you can hold Shift to scroll quickly. This map loads tiles while you scroll, so you can keep on scrolling without stopping.

</comment><comment><USER39> Looks like Randall had a pretty good time playing Insanely Twisted Shadow Planet.

(for those curious - <http://michelgagne.blogspot.com/>)

<comment><USER40> I really liked this, it seems very attractive.

</comment></comment><comment><USER41> Felt like the first day I got my ant farm when I was a kid. :)

</comment><comment><USER42> What, no Gandalf chasing a Balrog down the hole?!

</comment><comment><USER43> My days are better when I remember to check xkcd.

</comment><comment><USER44> If you think this is cool, check out a game with the same 2D "grid-like" world that blew me away when I played it a couple years ago: Within a Deep Forest. <http://nifflas.ni2.se/?page=Within+a+Deep+Forest>

</comment><comment><USER45> If he just updates it and adds to it every so often, think how he'll magnify the productivity impact! :)

</comment><comment><USER46> Love the Cryptonomicon influences. In case anyone is wondering what those mushroom-shaped caverns are that jut up off some of the tunnels... well, you can read the book and find out ;)

<comment><USER27> Cryptonomicon is one of my favorite books of all time - I stared at that mushroom-shaped cave for the longest time trying to recall where I'd seen it!

<comment><USER46> Epic action sequences combined with cryptography, information theory, currency/economics, WWII, and a crazy ambitious tech startup idea. It doesn't get any better than that.

</comment></comment></comment><comment><USER47> In case you did not see it, dividuum put together how this was served.

[1] <http://news.ycombinator.com/item?id=4547840>

</comment><comment><USER48> This is amazing! I would like to see how they put this together.

<comment><USER49> Will i be wrong to hope for a blog post explaining the process shortly?

<comment><USER14> Nope. I'll post the python code I used on github later/tomorrow.

</comment></comment></comment><comment><USER40> The only JavaScript file seems to be <http://cdn.leafletjs.com/leaflet-0.4/leaflet.js>

<comment><USER50> Leaflet wasn't used on the real site though, it was used to here for easier navigation (and it's an awesome JS library). Here's the JS library xkcd.com was using

<http://imgs.xkcd.com/clickdrag/1110.js>

<comment><USER40> oh ok, thanks.

</comment></comment></comment><comment><USER51> I love this refernce: <http://xkcd-map.rent-a-geek.de/#9/33.3282/1.3815>

</comment><comment><USER52> Wow... Just wow.

</comment><comment><USER53> apart from the javascript part, how was this drawn? by hand? software, using tools?

<comment><USER54> Yes.

</comment></comment><comment><USER55> Thanks for bothering to make it work with pinch to zoom on my tablet! Impressive!

</comment><comment><USER56> First time I looked I didn't realize you could zoom out...

<comment><USER57> There is also this snazzy site to get the full zoomed out version: <http://xkcd-map.rent-a-geek.de/>

</comment></comment><comment><USER58> Wow. That is art!

</comment><comment><USER59> Find the 'hackers' reference?

<comment><USER60> Aye. "No pool?"

</comment></comment><comment><USER61> Epic!

</comment><comment><USER62> It's awesome, but the guy who coded it forgot to replace the all black squares by <div class=black> . that would've loaded so much faster - and even better with class=white above the earth.

</comment><comment><USER63> great toy

someone make a game based on this. take my money</comment>


Show HN: Liftr – Track your lifting journey - <AUTHOR> https://www.producthunt.com/posts/liftr <comment><USER2> Tracking my workouts has always been a struggle. Even with a perfect UI, and well designed apps like this one, exact tracking will not become ubiquitous until it is completely automatic.

<comment><AUTHOR> I definitely agree that is the case for most people. I initially tried tackling this problem (general population fitness tracking), but quickly found that its much more difficult and requires much more resources to solve. And so I decided to pivot and started designing this app for my specific niche (lifting enthusiasts who enjoy tracking). I think this is a stepping stone for me though, I hope to take what I learn building this to eventually try and automate (through app intelligence, motion tracking, better UI solutions, and some other cool ideas I hope come to fruition) the process as much as I can. And although I know many solutions currently exist on the market, I hope that one day I'm able to eventually work on, design, or be part of a holistic solution that is able to solve this once and for all. Thank you for the kind words on the design of my app though, I'll keep working on this problem ;)

</comment></comment><comment><USER3> see: atlas wearables</comment>


LucasArts brings their classic adventure games to Steam - <AUTHOR> http://store.steampowered.com/publisher/LucasArts/

<comment><USER2> All these games need to be developed for the iphone. They are missing out on a huge opportunity.

</comment><comment><USER3> Crossing fingers for XBox Live.</comment>


Say Hello to Monorepo Build Tool - <AUTHOR> https://github.com/mbtproject/mbt <comment><USER2> As somebody who is interesting in using tools like Buck or Bazel, but can't, because environments include Windows, dotnet, eclipse xylink sdk projects and other things these tools can't cope with, I'm faced with rolling my own "incremental-compile-by-git-subfolder-hash" and building DAG's of project dependencies across a monorepo.

I've done this twice before for build of Scala+Npm and another time for python, and lots of Jenkins/TeamCity customizations, frankly I'm tired of it.

I'm very excited about finally finding a general purpose tool like this one.

look forward to trying it.

<comment><AUTHOR> Thanks for the encouraging words. Docs are pretty rough at the moment, hit me up if you get stuck anywhere.</comment></comment>


Reversing cause and effect is no trouble for quantum computers - <AUTHOR> https://phys.org/news/2018-07-reversing-effect-quantum.html <comment><USER2> The headline is, as popular articles on QM often are, misleading. One of the central mysteries of QM has always been: how does the classical world with its arrow of time emerge from the quantum world where the governing equation is time-symmetric? And the answer is: the classical world emerges by a process of decoherence, which is to say, by the creation of large (O(10^23)) networks of entanglements which (it can be shown mathematically) have behavior that is indistinguishable from classical systems. It is very similar to how thermodynamics and the time-irreversibility of the second law emerge from time-reversible Newtonian mechanics (except that the time-asymmetry that emerges from QM is even more fundamental).

Time-reversibility is part-and-parcel of quantum computation because the _whole point_ of quantum computation is to keep the system operating in the regime where its behavior _is_ distinguishable from classical. As soon as you lose coherence, you simultaneously lose _all_ of the quantum behavior, including time-reversibility. Time-reversibility isn't anything special in this regard. It's all part of the same weirdness.

It's all very interesting, but none of it is news.

<comment><USER3> > _And the answer is: the classical world emerges by a process of decoherence, > which is to say, by the creation of large (O(10^23)) networks of > entanglements which (it can be shown mathematically) have behavior that is > indistinguishable from classical systems._

This is the motivation for decoherence and for the Everettian view where the psi function is "the only real thing" and everything else is derived. It is often talked about as if actually accomplished. But it was not; the behaviour of quantum systems, even with decoherence, was not yet shown to be indistinguishable from the classical systems. Neither the fact that measurements have one outcome, nor Born's rules for probability were derived from this decoherence idea yet. One thing that follows from decoherence hypothesis is decay of coherence elements in density matrices, but this is not enough to get explanation for single outcomes or for Born's rules.

<comment><USER2> Ironically, I am just in the process of preparing a talk on the history of the atomic theory. Even as late as 1905 when Einstein published his work on brownian motion it was still highly controversial whether atoms were "really real" or just a mathematical contrivance. Some people are able to maintain skepticism even in the face of overwhelming evidence.

> Neither the fact that measurements have one outcome, nor Born's rules for > probability were derived from this decoherence idea yet.

That is because it is not the case that measurements have one outcome. Measurements _appear_ to have one outcome from the perspective of a given classical observer, and the outcome observed by any given observer will be classically consistent with all the other observations that observer makes [1]. The Born rule (which, it must be stressed, is _not_ fundamental, but only _apparent_ from the point of view of any given observer) follows from that, not mathematically but _logically_ [2].

[1] [https://arxiv.org/pdf/quant-ph/9605002.pdf](https://arxiv.org/pdf/quant- ph/9605002.pdf)

[2] [https://www.scottaaronson.com/papers/island.pdf](https://www.scottaaronson.com/papers/island.pdf)

<comment><USER3> Thanks for the links.

> "That is because it is not the case that measurements have one outcome. > Measurements _appear_ to have one outcome from the perspective of a given > classical observer [but actually have none]"

is a big claim, but it lacks "overwhelming evidence". Quantum theory self- consistency is a problem worthy of investigation, but achieving self- consistency is only one of the many possible valid results. This result is not needed as much as many people seem to think; certainly not as much as to reify psi function above objective results of measurements and claim the quoted part. It is a methodological error; instead of shaping the theory around the measurement results, it is rejecting the fact that those measurement results exist.

> The Born rule (which, it must be stressed, is not fundamental, but only > apparent from the point of view of any given observer) follows from that, > not mathematically but logically

I skimmed the paper [2] but found no such thing there. Could you locate it in more precisely or elaborate on the idea? All these kinds of proofs from algebraic formalism seem to achieve is something like "if Born's rule would not be true, we would have problems with the theory" which is not very interesting; we have some big problems with the theory even without decoherence.

<comment><USER2> > it is rejecting the fact that those measurement results exist

Well, sort of. I prefer to think of it as replacing one explanatory hypothesis with a superior one, one that is actually consistent with the evidence. To wit:

The observation that requires explaining is that classical measurements are consistent across space and time.

The usual explanation for this is that a classical objective reality exists, and that measurement faithfully reflects the state of this reality. This is a plausible explanation. Einstein believed it. But Bell's theorem and subsequent experiments show it to be false.

The correct explanation is that classical correlation emerges from the Shroedinger equation alone. There is no objective classical reality. If there were, it would be possible to construct a local hidden variable theory consistent with all observations. But it's not so there isn't.

It is only because our subjective experience is (necessarily) classical that we find all this hard to accept.

> I skimmed the paper [2] but found no such thing there. Could you locate it > in more precisely or elaborate on the idea?

It's the part about Gleason's theorem:

[https://en.wikipedia.org/wiki/Gleason%27s_theorem](https://en.wikipedia.org/wiki/Gleason%27s_theorem)

See also:

[https://www.scottaaronson.com/democritus/lec9.html](https://www.scottaaronson.com/democritus/lec9.html)

<comment><USER3> > But Bell's theorem and subsequent experiments show it to be false.

I think this is an unfounded conclusion. Sure, Bell's theorem and the experiments it inspired did make lots of contribution to investigation of these foundational problems.

But Bell's theorem is about a specific class of probabilistic descriptions. It does not rule out "classical objective reality" unless you restrict meaning of this term so much as to achieve that. Bell himself and many other people who studied the theorem insisted that the theorem is about local hidden variable models, as opposed to nonlocal models. Nothing general is implied about "objective reality".

On the experimental side, I am not aware of any experiment that had ruled out objective reality. How would you even test such a nebulous concept experimentally? We can test only specific predictions.

<comment><USER2> > Nothing general is implied about "objective reality".

I disagree. The fact that nature cannot be described by any local hidden variable theory tells you a lot about the nature of reality. There is a real difference between quantum randomness and classical ignorance, and so there is a real difference -- one which you can experimentally measure -- between a particle whose position you don't know because you haven't looked at the result of a measurement, and a particle whose position you don't know because it hasn't been measured at all. It is still, perhaps, debatable whether that difference lies in the particle or in you. But if you want to argue that the difference lies in the particle then the burden is on you to provide an account of _when and how_ the transition happens. No one has succeeded in this, and it's not for want of trying.

<comment><USER3> > The fact that nature cannot be described by any local hidden variable theory > tells you a lot about the nature of reality.

If assumed to be true, it means one has to use non-local models such as the quantum theory. Those do not explicitly deny objective reality. Perhaps by "objective reality" you actually mean non-contextual hidden variable theory (a theory that assigns well-defined values to all quantum observables at all times). Then yes, those are incompatible with quantum theory predictions. But I would not use the term objective reality. It is unclear and too general.

> there is a real difference -- one which you can experimentally measure -- > between a particle whose position you don't know because you haven't looked > at the result of a measurement, and a particle whose position you don't know > because it hasn't been measured at all.

Indeed, but this difference has nothing to do with objective reality, and everything to do with the actions of the experimenter or apparatus. In the first option, there is interaction with the particle but experimenter ignores it, and in the second, there is no interaction with the particle. Of course the two situations are different and can result in different results of other measurements.

<comment><USER2> I am not denying objective reality, I am denying objective _classical_ reality. There is an objective reality, but it is quantum.

> the actions of the experimenter or apparatus

You are missing the point. Before you can talk about "the actions of the experimenter or the apparatus" you have to tell me what an experimenter or an apparatus _is_. AFAICT, these are classical objects. But theory tells us, and experiment confirms, that classical objects do not actually exist. So why do they appear to exist? And the answer to that is: decoherence/QIT. The classical world is an illusion, an approximation. A very good approximation, but an approximation nonetheless.

If you have a better theory, you should publish it.

<comment><USER3> > Before you can talk about "the actions of the experimenter or the apparatus" > you have to tell me what an experimenter or an apparatus is.

This is a very common error of armchair worldview building. Experiment-based sciences such as physics do not work exclusively that way; we can make progress without being so ambitious as to describe and exhaust the whole world in a single scheme. There are things in the _real world_ that have no useful definition or model in physics, such as matter, or experimenter, or apparatus, or measurement. And this is fine, because we know them by experience, and the subject of the investigation is usually something else and rather more specific.

> But theory tells us, and experiment confirms, that classical objects do not > actually exist.

Which theory, which experiment? The studies in quantum foundations showed that explaining expensive experiments with light and particles in the classical terms is hard, and some naive intuitive models, surprisingly, are not consistent with quantum theory. This is very far from "classical objects do not exist". They can easily exist, just with properties that are contextual and interactions that are non-local. And those are categories we are aware of; the possibilities are endless.

If you're thinking about the Everettian viewpoint where indeed no classical objects exist, this is just one possible theoretical scheme of thinking, not an experiment-based physical theory. There is Bohmian mechanics, where particles do exist. There are other theories where particles do exist.

> If you have a better theory, you should publish it.

A better theory in place of "classical objects don't exist" is "don't try to explain the whole world with a single scheme". There is the statistical interpretation due to Einstein, Ballentine and the Bohmian viewpoint which get us useful models and predictions in the realm of atomic physics. There is the classical theory, which gets us understanding of civil engineering, Earth- scale events and celestial mechanics. There is the general theory of relativity, which gets us accurate description of gravity. None of these overlap very well. Neither is explained by Everettian viewpoint.

<comment><USER2> > Experiment-based sciences such as physics do not work exclusively that way; > we can make progress without being so ambitious as to describe and exhaust > the whole world in a single scheme.

Nope The object of the game in the physical sciences is reductionism. Reducing the number of explanations required to account for observations is the _definition_ of progress.

> "don't try to explain the whole world with a single scheme"

That's not a theory. That's throwing in the towel.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> Microsoft told me that any operation a quantum computer performs HAS to be reversible: something like XOR doesn't work because there're four possible inputs and only two possible outputs, so the state of the inputs is destroyed. However, something like NOT works fine because the input-output mapping is 1:1.

It seems like cheating to say that "reversing cause and effect is no trouble" when the computer was never allowed to perform irreversible operations to begin with. I think I am missing some important information or maybe I am misunderstanding the words used in the article?

<comment><USER5> You have the right idea, but not the right operation. XOR is reversible.

To give a better example: COPY is not reversible. Imagine that you have two qubits [A, B] as an input and you want to output [A, A]. That is not possible with quantum computers.

<comment><USER6> Isn't everything reversible if enough information is stored? Instead of COPY [A, B] -> [A, A]; you could have [A, B, 0] -> [A, A, B] which saves the value of B.

<comment><USER7> IIRC this is how you implement stuff, you always keep the inputs, so everything stays reversible.

<comment><USER2> Yes, but "keeping the inputs" is non-trivial in quantum-land because of the no-cloning theorem. You can't just make a copy of your inputs and stash them. You have to be more clever than that.

</comment></comment></comment></comment></comment><comment><USER8> Forgive me for this being off topic: if you use a script blocker this site will blow up your CPU unless you have ajax.googleapis.com allowed. My browser became completely unresponsive. When I checked dev. console there were 50,000+ errors (and quickly climbing) on a video JS import. (2018-07-reversing-effect- quantum.html:1314). Pretty buggy.

<comment><USER9> Confirmed. It must be some recent change because we've got plenty of submissions from phys.org:

[https://news.ycombinator.com/from?site=phys.org](https://news.ycombinator.com/from?site=phys.org)

Does anybody here work for them and can get in touch with the people that can fix it?

</comment></comment><comment><USER10> Do I read this article in the future because I found it on HN today?

Or did I find this article on HN today because I read it in the future?

</comment><comment><USER11> If quantum computers can maintain a viewpoint where cause and effect don't matter, it seems like they will be at a point very different from the human viewpoint - where a person inherently has more difficulty predicting the future than determining the past.

<comment><USER12> It hasn't got anything to do with that, what the exceedingly clickbaity headline is actually talking about is that QCs are more able to reverse computation.

I'm unclear /exactly/ what they are trying to say as all QC gates are required to be reversible, but it seems that they're trying to say that to make a computation reversible on a classical computer you in general (eg worst case) need to store all the state (massive memory cost) or recompute from the beginning, or somewhere in between (eg when skipping back in a video, a player is generally going to compute relative to the nearest iframe).

In QC this extra memory isn't needed as every computation /must/ be reversible so you just run the program backwards, and rely on the increased state that can be stored in each qubit (a lot of the exponential => polynomial performance improvements basically seem to boil down to each individual qubit being able to represent exponentially more state than a single bit).

Maybe that's helpful? I'm not super sure as the places where QC is faster than classical computation is pretty much only places where you can trade off exponential time for exponential state. E.g. problems that you can't plausibly use a classical computer in the first place.</comment></comment>


1989 Tiananmen Square Protests - <AUTHOR> https://en.wikipedia.org/wiki/1989_Tiananmen_Square_protests <comment><USER2> I see similarities to the <edit>wikipedia picture</edit> protest in Israel's Tel Aviv main square from yesterday, in terms of social distancing.

[https://www.rt.com/news/486269-israel-protest-social- distanc...](https://www.rt.com/news/486269-israel-protest-social- distance/?utm_source=rss&utm_medium=rss&utm_campaign=RSS)

And also, I was just having philosophical thoughts about the distribution of power in the world. I wonder if advances in technology will one day create a coalition of super powerful people who will control the world and will make the rest of humanity slaves at best and completely worthless at worst.

I mean, do ethical people naturally gravitate toward power? or does power tend to attract the less empathetic (to put it nicely)?

[edit]

I even fear one day we won't be even able to post about this topic.

<comment><USER3> power tends to corruption

<comment><USER4> People tend towards corruption, power just enables that tendency. But not always the case and few examples of people in power throughout history who have been shining examples of showing us that it can be done right.

<comment><USER3> i am sure every rule has exceptions.

<comment><USER4> It does, hence tends encapsulates that niche. But then nothing is perfect so their will always be an exception.

Reminds me of an old IT joke - We finally made the perfect code, it debugs itself. Alas when we run it, it electriculted the programmer.

</comment></comment></comment></comment></comment><comment><USER5> Is there a reason this was posted today?

<comment><USER6> Probably OP trying to "test" if HN is controlled by China.

Some weird logic I've seen recently where if you post something about China being bad, and it gets deleted, then that place is "tarnished".

<comment><USER7> I mean if everything bad about one country gets deleted, but this treatment is not given to other countries, I would call that a problem. Not saying that's where HN is at at all.

<comment><USER8> It's plausible that individual users are simply downvoting for not finding it interesting: information that isn't new, preaching to the choir, etc.

While it's possible, I'd be very skeptical that YC/admins are intentionally silencing anti-China messaging; I've certainly seen many posts critical of CCP. It certainly seems plausible that the Chinese state has agents and/or bots that nudge online content in accordance with the party line; if so, I'd be curious to know to what extent HN is on their radar, compared with more highly-trafficked sites like Reddit.

<comment><USER9> Yes, I don't think HN leadership is pro-CCP. However, I do think there is some kind of CCP influence at work. Whether it is normal HN participants that are more understanding of CCP, and dislike the blanket dismissal they get, or there are actual CCP agents at work, is unclear to me. It is clear there is dislike of the outright criticism that CCP gets. My comments critical of the CCP get many more downvotes than even I am used to getting.

I also think that HN mods should have access to enough user data to be able to run some tests and see if particular accounts are more targeted towards CCP critical posts and comments than would be expected by a normal HN reader.

</comment></comment></comment></comment></comment><comment><USER10> His style is not for everyone but the BBC recently repeated Clive James in Shanghai, from 1989. You can see the protests going on and he comments on how the police and army are completely absent (which I guess was around April/early May). It's also interesting to see China in 1989, so massively different from when I visited last year.

[https://www.bbc.co.uk/programmes/m000gx15](https://www.bbc.co.uk/programmes/m000gx15)

</comment><comment><USER11> [https://www.nytimes.com/2019/06/02/opinion/tiananmen- square-...](https://www.nytimes.com/2019/06/02/opinion/tiananmen-square- china.html)

It's interesting to see that after all that a new generation is out there, some willing to simply dismiss the value of knowing that such an event even happend.

</comment><comment><USER12> Note that the protests occurred in the backdrop of market reforms to the economy. Not an expert on Tienamen Square, but that seems important.

"The reforms of the 1980s had led to a nascent market economy which benefited some people but seriously disaffected others, and the one-party political system also faced a challenge of legitimacy."

<comment><USER13> Of course this opinion will not be popular here, but I think that there are legitimate historical assessments to be made on whether the Chinese leadership did this (and not to excuse them by the way), because they saw they were in danger of falling down the USSR route.

I.e. allowing the form (but not substance) of democracy to come in before people were ready for it, just as they making some progress on the constructive path of controlled economic liberalization, and derailing it to produce a oligarchic kleptocracy that would plunge the country into long- feared poverty and chaos. Which we can now see what happened to the USSR.

If you think of that as the choice that was facing those leaders at the time, their actions are more understandable. Just like how we look back now at the Soviet scare era of our history and wonder how we ever got caught up in that ridiculous hysteria.

Again, I say understandable, not excusable. Of course there likely were aspects of preserving power for its own sake, but looking at Deng's intentions and actions (other than Tiananmen Square) throughout his career, one has a hard time saying that he was motivated mostly for maintenance of power and not some public good.

It is a complicated story, and worthy of more than just a knee-jerk reaction. And yes, the important democracy movement and its terrible tragedy ought to be commemorated.

<comment><USER9> I would say even poverty and chaos is preferable to the collective farms and gulags that killed over 100 million during the Soviet regime. Read Solzhenitsyn's "Gulag Archipelago" for context, even just the first chapter of his massive work is extremely eye opening.

Update here since I am rate limited. Check wikipedia for non combatant death counts. Read the first chapter of Gulag Archipelago, and with the very bloody revolution, disasterous collective farming, and constant purges of innocent civilians, you may find 100 million very plausible, if not even sounding on the low side.

Also telling is that Stalin had the UN change the definition of genocide so his gulags and policy disasters would not be counted.

<comment><USER12> The 100M+ number published by the Victims of Communism Memorial Foundation (funded by the USG) includes Nazi war dead.

</comment></comment></comment></comment><comment><USER14> Is hackernews still accessible from China?

<comment><USER15> It's been at least partially blocked since August last year: [https://en.greatfire.org/https/news.ycombinator.com](https://en.greatfire.org/https/news.ycombinator.com)</comment></comment>


The Secret to Making 2000% Gains on Stocks Overnight: The Anavex Story - <AUTHOR> https://medium.com/@jfindallas/the-secret-to-making-2000-in-stocks-overnight-the-anavex-story-342be9c7e5e6#.pob8xgnv7 <comment><USER2> Wow... I'm amazed by this story... I can't believe it's this easy to make millions of dollars...

</comment><comment><USER3> this crashes my browser as well. I am using latest Chrome Mac OSX.

<comment><AUTHOR> Bizarre! It's just a medium story; works for me. I don't know what to tell you!</comment></comment>


A Full C64 Game - In 2013 - <AUTHOR> http://www.gamedev.net/page/resources/_/technical/game-programming/a-full-c64-game-in-2013-r3179

<comment><USER2> I loved my C64 as a kid.

I can't imagine what it would be like to write these sorts of programs without the modern IDE / Debuggers / etc.

Trying to manage concepts like text scrolling or the 8 sprite limit make my numb...</comment>