Why We Killed Off Code Reviews - <AUTHOR> http://eatcodeplay.com/why-we-killed-off-code-reviews/ <comment><USER2> 100% pairing might sound good in the short-term, but you're going to fry your developers. You'll also limit the productivity of your developers, who may be inclined to take more risks when working solo than when working as a team.

By eliminating code reviews, you've also limited the audience for some of the new discoveries, successes, and failures that developers will make.

I remember vividly the push for 100% pairing in 2000. It's a great idea for the short-term on well-defined, low-risk projects, but for anything spanning a longer period of time, it's a productivity-limitiing strategy that can burn out your devs, especially the more introverted ones.

All things in moderation, including pairing and code reviews.

<comment><USER2> One more thing- pairing is an active process, in the moment, while code review is reflective. During coding, you are exercising a lot of "instinctive" skills, and in a pairing environment, you are pressured to act.

Code review happens after the fact, and gives the developer and the team a chance to reflect on what was done and to use deeper, slower skills.

I'm well aware that our Twitter-fueled society is trying to eliminate reflection as a practice, but thoughtful reflection is a tremendous source of learning and growth. Removing reflection from the coding process limits the growth capabilities of the team.

<comment><USER3> I don't agree with your assertion. Code reviews are not more "reflective" than pairing.

PRs, as implemented by nearly everyone, are a failure. The only way to review a PR is to check out the branch and look at the entire context of the patch, not just the diff. For that matter, it requires the reviewer to _understand_ the code that is being changed. The reviewer needs to more or less independently solve the problem. It is possible to do this review after the fact, or while the code is being written - in either case, the same knowledge is required.

In practice, everywhere I've ever worked, "good enough" nearly always gets merged - slightly better methods don't tend to make it back into the PRs for a million reasons. These sorts of problems do get fixed with pairing.

</comment></comment></comment><comment><USER4> For me, if I was put in a 100% pairing environment, I'd resign instantly. 10% maybe. 20% of the time at a stretch. Any more, and I'd be out the door and never look back. I don't get how people can stand it other than (very) short stretches.

The times I've paired up have without fail been the most frustrating, maddening experiences of my career. I hate having someone looking over my shoulder, and I hate the pace being set by having to take someone else into consideration, and I hate having my schedule constrained by someone else.

Pretty much nothing could make putting up with that worth it for me.

<comment><USER5> You are correct that it's not for everyone.

And similarly, if I was told "we never pair here", I wouldn't sign up.

</comment></comment><comment><USER6> I'm glad that this article includes the downsides of pair programming. Not that I think pair programming is bad, I'm just old enough now to know that there is no one "true" way to program as every situation and person is different.

My group switched to it for about 6 months and then aborted it and went back to a code review work flow.

For us the downsides of pair programming were:

\- slowed down the velocity of the team. Alot fewer new features got implemented, with no perceivable gain in code quality, and as the person who lead the pair programming band wagon, I tried my best to show pair programming lead to better code. But in our case it didn't give us better code by any quantitative metric.

\- frustration for senior people when paired with juniors, ie too much sitting around and explaining instead of actual implementation. We found it better to let new people page in knowledge as needed on their own speed rather than making senior people wait while junior programmers got up to speed

To be honest we found the best bang for the buck was to have teams of 3-4 people who are working on a subsystem sit together in a big room, they'll do a very informal form of pairing when needed, which can happen for a couple of hours a day and then they'll go back to working on their own when they need to.

I think the biggest tell about how effective pair programming can be in the long run, is that it was introduced around 2000 with the extreme programming movement. In the past 15 years, how many software companies can you name that mandate pair programming for a period of say 3 or more years.

I'm sure there are some, but if the most successful companies don't mandate it then its worth examining why it isn't mandated.

Perhaps pair programming's sweet spot is the last month before a big software release, where quality is paramount, communication is even more important and the team is in full on polish and bug fixing mode?

<comment><USER7> > "To be honest we found the best bang for the buck was to have teams of 3-4 > people who are working on a subsystem sit together in a big room"

This. In my previous job the 5 person team of I was part of quietly took over an unused meeting room and had the most productive 3-4 week span that any of us had encountered in years. Part of it may have been that no one could find us, which caused people to complain and our manager finally forced us back to where we supposed to be. Productivity dropped instantly, but at least people could bother us with trivial, non-breaking IE7 bugs.

</comment></comment><comment><USER8> It's totally separate from the topic of efficiency gains or code reviews, but the idea of 100% pairing would take most of the enjoyment out of programming for me. Working in isolation (for the most part) to solve a hard problem and drive it to completion is incredibly satisfying. A lot of that goes away when you're working side by side.

You're never in "the zone" if you're pair programming.

<comment><AUTHOR> Yeah, it definitely isn't for everyone. I also love getting into the zone too, but also enjoy pairing.

The most rewarding part of pairing for me is probably the learning/teaching dynamic.

<comment><USER9> > The most rewarding part of pairing for me is probably the learning/teaching > dynamic.

That can also happen during code review. Granted, it's asynchronous, but that might be seen as a boon by some -- especially if there's a language barrier.

You have to do code review _right_ , i.e. a) no judgement of the person, b) no friggin' code review in-person _meetings_ (!), and c) must be automated via some system (e.g. Gerrit), and d) the reviewer must also be willing to yield on non-critical issues (such as minor formatting, naming, etc.). Ultimately you also need a team technical lead to make the call in case of unresolvable disputes. (If the lead's code is being reviewed then it behooves them to reason convincingly for their own position, concede when shown wrong and try to remain as impartial as possible. IME as a team lead, admitting when you're wrong is an incredible way to build trust.)

</comment></comment></comment><comment><USER10> I can't do pair programming for anything remotely complex. Being in a pair prevents me from getting in the zone to reason about the architecture and flow of things. Without this perspective the end result is almost guaranteed to be more complex and buggy than it would've been had I taken the time to deeply think about how to approach it all.

I can't imagine doing my current task (rewriting a job system for a custom AAA game engine) with someone next to me I've got to interact with all the time.

This image explains it perfectly: [http://9gag.com/gag/av0z0Bn/this-is-why- you-shouldn-t-interr...](http://9gag.com/gag/av0z0Bn/this-is-why-you-shouldn- t-interrupt-a-programmer)

However, for easy tasks or when mentoring a junior developer through an assignment, pair programming works really well!

</comment><comment><USER11> So their main argument seems to be that pair programming somehow has less overhead than PRs? I personally don't see how that is possible. Or if it really is, how much less overhead can it be?

I like pair programming, but it's still only two people. Committing straight to master without anyone other than those two people seeing the code is crazy to me.

To me the point behind PR driven workflow is more so visibility than reviews. Just being able to see code and catch it before it's committed to master is the biggest gain.

<comment><USER12> [I'm at RealScout.] Our pairs rotate, and they work across different stories in the same epic. So more than two people (on our four person team) see the code that's being committed.

<comment><USER11> At this point, how does this not count as "code reviews"? You may not be using a PR based workflow, but it sure sounds like code reviews are in fact happening beyond simply "pair programming".

Not only is the blog title a little inaccurate, it's also clickbait.

<comment><USER5> Code reviews, traditionally, are a much more formal affair.

"Rotating pairs" means that you frequently change one half of the pair on a story or epic, to ensure constant diffusion of context about a codebase.

So for example:

Day 1: A & B work on a story.

Day 2: A rotates off. B & C work on the story and complete it. They pick up another story from the same track.

Day 3: B rotates off. C & A work on the new story.

At each point, you preserve and then share context.

</comment></comment></comment></comment><comment><USER13> I would literally change careers before I worked at a place that pair programs.

<comment><USER14> Maybe you could literally explain why?

<comment><USER15> Personally, it would be utterly exhausting mentally. There's a reason I picked this career and I enjoy the work I do. It's the ability to go toe to toe with the code and prove yourself without having somebody second guess you or ask too many questions.

I like meetings, I like presentations, but having a person beside me 8 hours a day would drive me insane.

</comment></comment></comment><comment><USER16> One problem which will be encountered is eventually people stop learning new things from their peers, and productivity will plateau. The second chair being bored because all they are doing is double checking what the first person typed, while the first chair will be frustrated by the interruptions of "you forgot a comma there".

Pair programming is great as a teaching and onboarding tool, but its benefits plateau.

<comment><USER5> I feel like you're refuting a strawpair. This doesn't resemble my experience at all.

<comment><USER16> I'm relating my experience working in a pair-programming fashion with co- workers. I have talked to others (and seen articles on this very site) which re-enforce my experiences as the norm.

As with all things, individual experience will vary, but this doesn't seem to be a case where the collective experience is positive once the knowledge transfer between pairs plateaus.

<comment><USER5> My experience has been very different.

</comment></comment></comment></comment><comment><USER17> This seems to be much more about pair programming than killing off code reviews. Yes, they eliminated code reviews, but even with pair programming, that isn't necessary. They are not opposites. One can still use feature branches with or without code review and do pair programming. I'd be interested to know if not branching led to any problems for the other teams and/or releases. Creating a branch with modern version control systems like git is a snap, so even if you're not going to do a code review, it still seems like a great idea to me, while committing directly to master does not seem to have any advantage whatsoever.

<comment><USER5> Working from master is partly related, because they dropped the PR-based workflow in favour of pairing.

At Pivotal Labs we use branches, but sparingly. We commit to master because we test-drive all our code. Tests are written, tests fail, code is written, tests pass, code is refactored, tests pass. Pull from master, resolve merges, run full suite, push if it passes, fix if it doesn't.

The onus is always on the pushing pair to ensure that they don't break master.

When you go off into long-running feature branches, additional work is required to integrate your changes -- so in practice it doesn't happen. You get a hidden cartesian join of different versions of the software, which makes integration testing substantially more difficult as schedule pressure builds up.

We keep the coordination cost down by simply disallowing divergence in the first place. Branches are reserved for WIPs and spikes.

</comment></comment><comment><USER18> The biggest problem I see with this is that your not really getting a second pair of eyes when you pair program. You _almost_ get second eyes. Even if the person with you is 100% engaged the entire time, you end up syncing your thought patterns.

For example, I once worked with a teammate for 9 hours to write and debug a physics system. After all that time solving the problem with him, I was solving the problem like him. We ended up writing this 900-line solution to our simulation that kinda worked right most of the time.

I went home and laid down for 30 mins. During that mental reset, my mind turned to solving the problem with my method of thought. I ended up sitting up and grabbing my laptop and replacing all that code with a 30-line solution that worked 100% of the time.

Code review allows someone to come at a problem with a different perspective to find issues, not more of the same perspective.

</comment><comment><USER19> Sounds like they are betting on a few fast pipelines instead of several robust ones. With pair programming the speed of mutation is also halved which means the benefit of feature branches decreases (i.e. it is actually statistically less likely that the CI fails per unit of time).

I usually pair program when the work benefits from two noggins working on a problem. I.e. team up when the situation needs it. I've never understood forced pair programming. Information diffusion mechanisms which lack archivability and discoverability (i.e. wikis) sound fragile to me. As for accountability ... source control submits are fairly discoverable.

Intuitively, this sounds analogous to a situation of fast prototyping versus working on an established production code base - in the former you want to progress and iterate fast, in the latter you want to progress profitably by being damn careful.

</comment><comment><USER20> Anyone else feel like pair programming is orthogonal to code review? Is the argument here that your pair partner is effectively always reviewing your code and vise versa? This has not been my experience.

Code review is more than just another pair of eyes. Its a place for someone with an outside perspective to start a discussion with you about some things that you might have missed. A pair programming partner will have missed exactly the same things you did while you were both neck deep in implementing the feature. You NEED the outside perspective to have a good review.

</comment><comment><USER21> Pull requests aren't the only way to do code review.

> Gerrit simplifies Git based project maintainership by permitting any > authorized user to submit changes to the master Git repository, rather than > requiring all approved changes to be merged in by hand by the project > maintainer. This functionality enables a more centralized usage of Git.

[https://code.google.com/p/gerrit/](https://code.google.com/p/gerrit/)

<comment><USER22> In my group we actually go old school, sit around at a table with printouts for a lot of things (not the trivial stuff). It gets a lot of raised eyebrows from other groups in the company and I was skeptical when I joined but I've come to really appreciate it.

I've found two things happening:

1) People are often more engaged in the actual review than in other groups I've been in which are doing online reviews. And here I'm talking more about a back and forth and not necessarily "everyone says their one thing". Because of this, I believe our group's thinking of stuff has evolved more rapidly than it otherwise would have. Which leads me to ...

2) It's been better for ramping new members up to speed as it's a great place for them to ask questions, not to mention listen in to the debates happening.

I hadn't done an old style code review like that for at least 10 years, but I have to say that I've enjoyed it.

</comment></comment><comment><USER23> All I see is

> This is a modern website which will require Javascript to work. > Please > turn it on!

That is simply not acceptable and is both poor etiquette and bad practice.

</comment><comment><USER24> Very confused/silly piece. Using versus not using code reviews, pair versus individual progamming and using feature branches/merges versus commiting directly to main/trunk are all independent process choices. I've experienced 5 of the 8 permutations as "official dev processes" and the rest for short (one/two day) periods temporarily during projects.

</comment><comment><USER5> For all those saying "pair programming doesn't work", or "it only works for X, but not for Y", I personally invite you to come visit Pivotal Labs.

My work email is email@example.com, email me and I'll set up a visit any time you like. I'm in the NYC office. We could probably arrange visits in any of our other offices, especially the "mothership" in SF.

</comment><comment><USER25> You mention one brightside is less context switching. But, I find that context switching to code review is important. Give me a 30 minute break or another feature and I'll find a number of issues in my own code.

</comment><comment><USER26> Are there any places at RealScout where you think this approach might not work? Trying to understand the situations in which you would make an exception to not apply this policy now that you have tried it.

<comment><AUTHOR> One example happened last week when we upgraded our mocking library from rr to rspec 3. We didn't pair for that since it was just rote syntax changes.

</comment></comment><comment><USER27> Could anyone at RealScout comment on why you started committing directly to master? This point seemed under-examined in your blog post, despite being a very unconventional git strategy.

<comment><USER28> We don't commit directly master. We have a master branch and a dev branch. We commit directly to dev, and when we are ready to push to production with cut from dev and merge into master, then push master to prod. Pushing directly to dev keeps our repos up to date, and keeps us honest with our commits. As long as you are always pushing green tests, you can be confident in your work, and so can your team.

</comment></comment><comment><USER29> With disabled JS, this site is empty.

Why?!

<comment><USER30> If you disable CSS you can read the text. This works on many sites that refuse to load without JS.

<comment><USER31> Neat trick. I'm going to remember this.

<comment><USER32> This will work for sites where the text is there in the page on load, but hidden with CSS until some point when JavaScript removes the class doing the hiding - perhaps after an animation has been triggered, or fonts have been loaded, or some other random event you quite possibly don't care about but someone else thought was important (sometimes the so-called "FOUC" or "Flash Of Unstyled Content" is fixed in this way).

However, turning off CSS in order to thwart these sites won't work at all for cases where the actual content itself is pulled in with JavaScript, eg. anything built with Meteor.

</comment></comment></comment></comment><comment><USER33> The argument about not taking shortcuts sounds silly. Shortcuts will get picked up in CR, usually. I'll admit that tests are much harder to review effectively.

</comment><comment><USER34> Unrelated, but what kind of website refuses to load if gravatar does not load????

Who needs gravatar? Certainly not needed just to display a page.

</comment><comment><USER35> So you didn't kill off code reviews at all. You changed them from the PR git flow to pair programming.

</comment><comment><USER36> Like the industry needs more hipsters.

<comment><USER28> Definitely hipsters. We love being hipsters.</comment></comment>


Why the Library of Congress is wrong to archive Twitter - <AUTHOR> http://scripting.com/stories/2012/07/17/whyTheLocArchivingTwitterI.html <comment><USER2> LoC archives Twitter because only LoC _can_ archive Twitter. Other projects, notably the Internet Archive, already archive open web sites including blogs. But IA doesn't have a hope of archiving Twitter. LoC arranged this because if they didn't, no one would have a Twitter archive.

<comment><USER3> I think LoC has partnered with the Internet Archive in the past, but now they're planning a much more ambitious version at <http://www.netpreserve.org/about/index.php>

LoC is actually relatively forward-thinking when it comes to digital archiving. For example, for a while now they've been encouraging people to digitize archives of their own personal data: <http://www.digitalpreservation.gov/personalarchiving/>

</comment></comment><comment><USER4> Who says the Library of Congress isn't archiving the open web?

<http://www.loc.gov/webarchiving/faq.html>

Specifically, it states:

 _The types of sites archived include, but are not limited to: United States government (federal, state, district, local), foreign government, candidates for political office, political commentary, political parties, media, religious organizations, support groups, tributes and memorials, advocacy groups, educational and research institutions, creative expressions (cartoons, poetry, etc.), and blogs._

<comment><USER5> Did you miss the note?

[http://scripting.com/stories/2012/07/17/whyTheLocArchivingTw...](http://scripting.com/stories/2012/07/17/whyTheLocArchivingTwitterI.html)

"(Note: I mean bloggers. The equivalent content that's on Twitter, but not in a corporate blogging silo.)"

<comment><USER6> Did you miss the last word of his quote?

<comment><USER5> No I didn't. But I also noted it was the last word. :-)

<comment><USER6> So your complaint is not that they don't archive blogs, but that they don't list it first among that which they archive?

<comment><USER5> I wrote a blog post that explains my point of view, it's linked to at the beginning of this thread.

<comment><USER6> And as esonderegger pointed out, your second point is incorrect. I also think your second point is the crux of your points; that is, everything you said assumes that the Library of Congress favors Twitter over blogs. How does that change your point of view?

<comment><USER5> Okay you're making an editorial/legal objection, you'd like me to find a way to merge the note in with the first part. Consider it done.

We need a new acronym to go with IANAL, something like TIJABP -- This Is Just A Blog Post.

<http://scripting.com/stories/2012/07/18/tijabp.html>

<comment><USER6> Considering how important you think blogging is, I'm surprised you don't feel the same about the quality of the content.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> All of his arguments boil down to "open web good, twitter bad, ergo LoC shouldn't archive twitter".

<comment><USER8> Disingenuous.

He said "twitter private, Library of Congress public. Public preference to one of several private corps not in public interest, especially when there is a larger, more archive-worthy corpus that doesn't require private APIs or vendor discrimination".

Which part of that do you disagree with?

<comment><USER9> I would assume they would want to do both. The advantage to using Twitter is it copy's a wider range of conversation AND it's easy. Set it up and add some server-space and be done with it, where to even start on blogs would require 10x the effort and even more space.

</comment></comment></comment><comment><USER10> I think the advantage Twitter gets from being archived is greatly overestimated here. How many people actually consider that when they decide to sign up for Twitter? I'm also skeptical that Twitter is an alternative to a traditional blog. The 140 character limit doesn't really let you replace a blog if that's what you want to do. I think most people who want to blog would have a blog in addition to Twitter. Likewise, people on Twitter who don't have a blog, probably just wouldn't publish anything at all in the absence of Twitter, so it's a net gain in that respect.

Finally, Twitter does have a corporate API, isn't most of it accessible through the open web any way? Any user's profile can be accessed through the website unless they've specifically restricted it.

And generally, I don't see the point in NOT archiving something if you can. Sure it's fine to argue that other things should be archived first, but if someone is going to archive something, why stop them? We only gain by having a more complete and accurate historical record.

</comment><comment><USER11> Tweets can detail events of local, national and global importance which may only have value in hindsight. To risk losing a stream of tweets regarding a milestone event because you don't like Twitter's API policy seems quite small sighted.

99.9999% of what comes through twitter is wasted bits. I still see value in archiving it all to guarantee capturing a real time log of an historic election, the death of a notable person, the announcement of a major discovery, or the day to day thoughts during a protest or revolution.

We have 19th century diaries detailing a rector's daily meals for his entire adult life while we have recovered nearly nothing regarding the poor living in slums in London, except through the distant scornful commentary of the gentry.

The LoC shouldn't be endorsing Twitter as a company, but the users of Twitter have endorsed it by logging the course of human events.

</comment><comment><USER5> I posted a follow-up to this piece.

[http://scripting.com/stories/2012/07/20/moreOnLocAndTwitter....](http://scripting.com/stories/2012/07/20/moreOnLocAndTwitter.html)

Dave

</comment><comment><USER12> I always thought this was just a publicity stunt orchestrated by Twitter.

</comment><comment><USER13> And the NSA is archiving Twitter and everything else.

</comment><comment><USER14> I don't really get it. LoC also archives commercial content that was, at some point, closed off to non-payers.

As for why Twitter and not your average blogger...well...because there's a specific endpoint to get all the tweets, each of which is a discrete, well- defined object. Finding all the blogs on the Internet is likely not as easy.

</comment><comment><USER15> Core assumption is there is some business advantage in having LoC archive. Not sure I agree.

Much more fun is to use an analogy. LoC will arbitrarily by their own high level decision only and exclusively archive ABC TV shows, NBC, CBS, etc, too bad. Or perhaps if they only archived Ford corporate materials and ignore GM and all others.

<comment><USER5> Well there certainly is a business advantage. Or why would Twitter have done it, and done a big rollout of the deal (I believe it was at SXSW). It was a huge publicity bonanza, the message was that Twitter is Historic. Don't believe us, believe the Library of Congress. They didn't do it out of altruism, they did it because it was excellent publicity. (Probably the LOC did it for that reason too.)

And we have a say in this in the US, since we pay for the LOC.

<comment><USER16> _Well there certainly is a business advantage. Or why would Twitter have done it, and done a big rollout of the deal_

You cannot assume companies always act logically. In this case they could have agreed to it just because it was "cool".

 _They didn't do it out of altruism, they did it because it was excellent publicity._

This is probably accurate, but it doesn't give them a long term advantage. It probably gave them a small boost in marketing (I say small because I have never heard about this). Marketing doesn't hold up without investment. (for those of you who say iconic brands will hold up, keep in mind that every iconic brand advertises constantly.)

Further, the government arbitrarily "subsidizes" businesses constantly. In many cases much more so than Twitter. I agree that any subsidy (whether monetary or otherwise) should be examined, but in this case it seems to be a complete nonissue to me.

<comment><USER5> >>the government arbitrarily "subsidizes" businesses constantly

And people object to it constantly.</comment></comment></comment></comment>


Building a virtual human with your data - <AUTHOR> http://www.bbc.co.uk/news/technology-27536599

<comment><AUTHOR> Some additional info about a virtual heart here too: [http://www.sth.nhs.uk/news/news?action=view&newsID=610](http://www.sth.nhs.uk/news/news?action=view&newsID=610)</comment>


Emacs version manager – alpha - <AUTHOR> https://github.com/argentum47/everm <comment><USER2> If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

<comment><AUTHOR> ok, thanks for suggesting, didn't know this. :)</comment></comment>


Bus errors, core dumps, and binaries on NFS (2018) - <AUTHOR> https://rachelbythebay.com/w/2018/03/15/core/ <comment><USER2> Reminds me of the differences between `cp` and `install` for putting .so files in place.

`install` basically results in a new inode allowing for processes to keep a handle on the old version of the .so

`cp` copies the content over the old content, keeping the same inode. Now applications that had that .so open won't be happy.

<comment><USER3> Binaries are probably not mapped with MAP_SHARED, but I checked the mmap manual for MAP_PRIVATE and read: "It is unspecified whether changes made to the file after the mmap() call are visible in the mapped region."

I learn something everyday...

</comment></comment><comment><USER4> This can also occur when memory mapping a file on Linux, which is similarish to the NFS issue. If you truncate a file that you've already memory mapped and the OS tries to read past the truncated part, you get SIGBUS.

<comment><USER5> Wanted to comment the same. When I first learned about memory mapping I went "mmap() all the things!!" since it's so much easier than reads and writes all the time, checking for short reads, aligning the pointer and calling read again, handling EINTR, you name it.

But at least you do get proper error codes that you can handle in a somewhat sane way.

A read our write error for an mmapped file? SIGBUS, game over. Want to handle it? Use a signal handler for SIGBUS, use setjmp before every access to your mmapped region and longmp back from your signal handler. And you thought handling all the failure modes of read/write was ugly.

Use mmap if you absolutely need the performance. Otherwise just don't.

<comment><USER6> Back almost 20 years ago, I worked on a medium-sized system - 1000's of simultaneous users, millions in $USD transactions daily - that was based on an mmap'ed flat file "database." It worked amazingly well. (Note that we did none of that sort of error handling!)

<comment><USER7> Yes, the first time I saw this described was in 1987 in a paper by A. Birrell, et. al. See [1]. It was also available as a DEC SRC report, number 24.

[1] A simple and efficient implementation of a small database, [https://dl.acm.org/doi/abs/10.1145/37499.37517?download=true](https://dl.acm.org/doi/abs/10.1145/37499.37517?download=true)

</comment></comment></comment></comment><comment><USER8> The lack of posix semantics when unlinking on NFS rears its ugly head in many more places. For example the common atomic write pattern that allows readers to keep reading a stale copy doesn't work anymore (you get ESTALE on IO or SIGBUS if it's mmaped) which means anything involving a frequently replaced file will require more workarounds than on any other filesystem.

<comment><USER9> Isn't that what "silly rename" (on nfsv3, v4 doesn't need it?) is supposed to fix?

The problem the article mentions is overwritin a binary instead of renaming.

<comment><USER8> The article is about the atomic write pattern: create tempfile, move tempfile over original which effectively is an unlink of the original.

And yes, this should be solved, but some NFS servers don't support it, e.g. AWS's EFS.

</comment></comment></comment><comment><USER10> In my experience, you're better off avoiding NFS as much as possible. (Perhaps except when you're sharing a filesystem between VMs on the same machine.) Try something else, perhaps rsync, unless you know what you're doing. NFS over a VPN -- probably in for a rough ride.

In NFS, you can set mounts as 'hard' or 'soft'. If hard, errors will get you stuck until the share is back. You probably don't want that. If soft, you're slightly better off, but remember that the retry settings are all per-mount, and perhaps one size doesn't fit all.

As far as I know, when NFS goes awry, you get the same or similar behavior to a hypothetical HDD/SDD that just explicably decided to no longer do anything for a while. Your processes will be in a D state and won't be killable for a potentially long time.

<comment><USER11> When I worked in BBN R&D back in the day, we used lots of NFS on a very large fragile LAN built from 10-base-2, plus some sketchy AppleTalk hardware in a closet somewhere nearby.

Every now and then I'd know someone was in the closet because my transceiver's light would peg and NFS was locked up. Someone had once again bumped the AppleTalk router.</comment></comment>


PostgreSQL Accessing MySQL as a Data Source Using mysqsl_fdw - <AUTHOR> https://www.percona.com/blog/2018/08/24/postgresql-accessing-mysql-as-a-data-source-using-mysqsl_fdw/ <comment><USER2> This feature is the sort of thing that a clever person will use as a shortcut to actually writing robust ETL code. I have had nothing but nightmares dealing with foreign data wrappers in Postgres.

The caveats using this feature -

1/ Strict upper bound on how much data it can pull in.

2/ MySQL migrations need to be run on both Postgres and MySQL

3/ No way to gracefully migrate or version

4/ MySQL's "loose" typing doesn't play well with Postgres's "strict" typing. This means data can break the fdw.

5/ Pain in the ass to debug.

6/ This is debatable, but I don't believe that application code (SQL code in this case) should live in the database.

7/ Postgres and MySQL have different performance characteristics. This can lead to hard-to-debug performance problems if you are explicitly or implicitly using a fdw in your query.

8/ If you want to keep a local copy of MySQL data in Postgres (to solve for #7) you then have to write code to keep it up to date. This defeats the convenience of the fdw.

9/ At least when I was using fdws, they didn't have predicate pushdown. This causes you to do structure queries in a weird way to get filters to work as you expect.

10/ You have to manage schema type mismatch between MySQL and Postgres. This isn't fun or productive work.

My experience is colored by inheriting a disaster of interconnected fdws. But given that negative bias, I still haven't seen enough value from fdws to justify their use outside of small scale corner cutting.

<comment><USER3> FDWs can be incredibly useful in the case of needing database-level, low- latency access to a reasonably small amount of data managed on another server, and you don't want or cannot spend the time to write "proper" ETL code.

</comment></comment><comment><USER4> I've used the mysql FDW for a project at work, it was really helpfull. We've replaced an old "ETL" using a bunch of hard to maintain scripts to mysql_fdw and some materialized view.

It was easier for us because it helps write maintainable logic, you can easily sync multiple databases, multiple servers, without much changes.

A few things to note though:

\- we had issues with 0000-00-00 dates that are valid in mysql but not in postgres. So we had to write include a convertion in plsql into the mat view.

\- We stumble upon a bug in mysql_fdw, in which the selected row is skipped if the size of a column exceed a given size. This is reaaaaally hard to catch and really bad experience as you won't get any error, notice or warning.

\- we had trouble with a few type casting like json and others.

</comment><comment><USER5> I once used FDW to synchronize Microsoft SQL server DB with PostreSQL, after setting up, It was just a matter of a single UPDATE to sync quite complex data across systems. It isn't a perfect way, but given there was no public interface in MS SQL backed application it was a pretty effective solution.

</comment><comment><USER6> Services should be communicating through public interfaces, not databases. Otherwise you're confusing implementation details with public interfaces and change becomes really hard and risky.

I can see this being useful in some legacy system that you have to maintain that is not changing anymore, but otherwise I don't see a good use for it for properly designed and new projects.

<comment><USER7> Suppose we want to run a complex reporting query on tables in Sales database (running MySQL) and Finance database (running PostgreSQL). What is the good option without duplicating data from one system to another?

<comment><USER8> ETL, that way you can also ensure your data gets put in a format that'd make it easy to report on.

Granted, it's not quite as quick as this, and not suited for "one-off" reporting, but it's a lot more flexible. Put things in a nice star schema and you have a good way to do analytics on your data.

</comment></comment></comment><comment><USER9> This is great in fact. I like the idea how it can be used to avoid data duplication.

<comment><USER10> I'd rather data duplication than coupling two different database servers

</comment></comment><comment><USER11> Great article.

</comment><comment><USER12> Couldn't get this to work for large tuples

<comment><USER13> Do you have sample sql script and paste what error you are getting?

<comment><USER12> It's been a year let me get one.

</comment></comment></comment><comment><USER7> PostgreSQL and MySQL are the most popular database systems. Yes, they can talk and share data using mysql_fdw</comment>


SEO advice for bootstrapped startups - <AUTHOR> http://sharkseo.com/nohat/startups/

<comment><USER2> "Do not rely on SEO to market your product" Couldn't agree more. A good marketing strategy requires diversity of channels. Naturally, unless you have a full-time person working on marketing, you will have to make sacrifices, but relying on just one channel is really going to hurt your business.

"Add a free feature which is accessible, useful, and spreads virally. It can create a stream of links and mentions that quickly replaces an ad budget."

Aaron Wall makes a great point here. Creating the feature or resource is often a lot of work upfront, but over time it will turn into a better investment than churning out blog posts (that doesn't mean you shouldn't be blogging or creating content in some other form, though).

</comment><comment><USER3> Great advice all around here - personally I'm a big fan of not "doing" seo but instead just making sure things are running in an SEO friendly manner.</comment>


Why should I make Android games? - <AUTHOR> http://p-xr.com/why-should-i-make-android-games/ <comment><USER2> As for the moment, the iPhone is still the main mobile gaming platform out there.

That said, Android market share might tip the scales at some point.

</comment><comment><USER3> Does anyone have any good resources for <http://www.andengine.org/> ?

Or does anyone know of another good 2D game engine for Android?

<comment><USER4> I think Andengine is lacking a bit in the documentation department. You might be better off working through some of the sample applications provided.

<comment><USER4> Libgdx is also another option you might want to consider.</comment></comment></comment>


My Tumblr is out of whack and I need your help to fix it. - <AUTHOR>

Here's the story. I have a Tumblr account with two blogs attached to the same account, and I don't use one of the blogs. It just so happens, the blog I don't use is also the primarily blog. With all their millions in funding, Tumblr currently does not allow me to delete the primarily blog without completely nuking the account. This setup creates a major inconvenience since whenever people follow me, they follow the primary account which does not actually blog anything!
So far I was unable to solve this problem in a reasonable way. http://kirillzubovsky.tumblr.com is the account I actually use, and attentionhr.tumblr.com is the one that is the primary. I have a redirect from the latter to the former, but that only visually reminds the user that one is actually the active account.
Does anyone know a way to maybe use Tumblr API to seamlessly port one blog into the other, and then change names/settings? Do you have any other ideas? Anything goes!
Thanks folks! <comment><USER2> Have you tried emailing them? They don't have a way to let you do it but might be able to do it manually. And either way you let them know that there is a desire for a feature they're not going to magically know about just because they have funding.

<comment><AUTHOR> Oh yea, I emailed them. The response was literally "We are sorry, but this feature is not currently supported ... [after a few more email] ... and most likely not going to be supported in the foreseeable future."</comment></comment>


Small Introduction to Markov Chains - <AUTHOR> http://blog.circuitsofimagination.com/2015/02/15/Markov-Chains.html

<comment><USER2> I like the visualization vicapow did on Markov chains a while ago as well.

"Markov chains explained visually": [http://setosa.io/blog/2014/07/26/markov- chains/](http://setosa.io/blog/2014/07/26/markov-chains/)

</comment><comment><USER3> That is a great intro. Thanks for putting it together. If you were to continue this to a Part #2, I would be interested in seeing the approach for determining if something was "abnormal". Is it considered abnormal to add a node to the chain, or to add a transition? Is detecting abnormal behavior more complicated than detecting new nodes or transitions?

<comment><AUTHOR> Abnormal really means that it has a probability less than some threshold. So you might have a transition that has a probability of less then 0.1, depending on your situation, you might consider that abnormal even thought that transition does exist. Also a non existent transition would be considered "abnormal" because the probability is 0 in your model.

I've been thinking about doing a part 2 with text analysis and a cool use case would be to detect "abnormal" text from an author because he/she uses strings of words that have a low probability in the rest of their text.

Hope this helps and I'm glad you like the post.

<comment><USER3> Thanks for the response. Yours is the clearest intro to Markov Chains that I have found.

</comment></comment></comment><comment><USER4> Awesome intro! I've used Markov Chain libraries before but never took the time to try and understand them. This makes a lot of sense.

Are there different or more efficient probability calculations that can be done other than the provided algorithm? It seems somewhat simple.

<comment><AUTHOR> Yes there are more complex probabilities that you can calculate. For example you can calculate the probability of reaching some state that is one or more transitions away given a starting state. You can find more info on some of other calculations you can do on Wikipedia.

</comment></comment><comment><USER5> damn, that's some tiny <pre> font-size.

<comment><USER6> Agree.</comment></comment>


What Is The Most Valuable Programming Language To Know For The Future And Why? - <AUTHOR> http://www.forbes.com/sites/quora/2014/07/14/what-is-the-most-valuable-programming-language-to-know-for-the-future-and-why/3/ <comment><USER2> Again (same article, same question) from a 2 weeks ago.

Well, and then it is go from google, also known as golang.

</comment><comment><USER3> TL;DR: Gartner predicts Javascript.

Gartner. Others disagree.</comment>


Ask HN: For those that have experienced it, how did ayahuasca change you? - <AUTHOR> Going to the Andes for a retreat at the end of this week. I felt the Call and all the logistics just fell into place. The center I am going to needs my help for a few tech-related things, so we worked out a way for me to go for only $400. This center also has some of the highest reviews on Ayaadvisors  and Retreat.Guru. I feel good about the shamans, the accommodations, the facilitators, and the setting. <comment><USER2> I don't know how the Hacker News community is open to those substances. But I certainly can recommend this very interesting article about psilocybin and other psychedelic drugs: [https://www.newyorker.com/magazine/2015/02/09/trip- treatment](https://www.newyorker.com/magazine/2015/02/09/trip-treatment). I found the article to be very rational without being to much esoteric (which I dislike, there is too much pseudo-science in this world...)

The good news is that in the recent years, research process has never been easier with FDA and DEA. I expect the next years to be a huge leap in that domain. From what I read, it is remarkably helpful for people with terminal diseases (psilocybin helps reduce death fear). People are far more spiritual after that.

I think subconscious side of our brain is highly underrated and our society may benefits from that greater knowledge.

I know almost nothing about Ayahuasca but I guess the most important part is not the fact you took the substance but mostly the search process behind and the preparation you had.

I had a good experience with psilocybin and one thing I realized is that when the timing is right (you feel it generally), I don't have to worry about any bad symptoms (paranoia, anxiety etc).

I wish you luck but always be aware of the risks.

</comment><comment><USER3> Worthwhile understanding the stigma and correction of it wrt psychedelics. [https://www.youtube.com/watch?v=TazyFTavMyA](https://www.youtube.com/watch?v=TazyFTavMyA)</comment>


Ask HN: Should I put my startup info in the CV while applying at a bigco? - <AUTHOR>

I'm soon (new college graduate) going to found a startup with a friend of mine + two advisors. I'm planing to apply at a few tech bigcos in the upcoming college recruiting season (personal/financial reasons). Would it be wise to my put my "stealth" startup info in the CV?
If I put it:
Pros: Oh you're an entrepreneur!
Cons: We are not sure about your intentions.. <comment><USER2> Absolutely depends on how you present it. If you put down what you did, what problems you solved, what you accomplished (use lots of verbs and don't start with "I": ie Developed database accessed by other 1000 users, or Developed mobile application for user sign-ups using JS for cross-platform compatibility).

If you put down "Founded a startup with friends and we are currently in stealth mode" then no company will wantto take you on as they (and you) do not know where you will be in 6 months.

The first is past accomplishments applicable to the position offered. The second is a currently active status that says you are maybe unavailable.

Also, you will want to be very careful about which company you apply to and how they treat your offtime accomplishments. Some look to take a piece of all that you develop.

</comment><comment><USER3> If its in stealth mode and there is nothing for them to so, then I would hesitate. Are you planning on continuing with the startup after getting hired? That is the risk that they will see.

If the startup will be over by then, I would put it on the resume, but if you plan on continuing to work on it, then I would not put it on. If you plan to continue with it, you will need to be very careful with the IP ownership. If you have to sign an employee agreement, there is normally a place to list prior inventions/IP that are yours and that they can lay no claim on.

</comment><comment><USER4> I wound't mention it at all if i were you. Would you hire someone who is very likely to leave soon ?

<comment><AUTHOR> Very good point and this sums up my mind. Thanks!

</comment></comment><comment><USER5> Just be aware that in my experience, companies really want to know what you're planning to do. It seems very likely to come up in the interview.

That's not to say you shouldn't put it, but have a good answer for them that doesn't paint them as a total backup option.

</comment><comment><USER6> Pros: You are an entrepreneur, cool.

Pros: "Cool idea, let us fund you"

Pros: You make money while you make money working

Cons: You could reach a point where you will have to decide which direction take. Oh, wait. Is this a cons?

</comment><comment><USER7> I think that having an employee who is also a startup founder is a big risk. It _feels_ like you might be flaky, disobedient, and all-round difficult to manage.

</comment><comment><USER8> I think it depends on the type of company. Some big companies dont like it and others promote it. Like everything in life "it depends" is the best answer.

<comment><AUTHOR> Absolutely, the bigcos (not Google) I'll be applying at probably won't appreciate my extra-curricular activities..

</comment></comment><comment><USER9> Probably say you're working on projects that do this or that, don't need to say it's a startup, could be an open source project, who knows.

<comment><USER10> Agreed. Working on projects on your own time isn't threatening, and show initiative.

Working on a startup on your own time says you're a short-timer and they shouldn't hire you.</comment></comment>


Contest: Hack our security, win a MacBook - <AUTHOR> https://www.inversoft.com/guides/2016-guide-to-user-data-security <comment><USER2> Dang - that thing is intense. May have to take an evening to get through it.

Could you put this in an eBook format?

</comment><comment><AUTHOR> Help us test our security. First person who can breach our security wins a new 15" fully loaded MacBook Pro.

[https://hackthis.inversoft.com](https://hackthis.inversoft.com)

<comment><USER2> Haswell or Skylake? It isn't an old one is it?

<comment><AUTHOR> Whatever you want baby

</comment></comment></comment><comment><USER2> Any specific reason you guys chose MySQL over PostgreSQL or Oracle?

<comment><AUTHOR> We use MySQL internally.

</comment></comment><comment><USER3> Who doesn't want a MacBook!?

<comment><USER2> A gamer? :-)</comment></comment>


Catalan Regional Parliament Approves Plan for Independence from Spain - <AUTHOR> http://www.npr.org/sections/thetwo-way/2015/11/09/455306476/catalan-regional-parliament-approves-plan-for-independence-from-spain <comment><USER2> [https://news.ycombinator.com/item?id=10534571](https://news.ycombinator.com/item?id=10534571)</comment>


Digital Garage acquires EdgeCase - <AUTHOR> http://edgecase.com/newcontext

<comment><USER2> Congrats! Looking forward to seeing more great things from your new company!

</comment><comment><USER3> Woot! Congratulations, good things to come!

</comment><comment><USER4> Excited for what's to come.

</comment><comment><USER5> Congrats EdgeCase!</comment>


How to choose special characters, revisited - <AUTHOR> https://www.datafix.com.au/BASHing/2019-03-24.html <comment><USER2> There's graphical tools that will help you select special characters; however, they're not automated, as you're doing it.

Debian-based: _sudo apt-get install gucharmap_

For Windows: _Windows Button + R -- > charmap --> Enter_</comment>


We're Not as Open-Minded as We Think We Are - <AUTHOR> http://lifehacker.com/were-not-as-open-minded-as-we-think-you-are-1759787196 <comment><USER2> they discuss open-mindedness in the context of current american politics -- virtually impossible. outrage drives viewership and revenue, so the outlets peddle extremities and political division.</comment>


Flyte: A Cloud Native Machine Learning and Data Processing Platform - <AUTHOR> https://eng.lyft.com/introducing-flyte-cloud-native-machine-learning-and-data-processing-platform-fb2bb3046a59 <comment><USER2> How does this differ from Airflow? [https://airflow.apache.org/](https://airflow.apache.org/)

Looking at the docs for both, Flyte has similar functionality to Airflow, except less mature and a more functional Task specification syntax. Airflow has the same data ETL operators as well, plus a few more.

<comment><USER3> Great question, I am working on a follow up blog that will explain the differences in more detail. Flyte does take some inspiration from airflow, but it has a lot of important differences \- Flyte natively understands data flow between tasks. This is achieved using its own type system created in protobuf \- Flyte tasks are first class citizens and hence can be shared, reused and are always associated with an interface declaration \- Flyte is container and kibernetes native. It is also multi tenant. \- Flyte corn scheduler, control plane api and the actual execution engine are decoupled. Each workflow can be independently executed on a different execution engine \- Flyte workflows are purely specification - defined in protobuf and Flyte tasks also \- Flyte provides an event stream of the execution \- since Flyte is aware of the data, it comes with built in memorization and auto cataloging \- like airflow Flyte can have plugins in python, but it supports a richer plugin interface \- Flyte is written in Golang and on top of kuberenetes It is definitely less mature in the open source, so please help us make it better. But it has been battle tested at Lyft for more than 3 years in production.

<comment><USER4> Have Lyft migrated all their workflows from Airflow to Flyte? Or does Airflow still play a role alongside Flyte? Was assuming Lyft is running workflows in Airflow from this post [https://eng.lyft.com/running-apache-airflow-at- lyft-6e53bb8f...](https://eng.lyft.com/running-apache-airflow-at- lyft-6e53bb8fccff)

<comment><USER3> Another great question. So Airflow is used at Lyft for ETL. I think for traditional ETL it still is a good fit. But, there is an effort to not just migrate, but rethink how we can leverage Flyte's capabilities to improve our ETL experience.

But, as it exists, we have a FlyteAirflowOperator, so that users can easily connect their Airflow pipelines with Flyte and write the new ones on Flyte alone.

Stay tuned for developments on this front :)

</comment></comment></comment></comment><comment><USER5> Any plans to support Python type annotations, instead of using the @inputs and @outputs decorators?

<comment><USER6> You mean DataClasses?

<comment><USER5> No, I mean type annotations in the functions defining the tasks. If you look at their first example, they define a function called `get_traintest_splitdatabase`, and the input and outputs are annotated using two decorators.

<comment><USER3> Roberto, this is absolutely one of our goals. When we started, it was with python2.7 still around. We would love contributions, ofcourse we will work with you and adapt it

</comment></comment></comment></comment><comment><USER6> "use cached versions of pre-computed artifacts" This is really nice. I wonder if this also covers partial pre-computations, for example when the same subquery is reused across several pipelines.

<comment><USER7> It is definitely possible to leverage Flyte's features here for sharing partial outputs. It does, however, require formatting your pipelines in a particular manner for this to be supported natively (i.e. create a task which computes a view or similar. Then that task is shared among different pipelines). It might be a little verbose, but, in my opinion, it is preferable because it modularizes pipelines into tasks which are individually tractable for testing and validation--especially as the tasks and pipelines evolve in a large organization! Further, the verbosity of authoring such pipelines can be reduced significantly by making good use of the flytekit library.

Additionally, there is always the option of introducing a custom plugin. Although it would take more effort up front, one can really let their imagination run wild and introduce behaviors as needed.

<comment><USER6> I see, thanks. I was hoping for this to be more automatic.</comment></comment></comment>


Butt Plug Hacking: Real Penetration Testing - DEFCON 27 - <AUTHOR> http://youtube.com/watch?v=CsQ2VWEfduM <comment><USER2> I'm pretty impressed with the methodology they used to find a backdoor.....

<comment><AUTHOR> It's important to take device security seriously when your ass is on the line.</comment></comment>


10 Quotes to Get You Through the Marathon of Entrepreneurship - <AUTHOR> http://www.entrepreneur.com/article/232683

<comment><USER2> I can understand why people like to read these, but I'm seeing them so often and in so many places I'm starting to get sick of "aspiration quotes". I'm not sure if its a matter of selection bias, because I'm now an entrepreneur, or if there just happen to be a lot more of them, and they're everywhere: Google+, Twitter, LinkedIn, FB, etc. Its rare that I ever read one that makes me think: "Wow! Yeah. This is totally going to take away all my anxiety and tomorrow morning I'll realize why I'm doing what I'm doing and now my problems are going to disappear." Now if I see people I'm following posting more than a quote a day, I just stop following them.

Quotes like this one by Tony Hsieh especially irk me: "Chase the vision, not the money, the money will end up following you." Did he say this when he was a nobody or after he got Zappos got bought by Amazon. The reality is that a lot of entrepreneurs can only chase the vision for so long. Other obligations sometime have to take precedence: rent, healthcare, spouses, kids--and then chasing the vision is just impractical.

Most entrepreneurs know that, by definition, the decision to take this career path is a risky one. And in MOST cases--again, referencing Hsieh's quote--the money will NOT "end up following you".</comment>


Chess AI LeelaChessZero Defeated in a Bullet Game by Andrew Tang - <AUTHOR> https://clips.twitch.tv/RefinedAverageLaptopRedCoat <comment><USER2> Unfortunately it looks like the hardware acceleration used by the AI is _relatively_ modest in this case: 6660K, GTX 1060.

I wonder what the strength improvement would be with just a beefier single node machine.</comment>


Resig: jQuery.embrace().extend(); - <AUTHOR> http://ejohn.org/blog/jqueryembraceextend/

<comment><AUTHOR> It's really exciting to see the framework thriving the way it is. Hopefully the recent uptake will mean an even brighter future for the community and the team.

</comment><comment><USER2> I kind of feel like Resig is misunderstanding what embrace and extend usually mean. (Or at least, glossing over it.)

I kind of imagine it more like that Java debacle where Microsoft installed a version of Java but never updated it, severely retarding the growth of the language and basically killing off the "original" web application sphere...

<comment><USER3> In Microsoft's case, their strategy was "embrace, extend, and extinguish". I doubt Microsoft wants to "extinguish" jQuery. Why would they care? jQuery isn't a threat.

<comment><USER4> I'll bet some people working on the Atlas project (Official AJAX for ASP.NET) lost their jobs before this decision was made. What a mess.</comment></comment></comment>


What Poker Software To Build? - <AUTHOR> Love poker. Love programming. Gimme your ideas and I will give you awesome tools for free!<p>Also, curious how much of the HN community plays poker. <comment><USER2> Camera, glasses, micro expressions.

</comment><comment><USER3> Poker in VR ?</comment>


Cambridge Analytica shutting down - <AUTHOR> https://www.reuters.com/article/us-faceboook-privacy/cambridge-analytica-shutting-down-wsj-idUSKBN1I32L7 <comment><USER2> This might be less of a shutdown and more of a rebirth: [http://uk.businessinsider.com/cambridge-analytica- executives...](http://uk.businessinsider.com/cambridge-analytica-executives- and-mercer-family-launch-emerdata-2018-3?r=US&IR=T)

<comment><USER3> In business, it's often possible to change the name and get the plausible deniability you need to continue.

In politics, any future venture by these people is going to have a difficult time. No candidate wants to be called out for employing anyone from CA's core team now.

What's also going to be really hard to shake is th litany of articles pointing out that CA actually failed pretty badly at achieving its promises. Just consider the "honey trap" offers they were making: if you actually own the secret sauce to influence elections with big data and machine learning and psycho ops... why go for the oldest, most shady trick in the book?

<comment><USER2> I hope you're right and that things will change for the better as a result.

</comment></comment></comment><comment><USER4> The unavoidable conclusion to a player who stepped outside the gaming board.</comment>


Ask HN: What happens if your landing page doesn't collect enough emails? - <AUTHOR>

Regarding setting up a landing page to collect emails, to gauge the interest in a prospective idea/product.
If all things go well, you get a sizable enough mailing list to launch with.
However, what if you only get say 20, and determine it not enough to move forward with the app? Best to just leave those people and move on? Or a courtesy email? <comment><USER2> Hmmm - well, how confident are you that (a) you marketed the app/website/product to the right people at the right times, and (b) that the landing page was working correctly, and then (c) that the design of the landing page wasn't causing abnormal bounce rates?

If all of that holds true, I think I'd opt for the "It just didn't work out" email. That may lead to other opportunities whereas just dropping it won't.</comment>


Introducing the New Walmart.com - <AUTHOR> https://news.walmart.com/2018/04/17/introducing-the-new-walmartcom <comment><USER2> Certainly better than when Walmart tried to hire Cucker for responsive web templates. A lot of talent in Bentonville the home of Walmart. I'm excited to see Walmarts new e-commerce focus make Amazon more competitive.</comment>


The future of work–the good, the challenging and the unknown - <AUTHOR> https://www.microsoft.com/en-us/microsoft-365/blog/2020/07/08/future-work-good-challenging-unknown/ <comment><AUTHOR> arly research2 using biosensors that measure brain activity show that the brain exerts less effort when participating in a meeting using Together mode when compared to the grid view. This suggests Together mode may help with the feeling of meeting fatigue some remote workers are experiencing.</comment>


Why I hate Rails - <AUTHOR> http://kakubei.blogspot.de/2012/05/why-i-hate-rails.html <comment><USER2> This article sounds like pure whining to me. Now that I've expressed my opinion on the subject, I'd like to point out the fact that the things that the author is whining about are not specific to just Ruby on Rails. Things like learning the actual language, knowing the concept of MVC, doing TDD/BDD, knowing various templating languages, databases, Javascript frameworks, and deployment are all part of the things you need to know in order to do actual web development.

Also, despite how Rails makes it easier and quicker to create web applications through scaffolding, Ruby on Rails is not a beginner's framework. It has abstracted most of the concepts that a lot of experienced developers have taken for granted and spend a lot of time into to make it easier to write applications. The downside to this is that it makes it hard for beginners to understand what happens under the hood. Let's take ActiveRecord for example. I'm certain a lot of beginners don't even know what an ORM is, but I'm pretty sure a lot of experienced developers know this already. While it may seem fine at first, when you get to the point where you actually need to do low-level SQL queries, the beginners won't even know what do to do to solve their problems.

TL;DR: If you actually agree with this article, you probably should stay away from web development.

</comment><comment><USER3> I have not really had to use ruby, but are gems really that much of a pain to use? I mean dependencies exist in other languages too, what makes ruby so crazy that even I know about the pain everyone seems to experience?

<comment><USER2> Not at all. It's similar to Maven in Java. The only difference is that that Maven uses XML to define a project's dependencies, while RubyGems uses Ruby.

<comment><USER3> That in itself sounds kinda dangerous. Not using some sort of "static" structure to define dependencies, I mean.

<comment><USER4> what like an interface? An API? That's what it is.

<comment><USER3> I more meant that a ruby program will be less predictable than a static XML file. Easier to reason about, mainly due to one being a list of dependencies, whereas the other is a turing machine.

<comment><USER4> Maybe. I think it's a difficult point to argue either way. It's a power vs discipline thing; with great power comes great responsibility. Some people prefer to be prevented from doing stupid things, and some people prefer the power.

I normally find that whenever you are limited to a certain config format etc, you find a use case that makes you wish the limitation wasn't there, so you jump through stupid hoops to get the same functionality.

Rails has a thing called fixtures, which is basically some static yaml files for loading test data into your database. It didn't take long at all for tools like factory girl to come out, which replace the yaml for ruby.

Maybe that's why a lot of people who are drawn to ruby are also drawn to lisp.</comment></comment></comment></comment></comment></comment>


Developers discover hidden panorama, keyboard features in iOS 5 - <AUTHOR> http://arstechnica.com/apple/news/2011/11/developers-discover-hidden-panorama-keyboard-features-in-ios-5.ars

<comment><USER2> The keyboard autocomplete is not really so secret: i managed to somehow activate it on the Japanese keyboard without changing any preference files.

<comment><USER3> It's not even new--been around since iOS 4.1 at least (and actually worked better on earlier iOS versions)

<comment><USER4> They have been enabling this feature for kana-kanji conversion in Japanese keyboard since when iPad was first introduced (iOS 3.2) and enabled it for iPhone in iOS 5.

</comment></comment></comment><comment><USER5> Engadget has a nice screen cap of the panorama mode. [http://www.engadget.com/2011/11/09/ios-5s-panorama- enabled-w...](http://www.engadget.com/2011/11/09/ios-5s-panorama-enabled-with- backup-hackery-jailbreak-not-requ/)

</comment><comment><USER6> I am still looking forward to Swipe integration with iOS. I don't know if that is ever going to happen though.</comment>


States should ban contracts barring employees from seeking higher pay at a rival - <AUTHOR> https://www.bloomberg.com/view/articles/2018-07-25/states-should-ban-contracts-barring-workers-from-joining-rivals <comment><USER2> Non compete contracts and non poaching agreements are insidious and _should_ be illegal. Ilegal, not just unenforceable.

But, among the many imbalances between employees and employers... few are as easy to fix. A major imbalance is information.

One radical idea is salary transparency. It would be an emotionally difficult transition, but I think the effect on salaries would be transformational.

Information is, a big part of what markets _are_. If you are negotiating salary armed with the same information your counterpart has, you are in a much better situation. At the very least, it would help those people who are the worst at negotiating and have an employer that will take advantage of this.

Eliminate anti competition agreements, in a year you may find a measurable marginal effect. Publish all salaries and the effects will be everywhere.

<comment><USER3> Salary transparency. Let's imagine you have a brilliant employee, you want to pay her or him twice more than others, because that person truly brings that much value for your company. Do you really think other employees would say - yes, this guy/gal is really smarter than we are, she deserves all those money? Wouldn't such person be bullied by others (think of what often happens to the best pupil in the class, where you have "grades transparency").

Let me cite François de La Rochefoucauld, "Although no one is happy with his fortune, but everyone - with his wits.

<comment><USER4> I'd rather have it that way than at my last company, where I discussed salary with someone of lesser education and talents, but who was female. She found out I was making more due to my education and negotiation, then she went complaining to all of my bosses and HR about a gender pay gap, and come Christmas time she got a raise much larger than mine so we were making the same. Even though she didn't negotiate and had no masters.

How is that fair to me as someone who arguably deserved the higher salary? I knew more and played the market game better, yet because of my gender I then make the same as a less productive worker?

Salaries should be transparent and the reasons for higher pay should be merit based. I left that company immediately afterwards because another one offered me 50% more to do what the first company wasn't even thinking of doing yet. So overall, I think the current system of secrecy and unjustified numbers is far from ideal.

<comment><USER5> > complaining to all of my bosses and HR about a gender pay gap

That _is_ negotiating.

<comment><USER6> No, it's not. It's a lightly veiled threat.

<comment><USER2> Diplomacy by other means.

</comment></comment></comment></comment></comment></comment><comment><USER7> The problem here is information asymmetry.

It's hard for employees to know how valuable it is for them to sign a non- compete. It's hard for companies to advertise their desirability based on, "those other guys will make you sign a non-compete. We won't." So it becomes low cost for people to ask for it.

In the current environment, non-competes should be banned: California proves this is a viable approach. But perhaps a better long term solution that seems within technical reach right now would be some kind of AI legal assistant that could demystify and educate people about the contacts they're asked to sign.

Like imagine if you had a smartphone app. You scanned the contract with your camera and the app said, "This is a non-compete agreement. 60% of the companies in this field use them. Best estimate is that signing it costs you $30k in lifetime earnings."

Then a job seeker could just negotiate to their own best interest.

<comment><USER8> It's also power asymmetry. Some people just can't afford to NOT sign a non compete. That's why laws and regulations are needed to protect the poor.

<comment><USER5> The poor are, in most cases, not qualified to do very skilled high-paying work. That is part of why they are poor. Are the jobs they can get really requiring non-competes? If I take a job at an Amazon distribution center, am I going to be asked to agree that I won't later go to Wal-Mart? And if I do, will Amazon actually bother to enforce that?

Last time I had a decision to make on a non-compete, I did consult with a lawyer and he basically said there are no guarantees, but generally a non- compete cannot be enforced if it prevents you from earning a living.

Edit: the article implies that places like McDonald's do this. I worked there (albeit years ago), and at that time it was not true. We would have been rightly laughed at if we asked for a non-compete on a minimum-wage job like that. It was hard enough to hire people who were reasonably well-groomed, punctual, and energetic. We would not have added unnecessary barriers like that.

<comment><USER9> Just because you didn't have to sign a non-compete doesn't mean there wasn't shady business going on. What the article is talking about is franchisees signing agreements not to hire employees from other franchisees in the same brand. So if a new McDonald's opened up across town with higher pay, they would not have been able to hire you.

Also there are (or at least were) fast food restaurants making their employees sign non competes. Jimmy Johns had their sandwich makers on noncompetes until 2016 [0].

0: [https://www.cnbc.com/2016/06/22/jimmy-johns-drops-non- compet...](https://www.cnbc.com/2016/06/22/jimmy-johns-drops-non-compete- clauses-following-settlement.html)

</comment></comment></comment></comment><comment><USER10> It's simple. The rich are getting richer and the poor are getting poorer. With more money, the rich have more and more power to make sure that it stays that way.

</comment><comment><USER11> Is that actually legal, and enforceable in the US?

The union for engineers in Denmark have basically told its members to just sign contracts with non-compete clauses, because they aren't actually enforceable. Not without the company compensating you financially, even if you're fired.

Assuming a five year non-compete clause, the company should expect to pay you for those five years. Essentially the worker sign away their most marketable skills, and that's no free.

<comment><USER12> In Denmark the law is very clear on what you can require in a non-compete, and what level of compensation you must at minimum include. Maximum of 12 months, and they must give you a 150% old salary one time payment at the onset. And if you are either unemployed or working in a significantly new job type after 3months they must supplement your salary up to 50% if you old one for the duration of the contracts.

Owing to the very clear rules, I have never heard anyone from Unions saying they where unenforceable, so I'm curious if you have any reference on that part?

</comment></comment><comment><USER13> This is because the philosophy of "at-will employment" being good is a lie sold to the public. It is to benefit the corporation, and thus the rich, and not the human or the poor.

</comment><comment><USER14> With his Lordship's permission I wish to leave your manor for another. The floggings are less intense there.

<comment><USER15> You jest but labour law in the USA and the UK descends from the "master and servants act"

<comment><USER16> The beatings will continue until morale improves.

<comment><USER17> The beatings will continue until they are accepted as a fact of life.

If humans were as free as capital to go where they can get the most benefit to me, I'd move to Denmark in a heartbeat. Truly sounds like a workers paradise, at least compared to the USA.

But we aren't free, capital is. Priorities I guess.

</comment></comment></comment></comment><comment><USER18> Established companies all trying to protect themselves from competition because it's an easier / cheaper approach than continuing to actually compete.

Like when a football team is in a winning position and "goes defensive" to the detriment of their effectiveness. The problem is, once a company / team changes their approach to "the game", it's often too hard to change it back.

Capitalism has developed ADD. It's all about short-term reward and for all intents and purposes the future is too far away to consider.

</comment><comment><USER19> I've never understood why the structural flaw of unfettered capitalism isn't obvious to most people.

The rich will keep getting richer, at the expense of peasants.

<comment><USER20> Historically, the world's "peasants" are enjoying the best quality of life in humanity's history, even if the gap on paper is widening.

Capitalism is far from perfect but it seems to be the best system we've come up with so far.

<comment><USER21> The gap is widening for real, not just "on paper".

And study after study shows that humans very much define happiness in relative terms. It doesn't matter if quality of life is rising for everybody, if the gap is rising much faster - you're going to have the populace that is unhappy, and that unhappiness eventually translates to anger (it has already started doing so).

You can either work to fix that, or you can wait for torches and pitchforks.

<comment><USER22> > study after study shows that humans very much define happiness in relative > terms

Whether or not the gap is widening, that definition of happiness is very problematic. There's something wrong when, as an example, someone is happy with a "rice-and-beans" lifestyle when all their neighbors have the same lifestyle but is unhappy with a better "chicken-in-every-pot" lifestyle because some of their neighbors have caviar and foie gras (insert your preferred luxury foods).

<comment><USER23> Problematic it may be, that's what studies show to be the case and you can't just rewire all humans very easily.

</comment></comment></comment></comment></comment><comment><USER24> Capitalism...workers are just another expense to be eliminated

<comment><USER25> I believe the technical term is liability. Workers are liabilities. You are right. A part of capitalism is to increase the assets and reduce liabilities.

<comment><USER26> Which is why it cannot help but create its own downfall. But before that we will have to end up with that unholy alliance between government and industry called fascism, as that will be the final attempt to extract wealth from a society that has been drained, by tapping directly into taxes collected by the government.

You simply cannot have a system that needs consumers to spend money when its in every single companies best interest to pay as little, preferably nothing, to those whose business and expertise you need to survive. You can expand to other nations as a temporary solution but in the end you will run out of people to sell stuff to.

<comment><USER27> Not to mention the unholy alliance between the contemporary elite "left" and capital, called globalism.

The only real counterforce to global capitalism has historically been the people of a _nation_ , and the populist nationalism of a few nation states has been the only example ever known of an economic system that has upheld basic human dignity (whether it has been called social democracy, christian democracy or something else). This is now going down the drain.

<comment><USER28> > contemporary elite "left" and capital, called globalism

To anyone who is not in the loop (of the alt-right/4chan jargon), "globalism" is currently a code-word for "Jews".

<comment><USER27> No, globalism means globalism and has nothing to do with Jews. This is simply an attempt by (extremely well financed) globalists to smear anti-globalists with antisemitism.

</comment></comment></comment></comment></comment></comment><comment><USER29> 1\. Make salaries public.

2\. Have an exchange where we can bid on an individual just like stock market

3\. Remove taxes

4\. Add exchange fee

No salaries exist. No employee is tied to a particular employer. We can get access to a person if we bid the right amount.</comment>


Critical Django security updates released (0day, exploit in the wild) - <AUTHOR> http://www.djangoproject.com/weblog/2009/oct/09/security/

<comment><USER2> Less than four hours between the disclosure and the fix. Not bad.

</comment><comment><USER3> Here's the changeset that fixes it: <http://code.djangoproject.com/changeset/11603>

<comment><USER4> Could someone as an intellectual exercise explain how this exploit works? I understand the idea of how some strings can throw a regex FSM off its game, but I can't see how it would happen here.

<comment><USER5> A simple rule of thumb is: nested repetitions may take 'forever' to fail.

If you've got Java applet support in your browser, here's an animated example...

[http://regex.powertoy.org/?pat=m/((a{0,5}){0,5})*[e]/g&a...](http://regex.powertoy.org/?pat=m/\(\(a{0,5}\){0,5}\)*\[e\]/g&anim=1&rep=m/\(\(a{0,5}\){0,5}\)*\[e\]/g&in=aaaaaaaaaaaa)

...based on the "WARNING: Particularly complicated..." example in the Perlre docs:

<http://perldoc.perl.org/perlre.html>

You can see that Django's problematic domain-validation regexes were similar to the perlre example, but even worse -- a one-or-more of unbounded length, inside a 0-or-more of unbounded length, inside a 1-or-more of unbounded length:

<http://code.djangoproject.com/changeset/11603#file0>

</comment></comment></comment><comment><USER6> This reminds me of a presentation on regular expression DoS attacks:

[http://www.checkmarx.com/Upload/Documents/PDF/Checkmarx_OWAS...](http://www.checkmarx.com/Upload/Documents/PDF/Checkmarx_OWASP_IL_2009_ReDoS.pdf) [pdf]

Quick view: [https://docs.google.com/gview?url=http%3A%2F%2Fwww.checkmarx...](https://docs.google.com/gview?url=http%3A%2F%2Fwww.checkmarx.com%2FUpload%2FDocuments%2FPDF%2FCheckmarx_OWASP_IL_2009_ReDoS.pdf)

P. S. Corrected wording.

</comment><comment><USER7> _As mentioned above, this issue was initially disclosed publicly on a high- traffic mailing list. We'd like to remind our users that the correct channel for security reports is to send them to firstname.lastname@example.com. This allows the development team time to develop a solution and coordinate disclosure, both to the Django community as a whole and to the numerous third parties who maintain and distribute packaged versions of Django.

When debating whether a particular issue impacts security, we ask that you err on the side of caution and always contact firstname.lastname@example.com; we will be more than happy to work with you in analyzing and assessing potential security issues._

That way, the people that missed the issue in the first place are the only ones that will have the opportunity to fix it. While you wait, the crackers have already compromised your site.

<comment><USER8> Public disclosure without giving a vendor or project a chance to fix the issue before you release the information publicly screws _everyone_ running it who may or may not have the skills needed to fix the issue.

In this case, it was a mistake. Luckily, it's _only_ a DOS - there's worse things that could happen.

<comment><USER9> Only a DOS is bad for those high profile sites that are listed on your 'look who is using product X' pages.

Everybody else will probably squeak by without harm.

</comment></comment></comment><comment><USER10> So...svn update?

<comment><USER11> Obviously if you're running off of any SVN other than the 1.1 tag, yes.</comment></comment>


Ask HN: If a pattern existed for Prime Numbers, would RSA et similar be secure? - <AUTHOR> <comment><USER2> It depends on how it was found, and what the pattern was, but broadly speaking, finding a pattern in the primes would probably not make factoring any easier, so RSA (and similar) would probably not be affected.

But the real question is - why do you ask? Is it because you think you've found a pattern, or is it because you are seeking to better understand how things work and how they are connected? There's value in asking the question you really have rather than making us guess.

<comment><AUTHOR> I ask for both reasons. If there is a chance that this pattern could break RSA, I wouldn't be in a hurry to release it.

<comment><USER2> People are already looking to replace RSA because it will be broken in a post- quantum world. But my understanding is that and perceived pattern in where primes are won't help in finding factors of a number. Largely speaking we already know where primes are. Determining if a number is prime is in P, and identifying numbers as prime or not prime doesn't help break RSA.

If you've found a pattern, make sure you document clearly that you're the one who found it and then announce it as quickly as as widely as you can to let people verify that you're right, or find the flaws in your reasoning.

Alternatively, get someone you trust to verify it first, and then make it widely known.

What's more, if by some chance it did help break RSA, it's likely the three (and four) letter agencies already know it and are exploiting it already. By announcing it widely you would then be helping to push a world away from a system that's already broken without people knowing it.

<comment><AUTHOR> Thanks for the feedback :)

Where would one go to release something like this? I don't have a university network to reach out to, nor do I have a network of mathematician friends. Should I create a PDF and post on ArXiv?

<comment><USER2> If you create a PDF and post on ArXiv, then tell me then I can post links to it on various math forums. You can make an account on mathstodon.xyz and post it there, post it on Twitter and tag a few mathematicians.

Or email me - address is in my profile.

As a quick sanity check, how have you checked it? I can possibly help with making it an accessible draft rather than trying to make it an academic paper. Being clear and engaging can be hard, but it's worth making the explanation readable rather than scholarly.

For reference, I'm going off-line now for about 12 hours, but I'll respond when I can. Take your time.

<comment><AUTHOR> As it turns out, I created a slight variant of Wheel factorization. Surprisingly this did not up in any of the prime number/number theory articles I came across.

<comment><USER2> There is no shame in rediscovering an existing technique. It shows your thinking is sound. And you're right, that method is often glossed over as if unimportant, but the ideas resurface later in other sieving methods.

Even so, of you have a variant I would be interested in seeing it. Would you email it to me? Address in my profile.</comment></comment></comment></comment></comment></comment></comment>