skysight-inc/HackerNews huggingface dataset:
SHA-1 has been considered weakened since 2004 and it is recommended not to use it in new cryptosystems. It's not the worst hash out there, by far, but it can be calculated relatively quickly which may make finding collisions easier as new insights and faster technology becomes available. Bcrypt has a variable number of iterations in the algorithm. Increasing the number of iterations makes the hashing a lot more computationally intensive. Sufficiently so to make brute force attempts intractable for now. And even when somebody has the computing power to easily calculate your hash, increasing the number of iterations will negate that advantage.
I've been meaning to do a blog post about this for a while, but I've tried both, and so far, I prefer Git because of the way it treats branches. Git seems far friendlier to the workflow of just doing stuff, and deciding how you want to commit it later. In Git, it's easy to work for a while, then decide you have 3 commits worth of changes, and one of them really ought to be in its own branch, and commit it all like that. The code that you branched off stays out of your mainline for now, but is easy to switch back to and work on some more. At any time, you can easily delete the branch, and it all effectively disappears, push it somewhere else for somebody else to work on, or merge it back into main when it's ready. Well, merging might be tricky if you wait too long, but you get the idea.

Where Mercurial falls short to me is that if you create a branch in your main repository like that, then it never goes away as far as I can tell. What Mercurial really wants you to do is clone your repo, and do that work that would be a Git branch in the clone. But to do that, you have to start with a clean repo, actively decide you want to create a new branch/clone, clone your repo, and only then start doing that work in the clone. If you've already done some work, and then decided that a piece of it ought to be branched off, then your workflow is pretty messy - you have to clone with the work uncommitted, then manually move the changes over to the clone and commit them there. And switch any working directories you might have open to the clone directory to work in it.

Yeah, no thanks, I'll stick with Git.
No, the project's leads have already approved the move to Git, and ESR is spearheading the (massive) effort involved.
>while Git is made by anti-GNU people who do not believe in free software and has an incompatible license.

WTF? Git is GPLv2 - the exact same as the Linux kernel. A great many developers are avoiding v3 due to the changes it made. And "anti-GNU people" is just a lame insult.
TLDR: Class hierarchies should only be used for truly hierarchical objects, which is rare. Composition is almost always the correct structure. When in doubt, use composition. You can almost never go wrong this way.

Another way to look at it, by subclassing List, any method that takes a list can also take a Team. That makes no sense. A method that takes a List should take a list of team members.
> "everything is becoming sleeker, smaller, more sealed together and more difficult to open"

Except, this isn't true, in my experience. At least not with Apple iOS devices. Quite the opposite.

Apple is starting to offer repair services for their iOS line, particularly phones, and their devices haven't gotten harder to open up and repair, they've gotten easier.

The iPad 2 is notoriously one of the hardest, repairable iOS devices to dig into. The iPad iterations after the iPad 2 are much, much easier.

The iPhone 5 take just a few minutes to replace the screen.

Source: I worked for one of the largest iOS device repair companies.
I'm no expert on mesh networks so maybe someone can tell me - how would a mesh network connect Los Angeles and Las Vegas? Or San Francisco to Salt Lake City?

Given the populations on both ends, I assume you'd need more bandwidth than you could get from wifi routers with pringles can antennas.

I assume the companies who own long distance fiber have to do what the government says, as they need government permission to dig up the streets and install more fiber meaning they can't afford to upset politicians. So you can encrypt the traffic, but if the word comes down to cut the cable the cable gets cut.
Except she sounds stoked even though it took 7+ hours. How do you explain that?

Also, it was 200 pounds, $330 USD.
It's not HN-speak. A "post-mortem" can be a scheduled part of development, even if a project succeeds. It's just a review after the project (or milestone) is declared complete. It's for finding lessons to apply to future projects, since it's too late for the current project :)
Summary of main arguments:

Jordi Gutiérrez Hermoso:

[...] main argument in favour of hg is not technical, but
rather social. For GNU, I think it is far more important
to support a project that aligns with GNU's aims [...] GPL2+

Reply by Eric S. Raymond:

+1. And I say that as someone who *likes* hg and wishes
it had won. Repeating the bzr mistake would be stupid, stupid, *stupid*.

Edit: Raymond replied to Kastrup who replied to Hermoso.

The discussion evolved in the meantime, so it's probably better to read the thread yourself: https://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00...
So I want to plot a few lines and label my axes. First step? Install 2 of the 3, ... er, 4 available plotting packages, named "Winston" and "Gertrude," or "Jenkins" and "Marsalis," or something else equally meaningless. Once I've done this, I can issue a bunch of low-level commands to produce my simple plot.

Matlab may be an ugly language, but offering this kind of amateur software as a replacement is just pathetic. Octave, R, and various python packages have been viable for years.
posgres is implementing both permission and forgiveness for performance reasons.
You mean tortoiseHG? There's tortoisegit as well. And the first Windows-only proprietary client I could find supports both systems (Smartgithg: http://www.syntevo.com/smartgithg/)
So this requires an always-on "hot mic" app. Does anyone see any issues with that?
Committers are able to sign their commit with their GPG key.

Edit: I was wrong and changed all the words
"I knew, for instance, that the Euro was in crisis the first time I ever saw a euro"

So it wasn't for economical reasons, after all!
And at least the version he's using will likely retain the subtleties of its behaviour over future postgres versions.

Depending on a "shitty & broken" implementation that goes into postgres which then subtly changes its behaviour after a few years could cause no end of problems.
I only read four of the sources you noted, but none of the four state what you claim.
Every object in the repository, including commits and trees, is hashed via SHA-1. Commits also include the SHA of the previous commit, so if you verify each commit, then compare the SHA at the top to the "correct" one, then that means your entire repository is valid.
correct..now go ahead and submit your business plan :)
Not by default it isn't. And git uses GPG, not SSH keys.
Please do not port software to Windows
Couldn't agree more. Step 1 toward this is to completely eradicate any VC/startup investor blogs or threads from your browser and substitute them with real daily communications with potential customers.

I look at the entire VC model and see it as a huge waste of most entrepreneurs' time and energy. Why entrepreneurs seek validation from accelerators, investors, and the media is beyond me. The usual response is that to build an enormous company at a very high growth rate requires a ton of money and doing anything other than that is mailing it in infamous lifestyle business approach. I reject that entire premise- you can make quite a large dent in the world, build a large business, and generate a big income by bootstrapping in one niche market after another- the major tradeoff is time.
I mean as far as when I should tap based on height and distance to the next obstacle. I try to be consistent but obviously a robot would be better.
or just use bookmarks and enjoy the exact same workflow as git.
For those not aware of the recent events, the Thames has again overflowed and flooded some substantially populated areas: http://www.bbc.co.uk/news/uk-26149946

If you walk around there you can see plaques on a few buildings marked like "-- 1917 flood level --". These can be several meters above the normal water level, and clearly so high that great damage will occur whenever that level is reached. But people keep calm and carry on living there, too low for comfort but in oh-so-cute dwellings by the river. They even park there cars down there which makes little sense. I walked there during the last historic flood, which was all of 15 months ago.

As an aside, the Thames Barrier is a fantastic sight to see, and reachable on foot from Greenwich in a few hours (take the water taxi home).
They're weak evidence. If the first half of a comment is valuable it's probably worth reading the rest. And yes, username is strong evidence. I read every comment I see from patio11, for example.
"The negative aspects are primarily because people haven't practiced enough or are being idiots."

Oh, I forgot, OO is perfect. Way to be condescending.

"TDD is absolutely fine with OO"

I don't mean OO in general (and it makes it easier in some aspects) I mean inheritance.

The more your inheritance is deep the more the classes down the hierarchy (does that inherit the most) will have non trivial testing. Because of all the dependencies/initializations/creation of the parents. Oh I am sure I'm doing wrong and I have to use a VisitatorSingletonFactory I wouldn't have had a problem and "I'm being an idiot", of course.

And surely, the problem is not usually within the codebase, but in external libraries/utilities, those that you need to interface in order for your system to do things.
Why I made this:

A couple days ago, collaborative writing website Editorially.com announced that they will be shutting down [1]. Editorially uses an in-browser markdown interface for writing and editing. They also have version control, but they rolled their own system instead of utilizing an existing one.

I'm working on something similar (Penflip.com), but all the projects are backed by git repositories with full git access, so you can work online or offline. With the import tool, I'm consolidating the Editorially markdown files (each revision stored as a separate file) into git repos. Full revision history remains intact.

[1] HN post: https://news.ycombinator.com/item?id=7232778
Assuming you have matplotlib installed:

using PyPlot
x = linspace(0,2*pi,1000); y = sin(3*x + 4*cos(2*x));
plot(x, y, color="red", linewidth=2.0, linestyle="--")
title("A sinusoidally modulated sinusoid")
What is troubling for me, is to have a database that works sometime and is sometime fast. But no database that works all the time and is /slow/.
In git a commit is basically the root of a Merkle Tree[1], i.e. every reference is the sha1 sum of the object being referenced. If you take a commit apart what you see is a commit message, a hash of its parent commit and a hash of a tree object. That tree object itself contains hashes of file objects and tree object as well as their corresponding names. Thus assuming you would want to tamper with a file of a commit this files hash would change and therefore the parent tree objects hash would change and therefore the commit hash would change. So the complete state of the repository is cryptographically secured with just the hash of the commit object. You can find out more about git innards here: http://git-scm.com/book/en/Git-Internals-Git-Objects

To be fair: I believe mercurial commits enjoy the same level of protection, although via different means.

[1] https://en.wikipedia.org/wiki/Merkle_tree
does "bitcoin-based" have anything to do with the priority of delivery over the network?
Everything about this comment is wrong. Commits are never signed [EDIT: it is possible since 2011, but rarely used; thanks zobzu]. Annotated tags can be signed via PGP (not SSH keys), but the public key is not stored in the repository (unless you put it there manually, as with the tag "junio-gpg-pub" in git.git, which is not even Junio's current signing key). In practice, people obtain keys from PGP keyservers.
I tend to think that UPSERT is the right solution to the wrong problem.

Take the example of a user profile. The problem for me is not typically "the first time the user shows up, I need to create a record, and all other times, I need to overwrite it." In the systems I build, there is almost always a use case for having full access to the history of data. So the better solution is, "I must ALWAYS update whatever record exists AND insert a new record".

That means my UserProfile table also has two extra columns, CreatedOn and InvalidatedOn. Then, creating/updating a user's email address is always the same, two statement operation:

-- If UserName does not yet exist, this does nothing
UPDATE UserProfile
SET InvalidatedOn = NOW()
WHERE UserName = ?
AND NOW() BETWEEN CreatedOn AND InvalidatedOn;

INSERT INTO UserProfile(UserName, Email, <etc.>, CreatedOn, InvalidatedOn)
VALUES(?, ?, <etc.>, NOW(), MAX_DATE());

In practice I would use default value constraints for the CreatedOn and InvalidatedOn columns. Writing it explicitly is just for this example.

This becomes really important once you've lived with your database for several months/years, and especially when dealing with customers. For example, say you send an important email to a user, then they change their email address, then you send more important emails referring to the first one, which they now claim they never received in the first place. With an UPSERT, that user's email address for all of time looks like the most current version, and you can't figure out why they didn't receive the first one.

It's better to capture more data and realize down the road that you don't need it than it is to not capture enough and realize you need more. Databases are temporal objects. They grow over time and they change over time.

Another example from my past: a client would send us a dump of their data, every morning. We were performing analysis of their data and were supposed to wipe out our database and re-import it every morning. This meant on day N+1 we were re-importing the first N days again. I implemented this as a temporal database, which caught me some hell when the database grew in size. But, after 6 months, we discovered someone had attempted to alter the historical data. If we had blindly taken the data, they would have gotten away with their crime (and it literally was a crime, we had several government regulations we had to fulfill, the project being used in both a health-care and a financial capacity).

I've never regretted implementing my tables temporally. I've sometimes changed the implementation to a data warehouse setup, after learning that the historical data wasn't necessarily important to day-to-day operation, but I've never regretted having the historical data available, and I have almost always learned to regret NOT having historical data.
That's not an accurate summary of the main arguments. For one thing, on the pro-hg side you've quoted only the opinion of someone (Jordi Gutiérrez Hermoso) who isn't even an emacs dev: the email starts with a note to please cc him on replies because he isn't subscribed to the list! This isn't the view of the GNU project, the opinion of the Emacs developers on why they prefer hg over git, or even the personal view of RMS. You'll get a better summary if you read the thread.
You can use Gadfly to plot using the grammar of graphics (as implemented by R's ggplot2), which is the nicest plotting API I've seen:

http://dcjones.github.io/Gadfly.jl/

Julia aims for a different niche than R or Python, and is far more performant than Octave.
Short answer - whoever raises doesn't work on the product nearly as much until raising is over. That is why closing a round quickly can be incredibly valuable even at a lower valuation.
Well, that's the ISS. Here's the link to the ACTUAL decayed satellite (COSMOS 1220): http://www.n2yo.com/satellite/?s=12054
What happens is this: Concurrent transactions marked A and B:

A: Does row exist? Answer no
A: Ok, so insert row.
A: ....

B: Does row exist? Answer no (A has not committed yet)
B: Insert row (locks, waits to see if A commits or rolls back)

A: Commits
B: Unique constraint violation error.

Now here's where it gets really tricky: What is the desired behavior? Do we:

1. Just raise a constraint violation error? That's what we do with LedgerSMB because, frankly, unique constraints are far more likely to be violated by human error than concurrency issues and we can tackle other related errors elsewhere. This is specific to our app. Other apps may differ.

2. Should the upsert lock, wait, and retry if the the upsert criteria is violated by a pending transaction? That's the cleanest option. However, this requires being aware of which unique indexes are affected by the upsert criteria.

A quick and dirty upsert like yours is good enough for most applications based on human input. It is not good enough, IMO, for applications with lots of direct automation coming in from various sources. So those are very different use cases and they have very different criteria.
That's only true for named branches. You can create an unnamed branch in hg simply by going to a point in the history (what Git would call detached head) and committing.

That said, the handling of named branches remains a pain point, and at this point I would recommend people just go with Git despite the steeper learning curve.
You're right, I was wrong.
I'm sorry.
Putdown of others is a hallucination. For me there is the opportunity cost of dealing with unnecessary clutter or deciding what to watch and making time for it. I simply do not have the time. For me, TV has an irritating hypnotic effect I would prefer to avoid, and one way of doing this is to remove the possibility of exposure. I have said nothing about the quality of programming--that would be like reviewing a book I haven't read. But I suspect there must be something about the medium that leads to defensiveness just in case a nonviewer might be critcal of viewers generally.
I had the exact same reaction :)
I use Git and Mercurial daily. They're both ok. However..
I prefer Git to mercurial, mainly because:

- Git is noticeably faster for all operations (yeah, specially if you don't use GitHub for pull/push as they're slow as hell ;-)

- Git has sensible default settings, for example, git log is easier than hg log|less. Similarly, git show HEAD^ is easier than hg log --patch --rev tip. (Both are easier to remember, type, and keep the logic across the tool).

- Finally, Git handles everything in a generic fashion. Want to make a test branch and play around? git branch blahtest and play. With hg, you have to use queues, and weird commands such as qpop, qremove, qseries, qnew <= this is very confusing to newcomers. Basically, I feel like Git knows how to KISS better than Mercurial.
A slight exaggeration, but yes, that's quite close to the OP's argument (Git is GPLv2 and will not change; Hg is GPLv2+ and therefore closer in spirit to GNU's goals and a GNU project like Emacs should favor GPLv3 and AGPL tools).

Luckily, that particular argument is thoroughly rebutted downthread. Choice quote: "Emacs shot itself in this foot already" by choosing Bzr, GNU's blessed VCS, for such political reasons. (Worth noting: RMS raised no strong objections to Git.) Also, the OP is called out for not understanding the driving reasons for moving Emacs to Git.

Edit: Corrected reference to Hg's license; it's GPLv2+, not GPLv3.
Busting Comcast's $250 installation fee for 105 Mbps
What the hell is a pixel?
The place I'm currently working is (sadly) a Windows shop, and we've never had any issues using msys-git.

Some of us use TortiseGit for logs, diffs, etc (we used to use TortiseSVN pretty much exclusively before we moved)
What I'm saying is that food can have bad consequences in terms of cancer or heart health but not necessarily stunt growth. The unhealthy American diet (tons of sugar, salt, meat and animal fat) is not known for stunting growth, and your evidence for it is more than thin: One sentence in a book written by someone with a degree in political science.

American diet is not exactly a cherished notion of mine either. Neither is it my diet of choice nor am I American.
Insulting if you asked me.
Every "perfect cross platform open source program" had to start as a homegrown variation of tar, rsync, git, and whatnot. It's not like they fall out of the sky.
I can't reply to a child of this comment, but yes, this comment is entirely wrong.
However, Git can indeed sign commits (using gpg), not just tags.
"git commit -S"
Mmm, the new Jesse Swanson, "My Dedicated Lawn Genius" is a screenshot from a Stock Video (not sure which one, she has many videos that are very similar):

http://www.pond5.com/stock-footage/33665071/smiling-woman-ta...

http://footage.shutterstock.com/clip-5295113-stock-footage-s...
It's actually that isolation that causes the problem. The issue is you have updates which dont see the existing inserted (and uncommitted) row and so the resulting inserts collide.
or it could be 10% lesser than git. arguably, feels 50% slower. ;-)
Missing the point. Most of the customers do not know or care what the difference is, will never read any definition or explanation of it, and shouldn't have to. If you try to force your customers to understand this stuff, they'll get confused and annoyed, and go with someone else who can make it clear for them.
Yes - same satellite number, your link includes the word "satellite," and it appears that the site defaults to the space station if you do something wrong, with no indication.

Very helpful.

The site also thinks it's now decayed or re-entered and no longer actually plots the track. Which is a shame.
Ask HN: What is your development setup?
I was wondering what do folks use here these days. I am interested in knowing almost everything (from desks, chairs to software) that you use for building your products and achieving your goals. That is, your entire setup.

Also, if you could change one thing, what might that be?

Examples of some areas of input -

* PC/Laptop specs
* OS
* Major languages
* Source version control
* Editor(s) (with Plugins)
* Servers, if any
etc.
not in the online case.

sorry, to clarify: the app does not need to always be recording in the online case.
If foreign key constraints are deferred, they would be equivalent. It may not be perfect but it's a useful parallel I thought.
Isn't a car easier to move than a house, when when threatened by flood?
Underground farm in London
http://www.bbc.co.uk/news/uk-england-london-25948880
Does anyone know how much was the acquisition for?
Server upgraded. Registrations are now re-open!
Ugh, I was afraid of that. It looked very much like a stock photo. They really, really don't need a picture there to begin with.
asm.js is portable assembly with a jit assembler. In that sense, it's even closer to "native code" than C, as C requires a separate compilation step.
You completely misquoted the replies. ESR was NOT replying to the OP, he was agreeing with a rebuttal of the OP's argument.
what good would recording be if the audio has a timestamp in it?
Cream toilet roll holder and store by dibor | notonthehighstreet.com
> Every object in the repository, including commits and trees, is hashed via SHA-1. Commits also include the SHA of the previous commit

mercurial does pretty much the same, as far as I know.

> so if you verify each commit

But surely that does not happen on every CLI operation does it? So you only find out about corruption when all the repository is traversed and checked, which will usually be explicitly or on clone. Thus the same as hg.
As another mentioned, GHC is a good example. Another one that might be a bit better to look at is xmonad. It's only a little over 1kLOC and is a fully functional window manager.
A lot of this just seems like the GNU and FSF being anti-Torvalds, an extension of their clash over the naming of [Linux|GNU/Linux] issue.
In chrome it is slow, and i'm using a i5.