The importance of science fiction to entrepreneurship - <AUTHOR> https://techcrunch.com/2016/10/08/the-importance-of-science-fiction-to-entrepreneurship/ <comment><USER2> The article makes the case for the world descriptions and concepts introduced in SF being an inspiration to real world entrepreneurs, such as Stephenson inspiring the PayPal co-founders and a series of portal companies.

But science fiction has a greater impact in being one of the few forms in 20th century arts that dared to present an optimistic view of the future and of values that led to a better world, be it Picard's exemplary leadership in Star Trek TNG, or Heinlein's "normal person finding their courage and values has an impact" novels.

Apocalypse Now or Brazil may be "great" movies but they are incredibly depressing. "Resign yourself to the brokenness of the world, people. The state/realpolitik will crush you." "No", says Asimov, "your actions matter and have an impact. Courage and reason are great qualities, go build the world you want." How many other mainstream movies, books or artworks have this message, outside of science fiction?

<comment><USER3> I was surprised to agree a lot on what Disney's Tomorrowland stated on that exact matter.

</comment></comment><comment><USER4> Good article. Anyone here a fan of Greg Egan? I found "Schild's Ladder" the best piece of Sci-Fi I ever read. Can anyone suggest similar authors?

<comment><USER5> The Three Body Problem is reasonably good, and comes from a Chinese author Link to NPR article about it because I'd rather you chose your own bookshop. [http://www.npr.org/2014/11/13/363123510/three-body- problem-a...](http://www.npr.org/2014/11/13/363123510/three-body-problem-asks- a-classic-sci-fi-question-in-chinese)

<comment><USER6> I can't recommend this book and it's follow up enough! The description of a machine made of a single particle unfolding into higher dimensions is one of my favorite passages in recent sci-fi. I think the last book in the trilogy is out, but haven't had time to read it yet.

</comment></comment></comment><comment><USER7> I'm reading Neal Stephenson's Anathem now. I feel like it's a book that will stay relevant in the future, partly because of how cultural persistence is an element of the story.

edit: I spelled the title incorrectly.

<comment> Ar-Curunir Anathem was Stephenson's first book that I read; I was absolutely mind blown. It's a slow burn (like most of his books), but the ending is more than worth it. Later I picked up Cryptonomicon, and it's a big reason why I'm doing a PhD in crypto now.

<comment><USER8> Does Anathem have an ending or just sort of ends like the rest of Stephenson's books? Just curious.

<comment><USER5> It's the least bad of his endings, and quite big. Worth going to the end.

</comment></comment></comment></comment><comment><USER9> Very interesting read. It would be interesting to know if there are people here that can point to a particular book that gave them an idea for a startup or even a side project.

<comment><USER10> +1

</comment></comment><comment><USER11> I'd also point you to Eliot Peper, William Hertling, and Nick Thacker

</comment><comment><USER12> A must watch: [https://www.youtube.com/watch?v=ZjlF_iSo1Og](https://www.youtube.com/watch?v=ZjlF_iSo1Og)

 _William Shatner presents a light-hearted look at how the "Star Trek" TV series have influenced and inspired today's technologies, including: cell phones, medical imaging, computers and software, SETI, MP3 players and iPods, virtual reality, and spaceship propulsion._</comment>


Ask HN: How to get traction on an open source JavaScript project? - <AUTHOR> I've been working on a front-end MV* framework for some time. It would be great to get other's input ,feedback, and commits but I can't seem to figure how exactly to go about doing it.
I've posted it to here a number of times but my posts just slide right off the 1st page into oblivion every time.
Does anyone who has experience building up an open source project care to share their story? <comment><USER2> How to get traction on an open source JavaScript project? It depends on what you mean by "traction". I have been running an open-source JavaScript project in artificial intelligence at [http://www.nlg- wiki.org/systems/Mind](http://www.nlg-wiki.org/systems/Mind) and other venues for a number of years. The JavaScript AI project is mainly in support of my other AI projects at [http://ai.neocities.org/AiSteps.html](http://ai.neocities.org/AiSteps.html) and at [http://github.com/PriorArt/AGI/wiki/MindGrid](http://github.com/PriorArt/AGI/wiki/MindGrid) and [http://mind.sourceforge.net/js.html](http://mind.sourceforge.net/js.html) and a host of other sites. Upshot? The JSAI project does not get "traction" for itself; it exists to engender "traction" for the Mentifex Strong AI project in Forth and in Perl. Netizens who might not want to download Forth and the Mind.Forth AI will be perfectly willing to point MSIE at [http://ai.neocities.org/AiMind.html](http://ai.neocities.org/AiMind.html) and try out the JavaScript AI in English or the [http://ai.neocities.org/Dushka.html](http://ai.neocities.org/Dushka.html) AI in Russian. So, good luck in your search for "traction". Be glad that Netizens do not actively hound you and denigrate you like they do Mentifex.

</comment><comment><USER3> Looking at the stories link for stories on your user profile page, I only saw one javascript project as a 'Show HN' from several months ago. The link to it is dead. If you're posting under a different account, it probably doing so probably doesn't add any value.

Good luck.</comment>


Why Do So Many New-Media Startups Ultimately Commit Suicide? - <AUTHOR> http://adage.com/mediaworks/article?article_id=146504

<comment><USER2> _the startup world continues to exist in a bubble economy propped up by venture-capital dollars. Being clever enough to score backing continues to be seen as proof of brilliance -- and market-dominating chops. But satisfying VCs and satisfying users are often two very different things._

Er, what? Digg had users, lots of users, and they were perfectly satisfied. For a while. So were MySpace's users and Friendster's users. If Friendster had been _nothing_ but a pile of VC money we would never have heard of them, except perhaps as the butt of jokes after a Super Bowl ad or something.

What happened to these former greats is _progress_. The future unfolded. New things were invented and old things fell out of fashion.

Now, one could argue that the crazy valuations were the fault of VCs. One could argue that some of the crazy decisions were the fault of VCs. One could argue that the value of a user, in dollars, is routinely being overestimated. But the users were real, and many of them were satisfied. Until something better came along.</comment>


Wheel chair Tai Chi - <AUTHOR> http://www.eurekalert.org/pub_releases/2012-04/uosf-tcw041712.php <comment><AUTHOR> Probably good for office chairs too!</comment>


Minecraft developer streaming live while coding - <AUTHOR> http://mojang.com/live/

<comment><USER2> You can see a timelapse of him working from a couple of months ago: <http://news.ycombinator.com/item?id=1629810>

The amount of work this guy can get done by just sitting down and working non- stop is incredible.

<comment><USER3> When I watched it a couple months ago, I did not know that this was _the_ Minecraft developer (I think it was before Minecraft was released). The video is and was probably the most inspiring thing on the power of creative programming I've ever seen. His ability to iterate and iterate and create something out of literally black nothingness. When you see him doing the artwork, you're like woah - he does his own graphics too!

<comment><USER4> He was already living off of MC revenue by that time.

</comment></comment></comment><comment><USER5> Sadly a live feed of my programming session this weekend would include a tab over to HN every ten minutes to see what is going on... noprocrast is sooo needed for me - but I just can't do it...

<comment><USER6> Just do it. Do it now, right when you read this post. It's completely worth it. It's just not worth it to come here and read articles about how to be productive and then not end up doing anything because you're on HN. I did it a few months ago and never looked back.

Back to work...

<comment><USER5> You know what - I just did it. I know my productivity yesterday was shot - let's see what today brings. Thanks for that little verbal push - I may have actually needed that.

<comment><USER7> <http://news.ycombinator.com/item?id=1917274>

</comment></comment></comment></comment><comment><USER8> Wow, this would take real stones. I don't think I could do this.

I micro-predict that this will be the first of many livecasted coding personalities.

<comment><USER9> The programmer's zen rock garden?

<comment><USER10> "Stones" is slang for "balls" is slang for "testicles," which are attributed (metaphorically) to be the source of bravery. Acts of great bravery are said to require loins of great fortitude, viz. "balls of steel."

<comment><USER9> Sorry, it was in reference to this:

" _I micro-predict that this will be the first of many livecasted coding personalities._ "

Notch coding is both hypnotic and mutable in the way that a traditional Japanese rock garden is meant to be.

<comment><USER10> Ah. My mistake; turns out I'm the one that didn't "get it."

<comment><USER11> You coined the term "loins of great fortitude". You have nothing to apologize for.

</comment></comment></comment></comment></comment></comment><comment><USER12> The chat seems to suggest that this isn't actually live. Apparently it is just looping a video of him coding at some point in the past. The "Live Steaming" text will be red, not gray, when he it is actually streaming live.

<comment><USER13> Notch is in Sweden (GMT + 1) and your comment was made while he was fast asleep. He codes most of the day his time, which is most of the night for America. You're seeing a loop because he's asleep -- well he was when you were commenting.

</comment></comment><comment><USER12> A question highly related to this: If I was interested in recording myself while coding what program would you recommended? It doesn't have to support live streaming. The only real requirements are that I could turn it on and forget about it safely (not running my computer out of memory) and that it is of good enough quality that you can read text. I use Ubuntu.

<comment><USER14> If you look in the Ubuntu repos for a package called gtk-recordmydesktop I believe that is popular for making screencasts.

If you want to edit the video I think PiTiVi is installed by default. I hear OpenShot is also good for beginners.

</comment></comment><comment><AUTHOR> Found on reddit: [http://www.reddit.com/r/programming/comments/eo29l/minecraft...](http://www.reddit.com/r/programming/comments/eo29l/minecraft_developer_streaming_live_while_coding/)

</comment><comment><USER15> Just watched him type:

"Random random = new Random();"

Too funny.

<comment><USER16> The javadoc reference for Random() notes "This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor."

</comment></comment><comment><USER17> Too bad, Notch just announced that he's giving up. His entry to Ludum Dare 19 won't be finished, but the source code of what he did so far can be found here:

> <http://mojang.com/notch/ld19/>

</comment><comment><USER18> If you click on the video to go to the livestream.com page for him, you can see his recent recordings including today's where he was working on some dungeon game apparently. It's the left most video.

</comment><comment><USER3> Go Java! I'm kind of shocked he uses Eclipse instead of IntelliJ though.

<comment><USER19> Just out of interest, what features in IntelliJ make it a better environment than Eclipse? I've been working on a GWT/GAE app and Eclipse seemed like the natural choice given that there are Google plugins available. We're starting a new Java (Drools/Hibernate/some kind of WS framework) project soon - are we likely to get much benefit out of purchasing some IntelliJ licenses?

<comment><USER3> IntelliJ is expensive. IntelliJ makes refactoring simple. For example, we got acquired by a company and were forced to rename our com.origcompany to com.newcompany. In one project that was several thousand class files. IntelliJ did it in about a minute. Eclipse crashed somewhere after twenty minutes. I actually had to use Eclipse because Flex Builder would only run on Eclipse Ganymede. I lost many minutes of my life waiting for Flex Builder to build. I don't know if that was a consequence of Flex Builder's mxmlc performance but I do know that Eclipse completely froze on our Windows machines a few times a day. For a team trying to get a app done, we unofficially acknowledged that Eclipse was an impediment. The major drawbacks to IntelliJ is that Git support is poor. I would recommend just doing stuff from the command line for Git. We use SVN. My general feeling with IntelliJ is that it is a very polished product that I've been using since 2000 (before that we used the awesome Visual Slickedit). In Eclipse, I found that simple stuff that you may do often isn't optimized (for example, reference or string searching) - in IntelliJ it is cached. In Eclipse, searching always took forever (I should have attempted to look for a searching plugin). My best analogy is that IntelliJ is a BMW and Eclipse is a minivan. Both work, one is better performance and more tuned. One is feature rich.

<comment><USER20> This post is a perfect candidate for the 'itemized list pattern' :-)

</comment></comment></comment></comment><comment><USER21> Came in for the coding. Left it open for the music (although I peek now and then, but since it's so low-res that I can't actually read any code, there's almost no point in doing that)

<comment><USER22> > Left it open for the music

He's listening to this Soma.FM stream: <http://voxsc1.somafm.com:3000/>

> it's so low-res that I can't actually read any code

He said to retweet <https://twitter.com/daniel_flanagan/status/16131364550086656> if you want him to zoom in on the code.

</comment></comment><comment><USER23> Hm, watched for a while, but it's just him playing the game. Hopefully someone does a highlights reel or uploads a copy I can fast forward.

</comment><comment><USER24> If anyone get's a recording of this session after he's done, I'd greatly appreciate it!

<comment><USER25> not live at the moment, so he must loop back when he goes offline, meaning recording may not be necessary

</comment></comment><comment><USER26> It rotates an ad every 10 seconds. Lame!

<comment><USER27> press the x button on the ad?

</comment></comment><comment><USER28> Lot and lot of ads.</comment>


Hong Kong is collateral damage in Trump's new trade war with China - <AUTHOR> https://asia.nikkei.com/Opinion/Hong-Kong-is-collateral-damage-in-Trump-s-new-trade-war-with-China <comment><USER2> Weren't Hong Kongers themselves asking the US to remove HK's special status? Seems like they're scuttling the ship.

While China seems to think the Covid situation is an opportunity for it to increase influence, it's probably the opposite. The pandemic has shown China to be a single point of failure in the supply chain.

Trump is right about China, but everyone else in the West can't/won't agree as they're too afraid of missing out on Chinese investment funny money.

As for expelling foreigners from HK... why wouldn't they? They're already expelling foreigners from the mainland.</comment>


The Vanishing Pugilist and the Poet - <AUTHOR> https://www.laphamsquarterly.org/roundtable/vanishing-pugilist-and-poet <comment><USER2> Unfortunately, the website seems to be down with a 403 Forbidden.</comment>


Inline assembly in Linux - <AUTHOR> https://github.com/0xAX/linux-insides/blob/master/Theory/asm.md <comment><USER2> I'm trying to add call/cc to node, or to lua.

Recap: call/cc is the ability to save the current state of a running thread, then revert to that state at a later point in time. In other words, at any point in your program, you can say "Save the current stack." It's saved as a function. Later, whenever you call that function, the current stack is thrown out, and replaced with the saved stack.

This is very useful for a number of reasons. It's also a very rare feature to have in your language.

Neither node nor lua has support for this. The closest I've found is a Lua extension which adds coroutine.clone(). In principle, this is the solution. In practice, it has a number of limitations, such as restrictions on when you're allowed to call coroutine.clone(). (For example, if your stack looks like Lua -> C -> Lua, then it won't work.)

I tried to channel my inner Mike Pall and solve this problem once and for all, but I'm not Mike Pall, and this is really hard. I was hoping you might know of any possible solution which is (a) practical, (b) cross-platform, and (c) works in all cases.

Why post this here? Because this post happens to attract exactly the kind of people that might know a way forward. There _must_ be a way. Apologies for the off-topic comment.

<comment><USER3> > if your stack looks like Lua -> C -> Lua, then it won't work.

I don't think you can safely solve this in the general case. There is a key problem I don't think you can work around.

Say your stack looks like C(1) -> Lua -> C -> Lua. The outermost C frames might not know anything about Lua (they just use some library that uses Lua as a library). Say you try to take a snapshot of this stack to create a continuation. You probably just want to snapshot the Lua -> C -> Lua part, since that is the portion of the stack representing the execution of the Lua program.

Now say all these frames return. Then the main program calls Lua again, through through a slightly different code-path, and now you have C(2) -> Lua. Say the embedded Lua program decides to resume the continuation.

Now keep in mind that the C stack is not position-independent. The C stack can contain pointers to the C stack, so when you resume, you need your resumed stack to live at _exactly_ the same address as last time it ran. But what if C(1) and C(2) are not exactly the same size? What if we called one extra function before calling Lua the second time? It is impossible to copy the continuation's C stack back into its original position. So it's impossible to resume the continuation.

You could try to snapshot the _entire_ C stack to get around this, including the outermost C frames. But this would be most unexpected for the C program that is using the Lua interpreter. Lua is supposed to just be a regular C library: you call a function, it does things, and then returns. It wouldn't be acceptable that calling a Lua interpreter function like lua_call() backs your entire C program to a previous state just because the embedded Lua program used a fancy feature called continuations!

There are many other things that would make this tricky at best to get working, but I think the problem above really tanks the idea completely.

<comment><USER2> _But what if C(1) and C(2) are not exactly the same size?_

Say you want to resume continuation K, which has a stack of some size N.

The current thread has a stack of size M. If M >= N, everything is fine: you can safely overwrite the current stack with K's stack.

If M < N, recurse until M >= N.

 _You could try to snapshot the entire C stack to get around this, including the outermost C frames._

Indeed! This is a solution.

 _It wouldn 't be acceptable..._

I like doing unacceptable things in my programs. It's the best part of programming, really.

There are a lot of solid arguments against call/cc. I think the most persuasive argument in favor of call/cc is that you become more powerful. Whatever metric you use to measure power, call/cc will improve it: Smaller code, less time spent writing code, and you can even write algorithms that you otherwise would not be able to.

Personally, I want call/cc in order to be able to use choose and fail. It's the ability to write programs that are guaranteed to never call fail(). pg explains it well:

"For example, this is a perfectly legitimate nondeterministic algorithm for discovering whether you have a known ancestor called Igor:

      Function Ig(n)
        if name(n) = 'Igor'
          return n
        if parents(n)
          return Ig(choose(parents(n)))
        fail

The fail operator is used to influence the value returned by choose. If we ever encounter a fail, choose would have chosen incorrectly. By definition choose guesses correctly."

Call/cc makes this possible. There are a lot of fun things to do. The last few chapters of _On Lisp_ show some particularly interesting sketches.

<comment><USER3> > Say you want to resume continuation K, which has a stack of some size N.

The size of the continuation's stack doesn't matter for the problem I described, it's the size of the stack "underneath" your continuation that matters (ie. C(1) and C(2) above).

If C(2) > C(1) there is no way to shrink C(2) such that the continuation's stack can be copied into the right place.

> I like doing unacceptable things in my programs. It's the best part of > programming, really.

What you do in your programs is up to you! But nobody else is going to use a C library that messes with the execution state of its callers (unless that is the point of the library, which it isn't with Lua).

<comment><USER2> I don't understand, but I'd like to.

To create a continuation, we need to copy the entire stack, by definition. But "the stack" is just an array of bytes. It's all the bytes between the current stack pointer and the "root" stack frame. So to create a continuation, copy these bytes and stash them somewhere, then set up a longjmp target to the current instruction.

To apply a continuation, i.e. to restore the stack, we overwrite the current stack starting from the root frame. Then we longjmp to where the continuation was originally created.

It seems like this scheme should work in any situation, but perhaps I'm missing something?

loeg pointed out getcontext(3) / setcontext(3), which seems promising. It looks like a standard way to sidestep all of this bookkeeping. It appears to be a high-level interface to the operations described above.

Lua is just a language, though. It's not "for" anything in particular.

<comment><USER3> The Lua implementation is a C library. You invoke it by calling C functions like lua_call().

Imagine you have a C program like this:

        #include <fancylib.h>

        int main() {
          for (int i = 0; i < 10; i++) {
            printf("val[%d] = %d\n", i, fancylib_calculate(i));
          }
          fancylib_cleanup();
        }

Now imagine that internally, fancylib uses Lua. So fancylib_calculate() calls lua_call().

Now imagine that the Lua function run by fancylib decides to use continuations. When you call fancylib_calculate(0), it creates a continuation. And when you call fancylib_calculate(1), it decides to call the continuation.

If you restore the entire C stack to resume the Lua continuation, it will reset the loop in main() to i=0! Your program might end up printing val[0] over and over, in an infinite loop. This would be extremely surprising to you as the author of main(), because you were just trying to write a normal old for() loop. The Lua continuation should just restore the Lua-related stack, not the stack of the functions calling Lua!

<comment><USER2> _If you restore the entire C stack to resume the Lua continuation, it will reset the loop in main() to i=0!_

That's the point of continuations, though. That's a feature, not a bug. When you create a continuation, you're saying "whatever happens after this, allow me to do it again at some later time." If the calling library happened to be in a loop, then the goal is to serialize that loop so that it can be invoked again, at a later point.

If you keep applying the continuation in a loop, then you'll get an infinite loop. But if you invoke the continuation once, (and if subsequent calls to fancylib_calculate() don't), then you'll get the ability to print

      val[0] = 42
      val[1] = 99
      ...
      val[9] = 7

on demand. By invoking the continuation, you cause the loop to happen again.

In fact, you gain the ability to prevent the program from terminating, in a controlled fashion. Since you have access to the continuation, you can choose to invoke it on the 10th call to fancylib_calculate(), up to 3 times in a row. That would produce output like:

      val[0] = 42
      val[1] = 99
      ...
      val[9] = 7
      val[0] = 42
      val[1] = 99
      ...
      val[9] = 7
      val[0] = 42
      val[1] = 99
      ...
      val[9] = 7

then the program would exit.

Does that make sense? Apologies if we're talking past each other. I appreciate the patience.

<comment><USER3> > That's the point of continuations, though. That's a feature, not a bug.

If that's what you're after, then by all means implement that. :) But I think most people would expect the Lua interpreter state to be self-contained, and not to affect the state of the surrounding C execution environment.

<comment><USER4> The lua library can already affect the surrounding C state (either through FFI with LuaJIT, or having a lua function call back into C code), so I don't see that as a real argument.

Unless you are allowing arbitrary code execution, you are likely the one passing in scripts to the interpreter - these sorts of interactions should be well documented by the lua scripts themselves...and I don't recommend allowing arbitrary lua anyhow - os.syscall and friends say hi - need to block access to those carefully. Thus, we have two situations - either you know and trust the code not to do unexpected things (or to do them in an expected manner :) ), or you've set up your lua environment in such a way to disallow such calls, and it doesn't matter.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> I've been using a lot of inline assembly lately, and while the Stockholm syndrome might be in effect, I'm coming to like the GCC syntax. For me, main thing that has helped has been to adopt a consistent syntax. Here's some examples of what I'm currently using for an AVX2 popcnt optimization, with some explanation.

      #define ASM_VEC_BYTE_COUNT_SET(vec, sum, mask, shuf)                  \
        __asm volatile ("vpsrld $4, %[VEC], %[SUM]\n"                       \
                        "vpand %[MASK], %[VEC], %[VEC]\n"                   \
                        "vpand %[MASK], %[SUM], %[SUM]\n"                   \
                        "vpshufb %[VEC], %[SHUF], %[VEC]\n"                 \
                        "vpshufb %[SUM], %[SHUF], %[SUM]\n"                 \
                        "vpaddb %[VEC], %[SUM], %[SUM]\n" :                 \
                        /* rd/wr ymm */ [VEC] "+&x" (vec),                  \
                        /* write ymm */ [SUM] "=&x" (sum) :                  \
            	    /* read ymm  */ [MASK] "x" (mask),                  \
                        /* read ymm  */ [SHUF] "x" (shuf))

1) Try to use the %[symbolic] syntax rather than %[n] numeric. It's slightly longer to write, but usually clearer to read. Use upper case for the symbolic name. Put your inputs one per line, with a preceding comment.

2) If you are using the same assembly more than once in your program, declare your assembly within a #define macro, then use the macro in your code.

3) Use "__asm volatile". Declaring "volatile" is not required, but once you are writing inline assembly you usually know more than the compiler about where the block should go.

5) If you have multiple lines of assembly and output registers, you are almost always safer to use "+&" and "=&" for your constraint rather than just "+" or "=". Search for "early clobber" for details.

6) Strongly prefer single type constraints. The more flexibility you give the compiler, the more likely it will defeat your efforts at optimization. Use explicit memory addressing modes rather than "m". The modifier "c" is needed for the offset.

      #define ASM_VEC_LOAD_OFFSET_MEM(off, mem, vec)                    \
        __asm volatile ("vmovdqu %c[OFF](%[MEM]), %[VEC]\n" :           \
                        /* destination */ [VEC] "=x" (vec) :            \
                        /* byte offset */ [OFF] "i" (off),              \
                        /* mem address */ [MEM] "r" (mem))

7) The register constraints for vectors are tricky, because the "x" constraint is used for both XMM and YMM vectors. There is no way to specify that one wants only one or the other. This sort of makes sense, since in hardware they share the same register. You can use the "q" modifier when you need to specify XMM syntax in the output when you need both forms of the same vector.

<comment><USER6> 3 - using volatile for asm that doesn't have otherwise inexpressible side effects has the same askance that using it for thread safety has. If you think you need it, maybe you needed to add a "memory" clobber instead.

5 - I can't think of any meaning early clobber has on an input+output constraint ("+")?

6 - there are many cases where you really do want to give the compiler flexibility in addressing modes. Unfortunately clang tends to ignore that and generate (reg) regardless.

7 - not really different than GPRs; you use "r" as the constraint then a modifier like "k" for the size.

I guess the lesson is that yeah gcc inline asm is powerful, but they try to leave it undocumented for a reason. Also, who stole number 4?

<comment><USER5> re 3: If it were for correctness, I'd agree. But I don't need volatile to make it work, I need it to produce the assembly I want. If one instruction can execute only on Port 1 (popcnt) and the other can execute on Ports 0, 1, 5, or 6, there's sometimes a 50% performance difference based on the order two seemingly independent instructions are executed. Volatile also prevents the compiler from hoisting loads ahead of my inline assembly, which sometimes makes a difference. Clobbering "mem" might force other reloads that I don't want to happen.

re 5: Barring compiler bugs, I think you'd be right if correctness was the only issue. But I'm pretty sure I've sometimes solved problems by adding it, although this may have been when working around the POPCNT bug that added a false dependency on the output. It also might have been when reading and writing a variable multiple times?

re 6: In theory, yes. But usually in these cases you should be writing intrinsics or straight C instead of inline assembly. The place where this comes up most for me is when I have two variables that use the same index, and I want to ensure "DEC/JNZ" fusion at the end of the loop. If I let the compiler choose, it will find a way to defeat me by incrementing both array addresses. The other case is when you explicitly want a store to use Port 7 for address generation, which only happens without an index register.

re 7: Yes, I just personally find it more confusing because "x" fits so well with "XMM", and thus it feels odd to use it when you want only a "YMM". Also, see here for problems with a Clang and %q[VEC]: [http://stackoverflow.com/questions/34459803/in-gnu-c- inline-...](http://stackoverflow.com/questions/34459803/in-gnu-c-inline-asm- whatre-the-modifiers-for-xmm-ymm-zmm-for-a-single-operand)

re 4: Oops, I forgot to renumber. I had another comment suggesting that one always use the "V" VEX prefix on vector commands and the explicit output register, but deleted it because it seemed off topic.

</comment></comment></comment><comment><USER7> Is it ever the case that inline assembly is required over separate object sources just in assembly? I would have thought it would be preferred to not use inline assembly, and simply link in object files of what you need. It would seem simpler syntax-wise, too. Why prefer inline assembly?

<comment><USER8> There's several macros in the kernel which contain inline assembly, and you can't use code written in assembly because it would require using the stack to call the function (the case I'm thinking of is the switch_to macro which switches between tasks in the kernel).

</comment></comment><comment><USER9> GCC inline assembly is one of the most terrible things I've ever had to work with. Somebody seriously need to redesign it or replace it. Aside from that,a decent reference manual for the existing version would be welcome.

<comment><USER10> I'm working on a new language that has inline assembly and I pretty much just copied GCC's syntax[1]. Do you have any specific suggestions on how to do better?

[1]: [https://github.com/andrewrk/zig/blob/master/std/linux_x86_64...](https://github.com/andrewrk/zig/blob/master/std/linux_x86_64.zig#L60)

</comment></comment><comment><USER11> Having lived my development life so far removed from the actual physical CPU/memory, thinking about implementing this kind of low-level stuff into actual code is mind-boggling to me.</comment>


New VR controller allows you to touch things in VR - <AUTHOR> Hapto is a unique wearable gaming controller that enables you to feel the shape, density, and distance of objects within a virtual space.
With Hapto you get all the functionality of the best controllers available, as well as an extremely real tactile experience.
The Hapto experience is fluid, accurate, and unbelievably realistic.
http://igg.me/at/hapto/x/15527371 <comment><USER2> One of the most functional VR controllers planned for the PSVR at this moment, yes. I love the DualShock4 controller, but when it comes to grabbing things and moving them around, the controller just isn't going to do it.

</comment><comment><AUTHOR> [http://igg.me/at/hapto/x/15527371](http://igg.me/at/hapto/x/15527371)</comment>


Hosted Continuous Integration (The future of Agile) - <AUTHOR> http://runcoderun.com

<comment><USER2> _Please_ don't make more links to private betas, wait until they go public.

<comment><USER3> If any fellow HN readers want an invite, you can send me a direct message on twitter or wherever.

Right now we support open source Ruby projects, so if you fit that group let us know.

</comment></comment><comment><USER4> I got really excited when I saw this. Then I noticed it was in private beta. Then I noticed it was Rails-only. Then I closed the window and cried :'(

<comment><USER3> We support Ruby btw, not just Rails. We'd love to expand to more languages, the big question is which ones do we focus on next due to the time+cost it takes.

<comment><USER4> I'm strictly a Python guy myself. If it were me, I'd try to reach out to various programming communities and see what the demand is for different languages. Personally, I will never have a use for anything that requires me to use Ruby, but I'm just one guy; maybe the Ruby/Rails communities have the biggest desire for this type of service. I am switching over to GitHub, though ;)</comment></comment></comment>


Show HN: SolvedTeachYourselfC- Herbert Schildt – Teach Yourself C – Solved - <AUTHOR> https://github.com/MinhasKamal/SolvedTeachYourselfC <comment><USER2> Schildt does not have a stellar reputation: [https://www.seebs.net/c/c_tcn4e.html](https://www.seebs.net/c/c_tcn4e.html)

<comment><AUTHOR> In the first semester of our software engineering course, we have read Herbert Schildt. I started my programming life with this book, like most others in our country.

I went to the link you provided. May be you are right, but it is really hard to accept.</comment></comment>


Ruby talks of 2014 - <AUTHOR> http://przemekmroczek.com/post/106717411075/5-killer-ruby-talks-of-2014

<comment><USER2> In my opinion one of the best Ruby talks of 2014 is "Refactoring Ruby with Monads"[0] by Tom Stuart held at Barcelona Ruby Conference.

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

<comment><USER3> This talk is really, really good. It is complex though so you might want to pause/play or rewatch to really get it.

It made me nearly buy Tom's book but the only reason I didn't was because I already owned it! I hope the book is similar to the talk.

Unicorn unix magic tricks is really good at explaining some of Unicorn's advanced features. It shows how Unicorn uses Unix signals and forking in detail.

<comment><USER4> The book sounds really good. Thanks for the suggestion. In case anyone is wondering, you can learn more here:

[http://computationbook.com/](http://computationbook.com/)

<comment><USER5> Every once in a while, I will stumble across a thread on HN that turns out to have been perfectly crafted for me.

I would like to thank the original poster for posting this talk and all the other HNers for posting the follow-up info (including a link to his book).

This info came to me at the perfect time.

I figured I would make my first post on HN for the year, be a positive and thankful one.

Thanks again :)

</comment></comment></comment></comment><comment><USER6> Here's my list of (mostly) Ruby-related good talks from this year:

[http://thomasleecopeland.com/2014/10/18/good-technical- video...](http://thomasleecopeland.com/2014/10/18/good-technical-videos.html)

Andrew Turley's "What we can learn from COBOL" talk is probably my favorite.

</comment><comment><USER7> I'll put a humble plug in for my talk "Care and Feeding of your Junior Developer" from Nickel City Ruby. It was on top of Confreaks for a few weeks and people seemed to like it, so if you are a junior, or you mentor juniors, check it out.

[http://confreaks.com/videos/4659-nickelcityruby2014-how- to-b...](http://confreaks.com/videos/4659-nickelcityruby2014-how-to-be-an- awesome-junior-developer-and-why-to-hire-them)

<comment><USER8> This is great, thanks. I'm a senior dev who received very little mentoring coming up. I'm now in a position where I have several junior devs working on projects that I'm leading and I don't want to fail them the same way. I'm very guilty of taking the keyboard and writing the code for them, that's something I'll definitely stop right away.

</comment></comment><comment><USER9> That this list got upvoted to the top spot must be some sign that the HN audience is still enthused about Ruby-related stories (I say that has a Ruby fan myself)...It's a good list and I'll bookmark all of its items, but it is pretty brief, both in items (5) and in the summarization (and the use of the overexcited cliché "killer" in the original title makes me extra curmudgeonly about it).

Or are people really enthused about talks as a way to learn things? I haven't been to a talk in awhile and I just can't get into video learning. So FWIW, I'll throw in the Ruby-related-infothing that I was most excited about this year: the publishing of "Metaprogramming Ruby 2:" ([https://pragprog.com/book/ppmetr2/metaprogramming- ruby-2](https://pragprog.com/book/ppmetr2/metaprogramming-ruby-2))...The original version was one of the most helpful books to me as a Ruby beginner in 2010, both in learning the language and learning new ways to think about programming.

<comment><USER10> What do you find so fantastic? I'm starting to think I'm broken, because I just don't understand what's so amazing.

I read Metaprogramming Ruby. It seems very excited to show you how you can do "myrow.columnname" instead of something like "myrow[" columnname"]. Likewise, I see people absolutely tickled that they can do "find_by_id(123)" without codegen vs "find_by("id", 123)". OK that saves a bit of syntax, but it's hardly breakthrough. And it's more elegantly solved with a specific dynamic lookup operator. It doesn't seem like it's worth the performance overhead or the pitfalls of a dynamic environment (thinking of the fun Rails had in the simple task of serializing HTTP bodies).

The only benefit I've found in Ruby that's not easily accessible in say, F#, is having reflection easily accessible. The .Net reflection libraries are clunkily designed. When you need it, being able to eval and such is handy. All the pieces are there, but they don't just expose an " eval" call or whatnot. But that's mainly a stdlib shortcoming, and wouldn't require giving up static analysis.

Do you have any pointers to examples where metaprogramming is really useful, to the point of paying the cost of Ruby?

<comment><USER11>
      class Blog < ActiveRecord::Base
      end

Ever wonder how that works? Metaprogramming.

      enum status: [ :active, :archived ].
      validates :status, presence: true

Ever wonder how that works? Metaprogramming.

Used the awesome debugger, pry? Ever wonder how that works? Metaprogramming.

`find_by_id` isn't the only thing that's implemented using Metaprogramming. Practically, everything within ActiveModel is achieved through Metaprogramming. It is one very important reason that allows Ruby to be so expressive.

<comment><USER10> You can expose the same functionality in, say, C# or F# if you want to give up static type checking. (Actually with F# type providers or a language with good macros, you can keep static analysis if you're willing to bind yourself to the database at build time.) This is just a use of dynamic binding. That's fine, I just thought there was more to it, something that requires a lack of static analysis, multi threading, etc.

</comment></comment></comment></comment><comment><USER12> Wow, sandi's talk was really interesting. She's working on a rails book so i'll be interested to see her approach to rails.

I'm pretty good with "small methods" but her refactor from that to "small objects", while more flexible, seems like its more complicated in the end. I mean if you're going to have a lot of those it makes sense, but I feel like it could equally be called premature; but I respect that it is more tolerant to future unknown changes. "small methods" is also easier for a junior developer to support, and i think that should be taken into consideration.

<comment><USER13> I really enjoyed her talk but I found some parts of it slightly contradictory, although I think it's mostly due to a difference in opinion as to what what is or isn't easier to reason about.

A point she made earlier in the talk is the piece that I have become more and more in agreement with over time. Paraphrasing: 'bad abstractions are worse than code duplication'. I would go farther and say that in the modern coding world, premature optimization isn't the root of all evil, premature abstraction is.

The part that I find contradictory is that breaking larger classes into tons of little classes is, to me, a form of abstraction and carries implicit complexicty. She does hit on this point a bit, but it's easier to dodge the issue with simple examples than it is in the wild. Certainly there is a 'cutoff' where a class is too big, but I find that trying to make every method 1 line long and every class completely contained creates huge nested layers of abstractions that are often difficult to follow and hard to reason about for anyone other than the author or someone who has been working on the codebase for a long time.

<comment><USER12> > trying to make every method 1 line long and every class completely contained > creates huge nested layers of abstractions that are often difficult to > follow and hard to reason

I agree a lot with this, and have worked on such codebases. It becomes very difficult to tell whats actually going on, or how. or why! I think like everything else, it's subject to abuse and misuse.

</comment></comment></comment><comment><USER14> It's interesting to note just how applicable these talks are to other languages. That database one is something i'd recommend a high schooler listen to for their next hackathon.</comment>


Nokia to Acquire and Open Source Symbian - <AUTHOR> http://mobile.slashdot.org/mobile/08/06/24/1224209.shtml

<comment><AUTHOR> Even if Symbian went open source, it would still suck. Their API is just so terrible.

<comment><USER2> And it goes much deeper than just the API. The whole architecture is a shambles. Some of this may have been fixed in the four happy years since I touched the platform, but some of the highlights I can remember:

\+ No static data. The linker pukes if you have a global variable somewhere. If it's not on the stack or heap, the OS can't handle it. This, of course, means that basically all useful C code from other platforms will fail to build by design on Symbian.

\+ Their "linker" was this awful two-stage thing that used a custom ARM gcc build to generate a windows-style PE-COFF DLL (?), which then got munged by _another_ gadget into their actual native format. Yes, it seems they literally could not figure out how to write a GNU ld linker script...

\+ No blocking I/O calls at all, again insuring that otherwise common idioms (like, say, reading a file) require elaborate contortions using their "Active Object" abstraction, which is a clumsy event handler with a ton of scaffolding around it.

\+ No notion of users, or file permissions, or anything that might be interpreted as a security model.

I could go on, but this is the stuff I can pull off the top of my head. Really, this platform is a disaster. Just let it die.

<comment><USER3> FWIW Symbian 9 allows static data in UI processes, uses a standard ARM ABI, and has a homebrew non-unixy security model called "Platform Security". I'm not saying it's a great platform, but they were starting to make progress before I abandoned them a year ago.</comment></comment></comment>


Another 7000 Israel Credit Cards Exposed - i-hacker http://blog.insecure.in/?p=1105

<comment><AUTHOR> Clearly this whole script kiddies war is doing more harm than good to either sides. It's not about skills or anything anymore and it doesn't matter if these credentials or the facebook credentials (posted earlier: [http://www.zdnet.com/blog/facebook/israeli-hacker- posts-8216...](http://www.zdnet.com/blog/facebook/israeli-hacker- posts-8216100000-8242-more-stolen-facebook-logins/7837)) are even real.

I view harming innocent by-standers/civilians as a type of terrorism. Much like dropping a bomb in a populated area.</comment>


Brazil to open 860K acres of protected Amazon rainforest to logging, mining, etc - <AUTHOR> http://www.independent.co.uk/news/world/americas/illegal-logging-national-forest-of-jamanxim-brazil-amazon-br-163-protests-deforestation-gisele-a7842796.html <comment><USER2> The article didn't talk about the political context: the current president is facing corruption charges and a threat of impeachment and is buying support from congress by opening the government coffers (or what remains of it) and ceding to various lobbying groups.

</comment><comment><USER3> Take a commercial flight where you have a chance to look down on the rainforest in Brazil or Peru.

You'll be absolutely astonished and sickened at how much is already gone.

<comment><USER4> The same for Europe, although it was all cut down longer ago. The same of parts of the US.

The trees and land are a resource for these countries with vast numbers living in poverty. Telling them they cannot use these resources just isn't going to work.

If we non-Amazon countries want them to stop deforestation, we have to dig into our pockets. But we we don't. Ecuador tried it, requesting funds for not drilling for oil. They were offered next to nothing, so the drilling is going ahead, which means roads and roads mean deforestation.

I speak for someone from the UK. We cut down our forests for the industrial revolution. We reached and passed peak oil in the north sea for the (supposed) benefit of the country as a whole. How can we expect other countries to not use (abuse) their resources the same?

<comment><USER5> The model where rich countries keeping paying to poor countries in exchange of not cutting down their own forests is unworkable. If people there are looking for genuine progress then they have to build schools, bridges, cities and so on. You won't be able to say that hey you guys live like how you used 1000 years ago and here's few dollars.

However the bigger issue I think are the few evil people in those countries who look at its natural resources and see dollars instead. They just want to log, mine as much as they can, export it all out and basically make free money. Their business strategy is simple: buy off government personals, acquire natural resources that was supposed to belong to people and sell it off to other countries in the world. You are not going to be able to prevent this either.

One effective way to discourage this is put a worldwide ban of exported wood from Amazon. If major countries can come together on this then this could actually work.

<comment><USER6> > One effective way to discourage this is put a worldwide ban of exported wood > from Amazon. If major countries can come together on this then this could > actually work.

Tell that to the ivory poachers. All a ban accomplishes is turning an industry that has demand underground, meaning they can now operate off the books, illegally, not pay proper wages, operate completely without regulation and if they run into competition, instead of working side one another they often kill each other.

Prohibition has literally never worked for literally anything.

<comment><USER7> > _Prohibition has literally never worked for literally anything._

But, sanctions have.

</comment></comment></comment></comment></comment><comment><USER8> sadly capitalism seems to be an incredibly effective and efficient way to completely destroy the rainforests.

there does not seem to be any solution.

<comment><USER9> Capitalism saved the forests in North America, Brazil has a lot of state power and the corruption that comes with it. If the people of Brazil value the rainforest at all, it is a lower priority than whatever they are dealing with in their day to day life.

In North America, there is more forest cover than there was 200 years ago, thanks to private ownership and maintenance of woodlands.

Because of how productive these private woodlands are, there's largely no reason to cut down old growth forest.

<comment><USER10> There's barely any old growth forest left to cut in the US.

<comment><USER11> I'm not sure why you're downvoted because you're correct. But I suppose microcolonel's point is that capitalism has converted them to private forests for harvest.

I should note that growing forests consume 10-11 times more CO2 than old growth forests, and the US is excellent at keeping growth rates as high as possible or a given tract of land.

<comment><USER12> when a forest grows, it consumes c02, when it dies, it returns it. its zero net.

<comment><USER13> Not necessarily, if one make bio-char from the wood the carbon is stable for ~10k years, even if buried in the soil (terra pretax). This can be done successfully during the gasification process for producing heat, syngas and electricity. Also any items made from the wood that do not rot will not release their CO2 for the lifetime of the product.

</comment></comment></comment></comment></comment></comment><comment><USER14> It never made countries richer. Only poorer. In this case, it will make the planet poorer.

</comment><comment><USER15> What responsibility does a typical reader of HN have?

What can a reader do?

<comment><USER9> Brazil is failing for roughly the same reasons as most of the rest of South America: excesses of state power, which are too attractive for business to pass up.

The economy is depressed by excessive policy, the people have bigger problems than the destruction of the Amazon. In addition, because the government owns the woodland, there's basically no reason to replant or maintain, which means that if you want lumber you have to go into old growth forest.

<comment><USER16> I wish someone knowledgeable about forestry could explain why replanting is not done. What are the costs and subtleties, beside political friction I mean. Or maybe it's only political.

<comment> non-prophet Replanting is only done when economically viable and future "land use" is for regeneration of the harvested species. This is done is Pacific Northwest of the US for Douglas Fir. Replanting isn't used in US Northern Hardwood production as the stands are cut to retain trees that reproduce and in another 15-30 year period another variable retention harvest is performed [1]. Modern forestry leverages ecological theory such as disturbance regimes to mimic changes and diversify the timber stands for risk management and ecological factors [2].

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

[2] [https://andrewsforest.oregonstate.edu/sites/default/files/lt...](https://andrewsforest.oregonstate.edu/sites/default/files/lter/pubs/pdf/pub3272.pdf)

</comment></comment></comment></comment><comment><USER17> While an important issue, the article states that it is still in the proposal phase.

<comment><USER18> The problem is that while there is a lot of variability at the project level, the _H. sapiens_ as a species is clearly still moving in a very self- destructive direction. Chomsky recently called it "Racing To The Precipice"[1]. The fact that a massive deforestation project was considered as a proposal shows that the derivative is still negative.

[1] [https://www.youtube.com/watch?v=TK0R_06zOOY#t=135](https://www.youtube.com/watch?v=TK0R_06zOOY#t=135)

</comment></comment><comment><USER19> As an average HN reader, I'm trying to understand the environmental consequences of these actions by the Brazilian government to Brazil and the World. Can someone ELI5?

</comment><comment><USER20> The forces which threw out Dilma Roussef are behind this over commercialization. Dilma would never have let this happen.

<comment><USER21> So are you saying all the corruption charges against Dilma are fabricated?

</comment></comment><comment><USER22> I predict that in the future, brazil will be invaded to stop logging so that those trees can keep making oxygen.

I wonder, doesn't most oxygen come from those trees? I've read the expression "lung of the planet". Essentially it seems it's a matter of survival.

Although increased CO2 concentration might also accelerate the growth of trees, so I don't really know.

<comment><USER23> > I predict that in the future, brazil will be invaded to stop logging so that > those trees can keep making oxygen.

As a Brazilian I say that this is just plain stupid in 3 different levels:

1) World diplomacy is or should be ruled by the principle of Westphalian Sovereignty: the idea that each nation is free to conduct its internal affairs as it pleases.

2) Brazil is the 5th largest country in the world, one of the 10 largest economies and the 8th biggest population. Who has the resources to spare and fight a war with Brazil?

3) During the 90's the main argument by farmers and loggers for deforesting the Amazon was exactly arguments like yours. Back then this bullshit you say was called "internacionalização da Amazônia" and those parasites argument was: "we need to occupy the Amazon before the gringos do it". So, basically, when you say this bullshit you are supplying arguments to the enemy.

Please, stop this bullshit. It is dangerous. It makes the fight of Brazilian environmentalists even harder.

<comment><USER22> I agree with you, but air has no borders.

And I'm not arguing for war.

</comment></comment></comment><comment><USER24> This is great news!

</comment><comment><USER25> Wow. A failing state pimps it's resources. This is terrible.

</comment><comment><USER26> There will be the usual walk through the park of unusable vectors to solve this.

The only thing that could stop this is direct action - meaning, editing organisms to resist humanity. Making trees fireproof, equipping animals with diseases. The only wulf to hold back man, is another man.

<comment> castle-bravo Have you read Margaret Atwood's MaddAddam trilogy? It's one of my all-time favourite works of science fiction.

Human beings have the (rarely used) capacity to improve the quality and usability of our surroundings. If at some point in the future, we should collectively decide to rehabilitate this planet of ours, mutant poisonous kudzu and HIV-reservoir mosquitoes will not make the work any easier.</comment></comment>


Contributors wanted: Multithreading JavaScript UI framework - <AUTHOR> https://github.com/neomjs/neo/blob/dev/README.md <comment><AUTHOR> OSS (MIT license)

In short: The goal is to create a webworkers driven UI framework. Most parts of the framework as well as all apps you create run within the App thread. There is a data & a vdom worker in place as well. Having an idle main thread ensures that all UI related animations run as smooth as possible.

The main difference to other frameworks is, that you describe the component tree as well as the virtual dom tree via JSON. This enables us to combine and manipulate those with a very high performance plus it creates clean code.

One major design goal is to have all ES8+ classes / JS modules running inside the browser without any JS related builds. Right now this only works for the dev mode in Chrome 80+, for other browsers & dist versions there are webpack based build processes in place.

The dev mode results in a very smooth debugging experience, since you don't need source-maps and debug the real code 1:1.

On the roadmap are (e.g.) 1\. Mobile Support 2\. A buffered Grid 3\. Drag & Drop 4\. Data Package v2

(and a lot more => vision file)

Online Demos (Desktop!) are here: [https://neomjs.github.io/pages/](https://neomjs.github.io/pages/)

Short demo video on the helix component: [https://www.youtube.com/watch?v=iztv8YxWYUU](https://www.youtube.com/watch?v=iztv8YxWYUU)</comment>


Anti-facebook Hotlink Protest - <AUTHOR> http://www.hotorzuck.com/

<comment><USER2> Also a good thing to talk about the 3rd party apps on facebook is the privacy....</comment>


Your public Facebook status updates? Now publicly searchable outside Facebook - <AUTHOR> http://eu.techcrunch.com/2010/05/14/your-public-facebook-status-updates-now-publicly-searchable-outside-facebook/

<comment><USER3> I'm totally agreeing with the general sentiments of the comments here: I see no particular issue with public comments being publicly searchable.

I can even kind of understand facebook's drive to make as much information as possible public and hence changing the defaults while still providing a bit of warning to the user.

Sure - nobody reads that, but that's ultimately the problem of the people not reading the warnings.

However, In light of this, the ethical thing for facebook would be not to change defaults for existing users but maybe just to encourage them to post more stuff to the public. And, depending on "evilness", change the default for new users.

What's really scary is the sharing of information with other sites and applications that's going on. By now it's really hard to find any mobile App that doesn't in a way want to integrate facebook and send spam in my name.

But it just got worse in the recent days: Now we learn that even the basic iPhone OS might get facebook integration, that battle.net (blizzard's online game platfrom) will be poisoned by facebook and of course there's that site- wide-"like"-feature which shares who knows what data (that might even be private) with third parties I might or might not trust.

IMHO, there's a difference between just posting something to the general public and providing that information directly to an interested third-party.

It's like in real life: In theory, the mall could just watch me doing grocery shopping in public, because, after all, that's a public action.

But the moment they hand me one of these customer bonus program cards, I know they are tracking me specifically and this is what I'm uncomfortable with - even thought the information they could get from that is public already - <USER2> it's directed straight at them.

That's the difference.

While I don't care about somebody using facebook search looking for the term "foobar" and then finding a posting of mine amongst 100 others, I strongly care about a third party getting direct notifications of my interests in foobar as I am visiting their service.

The connection is what's annoying me. Being one of a million interested in foobar is ok. Being returning visitor #1257892 to site X and also being interested in foobar (without explicitly telling them and disguised in a "fancy" "I like this"-button) - that's the problem I have.

I'm solving this not by quitting facebook (which has some value in keeping in touch with old non-techie friends and classmates), but by always logging out after use. Then, I set all my updates to public and I'm only posting what I don't care about the public seeing. Problem solved for me.

The content on the internet that's beside my name is, in full, things I can be proud of and I can stand behind. There are no drunken pictures or anything else I could be afraid of any past or future boss seeing it.

<comment><USER4> I really like what you said, because this is one of the first comments I have read which actually states a rational reason for feeling somewhat uncomfortable (in this case, a third party being able to target you with ads and such).

I feel like most people have just been whining about privacy issues and following the mainstream outrage against Facebook, but without understanding one bit how public settings could realistically affect them. They're just mad because they're 'supposed' to be.

</comment></comment><comment><USER5> You mean my public status updates are public?!? The horror!

<comment><USER6> To you this is news.

To a lot of people this is like finding out that someone has spidered and indexed their conversations at the pub.

Their fault? Sure. But a lot of people react worse to bad events when a mistake they made caused it, especially if they were warned before hand. Anticipating hearing 'we told you so' is not going to make the general public feel calm and relaxed.

<comment><USER7> Indeed. Most ordinary Facebook users who are not avid followers of tech news probably have very little idea about these things, and just assume that "it's me and my friends". The appearance of Facebook does little or nothing to give the impression that the information being entered is being publicly broadcast.

If Facebook wants to continue to have an overly complicated privacy policy perhaps a solution is to colour code sections of facebook, where teh colour of the text or background indicates the level of privacy.

</comment></comment></comment><comment><USER8> Old news to anyone who reads Hacker News, of course.

<http://news.ycombinator.com/item?id=1346003>

<http://news.ycombinator.com/item?id=1341236>

</comment><comment><USER9> So are posts public by default for new users? Did Facebook change anyone's privacy settings to "public" behind their backs? Mine has always been set to "Friends" since I had my account (3 years), and as far as I know all my posts have remained visible to only my direct facebook friends.

</comment><comment><USER10> I made my own facebook status search as well at <http://searchthebook.us>

It's pretty basic for now, but it doesn't have the privacy concerns the webapp this article links to.

</comment><comment><USER11> I have my Twitter account push to Facebook, so... big deal? No..

<comment><USER12> Personally I keep my twitter even more locked down than my facebook. And having made my twitter feed private I trust twitter not to share it with the universe. I trust facebook much less.</comment></comment>


Full Text Search with SQLite - <AUTHOR> http://blog.xojo.com/2014/03/14/full_text_search_with_sqlite/ <comment><USER2> I wrote a fairly detailed post about sqlite full text search with python (1). I also put together some notes of you want to build the new FTS5 extension and give it a whirl (2).

[http://charlesleifer.com/blog/using-sqlite-full-text- search-...](http://charlesleifer.com/blog/using-sqlite-full-text-search-with- python/) [http://charlesleifer.com/blog/building-the-sqlite- fts5-searc...](http://charlesleifer.com/blog/building-the-sqlite-fts5-search- extension/)</comment>


Baby Boomers: We had it all, and still do.  - <AUTHOR> http://www.theglobeandmail.com/news/national/we-had-it-all-and-still-do-its-worth-the-guilt/article2387987/

<comment><USER3> There's a much more substantial article in esquire about this:

[http://www.esquire.com/print-this/young-people-in-the- recess...](http://www.esquire.com/print-this/young-people-in-the- recession-0412?page=all)

It was submitted recently but didn't make the front page.

If I think about this stuff too much, it makes me want to burn things.

It's going to come back to bite the boomers in twenty years when the youth feel absolutely no obligation to support them. I and a lot of my peers are planning to leave our home countries specifically so we don't have to spend a single penny supporting the twilight indolence of that morally vacuous cohort who _literally_ ruined the world for their benefit, after spending their youths supposedly saving it, and their middle ages talking endlessly about how great they are for having done so, all while they carved chunks out of their children's future.

<comment><USER4> > . I and a lot of my peers are planning to leave our home countries > specifically so we don't have to spend a single penny supporting...

I have a friend who's planning on doing exactly that. If the US ever stopped taxing income earned by US citizens living in foreign countries, the number of expatriates flocking to Scandanavia, England, and the Netherlands would be _astounding_. You'd get the best of both worlds.

The problem is that the people complaining when their benefits are cut are often the same ones complaining that our tax rate is 'too high' compared to the 92% (!) marginal tax rate during Eisenhower's administration. But of course, that's around the time that the baby boomers were born, so they don't remember that.

<comment><USER5> "Scandanavia, England, and the Netherlands"

I guess if your idea of paying 60%+ taxes is "the best of both worlds", then by all means do it.

"The problem is that the people complaining when their benefits are cut are often the same ones complaining that our tax rate is 'too high' compared to the 92% (!) marginal tax rate during Eisenhower's administration. But of course, that's around the time that the baby boomers were born, so they don't remember that."

Should we also talk about the state of women's rights or minorities during that time? Oh yeah, and stop complaining.

92% marginal tax rate was wrong then..and it's wrong now.

<comment><USER6> You're somehow suggesting that because policy on rights for women and minorities was poor, the taxation system used at the time was also wrong. Beyond attaching your claim that high tax is wrong to the universally accepted claim that institutionalised racism and sexism is wrong, you give no real justification for what you're saying.

Perhaps the smallest income disparity ever seen in modern society occurred during that period of high taxation. The gradual erosion of high tax rates (similar levels occurred in the UK around the same time) is almost certainly due to pressure from the wealthy. Tax is a great leveller, providing an underlying safety net for the most vulnerable or the most unfortunate in society, and limiting the self awarded incomes of those at the tops of companies.

While I wouldn't argue for taxation rates to be increased to those levels, I really struggle to understand how the erosion of tax rates is in any way beneficial to the vast majority of people. Assuming the target of society is to have some level of equality across it's population, tax reduction is simply wrong. The actions of politicians working to reduce tax are clearly driven by the interests of those already wealthy enough to have a voice.

<comment><USER7> The target of society is not equality, per se, but a high minimum standard of living. pg has a great essay on this at <http://paulgraham.com/gap.html>. As a quick summary: as technology increases and multiplies people's abilities to be productive, we would expect the income gap to widen; someone 10x-50x as productive as someone else should be compensated accordingly. Conversely, if the marginal tax rate is 92% above 100k income, people will seek other forms of compensation in their work - for example, shorter hours. No one is going to put in 100 hour weeks to earn $300k a year, because after taxes that comes out to an extra $27k; I'll relax at a 9-5 instead and just earn my government mandated salary cap.

<comment><USER6> That essay is really rather interesting and makes some great points. I do think that it misses some important areas though. Given that it was written in 2004, I'll give Paul Graham the benefit of the doubt. Most of my points have only really surfaced in the last few years.

1\. He states at one point that "It's absolute poverty you want to avoid, not relative poverty.", which is certainly true to an extent, but not completely. A recent BBC documentary looked at some of the poorest people in America.[1] The thing that really struck me about that is that these people, in absolute terms, are not poverty stricken. They're not short of shelter, food or water. In relative terms though, they've been left behind. The modern american society simply isn't designed for people living on their income level. They live in motels without kitchens, so the option of cooking the basic staple foods eaten by those on similar income levels elsewhere is unavailable to them. They have to buy expensive packaged foods. The high cost of the society they live in means that their disposable income, and their ability to climb out of the economic hole that they're in, is almost certainly less than that of people with their absolute income in a poorer society. Poverty has to be considered in both relative and absolute terms. The people depicted in that documentary have fewer options available to them than those in poor countries. American health costs, education costs and rents are all designed for the average American income level.

[1]: [http://www.bbc.co.uk/panorama/hi/front_page/newsid_9694000/9...](http://www.bbc.co.uk/panorama/hi/front_page/newsid_9694000/9694094.stm)

2\. There are aspects of society that set their own value. I know it's popular to complain about bankers right now, but they're probably the best example of this. Banking a necessary evil to allow us to deal with the vast, money based economy we've created. While almost every other industry operates by trading goods or non-monetary services for money (and so only sees money that's in some way related to their business expenses), banking sees _all_ the money. A "normal" business can increase profits by maintaining or increasing income and reducing expenses (eg outsourcing, manufacturing in China, reducing material costs). Banks, by virtue of their operation, handle incredible amounts of money. They're in a unique situation that allows them to set the value of the service they provide. Not surprisingly, that service value is set considerably higher than perhaps it truly is.

It's obviously hard to place a value on the services provided by banks. In his essay, Paul Graham talks about wealth creation, giving a farmer as an example. The banking (and financial trading system) is not primarily a wealth creator. It's a system for moving that created wealth around. Banking can enable wealth creation with funding, but the system we have today has developed to reward activities with high returns over short periods. What I'd argue as true human wealth creation - manufacturing and valuable service provision - doesn't provide the returns that the banking system was looking for. The house of cards built up by high frequency trading, derivatives, futures and other hugely abstracted banking and trading concepts is far removed from this wealth creation.

Society rewards bankers with large amounts of money. Paul Graham argues that Steve Jobs increases material wealth, and so his monetary wealth in return was deserved. That's almost certainly true, but banking isn't a case of the average person going out and buying an iPad because it increases their material wealth. Bankers are rewarded richly because they've constructed a system over the last hundred years which takes large rewards for itself. There is very little true wealth produced by the system.

That essay was however written during the good times. In 2004 none of us were aware of just what a damaged financial system our economies are based on. In 2004 the families featured in that BBC documentary had a house with a hot tub. While I agree that there needs to be an incentive for productive working, there also needs to be a safety net. In our technology driven society, people shouldn't be struggling hard just to stay under a roof and feed their children. History has shown that the rich are the ones who have a voice, and so craft the system to benefit them.

</comment></comment></comment></comment></comment></comment><comment><USER8> There seems to be a lack of intelligent conversation on this subject, but this article (despite not being very substantial) hit upon one of my pet peeves, so I'll give it a go.

Western society, or at least North American society, has long been set up to the benefit of the boomer generation. That is not terribly surprising as they make up the largest single group. I don't blame them individually or collectively. It is, after all, my parents generation. The real issue, to my mind, is that they still occupy the top positions they they have been occupying since their 20s and 30s. This point of view may not get much sympathy on a forum dedicated to entrepreneurial pursuit, but I feel I have been seriously disadvantaged in my career as there is still a glut of boomers occupying the middle and upper rungs. I have a good job, but it is a limited term position, and I am still at the bottom of the totem pole. I am in my 30s, but I am still considered and treated like a "young person." When is it my turn?

This is, of course, part of the reason that I lurk on HN, and that I consider launching a start-up almost on a daily basis.

<comment><USER9> I find it strange to reconcile this position with the other oft-repeated position that people over 50 cannot get hired.

<comment><USER10> At the moment, people under 50 can't get hired either.

</comment></comment></comment><comment><USER11> Not sure if this was sarcastic or not, but the words are true. Boomers had it and continue to. Whats left for the younger generation is a world of fear and terror, where standing outside of the yellow marked line can and most likely will castrate you.

<comment> guard-of-terra Where did you notice any sarcasm? The numbers and facts mostly speak for themselves.

</comment></comment><comment><USER12> Simple fix in two steps. 1. Delink entitlement with inflation. 2. Inflate away.

Non-working Boomers with fixed incomes will lose due to inflation. Working late comers will have their earning raised with inflation.

<comment><USER13> What a cruel and cynical recommendation! Who cares if Canadian health care costs spike for a number of years as the population gets older and baby boomers require treatment. This the point of having health care.

The source of the bitterness many feel towards the baby boomer generation is the perception (rightly or wrongly) that the group as a whole advocates politically hypocritical policies -- not because anyone sane wishes ill of the weak or poor or infirm.

<comment><USER12> Who had stopped the Boomers when they looted the later generations with their oversized entitlement? The later generations are just trying to get things back to order. There ain't no free lunch.

<comment><USER13> Looted? If you want to argue from a position of fiscal soundness you will have to do much better than suggest Canada adopt the US approach to health care, which provides less coverage at significantly higher rates. Or advocate the intentional debasement of a currency as measure of fiscal sanity. Your proposal leaves the poor much worse off and the rich paying considerably more for health care. The difference in costs buys a lot of lunch.

</comment></comment></comment></comment><comment><USER14> I hope the baby boomers realize that the 20 somethings out there don't give a damn about their entitlements and we'll pick up and move to Africa if we have to because all we need is a solid internet connection.

</comment><comment><USER15> This kind of thing will continue in any government system wherein the current body can borrow large sums of money now to pay for perk's now with little to no consequences now. Eventually someone pays the price but the bet is that someone will be around when the current beneficiary isn't.

<comment><USER16> That might be a problem for the NEXT generation, but paying back government debt isn't what is driving the numbers in these articles.

</comment></comment><comment><USER17> _(Compared to the protest movement of the Sixties, the Occupy movement is a toothless tiger.)_

Maybe that's because the Occupy protesters have seen the videos of what happened in more extreme cases to the 60s protesters (not to mention advances in crowd control techniques, like microwave guns, pepper spray, and using LRAD at close range).

</comment><comment><USER18> It will be fun getting entitlement changes through with this age distribution:

[http://online.wsj.com/public/resources/documents/info- CONGRE...](http://online.wsj.com/public/resources/documents/info- CONGRESS_AGES_1009.html)

</comment><comment><USER19> There's a good book about this:

[http://www.amazon.co.uk/The-Pinch-Boomers-Childrens- Future/d...](http://www.amazon.co.uk/The-Pinch-Boomers-Childrens- Future/dp/1848872313)

... by a serving UK cabinet minister (so I guess it didn't do a lot of good).

</comment><comment><USER20> Did she forget Vietnam?

</comment><comment> guard-of-terra Speaking from outside North America: We're hoarding popcorn right now to see if you can figure out this one.

(however I've heard some west europe countries are sharing the milder form of the same disease)

<comment><USER21> It seems as though many non-North American countries have much in common with Canada, especially in health care. Why do you think that this article only applies to North America?

<comment> guard-of-terra Well, at the moment it doesn't seem to apply to where I live (Russia) - <USER2> set of problems is just so different. Not that there are many good things going on here, but anyway:

We have an unique, first time in a few centuries, moment when we can sit in the back row and enjoy the entertainment.

</comment></comment></comment><comment><USER22> You can have the entitlements, we have a chance to change the world. For all the hippy protests, and idealism, and futurism, that generation did SQUAT.

<comment><USER7> The problem is how much it'll cost us to pay for those entitlements.

</comment></comment><comment><USER23> The way the baby boomer generation has raped our society of wealth by piling on debt to be paid by future generations is an abomination. To me, it is concrete proof that democracy doesn't work. How is it possible make things fair in a popularity contest when you're outnumbered?

I honestly don't know why everyone under the age of 30 isn't rioting and burning down the system right now. They got dealt a shit hand.</comment>


A watershed moment in understanding how H2O conducts electricity - <AUTHOR> http://news.yale.edu/2016/12/01/watershed-moment-understanding-how-h2o-conducts-electricity <comment><USER2> Full paper can be found here: [http://science.sciencemag.org/content/354/6316/1131](http://science.sciencemag.org/content/354/6316/1131)

As in most chemistry/physics papers, the true marvel is often not the actual phenomena being studied, but the observational techniques used to study those phenomena. In this case, it's by complexing the hydronium cluster with molecules that accept H-Bonds increasingly strongly, and then tracking the frequency of every O-D stretch vibration in the complex, as a hydron is incrementally pulled to a neighbouring water molecule.

</comment><comment><USER3> Pure water is an excellent insulator</comment>


An introduction to Kerf - <AUTHOR> https://scottlocklin.wordpress.com/2015/12/15/an-introduction-to-kerf/ <comment><USER2> Great description from the reference manual ([https://github.com/kevinlawler/kerf/blob/master/manual/refma...](https://github.com/kevinlawler/kerf/blob/master/manual/refmanual.pdf)):

"Kerf is a programming language built on pragmatism, borrowing ideas from many popular tools. The syntax of Kerf will be familiar enough to anyone who has programmed in C, Python or VBA. Data is described using syntax from JSON (JavaScript Object Notation), a text-based data interchange format. Queries to search, sort and aggregate data can be performed using SQL syntax. Kerf's built-in commands have aliases which allow programmers to use names and terms they are already used to."

</comment><comment><USER3> I don't think the authors claim that "The only thing comparable to it from an engineering standpoint are the other APL based databases such as KDB and Jd" is correct, at least not based on this blog post. Numpy+pandas also seems pretty similar, as is breeze, and Julia has similar features also.

Let me emphasize that while I'm about to implement most of his blog post in numpy/pandas, I don't mean to come off as critical or dismiss building a new one. Kerf looks pretty cool. I just don't think this post gives much reason to believe there is nothing comparable to it.

Idiomatic numpy:

        def wavg(x,y):
            return sum(x*y) / sum(x)

Less idiomatic, but analogous to kerf or J:

        def wavg(x,y):
            return add.reduce(x*y) / add.reduce(x)

arange(1,6) is equivalent to his range(5), and full((5,), 1) is equivalent to repeat(5,1).

The SQL-ish engine looks fairly similar to pandas:

        df = pandas.DataFrame({'a' : arange(5), 'b' : ['a', 'b', 'c', 'd', 'e']})
        #Result is:
           a  b
        0  0  a
        1  1  b
        2  2  c
        3  3  d
        4  4  e

        df[df.a > 2]
        #Result is
           a  b
        3  3  d
        4  4  e

Pandas similarly has joins, averages and other aggregates, etc. E.g.:

        pandas.merge(df1, df2, how='inner', left_on='a', right_on='b')

is equivalent to:

        SELECT * FROM df1 INNER JOIN df2 ON df1.a = df2.b;

Syntactically it's a bit different (embedded SQL is pretty cool) but from this blog post I don't see any major semantic differences.

However, if there are important differences under the hood, I'd love to hear about them. Again, I'm really not trying to criticize Locklin for rolling his own, I'm just disputing a minor point.

<comment><USER4> There are lots of "table" like solutions out there: R's data.frame and data.table are obvious examples. Speed, the ability to persist data as an actual database system, and the ability to work with data "out of core" would be the advantages over Pandas. I'll be releasing various performance comparisons over coming weeks to demonstrate these advantages.

<comment><USER3> Cool, any chance you'll write a blog post discussing that? Being a good column oriented DB combined with a decent vectorized language is definitely not something so easy to find - blaze purports to be that system (sort of), but it isn't really living up to the hype.

<comment><USER4> Of course we'll blog on this topic! Just not today.

That's what the APL world brings to the table.

FWIIW, you can read about my comparing Jd (another APL related columnar database) to a Blaze like tool (Spark bigDF) on the J list:

[http://jsoftware.com/pipermail/database/2015-May/000076.html](http://jsoftware.com/pipermail/database/2015-May/000076.html)

</comment></comment></comment></comment><comment><USER5> Kerf homepage: [http://www.kerfsoftware.com/](http://www.kerfsoftware.com/)

Kerf github: [https://github.com/kevinlawler/kerf](https://github.com/kevinlawler/kerf)

<comment><USER6> seems vaguely parasitic to be using github to distribute closed-source binaries, not just for the bandwidth hit, but more so for trying to use the open source ecosystem to gain mindshare for a closed product.

<comment><USER4> Why? We pay them. Many companies do. This is why github exists as a company: because people give them money for things.

<comment><USER6> right, my mistake. sorry about that.

</comment></comment></comment></comment><comment><USER7> Good intro Scott. I just start playing with Kerf and it seems to me a pretty well written piece of software with potential. I like the json style assignment. Will keep an eye on this.

</comment><comment><USER8> Why do these products always have to be closed source... especially when the market's already fairly saturated, this seems to make little sense...

<comment><USER2> Market segmentation, premium pricing, signalling, etc. Basically, when your product is good, you can charge more for it. Free is a great price to get exposure, but unnecessary for extraordinary profitability (see Kx).

<comment><USER9> Charging enterprise makes sense to me, but I would have thought that allowing free non-commercial use would help with adoption.

</comment></comment></comment><comment><USER10> Ha! I've asked the question about existence of something like Kerf quite a while ago[1]. Good to finally have an answer other than "it is not really needed".

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

<comment><USER4> Nial is a good example of a Kerf-like language, but I don't think you can download it at present.

There's a way to make J look more readable, but by the time you're able to accomplish this, you can read the J runes, and have realized the syntax sugar just slows down the parser.

<comment><USER11> Syntax sugar also slows down the REPL experimenting way of "growing" J scripts.

Yes, it's harder to read... You can combine wise naming scheme with good use of spaces - and also short lines, which anyway carry a lot of work - to make programs more readable. Comments are also available :) - in fact, I found that J really encourages the literate programming style. As they say, "in APL you solve a problem in 5 minutes, then spend an hour trying to write a most elegant and short solution". Indeed.

</comment></comment></comment><comment><USER12> Any word on what the license will look like?

Gonna grab the current binary to play around with, I love learning new styles of programming and kerf seems rather approachable compared to the others in it's family.

<comment><USER13> It's a commercial product, closed-source.

</comment></comment><comment><USER14> Slightly unrelated question - where would I find an interpreter for K so I can start playing around with the language?

<comment><USER2> 32-bit version of q/k4/kdb+: [http://kx.com/software- download.php](http://kx.com/software-download.php)

This version is technically unrestricted, but cannot be used for commercial purposes.

<comment><USER14> thanks. I've seen that before, but for some reason I kept assuming that it was different than an actual k interpreter because none of their docs refer to the K language.

<comment><USER2> q is a language written in k - when in the q interpreter, you can drop into k by typing a single '\', and then return to q using the same method.

</comment></comment></comment></comment><comment><USER15> Nice name. Pity about the 8th bit, though.</comment>


Introducing hexagonal.js - <AUTHOR> http://blog.arkency.com/2013/02/introducing-hexagonal-dot-js/ <comment><USER2> Why not call it hexagonal.coffee? Why do CoffeeScript libraries get a .js extension? Yes I realize it works for JavaScript too, but it's weird to go see a library with *.js in the name and then to find only CoffeeScript in the documentation.

<comment><AUTHOR> We'll try to deliver new examples in pure JS.

<comment><USER2> That was an honest question more than a complaint. Why do CoffeeScript libraries not use the coffee extension? For broader appeal? Even if you had JavaScript documentation, I would see the source was written in CoffeeScript and realize I can't easily evaluate the quality of the source. Choosing CoffeeScript must mean you prefer it over JavaScript, so why use the extension of a language you do not prefer over one you do?

<comment><USER3> You can look at the source just like any other js project. It might not look totally clean as a hand-written project, but there are absolutely worse things than looking at compiled coffeescript ( _cough_ lodash [https://github.com/bestiejs/lodash/blob/master/lodash.js#L38...](https://github.com/bestiejs/lodash/blob/master/lodash.js#L383-L442))

<comment><USER4> To be fair, that's a template you linked...

Also, why go out-of-your-way to bash another project? Why didn't you link the hexagonal source you mentioned, which would have been productive, instead of lodash?

<comment><USER3> That template is source code for a function, it becomes the body of many lodash methods using eval. It's not out of my way, it sits right on top of my personal "ugly code" list; couldn't think of a better (worse?) example.

As I understand it there is no hexagonal source, it's just an architecture.

</comment></comment></comment></comment></comment></comment><comment><USER5> Hexagonal uses Raganwald's metaprogramming ideas. Follow the links from the dependency at <https://github.com/gameboxed/YouAreDaBomb>.

This shows the beauty of Coffeescript syntax for functional programming. For a deep understanding read Raganwald's new book <http://ristrettolo.gy>.

<comment><USER6> This.

I'm one of the people behind hexagonal.js. Raganwald's work enabled us to implement one of the main components - the glue code.

</comment></comment><comment><USER3> Isn't that glue going to fall apart when you start working with asynchronous methods? I might be suffering from tunnel vision, but IMO this is asking for an evented model:

        class Glue
          constructor: (@useCase, @gui, @storage)->
            @useCase.on
                askForName   : @gui.showAskForName
                nameProvided : @gui.hideAskForName
                greetUser    : @gui.showGreetMessage
                restart      : @gui.hideGreetMessage
            @gui.on
                restartClicked : @useCase.restart
                confirmName    : @useCase.nameProvided

<comment><AUTHOR> We use Around in such cases - it can put original method call to callback of asynchronous method.

</comment></comment><comment><USER7> This looks very cool, I've recently finished a Javascript application that used AOP for connecting the View to the Model and it rocked. I think I implemented up more or less this framework, but less generic.

The name is an issue though, hexagonal.js doesn't seem to have to do anything with what this framework does. If it is a framework that applies AOP to MVC, why not pick a name that relates to that? There isn't even a mention of AOP anywhere in the introduction.

</comment><comment><USER8> This looks quite neat and the Rails example (<https://github.com/hexagonaljs/rails-example>) is interesting. I'll definitely have a play around with it later in my never-ending quest to find JS libraries that don't make me want to snap my computer in half.

</comment><comment><USER9> Woaah, it's a cool idea, but I wonder how productive one would be in it. Will have to give it a shot later.

<comment><AUTHOR> So the switching your mindset to hexagonal.js is quite hard at the beginning and I think it's the most time consuming part. Then you are very productive - gameboxed.com developed > 20 small and large apps using hexagonal.js last year.

</comment></comment><comment><USER10> How can it be a good thing to follow the MVC framework on both the client side and the server side, as it says in it's philosophy, when the client side is the V in MVC?

<comment><AUTHOR> Good question. In hexagonal.js approach client side is full app - so there's model part (use case is part of model), glue ~ controller and views are GUI and other adapters.

<comment><USER10> Thanks for letting me know. I'll not be rushing out to add hexagonal.js to my Rails app, but if one of my friends who likes js wants to try building their own full app I'll mention this as a possibility.

<comment><AUTHOR> To be honest most of project I developed with hexagonal.js have Rails as a backend and it's really powerful with sprockets on board. So give it a try, maybe in toy project.

<comment><USER10> Cool, I'll give it a shot, buddy. Thanks for the advice.

</comment></comment></comment></comment></comment><comment><USER11> There's far too many typos for me to have any amount of confidence in the code itself.

Sorry, but I can't trust my business with people who cannot even be bothered to write proper English for their introduction.

<comment><AUTHOR> Sorry for my poor english, I'm still learning :(

<comment><USER12> While there are some errors on your page, don't worry too much about it. It is fully possibly to understand and make sense of it.

As someone else said, he was being a dick about it, and the implication that English skills are somehow related to coding skills is obviously nonsense. (And he still managed to make mistakes of his own while criticising your language)

To be a bit more constructive, here's a slightly rewritten introductory paragraph that I believe reads more natural (though English isn't my native language either):

"There's an idea we have been working on for more than one year so far. As backend developers we were thrown into the mysterious world of frontend (client-side) apps without any good pattern for creating Single Page Apps. So we (GameBoxed + Arkency) invented one - hexagonal.js."

But the most frequently occurring English mistake on your page appears to be missing "the"'s. This error is very common with speakers of slavic languages. Based on the admittedly limited example of your English on the linked page, I think one of the biggest improvements you can get with relatively little effort would be if you spend some time reading up on how to identify where/how to use "the".</comment></comment></comment>


SendGrid Sends 7.5 Billion Emails, Brings Former Oracle Exec As CEO - <AUTHOR> http://techcrunch.com/2011/03/09/sendgrid-sends-7-5-billion-emails-brings-former-oracle-exec-as-ceo/ <comment><USER2> Congrats to the team. Would love to know how SendGrid compares with MailChimp, Campaign Monitor and others in the domain.</comment>


My Seed Stage Deal Assessment Framework - <AUTHOR> https://www.mikewilner.co/article/my-seed-stage-deal-assessment-framework <comment><USER2> This is a great piece heading into a seed round as an entrepreneur. Will be answering these questions in the coming weeks.

Thanks for the timely sharing!</comment>


Error recovery with parser combinators, using Rust and nom - <AUTHOR> https://www.eyalkalderon.com/nom-error-recovery/ <comment><USER2> Naively implemented directly-executed parser-combinators aren't any more powerful than recursive-descent. One thing I find interesting is that most discussions of recursive-descent don't actually _show the algorithm_. Let a grammar be a list of _rules_ ; let a rule be a list of _prods_ (alternates); let a _prod_ be a list of terms (references to rules, or terminals). Then, the recursive-descent algorithm is something along the lines of:

        def Parse(G, U):
            ''' G: the grammar; U: the user's state. '''
            r = G.StartRule()
            return ParseRule(G, U, r)

        def ParseRule(G, U, r):
            potentials = [ ]
            for p in r:
                q = ParseProd(G, U, p)
                if q.success:
                    potentials.append(q)
            return U.pickBest(potentials)

        def ParseProd(G, U, p):
            res = [ ]
            U.markTokens()
            for t in p:
                if t.isTerminal():
                    T = U.getToken()
                    if t != T:
                        return (False, [ ])
                    res.append(T)
                else:
                    q = ParseRule(G, U, G.GetRule(t))
                    if not q[0]:
                        return (False, [ ])
                    res.append(q[1])
            U.commitTokens()
            return (True, res)

I'm 100% sure this code leaves a lot off the table, but a reasonably complete recursive-descent algorithm is very close to this. I use the operator- overloading _thing_ a lot of parser-combinators design as a way to specify the _grammar_ in the native code, without going through a stringy-API.

<comment><USER3> > Naively implemented directly-executed parser-combinators aren't any more > powerful than recursive-descent.

Parser combinators _are_ recursive descent, as in, they are just a neat way to write down a recursive descent parser using a compositional style. The reason they're popular is because they compose well and feel more declarative than traditional recursive descent.

<comment><USER2> Naively implemented directly-executed parser-combinators are recursive- descent. More sophisticated parser-combinators are usually lowered to PEGs, GLRs, or PEPs.

<comment><USER4> 'PEP'?

<comment><USER2> Practical Earley Parsers. If you memoize the algorithm I presented you get the Earley parser; if you convert the itemsets of an Earley parser into tables you get a PEP. PEPs are as fast as other LL/LR/LALR table parsers, but also accept all CFGs. They've lost the "mental space war" to YACCen, PEGs, and parsecs.

</comment></comment></comment></comment></comment><comment><USER5>
      And best of all, the final parsers are much shorter, easier to reason about, and are more directly analogous to their PEG equivalents...

I enjoyed the author's style, which made me feel as if I were following along with him on the journey of discovery. This quote, in particular, was delightful -- it revealed a scholar willing to let go of attachment to his preferred solution in exchange for something pragmatic which was "close enough". A lesson I take to heart.

</comment><comment><USER6> I'm curious at how it a actually possible to have partial autocompletion and still have some static analysis tools work with syntax errors in badly formed ASTs. Even visual studio, an IDE with massive resources behind it can't accomplish this with c++. Is this even possible? At face value it seems possible but I'm surprised that more IDEs don't have this support.</comment>


Resolvd – Professional Task Manager for Designers and Developers - <AUTHOR> https://nomadprojects.io/idea/view/dmytro-kovalenko-dk/resolvd-professional-task-manager-for-designers-and-developers <comment><AUTHOR> Resolvd is a professional Task Manager App for designers and developers, that allows tech teams to increase their productivity during Product making process by focusing on execution. Built-in smart engine helps to detect, sort, prioritize, schedule, assign tasks and more, by understanding pro language of developers and designers. Project structure makes it natural to navigate and act upon tasks. And task based communication and collaboration keeps workflow in place.</comment>