You Won't Survive a Merger with AI - <AUTHOR> http://nautil.us/issue/76/language/you-wont-survive-a-merger-with-ai <comment><USER2> The I that is me doesn't survive a nights sleep. Every night my brain does a re-shuffle of my personality and memories creating a new incremental version. Same goes for head injuries and reading a book. I'm still the me from before, just more so, and not. I have a vague feeling of continuity but it's almost non-existent. I am so different from myself ten years ago as to be a distinct person.

I have an intuition that any direct brain interface with an outside neural network would require small incremental changes similar to what we experience when we sleep. Then again I also have the feeling that early adopters of this tech will be lucky to get away with their minds intact.

Maybe in later versions it will be like turning on a switch and it's just there. Like opening your eyes or waking up from a dream. But I doubt that will happen in the next century.

<comment><USER3> This sort of meditation fills me with existential dread, namely the idea that every moment you are annihilated and replaced by a new person with most of your old memories, and nobody even notices.

And when "I" wake up I'm like, wait why do I have all of these bills to pay, and why is everything in such a mess? Clearly nobody asked me about any of that.

Sorry, future "me" \- if you had kept me around and not insisted on replacing me wholesale, I might have been able to help you out, but given that you're getting rid of me and taking all of my stuff I think I have no reason to help you in any way.

<comment><USER2> I come to terms with this by realizing that the alternative is true horror. Can you imagine eternal stagnancy as a disembodied human soul? Never experiencing anything new, endless bliss or pain would be indistinguishable or result in withdrawal and self-annihilation. At least if my body dies, it will still change over time and become something else.

I think of a soul as the wave of my life passing through time. It will continue after I die, the ideas and things I create will propagate through time like the wind of a butterfly's wings touching the souls and lives of those around me. It could create a hurricane, or dissipate into meaningless tiny changes. Eventually though chaos mixes the souls of everyone into entropy.

</comment></comment></comment><comment><USER4> I firmly believe that the brain is a form of quantum computing. I also believe that moving the consciousness from a 90yo close to death to a cloned body containing a newly grown brain or then later on a silicon based one will be possible in the future.

The best TV show that encapsulated this was Travellers[0]. A damn good show which was cancelled just when things were getting interesting.

I would say it's possible by entangling the particles from the source brain to the recipient one. Once completed the original source is destroyed, so it's effectively a move and not a copy.

There's also the 6th day movie [1]. Imagine being able to spin up multiple copies of yourself and 100x your own output? I believe that will also be possible in the future. Probably outlawed due to lots of ethical reasons. But... I'd like to think why not? Me[1] lives on earth. Me[2] lives in Mars, Me[3] lives on a moon in the asteroid belt. Me[4] is currently navigating out of the solar system. Since all the brains are entangled. I'd know everything in an instant.

How do deal with that is another story. Unless I'm AI at that point, which means the collective are all just a bunch of VMs anyway :P

[0]: [https://www.youtube.com/watch?v=99LZwZmSoNo](https://www.youtube.com/watch?v=99LZwZmSoNo) [1]: [https://www.youtube.com/watch?v=0VP44dGIi9c](https://www.youtube.com/watch?v=0VP44dGIi9c)

<comment> Engineering-MD Can you expand on your entanglement idea? I'm not sure how it would work. You could enable particles without connecting neural systems functionally (although I'm not sure we can show qualia/consciousness is actually located).

The issue of course is that due to the nature of subjective experience it cannot be empirically tested.

</comment></comment><comment><USER5> I found the 'worm' of time and space view in the article that is not preserved by recreation to be irritating and naive. Go to sleep on a plane and you are effectively transported to a new place 'disconnected' from where you were. It doesn't cause confusion or entirely new beings to come into existence that would be confusing to the "old you".

Whether these kind of people like this pretty distinguished author likes it or not, there will be scanning, uploads, and eventually entire worlds where people live.

The world of Reamde and "Fall, or Dodge in Hell" look like the extremely obvious and likely future world. These heavy philosophical pieces are also extremely unpersuasive. They come across like something from a bizarre academic world that is disconnected from what is likely in reality. And I'm an academic (but in cs, not this stuff).

</comment><comment><USER6> I'd notice the difference, said Arthur.

No you wouldn't, said Frankie mouse, you'd be programmed not to.

</comment><comment><USER7> Identifying with the self is the source of all suffering, attachment to the illusion of being a person. So wouldn't this be a technological nirvana? Edit: Especially given that selfishness is the root of all evil.

</comment><comment><USER8> Post changed the article title.

Fortunately for justice, the guilty poster won't survive contact with my complaint: they'll be perpetually changed by it to a new and different person.

</comment><comment><USER9> I'll leave this here: [https://t.co/jA1kz8QMvt](https://t.co/jA1kz8QMvt)

<comment><USER5> The ideas in that article suffer from the same lack of creativity that a lot of these philosopher written pieces also suffer from (including the main article here). Someone will program the ai, the robot, to want to survive, to want to destroy competitors. It's frankly incredibly irritating to read things like like that sci am article you give, because there's some bizarre belief that only how "things evolve" will govern them. Well I got news for all people that support this naive view - people will program, adapt and alter the ai's to act like they would desire, at least as a starting point. Whether it's some drone that kills people autonomously, or a future potential ai, someone will have influence over it's beliefs and point it in a direction that they desire.

<comment><USER9> That's the entire point of the article. The AI itself will not develop a need to harm. Users/creators of the AI will program that into it. But AI by itself even with creators of the best intentions has real problems that affect society today. And talking about a hypothetical future has distracted the public narrative from the real problems with AI that we need to solve now.</comment></comment></comment>


Multiple regex performance shootout: RE2 vs. Intel's Hyperscan - <AUTHOR> https://01.org/hyperscan/blogs/jpviiret/2017/regex-set-scanning-hyperscan-and-re2set <comment><AUTHOR> This post is by no means the definitive statement on RE2 and Hyperscan performance. We went very deep on subsets of one measurement case, but different patterns would yield a different set of behaviors for both engines.

Single-pattern performance has been covered before: e.g. [https://rust- leipzig.github.io/regex/2017/03/28/comparison-o...](https://rust- leipzig.github.io/regex/2017/03/28/comparison-of-regex-engines/)

<comment><USER2> What's fascinating is that it shows here that Hyperscan is not matching the same (!) as the other engines. A piece of information conveniently forgotten in the Intel piece.

Also note that the rust regex crate now uses the same SIMD algorithm(Teddy) invented as part of Hyperscan, see: [http://blog.burntsushi.net/ripgrep/](http://blog.burntsushi.net/ripgrep/) (also ripgrep is awesome, and you should use it.)

<comment><AUTHOR> This is a surprisingly negative-sounding comment. We've been quite clear in our documentation and public language in the past about how 'all-matches' semantics differ from 'best match' semantics implemented by back-tracking engines, so we generally find a few more matches.

Given the comparison with RE2 here is under circumstances where RE2::Set is not returning _any offset at all_ , I'm not sure what your point is about the "Intel piece".

Ripgrep is also awesome, and thanks (I guess) for mentioning Teddy, which nicely illustrates my favorite instruction (PSHUFB). There are still some bits of the Teddy algorithm that should be incorporated into ripgrep (the merging of literals when you have >8 literals is naive).

<comment><USER2> It is negative, I should probably have toned it down even more. My mistake, sorry.

</comment></comment></comment></comment><comment><USER3> It is a pity that regex engines based on regex theory have just come into widespread use when the theory has been in place for decades. Why many language standard libraries use exponential algorithm is beyond my comprehension.

<comment><AUTHOR> You can do things with these backtracking algorithms that are difficult (capturing subexpressions, start of match) or impossible (backreferences, arbitrary lookarounds) to do efficiently in an automata based algorithm.

Sometimes users want these features more than they want theoretical purity. Who are we to tell them they are wrong?

That said, we do have some projects in mind to try to bridge these two worlds (feature-rich backtracking world vs speedy/streamable automata-based). Anyone interested should contact the Hyperscan team. Make a nice project at undergraduate or even postgraduate level depending on scale.

<comment><USER4> > impossible (backreferences, arbitrary lookarounds) to do efficiently in an > automata based algorithm.

But... backreferences are impossible [0] to do efficiently [1] in any algorithm!

[0] Well, assuming P != NP. [1] Polynomial-time.

See: [http://perl.plover.com/NPC/](http://perl.plover.com/NPC/)

<comment><AUTHOR> I don't really like this result. It's a bit like saying finding the maximum integer in a sorted list is actually order N _N because... what if the N ints are all BIGNUMS WITH N bits, huh?

The fact that you have to grow the _regex* to get this result has a similar vibe to it. All the regex matching we see - and most conventional regex matching - assumes the regular expressions are fixed. Every now any then you'll see an algorithm where the size of the regex contributes to the big-O notation but then it's usually broken out as a parameter.

I don't have a good method to actually _do_ a fixed-number-of-backreferences in less than exponential time but it seems fairly clear that if you are willing to burn polynomial time gratuitously you should be able to handle a back-reference (i.e. for input of length N and M back-references, there are only O(N^(2M)) possible final places where those back-references could match for a single match... huge but if M fixed, not polynomial). So if you had an otherwise poly-time regex algorithm you could do it over and over again trying each possible back-ref location and still be poly-time.

<comment><USER4> > It's a bit like saying finding the maximum integer in a sorted list is > actually order NN because... what if the N ints are all BIGNUMS WITH N bits, > huh?

I'm not sure I follow. Why would finding the max integer in a sorted list be anything other than the time to copy the last (or first, depending on sort order) element of the list?

Certainly a valid point, though, that this isn't a common use case, so that's just not how experts in this field think about this problem.

> there are only O(N^(2M)) possible final places where those back-references > could match for a single match... huge but if M fixed, not polynomial).

Sure, that buys you a pseudo-polynomial algorithm. I just don't like the idea of calling something like that polynomial -- if we did that across the board, then we'd have a poly solution for knapsack (and consequently demonstrate P = NP).

<comment><USER5> Because comparing N bits takes time proportional to N.

</comment></comment></comment></comment></comment></comment><comment><USER6> The summary is very easy:

* Hyperscan is by far the fastest, but has only limited platform and regex support.

* Next is pcre2 (with the jit), which is a bit faster than the new rust regex. These support all options, everywhere.

* Then RE2 and all the others. RE2 has very limited regex support.

Why they compare the fastest with one of the slower and limited ones is beyond my understanding. The best overview is still [https://rust- leipzig.github.io/regex/2017/03/28/comparison-o...](https://rust- leipzig.github.io/regex/2017/03/28/comparison-of-regex-engines/)

<comment><AUTHOR> This summary was "very easy", because it is wrong. This assessment is unfair to RE2, and we're comparing to RE2 because it's the only one of these that can do multiple regex. Both Hyperscan and RE2 throw a good deal of regex under the bus in order to get multiple regex support, performance and/or streaming capability.

<comment><USER7> Rust's regex library has had support for regex sets for quite some time, and it's based on the same "tricks" that RE2 uses: [https://docs.rs/regex/0.2.2/regex/struct.RegexSet.html](https://docs.rs/regex/0.2.2/regex/struct.RegexSet.html)

<comment><AUTHOR> Oops. We're out of date in our thinking then. If the implementation is similar to re2, you'll probably see similar performance, although I hear good things about your small group literal matcher. :-)

<comment><USER7> :P Yeah, I would expect performance characteristics to be very similar to RE2! I actually think RegexSet disables literal optimizations in more cases than the standard regex, but it's been a while since I've touched that.

</comment></comment></comment></comment></comment><comment><USER8> Limiting the benchmark to engines supporting matching sets of regexes seems unnecessarily narrow to me. Is matching a set of regexes not equivalent to matching a single combined regex? Something like "(?:a)|(?:b)|(?:c)"? If so, why not run the test with that regex instead, and include other engines?

<comment><AUTHOR> For engines like Hyperscan and RE2's underlying algorithms, alternation works the way you describe. However, for backtracking engines, alternation does _not_ do a search in parallel for all the patterns. Instead, it winds up first looking for the first, then the second, etc., finds the first match, and declares victory. There are particular patterns and inputs where this behavior will be similar to parallel matchers like RE2::Set and Hyperscan, but the general case just won't work.

</comment></comment><comment><USER9> How do both of those compare to the C++11 std::regex or Boost::regex? At what point is it worth the switch?

<comment><AUTHOR> If you really need the backtracking features in those other systems, the point is "never".

Similarly, if you have short-lived regexes that are compiled, used for a small amount of data, and discarded, you might never see a performance benefit.

Multiple regexes, scanning a substantial amount of data and/or having a requirement to 'stream' (i.e. process successive writes of input data when you can't hold on to old data) are the sort of things that make Hyperscan use more sensible. We see a lot of use in network security where these assumptions all generally hold.

<comment><USER10> Also, if you're taking in user input into a regex you want to use something like RE2 or Hyperscan. To do otherwise is to expose yourself to DoS.

<comment><USER11> is that just because they don't support the features which can be used to make pathological regexes in other engines?

or they have additional sanitisation or security features?

<comment><AUTHOR> Neither. There are regexes that can be written in the common subset supported by (say) libpcre, RE2 and Hyperscan that will induce exponential backtracking with libpcre but not with the other libraries.

I'm not aware of any difference in terms of sanitisation or security.

</comment></comment></comment></comment></comment><comment><USER12> Wow, oddly relevant - I've been working on a RegExp implementation in JavaScript using similar techniques (minus vectorization of course, RIP SIMD.js). There is no efficient way in JavaScript to replace many patterns (e.g. a list of sentence fragments with optional whitespace, capitalization, pluralization, etc.) against a large document where the replacement requires metadata about the subpattern that was matched (e.g. to replace a term with a link to the term's definition).

I wonder if I should switch gears and try to write a native Node module for this instead. This looks really great.

<comment><AUTHOR> Thanks for the kind words. You'll have to roll your own 'replace', and the all-matches semantics of Hyperscan may give you some headaches - you'll need a careful reading of our Start of Match semantics and to craft patterns that yield "less surprising results".

If you can share your workload, or want assistance in figuring out whether to do this and/or how to do it, please contact us on the mailing list or on the email link for Hyperscan on 01.org. We're always interested in sample patterns, especially ones that fall outside our normal wheelhouse of 'network security and then some more network security'.

</comment></comment><comment><USER13> If you're interested in getting parse trees from regexes (ie all the submatch locations), check out Kleenex, it looks really interesting and is based on some new research. Full parse trees are a harder problem than matching, and one that is not a primary focus in RE2 performance AFAICS.

<comment><USER14> Isn't it true that once you have backtracking in your regex engine that there's no longer a guarantee that there's only a single parse tree?

I've found the hardest part of using e.g. a recursive descent parser is having to correct captured state while backtracking.

</comment></comment><comment><USER15> Maybe I'm not normal but I'd rather write 30 lines of readable and debugable code than use a regex.

Would you embed Brainfuck in your code ? Then why do you use regexes ?

<comment><USER16> How do you match arbitrarily repeating patterns, which may/probably have a combinatoric expansion, without effectively writing your own parser? If you're using a language where writing a parser is relatively easy (e.g., Lisp, Haskell, etc.) or your patterns are trivial, then fair enough. Otherwise, good luck with that.

For example, in Python, if I want to match "foo" followed by any number of "bar"s and/or "quux"s at the end of the string, I could write this:

        if re.match(r"foo(bar|quux)*$", my_string):
            ...

...without going to the trouble writing a recursive-descent parser or state machine, your way would be something like this:

        def ends_with_foo_etc(s):
            if s.endswith("foo"):
                return True

            after_last = len(s) - s[::-1].find("oof")
            if after_last > len(s):
                return False

            good_tail = True
            while good_tail and after_last < len(s):
                if s[after_last:after_last + 3] == "bar":
                    after_last += 3
                elif s[after_last:after_last + 4] == "quux":
                    after_last += 4
                else:
                    good_tail = False

            return good_tail

        if ends_with_foo_etc(my_string):
            ...

That's both excessively terse -- for a really simple pattern -- almost certainly slower and, most importantly, brittle in that it couples your pattern to your implementation in a non-trivial way. If your pattern changes, you may have to completely rewrite your matching function.

It's also worth noting that a typical regex API will do more than just match patterns; e.g., extracting subpatterns/groups, splitting, etc.

<comment><USER17> Your implementation seems complicated. The regular expression "foo(bar|quux)*" denotes a set of strings: { "foo", "foobar", "fooquux", "foobarbar", "foobarquux", "fooquuxbar", "fooquuxquux", ... }

Since this is anchored to the right, we can look at this from right to left: it's any mixture, including empty, of "quux" or "bar" elements, preceded by "foo". From this, a very simple algorithm pops out:

       while (string does not end with "foo") {
         if (string ends with "quux")
           chop off "quux" from end of string
         else if (string ends with "bar")
           chop off "bar" from end of string
         else
           return "no match"
       }

       return "match"

<comment><USER16> My implementation was the first thing that popped into my head. Yours works too (although note that yours will probably reallocate memory every time it chops the end off the string, so it'll be slower). A RD parser or finite state machine would also work. My point was rather that regular expressions are a much better tool for this type of task (see the reasons given at the end of my previous comment).

Writing fewer lines of code to do the same job is usually a good idea, providing it remains understandable. Personally, I find the syntax of regular expressions pretty straightforward and a lot of languages even allow you write comments within them to make them even easier to follow.</comment></comment></comment></comment>


Can I put out a cigarette on aluminum MacBooks? - <AUTHOR> https://apple.stackexchange.com/questions/121345/can-i-put-out-a-cigarette-on-aluminum-mac-books <comment><USER2> Much more impressed if they can use a macbook to ignite the cig.

Do you remember the movie "Office Space" and the "jump to conclusions mat"? There's a law of nature that all SO answers must be about 9 steps ahead in a different direction from the question. A much more correct interaction would be "can I turn my macbook into an ashtray?" "Yes, just make sure to remove all the plastic first"

My instantaneous reaction was someone's making an art exhibit and their macbook ashtray will be sitting right next to their vintage Mac aquarium conversion. Or they have a broken mac and want the weirdest possible ashtray for their company smoking area.

</comment><comment><USER3> yes you can, now if it is alight then that right there is an expensive ashtray and and beyond chemical oxidisation increase the ask can and eventualy will get sucked into the parts you just don't want dust and ash. Be that keyboard build up or sucked into intake vents. Then there is the tar buildup from the smoke.

So the real question is why would you do that and it will only increase the probability of issues down the line, maybe not right there, but one day.

<comment><USER4> How can you "put out" a cigarette that isn't lit?

<comment><USER5> Special promiscuous fags.

<comment><USER6> I saw what did there.</comment></comment></comment></comment>


Soda Pop Stop - Niche Business Insights - <AUTHOR> http://www.youtube.com/watch?v=gPbh6Ru7VVM

<comment><USER2> Thanks for this video, I just watched the whole thing got really excited and discovered the store in the video is a few blocks from my house! Win

</comment><comment><USER3> It's always encouraging to see someone who absolutely loves what he does.</comment>


Ask HN: Single founder startup, is it possible? - <AUTHOR>

So the story goes like this. I've created a product. But! The problem is that I'm the only founder. In most cases this is a "BIG NO" to investors<p>Is it really that important to have co-founders?
Should I try to submit my project to startup incubators or force and try to find co-founders? <comment><USER2> I post this all the time;

 _Having no cofounder is better than having a bad one, and starting a company solo is better than not starting one at all.

Don't get too hung up on the latest startup / incubator trends; plenty of companies have been started with one founder. Just go out and do it. _

</comment><comment><USER3> Think of it this way. You should not get a co-founder just because you are worried about investors etc. You should get a co-founder _when_ you need if at all. Get started and see how it goes. You will have your answer when you have the _need_ for a co-founder.

</comment><comment><USER4> Of course it is possible. People do it all the time. Don't stress about your co-founder. Just make a good/valuable product/service and everything else will together by itself.

</comment><comment><USER5>
      I think it's the best way, personally, at first.

      Investors don't care how many founders you have if there is traction.

      Noah Kagan and Mark Suster seem to think so as well:

<http://www.founderly.com/2011/08/noah-kagan-appsumo-1-of-2/> Can't find link to Mark Suster, but i recall it from avc.com

</comment><comment><USER6> Forget co-founders, investors and incubators. Acquire customers that will pay for your product and the rest will follow if you want it to.

</comment><comment><USER7> Yes. You absolutely need a co-founder. It's just too hard to do alone.

<comment><AUTHOR> I must admit, I expected bunch of answers like yours.

</comment></comment><comment><USER8> It's harder to garner investment funds, but there's nothing to stop you from building a business as a single founder.

In my case, I've started a number of products that have languished and died because I was lacking skillsets that weren't as easy for me to acquire as it was to find somebody who had them.

Long and short of it, it is often easier to supplement what you don't know with somebody that does know those things than it is to find more time in the day to learn it all and do it all yourself. Even if you know everything yourself, finding the time to do marketing / promotion / split-testing the site copy / crafting emails / handling user support, etc., are time-intensive tasks, and if you are like me, you'd rather be building new features than doing those things.

If you can find somebody passionate that can take approximately half of the workload, it's a life saver. It's also handy to have another smart* individual that can take that work off of you, then it's a lifesaver.

If you've never launched a product, then it's really hard to know how much work is involved post-launch. Launch is really just the beginning, and as hard as it is to launch, getting your product to succeed at market is many times harder.

<comment><AUTHOR> I agree 100% with you. It's not that I don't want to have a co-founder, I just currently didn't need any.

It's weird that this should be a minus and thanks to your comments i will not force to find a co-founder just to be able to say, yey we're team.. screw it</comment></comment>


YC startup for fast&cheap Delaware formalization - apa-sl

I remember that there is a YC startup delivering fast&cheap Delaware formalization but I cannot find it. I would be grateful for the name of that startup. Thanks! <comment><AUTHOR> Clerky.com</comment>


Fast-growing web of doorbell cams raises privacy fears - <AUTHOR> https://www.apnews.com/9371972bf7bf4f28949a6167a75b3c85 <comment><USER2> [https://youtu.be/FhnwPMx8wuQ](https://youtu.be/FhnwPMx8wuQ)

Cannot deny that these are pretty useful for catching rogue Amazon delivery drivers, among other things.</comment>


A visit with Apple's chief chipmaker - <AUTHOR> http://www.bloomberg.com/features/2016-johny-srouji-apple-chief-chipmaker/ <comment><USER3> While this is obviously a fluff piece, its interesting to note that, what started as a management fuck-up - how the iPad Pro schedule was mismanaged - ended up with the management pushing the engineers to work harder while the reward went to the people responsible for the mess in the first place.

Choice quotes

"Apple had a problem". The blame always seems to be shared. How about - <USER2> management fucked up the release schedule.

"That gave most of Apple's engineers more time."

"It gave a little-known executive named Johny Srouji much less."

So this makes it seem like it was harder on the executive than the people doing the actual work.

<comment><USER4> > ended up with the management pushing the engineers to work harder while the > reward went to the people responsible for the mess in the first place.

Unfortunately this is how it almost always works in business. I'll never forget the times I've worked harder to make a newly created deadline only for the management to gain a reward and nothing for me. Who cares I worked until 2am every day for weeks while they left at 5pm because they "weren't coders".

I'm sure most in the tech industry goes through this and it's not healthy. Yeah yeah I know you're salaried so you shouldn't expect more but when management gains more because they imposed new deadlines for you to hit, it creates resentment among the developers and eventually an exodus.

I've seen it happen 3 times so far in my career. You'd think I'd learn my lesson but it's hard finding a place that actually rewards both employees and management (or rewards none of them which would be more fair in someways and worse in others considering only the top executives benefit at that point).

Sorry, ranting a bit.

<comment><USER5> It's unfortunately common that once you're salaried, your compensation is capped at $X/yr for 40hr/week of work but it's reasonable for managers to demand extra hours above the 40 without increasing compensation accordingly. Rereading my last employment contract, the stipulation was I was paid assuming 40hrs/week, but the office expectation was 40 was a floor. 50-60 was more the norm. The whole salary exempt from overtime thing gets to be annoying quick.

Part of me thinks I should start invoicing employers for time spent at work over the 40hrs, charging an overtime rate, or something to increase compensation in exchange for the lost time, or modifying the contract accordingly if there's not an alternate compensation mechanism like comp time offered. The one employer I've worked at who was good about this let you disappear from the office if you hit your 80hrs for a 2wk pay period.

<comment><USER6> You could keep careful notes of hours worked that way come raise time, you can use it to negotiate a raise commensurate to the number of hours worked.

<comment><USER7> Good luck getting anywhere on this front with without both working in an in demand field and having a competing offer in hand when you ask for (demand) a raise.

</comment></comment></comment></comment></comment><comment><USER8> Regarding Apple's SoC bet, this is just crazy. In tech, this type of long-term strategy is unheard of. Who can bet what will still be here in three years ? five years ? 8 years is a long, long time. And they consistently made correct choices: be the first on ARMv7(then with samsung's chip), on ARMv8 (nobody belived in ARM 64 bits then), be the first to bet on powerful GPUs (and the crazy impact it has on the whole SoC).

I hear they have been designing their own GPU for many years now, and I'm quite (half)surprised they haven't released anything yet: one does not simply acquire the 30-year expertise of Imagination in such a short timespan.

NVIDIA tried going in the mobile SoC business, and after 5 generations and billions burned they finally gave up. What Apple did (and keeps doing, by putting Samsung, Qualcomm to shame[1]), is mind boggling. They are even approaching Intel's perf-per-watt[2] ratio.

[1] [http://anandtech.com/show/9686/the-apple-iphone-6s-and- iphon...](http://anandtech.com/show/9686/the-apple-iphone-6s-and- iphone-6s-plus-review/6)

[2]: [http://anandtech.com/show/9766/the-apple-ipad-pro- review/4](http://anandtech.com/show/9766/the-apple-ipad-pro-review/4)

<comment><USER9> It's easy to mistake causation with regard to Apple's decisions. Did 64-bit became popular because it was better ? Or did 64-bit became popular because Apple chose it and it became a marketing term ?

>> be the first to bet on powerful GPUs

Sure they are the first to bet on expensive stuff - they have the most margin and sales, a more profitable ecosystem - so it's easier to justify the risk of more complex coding(by an app developer), etc.

>> I hear they have been designing their own GPU for many years now

From what i hear, they use the best of Imagination , while locking it out of the industry. But i would be happy to learn otherwise.

And i'm not saying Apple didn't create an impressive chip, but creating impressive chips is much easier than sustaining a good business for them.

Also ,the real power of the chip is for marketing - one critical tool in building luxury brands is a story about unique creation ,creating stuff that nobody else can do ,etc. So that's a very valuable story.

<comment><USER10> They have a ~10% stake in Imagination. That's pretty close to a controlling amount for practical purposes for a publicly traded company.

<comment><USER8> Yes, and they don't need a stake in the company, as long as they are responsible for more than 10% of the revenue of the company, they basically have a say in the roadmap.

If they ever chose to release their own GPU, they'll be sure to sell their stock on the same day the device using it is released.

</comment></comment></comment></comment><comment><USER11> "Srouji was nicely rewarded for his efforts. In December he became the newest member of Cook's management team and received about 90,000 additional shares of Apple stock, which vest over a four-year period."

Wonder what his team got that pulled of the needed engineering 6 months early? I'm sure they missed a lot of family life.

<comment><USER12> I hear all too frequently that the rank and file engineers at Apple are not compensated too well.

<comment><USER6> Likely the only thing is that they can put on their resume that they found a way to cut 6 months off the development time of the iPad Pro.

</comment></comment></comment><comment><USER13> "When designers say, 'This is hard,' " he says, "my rule of thumb is if it's not gated by physics, that means it's hard but doable."

What a wonderful statement. I like this spirit, especially that he only mentions physics, not money.

<comment><USER14> Yes, in today's world where capital is free (ZIRP), large corporations like Apple, which also has $200 billion in cash on hand, have infinite runway to develop expensive products that solve hard problems. For better or for worse.

<comment><USER15> ZIRP != "free capital". Debt still has to be amortized & secured, and eventually your bankers or cashflow will cut you off, which means there is still opportunity cost.

<comment><USER14> As mentioned Apple has $200 billion in cash reserves. I'd say that is pretty solid collateral

</comment></comment></comment></comment><comment><USER16> "His father had an unusual philosophy: He would undercharge customers for complicated work while overcharging for easier jobs." \-- Maybe this also applies to freelance coding.

"Hard is good. Easy is a waste of time." -- If I had the motivation and guts, I'd put this on my coffee cup. But I'm sure it would make me a magnet for abuse.

<comment><USER17> I have known a freelancer who sort of did this, by preferring projects that required them to extend their skills, but not charging the client for the time they take to learn the new skills (i.e. before they start working on the actual deliverable).

The result was a lower average hourly rate to them, but it helped them stay up to date--and in some cases on the cutting edge. Why? Because it's easier to learn a new technology when there is a real project at stake. The deadline and accountability provides strong motivation, and there are real problems that need to be solved along the way--not just self-directed exercises.

I'm not a freelancer but I can see the long-term advantage of that approach. If you're one of just a few people who can do the cool new thing, then you can charge higher margins on easier projects, because you have less competition for the jobs.

Personally, I have never learned as much as when I am working a real project (i.e. paid, deliverable) that is a bit outside my current comfort zone.

</comment></comment><comment><USER18> "I truly believe that engineers will do their best when they are constrained by either money, tools, or resources. If you become sloppy because you have too much money, that's the wrong mindset."

A very perceptive mindset, in my opinion.

</comment><comment><USER19> (referring to move from 32bit to 64bit): "The new technology allowed for entirely new features, such as Apple Pay and the Touch ID fingerprint scanner. Developers had to rewrite applications to account for the new standard, but it gave way to smoother maps, cooler video games, and generally more responsive apps that don't hog as much memory." Right.

<comment><USER20> The memory comment certainly raises questions.

Tagging pointers on 64bit ARM does allow some new techniques for compactness but it'd be hard to claim this overcomes the doubled pointer size. Does anyone have data on how memory use was impacted between architectures for the same code base? I recall the Objective-C runtime taking advantage of this so perhaps it's only a slight tax if you rely Apple's frameworks.

<comment><USER21> Even bigger than tagged pointers is the inline retain count in the 64bit ARM runtime. This makes retain/release much faster... No more global locks and hash tables.

<comment><USER22> That's awesome. Any additional info on this topic?

<comment><USER23> [https://www.mikeash.com/pyblog/friday- qa-2013-09-27-arm64-an...](https://www.mikeash.com/pyblog/friday- qa-2013-09-27-arm64-and-you.html)

</comment></comment></comment></comment></comment><comment><USER24> > "The only way for Apple to really differentiate and deliver something truly > unique and truly great, you have to own your own silicon"

Why is that so? For ages we have relied on Intel and AMD, and that worked pretty well.

<comment><USER25> PC manufacturers are in the toilet with razor thin margins because they all ostensibly deliver the same thing. Profit is where "unique" is, which is a monopoly on feature or integration X.

</comment></comment><comment><USER26> Just wondering, are those special Mac Mini Builds, Custom WiFi integration hints of something to come?

</comment><comment><USER27> "Steve came to the conclusion that the only way for Apple to really differentiate and deliver something truly unique and truly great, you have to own your own silicon," Srouji says. "You have to control and own it."

This words are very encouraging for entrepreneurs. No matter you like Apple or not, this philosophy made Apple succeed.

<comment><USER28> > This words are very encouraging for entrepreneurs.

Sounds like an non-sequitur to me: what's the link between Apple and entrepreneurs, and why should they be encouraged? Shouldn't they be encouraged by commoditization of silicon instead? >90% of kickstarted/'maker' projects would vanish if step 1 were "have your own silicon"

</comment></comment><comment><USER29> I can imagine that part of his team's excellence and efficiency is due to not focusing on differences not directly relevant to technical problems:

Although Israel grapples with Jewish-Arab tensions all the time, none of it mattered in Srouji's world. Cohn, who remains friends with him, says their different backgrounds never came up. "Technical people treat technical people based on personality and technical ability," he says. "You don't think about it. You just work together. The rest goes away."

<comment><USER30> That's more or less the norm for secular israelis, regardless of ethnicity.

<comment><USER31> I'm sure they treat their fellow Palestinian Muslims well.

<comment><USER30> Far better than almost any other nations in a state of war, actually. Civilian to combatant death ratio was about 1:1 in the latest 2014 war, 4 times better than the usual modern wars involving first-world nations.

<comment><USER31> What a war it was indeed. Aerial bombardment of a walled city. A rocket launched from Gaza injures a few people in Israel; a bomb (no need to mention phosphorous _wink wink_ ) dropped from a state-of-the-art fighter jet destroys an entire city block.

And when Israel finally decided that it was time for the "mighty" IDF ground forces to enter the stage... nothing really happened. The rockets just continued to be launched from Gaza for a whole month. It was a really amusing "war" to watch in my opinion :D

<comment><USER30> Well, if you have an opinion on what IDF could do differently to lower the amount of civilian casualties, I'm all ears.

<comment><USER31> I'm no military expert, so I don't have one. Scratch that, I do. Allow aid to reach the million or so civilians in Gaza instead of choking it from all sides.

What I do know is that Israel was forced to agree on a ceasefire with a a bunch of "terrorists". Quite hilarious.

<comment><USER30> Aid is reaching them everyday, both from Israel and Egypt checkpoints. They're also trading with both countries quite a lot. You don't think that this "siege" word actually means a blockade, do you?

The only thing that is required to be smuggled are rockets.

<comment><USER31> Really now. Please don't speak about issues you have no clue about. According to the Jerusalem Post, "Egyptian authorities have kept the border crossing almost totally closed" since mid-2013 [1]. Now, if Egypt's crossing is closed, do you think Israel would keep theirs open? Hmm. Read [2] for more juicy details.

Conclusion: Gaza is completely isolated from the outside world. 1 million+ citizens in a confined space. Long live Israel.

[1]: [http://www.jpost.com/Breaking-News/Rafah-crossing-between- Eg...](http://www.jpost.com/Breaking-News/Rafah-crossing-between-Egypt-and- Gaza-closed-again-445073)

[2]: [https://en.wikipedia.org/wiki/Israel%E2%80%93Gaza_barrier](https://en.wikipedia.org/wiki/Israel%E2%80%93Gaza_barrier)

<comment><USER30> Here's the data, please:

[http://gisha.org/graph/2387](http://gisha.org/graph/2387)

"Completely isolated from the outside world"? Not even close. 3000 truckloads a week. And growing.

> Now, if Egypt's crossing is closed, do you think Israel would keep theirs > open? Hmm.

You seem to imply something here; as if Egypt-Gaza relations should be expected to better than Israel-Gaza. Why?

> 1 million+ citizens in a confined space.

Yeah, this is called a "country". Exactly what Hamas is, if you believe it, wants. And this "barrier" would be called a "border" then. You know, like countries have.

<comment><USER31> Yes, I and my fellow Muslims and Arabs all expect that Egypt helps its fellow humans in Gaza. We expect much less from Israel, given that it is the one who built the wall in the first place.

I apologize. You are right, Israel seems to at least let some aid through.

A country border? What kind of country lets another state build a huge wall around it and doesn't have control of the crossing points? I'm sorry but you're spewing nonsense.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER32> Despite the linkbait-y You-Won't-BELIEVE-What-Happens-Next title (spoilers: the executive is SVP of Hardware Technologies Johny Srouji, in charge of microprocessor design), an interesting article.

I worry that Bloomberg isn't sure if it wants its website to be Buzzfeed or the Atlantic.

<comment><USER33> that and fluff piece tone is rather annoying. I'm sure Johny Srouij is a highly competent Apple SVP considering their standards. But correct me if I'm wrong, as far as I know Apple's custom SoC's are still mostly a collection of licenced ARM IP blocks contracted out to either either TSMC or Samsung. Credit when credit's due, but the author goes a bit overboard, in praise.

<comment><USER34> Have you noticed the fact that no other Samsung chip has reached the single thread performance of the A7 in iPhone 5s? The architecture may be licensed but the chip design is not.

<comment><USER35> I was quite surprised by the analyst's assertion that Samsung has the lead. Certainly on manufacturing (especially since Apple doesn't actually manufacture them) but their chips in general?

<comment><USER23> He didn't define his criteria for "best". If it's $/core, for example, then Samsung probably is better. But I doubt Apple cares about that particular metric.

</comment></comment></comment></comment></comment><comment><USER36> And with this I am thoroughly convinced Hacker News is Slashdot with significantly fewer of the troll comments. This is obviously pure marketing. Congrats to Apple, I am sure this does in fact win them both sales and talent.</comment>


Ask HN: What are your/the best setups for running your own mail server? - <AUTHOR> What are the best setups for running your own mail server?<p>Which software? Postfix, Dovecot, Exim4 <comment><USER2> Exim4 as an MTA, and Dovecot as an IMAP Server.

I particularly like Exim4's configuration on Debian. It provides IMHO very reasonable defaults, but allows overriding of most of these defaults using a mechanism similar to hooks. In that sense, the configuration is more like a framework.

This allows me to easily add my own configuration, while also not touching the default configuration as shipped by the Maintainer (and thereby avoiding nagging about a changed conffile [1]).

If using the split config format (ie, /etc/exim4/conf.d), it's not that complicated figuring out how to to a particular thing.

For example, [2] is the folder that contains Exim's ACL configuration. [3] is the file pertaining to SMTP's RCPT TO command. The individual features, and how to enable/disable/modify them, are well documented and the steps are usually trivial.

I don't use it anymore, but I remember that in order to set up a mail system with purely virtual users backed by a PostgresSQL database, I only needed to add a half-dozen or so of files, each containing small configuration snippets.

(Exim configuration is still complicated of course, to say the least. Debian just makes it a lot simpler.)

[1] [https://raphaelhertzog.com/2010/09/21/debian-conffile- config...](https://raphaelhertzog.com/2010/09/21/debian-conffile- configuration-file-managed-by-dpkg/)

[2] [https://sources.debian.net/src/exim4/4.87-3/debian/debconf/c...](https://sources.debian.net/src/exim4/4.87-3/debian/debconf/conf.d/acl/)

[3] [https://sources.debian.net/src/exim4/4.87-3/debian/debconf/c...](https://sources.debian.net/src/exim4/4.87-3/debian/debconf/conf.d/acl/30_exim4-config_check_rcpt/)

</comment><comment><USER3> If you're looking to quickly get up and running, there's pawnmail.com lets you host your emails for free and the guy who runs the server promises not to read your email ;)

I actually run gilani.me through ZohoMail's free options, I dropped pawnmail because it didn't offer DKIM, and mail-tester.com was giving my outbound emails a score of 2, which means it was very surprising that they ever got delivered, at all!

</comment><comment><USER4> Postfix and Dovecot work well together (and that's my setup). Though it requires quite a reading to get Postfix configured in such a way that your server will stand attacks from the internet.

</comment><comment><USER5> Good share! Thanks</comment>


Ethernet Rules | Ted Landau's User Friendly View - <AUTHOR> http://www.macobserver.com/tmo/article/ethernet_rules/#comments <comment><USER2> The "CAT5 was more than up to the job" comment with the source <http://www.cat-5-cable-company.com/faq-cat6-gigabit.html> seems foolish. Didn't the author just go through the hassle of future devices requiring more bandwidth than his existing network could handle?

If I was to install an Ethernet network, it would almost certainly be CAT6. It nearly doubles the speed, ensures compatibility with Gigabit Ethernet, is fully backwards compatible, and is future-resistant. The 30% price bump (based on a quick check of Monoprice bulk cable, not sure what the increase is after connectors/stranded/Gigabit components) is much less than the price bump down the line trying to upgrade an existing installation.</comment>


Technical Debt and the Lean Startup  - <AUTHOR> http://pauldyson.wordpress.com/2011/08/15/technical-debt-and-the-lean-startup/ <comment><USER2> Technical debt is the latent cost of fixing quality problems you incur because you cut corners. Instead of the "cost" of the debt staying the same, it actually grows over time. The longer you leave your technical debt, the bigger pain it will be to fix.

But there's an underlying assumption: technical debt cannot have any value at all unless the code itself has value. In a business setting, you code something, the Product Owner approves it, it starts making money for the business. It has value.

In a startup scenario, the code you write only has about a 5% chance of ever being worth _anything at all_.

Whether or not you want to be a craftsman or a businessman is left as an exercise to the reader. But my advice is always do the math. There's a lot of solid code out there that isn't worth jack shit -- and a lot of proud programmers who will tell you how awesome their code is.

100% of 0 is still 0.

As a side note, I'm always amazed at the stories of technical debt where a team hacks something butt-ugly, then gets a million users, then the whole thing is a piece of shit. When practitioners talk about this, it's almost like the moral is how bad hacking and bad coding is. They completely miss the point that _getting the million users here is the significant event, not the coding style_. You get a million users, you can complain about all kinds of things. Trust me. You'll work it out. Let some other guy write the book about what fools you were. You have the million customers. He doesn't.

Note that I'm not saying to code like crap. I'm just saying that everything you do in a startup -- programming, marketing, sales, accounting, etc -- has to be measured in terms of gaining and keeping customers. You have to do the math for your particular situation and figure out where the trade-off is (insert long discussion about how important MVP is here) Pragmatism always. Thinking in absolutes will kill you every time.

<comment><USER3> Like some might say: "it's a nice problem to have"... some of us are working night an day towards a happy future dilemma of paying technical debt against a valuable product</comment></comment>


Using Haskell at SQream Technologies - <AUTHOR> http://blog.sqreamtech.com/2013/09/using-haskell-at-sqream-technologies/

<comment><USER2> Looks really interesting. I wrote an SQL parser and compiler frontend for a SQLite-style database last summer. I started off in C using Lex/Yacc, but for the last piece of the project I used Haskell. This step was to take SRA ("sugared relational algebra"), which is essentially a transition step between SQL and simple relational algebra, and desugar it into relational algebra. The code is up at [https://github.com/thinkpad20/sql](https://github.com/thinkpad20/sql) if anyone is interested, with the code for that portion being contained in the haskell folder. I might translate the whole thing into Haskell (maybe using Attoparsec) at some point.

I was curious that you used a different version of relational algebra than the one I had been taught. I've usually seen RA described in terms of six fundamental operators: Project (pi), Select (sigma), Rename (rho), Cross Product, Union and Difference. What gave rise to the model you chose?

Anyway, it's great to see that more people are using Haskell. I would love to be able to work in it some day.

<comment><USER3> That is really fascinating, I will have a good look at that, thanks! I have a SQL parser in Haskell on github here (using Parsec): [https://github.com/JakeWheat/hssqlppp](https://github.com/JakeWheat/hssqlppp)

The model in the article is roughly based on the version in Date and Darwen's work which is almost the same as what you mention: project, rename, extend, join, union and not matching. The summarize by is kind of syntax sugar in this system. I left out some of the operators which weren't used anywhere in the code in the article. Industrial grade conversion from SQL to relational algebra is a real challenge!

<comment><USER2> Wow, your parser is a behemoth! My parser ended up being around 500 lines of Yacc. I know I didn't fully implement SQL, but I thought I had gotten pretty close. Are you doing any extra fancy stuff inside of the parser? Clearly the documentation is pretty extensive. I like the lhs work; I might start doing some of my projects in LHS.

SQL to RA is definitely quite a task, but it was pretty fun (up until the end, when it just started getting annoying...). Then again, I think compilers and programming languages are a blast anyway. Haskell makes it even more so :)

When I wrote this code, I wasn't really comfortable using monads, so all of the threading is explicit. If I were to revisit it, I would probably use a state monad, which might also make it easier to make it tail-recursive (as it is, my desugarer is not written in a tail-recursive manner).

<comment><USER3> The parser also does typechecking, and attempts to cover a good subset of DML, DDL and procedural SQL as well. Maybe it could be smaller!

How would you handle correlated subqueries when converting from SQL to RA?

</comment></comment></comment></comment><comment><USER4> _I think it is worth taking the risk to use a relatively unusual and unproven technology._

should be:

 _I think it is worth taking the risk to use a relatively unusual technology._

<comment><USER3> I think you are right. It should have said relatively unproven technology for SQL DBMS implementation.

</comment></comment><comment><USER5> Why is using Haskell a risk? It's not a proprietary system where the company might shut down.

<comment><USER3> Many people see it as a big risk (such as investors and customers) which makes it self-fulfilling.

<comment><USER5> Can you describe better why they see it as such? The key risk _I_ see in Haskell is the lack of enterprise-y libraries.

<comment><USER3> I guess a lot of it boils down to them never having heard of Haskell before.

</comment></comment></comment></comment><comment><USER6> It would be interesting to know if the devs there are long time haskell developers, or if new hires could easily be trained in haskell.

<comment><USER3> We have one other Haskell programmer, who previously worked with some other functional programming languages (mainly some dialect of ML I think) and was working with Erlang in his previous job, and he picked it up quite easily. I think he is unusual though, I found it much more difficult to learn (but extremely rewarding).

<comment><USER6> What about learning/discovering the haskell language and its ecosystem? Did you have a lot of refactorings, replacements of libraries wrongly chosen, etc? Were these changes facilitated by haskell? Very curious to know because haskell is high on my list as the language to use in the near future.

<comment><USER2> In my experience, the more you learn about Haskell, the more you can pick out spots in your code where you could have made something more concise, more elegant, more efficient, etc. The excellent thing about pure functions and Haskell's strong typing, though, is that refactoring is a breeze -- changing a function will never break another function as long as the inputs and outputs to that function remain the same.</comment></comment></comment></comment>


U.S. pay gap by sex by occupation - <AUTHOR> http://www.statwonk.com/blog/pay-gap-us-full-time-workers-by-sex/ <comment><USER2> > _I think the graph speaks for itself._

That's never the case with data visualization. Explanation helps remove ambiguity, and the lack of explanation behind the data source is why there is an excessive amount of criticism in the HN comments.

Regardless, the graph does not certainly speak for itself. There's no obvious correlation between which professions have a better gender pay split than others. If you're trying to make the point that most professions pay women less than men, then you need to justify that. (And provide evidence that the chart represents "most professions.")

<comment><USER3> Personally, I've found that any time someone declares that a given visualization "speaks for itself" what they mean is that they want you to not ask questions about it. Occasionally this is justified, but more often it's a stunt of some sort.

<comment><AUTHOR> PRs welcome! The source code is here: [https://github.com/statwonk/paygap](https://github.com/statwonk/paygap)

<comment><USER4> I am noticing that the pulled list of occupations and the generated output differed in size. Why is that?

For example I would like to see the data for "Automotive Body and Related Repairers".

<comment><AUTHOR> The difference are non-published values. Really wish we had raw surveys, but I do understand the ethical challenges BLS deals with.

</comment></comment></comment></comment></comment><comment><USER5> The graph title really should include more details than just "pay". Based on the site linked in the github page's readme, it's graphing "Median weekly earnings of full-time wage and salary workers by detailed occupation and sex".

That kind of detail is important because these numbers are de-facto controversial (in that people argue angrily over them a lot).

<comment><AUTHOR> I agree. PRs welcome!

</comment></comment><comment><USER6> Misleading title. It does not say whether or not the salaries were normalized based on the type of job inside each occupation (hours, position, etc.). Almost surely they have not been.

<comment><USER7> So instead of indicating a level of inequality in pay for doing the same job, the data might indicate a level of sexism in the type of jobs people have (or number of hours worked, or number of years people are in the profession, etc). That still demonstrates there's a significant problem.

There is _no way_ to read that graph, or the data behind it, that indicates things should stay the way they are.

<comment><USER3> As I understand azth's objection, it basically means "This data has been stripped of all context that could make it meaningful". Which is to say it's a shocking, but ultimately useless graph.

You can say there's no way to read it as indicating things should stay the way they are. I believe azth's point is that there's no way to read it as saying anything coherent at all.

(EDIT: Typo.)

</comment></comment></comment><comment><USER8> "...O'Neill finds that when these factors are accounted for, the gender wage gap falls to approximately 97 cents on the dollar..."

[http://www.ncpa.org/sub/dpd/?Article_ID=22058](http://www.ncpa.org/sub/dpd/?Article_ID=22058)

<comment><USER9> When you read the source text, you can see that they have been fairly selective in the criteria in which they dismiss size of the wage gap. I would argue that the text shows the study was produced with a political leaning. [http://www.ncpa.org/pub/ba766](http://www.ncpa.org/pub/ba766)

<comment><USER8> "O'Neill finds that single women without children, on average, make 8 percent more than their similarly situated male colleagues"

[http://www.ncpa.org/sub/dpd/?Article_ID=22058#sthash.6sSZrCm...](http://www.ncpa.org/sub/dpd/?Article_ID=22058#sthash.6sSZrCmq.dpuf")

<comment><USER9> You can see how that is a narrow selection though? Men and women don't remain 'similarly situated' throughout their entire careers, particularly when you factor in child-rearing (paternity still being highly uncommon, and few countries offer it as a social benefit).

In in simplest form that is like saying "the pay divide between women and men is non-existent when women are effectively men."

</comment></comment></comment></comment><comment><USER10> Wow if this were true even normalized for years of experience, education, hours worked, specialty, etc... (which it is not) seems the market would make it incredibly difficult for men to find a job [https://www.youtube.com/watch?v=BDj_bN0L8XM](https://www.youtube.com/watch?v=BDj_bN0L8XM)

</comment><comment><USER11> This may be very simplistic, and this cave-man doesn't have much knowledge in this arena, but part of me believes that discrimination can only exist in an anti-competitive environment. In competitive markets, the company with misogynist hiring mangers will end up with a less productive (can only pay so much per hour) and/or overpaid male-dominated staff. Competitors who don't discriminate will drive them out of business.

So either misogyny is so widespread that market participants agree to engage in it (collude), or there's some other explanation: risk of maternity leave, etc.. Anything else? Have there been any studies that show how well women do salary-wise once they're beyond child bearing years? Any studies on married vs. non-married men perhaps to see if married men negotiate more in order to support wives while on maternity leave/stay-at-home?

<comment><USER12> You have it exactly backwards. In a competitive market, hiring managers have every incentive to negotiate workers to take _lower_ salaries. As it turns out, for various reasons, when forced to negotiate for salary women end up taking less than men. (More info here -- [http://www.npr.org/sections/money/2014/04/08/300290240/why-w...](http://www.npr.org/sections/money/2014/04/08/300290240/why- women-dont-ask-for-more-money) \-- and plenty more a Google away.)

<comment><USER11> So the theory is that women are concerned about their reputations, so they ask for less than their male counterparts. But with the people that a female candidate would be working with, only the hiring manager would (should) know. I think this has more to do with the rather recent changes of women in the workplace than women managing their reputation, but what do I know?

> You have it exactly backwards. In a competitive market, hiring managers have > every incentive to negotiate workers to take lower salaries

I never stated anything to the contrary. You're talking about profit- maximizing behavior that we all engage in everyday. What I said had to do with deliberate discrimination, which can only be profitable if the market participants all agree to it.

</comment></comment></comment><comment><USER13> Visualizations like these certainly have their place, and I actually appreciate that the OP didn't offer commentary in this case. This graph acts as a blank canvas onto which people project their conversational biases. Each person has their own idea of what the pay gap is.

For me, the pay gap encompasses all sociological factors that lead to women making less than men. When the numbers are squeezed to only compare men and women by exact position, the question "why aren't women holding high power positions?" is implicitly answered with "because women are incapable," and that's a gross untruth. (This is not to say that such research has no value — it is quite important in the context of coming up with solutions.)

If you're quick to wave around the 97% number, you may not be treating this problem with the humility that it deserves.

</comment><comment><USER14> Sadly, it's known that women do get paid less in one way or the other (based on bls data and other sources that confirms the same). But what's missing is more research & data as to why this is the case. Such data would make a more interesting graph because it's more actionable.

A more actionable graph making its round on the internet is more helpful than a graph that can fuel and provoke.

</comment><comment><USER15> does this control for years of experience?

<comment><AUTHOR> Nope. They're median weekly wages. You can find the source code at github.com/statwonk/paygap PRs with other analyses or improvements welcome!

</comment></comment><comment><USER16> When talking to women helping them with equal pay I suggest reading "Negotiating Your Salary: How To Make $1000 a Minute" by Jack Chapman.

When they found a salaray they are confident with, they should up it by 10% percent (say $66k instead of $60k).

One of many reasons women earn less from my experience is that they are risk averse during interviews which accumulates over the years.

<comment><USER9> > risk averse during interviews which accumulates over the years

Careful now, that may be a commonly held belief but is also wrong. There are far more reasons why the pay gap exists and you can't simply clump it all together and blame it on the stereotypical view that women have an innate inability to negotiate as well as men.

<comment><USER17> They specifically said "one of many reasons" \- I'm unsure what you're disagreeing with?

<comment><USER9> The comment had been updated, as the author mentioned.

<comment><USER17> Right. My mistake. Thanks.

</comment></comment></comment></comment></comment><comment><USER18> Average I guess? I would be way more interested to see boxplots for men/women for each category discussed. Averages can be tricky to interpret, plus you need to answer you are comparing folks at the same level of experience and all.

<comment><AUTHOR> They're medians specifically. The graph is a visual representation of this data: [http://www.bls.gov/cps/cpsaat39.htm](http://www.bls.gov/cps/cpsaat39.htm) The raw data isn't made publicly available, so boxplots aren't possible, but that'd be really cool!

</comment></comment><comment><USER19> Some people believe that the secret to closing the gap is to ban salary negotiations: [https://www.washingtonpost.com/posteverything/wp/2015/05/21/...](https://www.washingtonpost.com/posteverything/wp/2015/05/21/the- best-way-to-way-to-eliminate-the-gender-pay-gap-ban-salary-negotiations/)

<comment><USER3> I don't see how that really helps. That just pushes it to being willing/unwilling to walk or having other offers in hand.

Which is to say it removes overt bargaining in favor of making it all covert. Is that really an improvement? I have some doubts.

</comment></comment><comment><USER20> Does this ``gap" reduce as the employees considered get younger?---the data source doesn't include age demographics.

</comment><comment><USER21> More skilled jobs seem to have more disparity which is extremely surprising.

<comment><AUTHOR> I was really surprised by the gap for physicians and surgeons.

<comment><USER22> The gap in medicine is a microcosm of the wider gap: female physicians are disproportionately likely to end up in lower-paying specialties like pediatrics and family medicine.

<comment><USER23> Maybe they like those jobs more despite having lesser pay? Or do we always have to assume they are victims?</comment></comment></comment></comment>


Ask HN: What does senior front end developers do/know that others don't? - <AUTHOR> I got talking with a colleague about this the other day and would like to know what you guys think?
What do senior frontend devs know/do that others don't? How do they approach problems? What knowledge do they have? How do they interact with others? How much do they work? How do they support others?
Thoughts? <comment><USER2> \- readability > optimization

\- investing for engineering excellency > paying technical debts

\- preventing premature abstraction > code reuse

\- interaction design is as important as UI design

\- removed codes > added codes

\- currently popular tool != the perfect tool for the job

\- complex solution for a simple work != complex work

\- being explicit > being implicit

\- unfinished project will stay unfinished

\- feeling the work less urgent actually lower team's morale

\- team achievements > bean bags

\- communicating technical problem and non-technical people is a sign of a mature engineer

\- requirement gold-plating is as destructive as developer gold-plating

\- adding engineers to a late project doesn't help

\- delegating stuffs is actually a good exercise

\- declarative is for structures, imperative is for stories

\- static typing scales projects

\- framework doesn't help if you don't know the fundamentals

\- undefined is not a function

<comment><USER3> static typing is like a DB index, it makes code inserts a bit harder but code updates and code selects a lot easier.

</comment></comment><comment><USER4> These are good questions, but almost too vague to answer. If you have a few decades of knowledge, it is difficult to pull out which pieces of your approach to your work would be the most helpful to those getting started.

Likewise, presuming what other people do not know often comes off as arrogant, as there is very little in my knowledge base that someone with a couple years of experience couldn't know. The time put into this industry is less about specific tech knowledge or techniques, and more about having seen so many more things.

Situations that feel like new, huge new problem spaces for beginners may be something we can respond to with, "Oh, I did something like this 15 years ago. Here is how I did it then, let us see if we can do something similar, but modernize it with the new capabilities we have these day."

It is difficult to imagine every possible scenario these days and give a general answer that would be meaningful. My best general recommendation is to learn the concepts of deconstruction and reconstruction. Break down everything you do to its core components and concepts, decoupled from the technical solutions. Build your solution up from those principles, thinking of technology as a tool to solve problems, and not thinking of the tech as the solution in and of itself. When you approach problems this way, it is easier to make those connections in the future saying, "This is the same as the problem we solved a few years ago", because you recognize the underlying concepts.

</comment><comment><USER5> I've worked and have been mentored by a lot of great engineers, they have a few things in common:

1\. They all happen to be a bit older 34+ (early 30s being the minimum)

2\. They model their problems before writing code.

3\. How they debug problems with a very workman-like, structured approach.

4\. Write well and efficiently.

</comment><comment><USER6> |Harry Roberts - 10 Principles for effective Front-end Development|

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

Beyond languages and frameworks. One of my favorite speeches on development which I periodically rewatch. It will make you a better developer in general.

1\. The simple option is usually the best

2\. Reduce the amount of moving parts

3\. Understand the Business

4\. Care less, care appropriately

5\. Pragmatism trumps perfection

6\. Think at product level

7\. Do not design systems around edge-cases

8\. Do not make decisions based on anecdotal evidence

9\. Don't build it until you've been asked for it

10\. Expect and accommodate change

<comment><USER7> I'd like to hear more about not designing around edge cases and what that means. Edge cases have to be accounted for, and accounting for them at design time seems important.

<comment><USER3> Not the op but I take it to mean avoid concrete concepts in code around those edge cases.

For example in OO avoid making a derived class for a French tax calculation for your one French customer's invoice. I'm assuming here that your product is not an accounting package and the tax issue is just for SaaS billing.

Instead make the design loose enough that this can be accommodated by data. Maybe even manually enter their tax amount in a free text field.

But tying up the code for that edge case (and doing so for every edge case) will lead to a complicated system.

<comment><USER6> Pretty much this. It's especially true in startups where new features and edge cases pile up really fast. Solve a new edge case manually in the beginning (like adding a simple field instead of a smart calculation, like you mentioned) and work from there. It might turn out, in a few months, that that new feature nobody uses anyway so it's dropped. This is easier if you obey: 6) Think at product level

</comment></comment></comment></comment><comment><USER8> You've seen a couple of actual paradigm shifts, and the dozens of hype-cycles in between. You can tell the difference between the two: what's important and what's not.

You've been up and down the stack enough to have a decent understanding of how things are implemented at the levels above and below the ones you work in. You can avoid the leaky abstractions in your stack and your abstractions don't leak on others.

<comment><USER9> IANA FE-dev, but I don't think I've met many that fit this description. The closest I can think of is to settle on an acceptable/popular framework (e.g. React) and make it as pain free as possible (e.g. use TypeScript, clean component patterns).

At the same time, current hype results in using React-Native for mobile which seems feasible but short-sighted to me.

Maybe a better description is one who understands current trade-offs and makes pragmatic choices rather than seeking future payoffs.

</comment></comment><comment><USER10> I think there's not a single list of criteria that you can apply. Some points like a structured and logical approach to debugging have already been mentioned. For me, a good indicator of a senior developer is the ability to have an understanding of technologies beyond what's immediately necessary in the day-to-day work. As an example, a junior React developer will be able to follow a tutorial on Redux to build an app using flux as a paradigm, but would probably not be able to implement such a system himself/herself using the context mechanism and higher-order components (HOCs). Hence, when presented with a codebase that uses such HOCs and context to manage state he/she will quickly be lost if unexpected or hard-to-debug behavior occurs, unable to resolve the problem without the help of a senior developer.

The ability to have a good understanding of a large part of the abstraction hierarchy and, if necessary, leave the current level of abstraction is a good indicator of a senior developer, IMHO. Of course there will be more and less senior people, very few of us can go all the way down the abstraction rabbit hole (and it's usually not required).

So, another angle of this criterion is that a senior developer is able to work his/her way through a codebase without external help, solving problems on the way and obtaining necessary knowledge as required, whereas a junior developer frequently needs assistance from more senior developers to resolve unexpected problems.

Of course there are many other traits that I would attribute to a good senior developer, such as:

\- Solid knowledge of fundamentals (HTML, JS, CSS). I've seen some junior developers get stuck implementing really simple designs because they lacked basic understanding of CSS and HTML.

\- Understanding and taking into account the business problem that the software tries to solve. Senior developers understand - at least to a certain extent - that decisions they make when writing code affect the business outcome, and they will at least partially have this in mind when designing software. Junior developers on the other hand often love using all the exciting new technologies (which is understandable as they want to learn), but they don't see the bigger picture of the software in the context of the business.

\- Ability to interpret, challenge and discuss requirements and assignments. Given an assigment e.g. from a designer or product owner, a senior developer will usually quickly recognize points that need clarification or modification and discuss those with the other stakeholders. He/she will also propose reasonable alternatives to requirements that would be hard to implement. Junior developers will often just try to implement everything you throw at them 1:1 without thinking too much about whether it makes sense. I've seen this e.g. when designers create layouts that are really hard to implement in CSS/HTML. A junior developer will spend days trying to implement the design, a senior developer will go to the designer and educate him/her on the issues of the design, trying to find a simpler solution that is easier to implement.

These are just my 2c, as I'm still learning myself how to recognize and hire good senior people.</comment>


World's First Slaughter-free Steak - <AUTHOR> https://nationalpost.com/life/food/israeli-start-up-aleph-farms-raises-the-steaks-with-the-worlds-first-lab-grown-sirloin <comment><USER2> The price is very low. Is there anyone knowledgeable with industry to maybe shed some light on this issue? I thought we were years from lab-grown meat in this price range

</comment><comment><USER3> The first commenter is right: that image looks nothing like what the video shows [0]. Though the prototype looks not bad at all.

[0] [https://www.youtube.com/watch?v=txFN1qr1dWU](https://www.youtube.com/watch?v=txFN1qr1dWU)</comment>


SpaceX Falcon 9 reaches orbit - <AUTHOR> http://www.msnbc.msn.com/id/37509776/ns/technology_and_science-space/

<comment><USER2> I've been waiting for this for months. Go Elon!

The funny thing is everyone calls him a 'Internet billionaire'. But he's never BEEN a billionaire! He only got $200 mil from Paypal. It's a bit ridiculous to throw that term around.

[Additional] Heinlein would have been proud to see this.

<comment><USER3> I am always fascinated by Elon Musk. A little bit like a Bond villain.

Even if he has "only" $200 mil, I think he will be a billionaire soon, with the SpaceX thing working out, and Tesla,too.

<comment><USER4> He recently said he was broke, but that was during a divorce, maybe he is hiding his loot.

<comment><USER3> Ah yes... His ex is actually blogging, on livejournal of all places. Cool to get a view from the other side.

<http://moschus.livejournal.com/141570.html>

<comment><USER5> _4\. Seek distraction. Take up a new hobby. Or a really cute personal trainer._

Cute personal trainer = new hobby?

<comment><USER6> The whole post stunk of bratty entitlement. This is one of those cases where hearing the other side of the story actually makes you side with Elon a bit more.

<comment><USER7> Looking at her earlier posts, there was one in mid-May "Is blogging innately narcissistic?". I almost left a comment that _Hers_ sure is.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This is fantastic news! Hopefully this means that the price of taking things to orbit will fall rapidly (relative to what governments could achieve, at least), allowing all kinds of new developments that couldn't otherwise have happened.

<comment><AUTHOR> A little over $50M to put up to 10000kg in LEO: <http://www.spacex.com/falcon9.php>

Similar prices for GTO of up to 4500kg, but presumably a lot of that is going to be fuel to move from GTO to GEO; since the Delta IV can (and does) take multiple satelites to GTO at up to 12000kg, I'm not sure how favorably that is going to compare (nor do I have any first hand knowledge of launch prices for something as big as a delta IV.

[edit] Just noticed the footnote on above page that at $45M for <3000kg to GTO they want to book a co-passenger, so presumably the ~4500kg limit is enough for at least 2 satelites + fuel.

<comment><USER9> Supposedly there is also a "Heavy" configuration that uses 2 additional boosters for a larger mass payload than the shuttle. <http://en.wikipedia.org/wiki/Falcon_9>

<comment><AUTHOR> It's untested and has no pricing information or schedule that I've seen though.

<http://www.spacex.com/falcon9_heavy.php>

<comment><USER5> Not so different from a Titan IV heavy lift. One difference: Falcon boosters are liquid fuel. They are copies of the 1st stage.

<comment><USER10> This is, AFAIK, the same route a Delta IV Heavy takes.

</comment></comment></comment></comment></comment></comment><comment><USER11> This is really amazing considering that Atlas took 13 launches before it reached orbit successfully.

Edit: It's also good for Obama's space plan - putting a new rocket into orbit on it's first launch is a pretty powerful way to demonstrate competence.

<comment><USER12> I don't see how this has anything to do with politics, since SpaceX is a private company. Also, it's not SpaceX's first launch. It may be the first launch of the Falcon 9 rocket, but there have been others that SpaceX has undoubtedly learned a lot from.

<comment><USER13> Obama unveiled a plan in February to end the Orion spacecraft program and use private companies to launch US assets into orbit, for which he received copious amounts of criticism, from all sides. (He announced a scaled-back version in April that still relies primarily on private companies to provide transit to space.) That's what the parent is referring to — it's not just blind politicization of an irrelevant topic.

<comment><USER12> Oh, thank you. That does make sense then.

</comment></comment></comment></comment><comment><USER14> I'm a little puzzled from the news - while good, it doesn't really seem to clearly state that they put the thing into orbit. Did it go up and circle the earth at least once? Did it just obtain a given altitude (because orbital altitude != orbit)....... they seem to be saying it was "hitting an orbital bulls-eye" and "close enough" and that kind of thing... so it sounds like an engineering success, but it didn't actually go into orbit.

<comment><USER15> <http://en.wikipedia.org/wiki/Falcon_9_Flight_1>

Regimine: Low Earth Orbit

Apoapsis: 155 miles (249 km)

<comment><USER14> Awesome.... thanks!

</comment></comment></comment><comment><USER16> Awesome - big congrats to SpaceX and the team there!!

</comment><comment><USER17> He actually is broke, liquidity issues as I understand it. <http://www.laobserved.com/biz/2010/06/elon_musk_is_broke.php>

</comment><comment><USER3> I think this is the first time I have seen an (almost, I know, not complete) dupe on the front page.

<comment><USER18> A justified dupe. The older one was originally a link to the live stream, now it's a link to a YouTube video of the launch. This report contains additional details you won't get by just watching the stream or video.

</comment></comment><comment><USER19> <http://biditserver1.appspot.com/homepage.png>

Isn't this a big enough news???

<comment><USER20> There is a case where we think news that interest us is more important than anything else. That's why we are on HN, isn't it?</comment></comment>


Startup building untappable Internet project to counter mass surveillance - <AUTHOR> http://www.indiegogo.com/projects/upliink-aero-free-internet-for-everyone-everywhere/x/5603110

<comment><USER2> This sort of project is an admirable attempt to counter surveillance at a personal level, assuming the shared mesh network idea would work, but there's a serious flaw in the efficacy of it - if successful it would commoditise privacy.

Internet surveillance and monitoring by governments and big corporations has to stop so that everyone's right to privacy is protected. Inventing a device that only protects the people wealthy enough to buy it would create a two- tier, divided internet of the private and the surveilled. That's not good enough. All our efforts should be directed to making an internet that's free (as in beer) and equal for everyone.

<comment><AUTHOR> You might want to check this out: [http://tricorder.org/eric/upliink.html](http://tricorder.org/eric/upliink.html) It's an article by the project leader about that issue. Essentially what they are proposing would turn internet acquisition into a one time hardware cost. Since most of their project goals are open source related [http://upliink.aero/project.html](http://upliink.aero/project.html), I think that would solve the issue you raise. For example, other operating systems could reuse the routing software.</comment></comment>


Mars Reconnaissance Orbiter views Schiaparelli landing site - <AUTHOR> http://www.esa.int/Our_Activities/Space_Science/ExoMars/Mars_Reconnaissance_Orbiter_views_Schiaparelli_landing_site <comment><USER2> It is so bad ass that when we have a question about something that happened on _another planet_ we can just point one of our other robots' cameras at the site!

<comment><USER3> I'm waiting for the day where someone can tell their rover to drive / fly over and find out what the heck happened.

<comment><USER2> We have proven designs for Mars rovers, and a proven delivery system. The R&D has been done, the infrastructure is in place - why don't we send some more? We should be able to make incremental updates and constantly improve the rovers capabilities.

<comment><USER4> That's pretty much what we have done: [http://imgur.com/3Hg9O](http://imgur.com/3Hg9O) (Pathfinder, Spirit/Opportunity, Curiosity). Mars2020 isn't designed yet, but it will be based on Curiosity.

<comment><USER5> Mars 2020 is designed yet, you can view its design and experiments here: [http://mars.nasa.gov/mars2020/](http://mars.nasa.gov/mars2020/)

Sure, it may not be fully officially built, but it has been designed almost to completion.

<comment><USER6> Since the vehicle design is based on Opportunity, I would say the biggest news is the array of sensor/instruments on board: [http://mars.nasa.gov/mars2020/mission/instruments/](http://mars.nasa.gov/mars2020/mission/instruments/)

</comment></comment></comment></comment></comment></comment><comment><USER7> The main mission of this expedition is the Trace Gas Orbiter: [http://exploration.esa.int/mars/46475-trace-gas- orbiter/](http://exploration.esa.int/mars/46475-trace-gas-orbiter/)

 _" the Trace Gas Orbiter will be deployed to detect a wide range of atmospheric trace gases (such as methane, water vapour, nitrogen oxides, acetylene), with an improved accuracy of three orders of magnitude compared to previous measurements."_

</comment><comment><USER8> In Rob Manning's book [0] : He explained how hard it is to land on Mars. It's nicely sum up in those two sentences :

 _"There's too much atmosphere on Mars to land heavy vehicles like we do on the moon, using propulsive technology completely," said Manning, "and there's too little atmosphere to land like we do on Earth. So, it's in this ugly, grey zone."_ [1]

The recent success of Curiosity, Spirit and Opportunity must not shadow the fact that most Mars missions have failed.

[0] "Mars Rover Curiosity: An Inside Account from Curiosity's Chief Engineer

[1] [http://www.universetoday.com/7024/the-mars-landing- approach-...](http://www.universetoday.com/7024/the-mars-landing-approach- getting-large-payloads-to-the-surface-of-the-red-planet/)

<comment><USER9> I don't think the atmosphere is the problem with landing heavy landers like we do on the moon. For some reason I think gravity is the main problem. The only effect I can think of the atmosphere would have is on engine efficiency, and it's so thin I doubt it's much of a consideration at all.

<comment><USER10> You are very wrong. Read the literature.

<comment><USER9> Yea I started thinking about it after I posted. Ya know, the heat and stuff.

</comment></comment></comment></comment><comment><USER11> > Estimates are that Schiaparelli dropped from a height of between 2 and 4 > kilometres, therefore impacting at a considerable speed, greater than 300 > km/h.

Ouch. It will be interesting to read the results of the investigation as to why the landing thrusters turned off prematurely.

<comment><USER12> Yes, it seems they made quite a dent on Mars

I'm not so sure that this should be interpreted as "thrusters turning off prematurely" rather, it getting to the point of shut-off sooner (and faster) OR it stopped because they hit the ground

<comment><USER13> That is when it switched from thrusters to lithobraking.

<comment><USER14> Lithobraking has actually been a feature in at least one Mars mission: the pair of impactor probes that piggybacked on NASA's unlucky Mars Polar Lander mission of 1999 [1]. The MPL itself, as is quite well known, ended up doing an _unplanned_ lithobraking maneuver after its retrorockets shut down too soon (!) due to insufficient integration testing. The impactors were never heard of either; the exact failure mode remains unclear.

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

</comment></comment></comment></comment><comment><USER4> Questions have come up about the landing strategy of the Schiaparelli lander. It uses a Doppler radar to get position and velocity, time deployment of parachute, and calibrate thrust for retro-rockets. The best references I was able to find are these:

[http://exploration.esa.int/mars/47852-entry-descent-and- land...](http://exploration.esa.int/mars/47852-entry-descent-and-landing- demonstrator-module/)

[http://solarsystem.nasa.gov/docs/Bayle_ExoMars_EDM_Overview-...](http://solarsystem.nasa.gov/docs/Bayle_ExoMars_EDM_Overview- Paper.pdf) (solid, is undated, seems old and nonspecific in some cases)

[https://solarsystem.nasa.gov/docs/7B.1_Lorenzoni_ExoMars%202...](https://solarsystem.nasa.gov/docs/7B.1_Lorenzoni_ExoMars%202016%20Entry%20Descent%20and%20Landing%20Demonstrator%20Module%20EDL%20overview.pdf) (from 2013, more detail)

</comment><comment><USER15> What a shame. The only consolation, if any, is that they are not the first ones to crash on Mars. If I remember correctly the historic chances of landing successfully on Mars is about 50/50.

<comment><USER16> The chances of landing are 100%.

<comment><USER17> I believe rocket scientists make a distinction between landing and impacting.

<comment><USER18> Different intensities of lithobraking.

</comment></comment></comment></comment><comment><USER19> That 600MB of telemetry should provide extremely valuable in making that rover they are planning to land less likely to fail.

Sadly you really don't get that many attempts...

</comment><comment><USER20> Should we say that the space programs in the 60s and the 70s were more successful? specially, if we consider the communication and the control technologies available at that time. For example, vikings had Honeywell 24 bit cpu with 18K memory. What about those Argon computers used in the soviet venera programs?

Or may be, a very fast/accurate computation is not that necessary?

<comment><USER21> The landing techniques that are being used are bringing much larger payloads to the Martian surface than were brought in previous landings. Curiosity, for example, is about twice the weight of the Viking landers. In general, we're much more successful at landing and receiving data from mars-bound craft than we were back there; the soviets sent several probes to mars and got minimal data back from them before they failed.

Fast/accurate computing is needed for surface work on Mars because it means that the devices don't have to wait around for commands all the time. Giving more processor power and ability means that more flexible programs can be written to sift through the data and just send back the most interesting parts. Fast and accurate are very much needed for the kinds of lab experiments we're doing on mars.

<comment><USER10> Vikings, MERs and Curoisty/2020 each used totoally different landing technologies. Amazing they all worked.

</comment></comment></comment><comment><USER22> Stupid question maybe, but would it not make sense to launch multiple landers with one rocket? The hardware cost of a rover must be peanuts compared to the engineering cost, the launch cost and the time to travel? How big is the lander compared to the launch rocket?

</comment><comment><USER23> I read the headline as "shrapnel landing site"

</comment><comment><USER24> Splat. Not sure if that is a landing site or a crash site.

</comment><comment><USER25> Now imagine there being 100 people onboard that spacecraft, as Elon Musk plans for.

</comment><comment><USER26> Once again, billions of euros are put into use for what is essentially scientific curiosity instead of trying to solve the very real problems Europe is facing. I love astronomy and space exploration but the amounts of money wasted into it rather than other problems with a high priority is staggering.

<comment><USER27> The EU has a population of over 500 million. For a program like this (assuming it's all from public funds), each citizen paid on average less than a cup of coffee costs at Starbucks.

It's real money, but what pressing pan-European problem could you really solve with such a tiny budget?

<comment><USER26> Look at the economical situation of countries like Greece and Spain. That would be one starting point.

<comment><USER28> According to the easily-found stats on Wikipedia [1,2], the MRO cost $720 million, whereas the Greek bailout given in 2010 (alone) was €110 ($119) _billion_. Notice the "m" in the first and the "b" in the second- your "starting point" is _orders of magnitude_ beyond the resources we're talking about here.

[1] [https://en.wikipedia.org/wiki/Mars_Reconnaissance_Orbiter](https://en.wikipedia.org/wiki/Mars_Reconnaissance_Orbiter) [2] [https://en.wikipedia.org/wiki/Greek_government- debt_crisis#2...](https://en.wikipedia.org/wiki/Greek_government- debt_crisis#2010_revelations_and_IMF_bailout)

<comment><USER29> Indeed, the entire ESA budget for this year is €5.2 billion, of which a third is Earth observation satellites.

[http://www.esa.int/spaceinimages/Images/2016/01/ESA_budget_2...](http://www.esa.int/spaceinimages/Images/2016/01/ESA_budget_2016_by_domain)

<comment><USER30> And as a Greek I see that day by day we are taking advantage more and more the data available from EO satellites. You need lots of data to restart the economy.</comment></comment></comment></comment></comment></comment>


Kleisli Categories – Composition of Logs - <AUTHOR> http://bartoszmilewski.com/2014/12/23/kleisli-categories/ <comment><USER2> _An astute reader may notice that it would be easy to generalize this construction to any monoid, not just the string monoid. We would use mappend inside compose and mempty inside identity (in place of + and ""). There really is no reason to limit ourselves to logging just strings. A good library writer should be able to identify the bare minimum of constraints that make the library work — here the logging library's only requirement is that the log have monoidal properties._

If you take anything away from this (excellently written) article, I think it should be the above paragraph. All programming philosophies espouse creating reusable interfaces, but at least for me, the first time it really clicked and I started writing truly composable code, was when I started structuring my ideas in terms of categories and objects from abstract algebra.

It's one thing to write an interface that can act on any object that responds to a "foo" method. It's a completely different level of flexibility to support any object that behaves like a ring, or a monoid, or whatever other crazy mathematical formalizations you can come up with to describe your code. Once I made that connection, I started making fewer assumptions about my code, and as a result it's been less prone to edge cases, and magnitudes easier to test.

All of this with Ruby being my primary language, too. Fancy languages like Haskell help, but they're not a prerequisite for you incorporating these sorts of highly abstract concepts into your work.

<comment><USER3> Would love to see some examples of how you put these concepts into practice.

I'm familiar with the concept of duck typing and generic interfaces, but I'm not sure that's quite what you're getting at and I'm curious to see what an implementation of what you describe looks like.

<comment><USER4> My favourite example is probably CRDTs - commutative replicated data types ([http://pagesperso- systeme.lip6.fr/Marc.Shapiro/papers/RR-695...](http://pagesperso- systeme.lip6.fr/Marc.Shapiro/papers/RR-6956.pdf))

Some researchers a lot smarter than me realized that when you're dealing with distributed systems, you're able to reliably achieve eventual consistency by structuring your data as a CRDT.

The idea is that if operations on your data types are both commutative and idempotent, nodes in a distributed system are able to arbitrary leave and rejoin a network, possibly sending duplicate messages at any point, with eventual consistency still being maintained. Since it doesn't matter with what order operations on the data types are performed, and since performing an operation multiple times has no effect on the state, you're able to guarantee that all nodes will achieve the same state after applying all pending operations - regardless of the order they're performed in.

Given the idea of a CRDT then, we know that in designing data types with eventual consistency as a goal, we can gain a lot of power by ensuring that they uphold two properties: idempotence, and commutativity. By examining our needs for that data type further, we're able to build up as complicated a structure as required. Do we need an append-only datastore? That's a commutative, idempotent monoid.

Now you're able to go and implement a commutative, idempotent monoid in as naive a fashion as possible. If you ever need to optimize it or swap out a more complicated structure, you're guaranteed to end up with a system that has the same semantics, as long as that new implementation forms a commutative, idempotent monoid. As Tel mentioned in another comment, you also end up being able to draw upon all of the laws regarding that structure. It's like implementing an interface in Java, but instead of just knowing that the resulting object supports an "append" method, you also know that the resulting object follows all of the other laws that mathematicians have spent the past 4 billion years proving.

In practice, this line of thinking usually doesn't explicitly show up in my code, but it's definitely on my mind while I'm designing out new systems on a whiteboard. My coworkers might not understand a thing about abstract algebra, but that's okay! My goal isn't to fill our codebase with mathematical jargon, it's to build small, composable interfaces, that document their assumptions, and I've found that through this process I can do that.

Category theory is very much like UML in my opinion, in that its use lies in describing systems, rather than implementing them, and I feel like this is the reason so many people are able to proclaim its virtues, while at the same time struggling to point to a specific line of code, and being able to say: "This is why category theory is important!"

</comment></comment></comment><comment><USER5> Interesting claim that a discussion of Kleisli categories isn't the place to get into a discussion of monads, since they're identical.

I do think Kleisli categories are a better way to explain the benefit, though.</comment>


Have a physical address on your web site - <AUTHOR> http://adamprobolsky.com/have-a-physical-address-on-your-web-site/

<comment><USER2> > However buried in the contact section or in fine print at the bottom of the > screen, the address tells buyers that you are real.

Amazon.com is real, but for most people, their physical address isn't a matter of interest. They're a virtual store much more than a physical one.

> Even it is a post office box or executive suite, at least people can have > confidence that you exist in some place beyond the cloud.

Should I stop using Google because I don't see a physical address on their home page? The reliability of a modern business isn't realistically gauged by the existence of a physical address.</comment>