Choose GitLab for your next open source project - <AUTHOR> https://www.b.agilob.net/choose-gitlab-for-your-next-project/ <comment><USER2> I'll just jump in to vouch for Gitlab CE, in a self-hosted setup.

@sytse: it is one of the best documented and well packaged pieces of software these days. Specially in the Ruby world. Thank you for that. Gitlab really makes a difference.

Where others just distribute Docker images or directly nothing (because omg it is too hard to do proper packaging), Gitlab has nice packages for CentOS, Debian and Ubuntu (the distros that usually run in production servers).

We had an old install from git using mysql. Migrating to Omnibus and converting the DB to postgresql was painless. Surprisingly, it was a perfectly documented process without any pitfalls, or any outdated info. Omnibus packages are just wonderful. apt-get upgrade will just do all the necessary, DB migrations and restart all the components with almost zero downtime.

This proved to me that Gitlab actually gives uttermost care to the CE edition and that it is not just marketing.

So thank you Gitlab for being so awesome.

<comment><USER3> Thanks Alex for posting this. I'm so glad you had a positive experience upgrading.

We spend a lot of time making our Omnibus packages a flawless install and upgrade experience. Docker images are great but for many users Docker is not an option.

GitLab CE is just as performant and easy to upgrade as EE and we strive to keep it that way [https://about.gitlab.com/about/#stewardship](https://about.gitlab.com/about/#stewardship)

Currently our team member Axil is upgrading a GitLab installation from 5.0 all the way to the latest version to ensure it is as smooth as it can be [https://twitter.com/gitlab/status/698236575231119360](https://twitter.com/gitlab/status/698236575231119360)

If you want to know more about upgrading GitLab please see [https://about.gitlab.com/update/](https://about.gitlab.com/update/)

<comment><USER4> I will be honest, the switch from self compiled MySql to Omnibus Postgres was not so great for me and my team. But. We love GitLab, and now that we are on Omnibus I get updates done in < 5 mins. Thank you all for building an amazing piece of software. Also kudos to your team, even as a CE user you have helped me resolve a bug or two here and there. It's been a great ride. I wouldn't trade our GitLab in for anything.

<comment><USER3> I'm sorry to hear the database conversion was rough. Is there anything we can improve to the documentation to make it easier? [https://gitlab.com/gitlab- org/omnibus-gitlab/blob/master/doc...](https://gitlab.com/gitlab-org/omnibus- gitlab/blob/master/doc/update/README.md#upgrading-from-non-omnibus-mysql-to- an-omnibus-installation-version-68)

Great to hear that after converting to Omnibus the updates are smooth. We try to help all our users, customer or not.

</comment></comment></comment></comment><comment><USER3> GitLab CEO here. Awesome to see this article! Ask me anything.

<comment><USER5> Great job on GitLab, I really like it and started migrating my projects from GitHub.

One thing: I never managed to make GitLab pages work. It may just be me, but I find the existing documentation very confusing, unclear what should be the name of the repo to host the static website, which conventions are used etc. I would appreciate a better tutorial.

<comment><USER3> I'm sorry to hear you found the exiting documentation for pages [http://doc.gitlab.com/ee/pages/README.html](http://doc.gitlab.com/ee/pages/README.html) confusing.

We are planning to write a blog post about it with a walkthough [https://gitlab.com/gitlab-com/blog- posts/issues/39](https://gitlab.com/gitlab-com/blog-posts/issues/39)

<comment><USER5> Awesome, thanks for the fast reply :)

</comment></comment></comment></comment><comment><USER6> Competition is good! Forget all the hate going on against Github right now. We should be support things like GitLab and Bitbucket more in order to get the competition going strong. I'd like to see even more competition in this area.

<comment><USER7> It's amazing that we're migrating all of open source into a single centralized proprietary basket - amazing in a slow motion trainwreck kind of a way.

After we already watched its predecessor Sourceforge fill opensource projects with malware too. One day we're going to look back on all this and laugh "well that was bloody stupid!"

Even Git was created to free the comunity from the commercial restritions of BitKeeper, and the first thing we've done with git is make it centralised and proprietary again.

(Granted the friendlier UI and social network layer is needed, and Github has done a fantastic job there, but holy cow does this feel like watching a trainwreck)

</comment></comment><comment><USER8> Our local instance is only a version back but we find gitlab to be terrifically slow, and regularly have to kick the server as we find it stops tracking updates, then simply stops responding at all. Also, the diffing on merge requests is simply awful. It regularly shits itself on spacing changes and the like making most merge requests almost useless from a code review perspective. Searching just doesn't work. At all. Navigation is weird and cumbersome, with many normal features hidden away in different sections of the UI. This causes weird situations where, since search doesn't work, I have to just browse around for commits to a branch I want view at a certain state, and click that commit to get to a "brows code" view. Why the fuck isn't there simply a repo->branch->commit history->browse code path?

I personally wouldn't recommend gitlab and hope someone else is out there working on something better.

<comment><USER9> I have to agree regarding the slowness, and although we do have many repositories (~100) and the machine only has 2GiB of RAM, it does feel slow for a service that sits idle 90% of the time, and almost never gets concurrent user access. We're on 8.0.0, so maybe it has gotten better.

That said, are you sure you don't have a very old version? There is a simple path for accessing code in a branch, you can just click the repo, then on the button that shows the number of branches ("N branches"), then click on the branch you want. If you want to see the files in an older commit of that branch, just click on "History" and then "browse files" on the commit line.

<comment><USER3> 2GB of RAM for 100 repo's and a few users should be fine. But a lot of bugs and speed improvements were made since 8.0.0, please consider upgrading, it should be a smooth experience. Also, if you have not switched to the Omnibus packages already consider doing it now to reduce memory usage and improve speed.

<comment><USER9> Thanks. We do use the Omnibus package, but I'll trying upgrading when I get a chance. I'm preparing to "sell" Gitlab to my coworkers, and the slowness won't help :|

<comment><USER3> I hope the upgrade helps. Certainly the upcoming GitLab 8.5 will contain a lot of speedups [https://gitlab.com/gitlab- com/operations/issues/42](https://gitlab.com/gitlab-com/operations/issues/42) as long as you are not memory constrained.

</comment></comment></comment></comment></comment><comment><USER10> The free hosted Gitlab is great. I really appreciate having it around. And if you haven't looked at it recently, it's faster than it used to be.

Free unlimited private repos w/ 10GB storage per repo (including LFS!) is fantastic. A recent project I worked on involved integrating ~15 upstream modules into a build process. Having the ability to set up a git repo for each module instead of thinking 'maybe I can come up with some hack to do this with less repos' is huge.

Having Gitlab CI w/ the ability to use your own workers just by running a single docker command is the icing on the cake.

And the fact that the repos which need to stay on our own infrastructure can also use GitLab - with an open source option to boot - is what makes choosing GitLab a very easy decision.

<comment><USER3> Awesome, glad to hear this. As you can see in [https://gitlab.com/gitlab- com/operations/issues/42](https://gitlab.com/gitlab-com/operations/issues/42) GitLab.com issues became 3x faster this week and we're working on further improving speed.

</comment></comment><comment><USER11> Github serves two major purposes: (1) one is to be a git repository, and (2) another purpose is to be the central meeting ground for discovery and community participation. GitLab can serve for the purpose of being a git repository.

The problem is that the more competition we have for (2), the less functional any of the competitors are in serving (2).

Given that when Github goes down, a lot of tools and development workflows also go down, I can understand there being a backup repository. But that's not the same as serving purpose (2), that's just redundancy for (1).

The same problem exists for Facebook. The more Facebooks there are, the less functional any Facebook is.

<comment><USER12> _(2) another purpose is to be the central meeting ground for discovery and community participation. [...] The problem is that the more competition we have for (2), the less functional any of the competitors are in serving (2)._

While this is true, especially for open source projects. I'd rather see a healthy open source community on top of an open source platform than a proprietary one. This for two reasons:

1\. Suppose that some features are needed by an open source community. In the case of GitHub, you have to ask and wait until they throw something over the wall. In the case of GitLab, you can write the code yourself, submit a pull request. With a bit of luck, it's in the next version of GitLab.

2\. Suppose that GitHub or GitLab as a company becomes evil. This is not far- fetched, look at SourceForge. With GitLab, you could fork the latest community edition and have pretty much the same functionality.

</comment></comment><comment><USER13> We use GitLab at work, and while it works great for hosting internal stuff, any open source projects I'm still going to put on GitHub.

GitHub has the community, and I'd personally not like to see that divided, not to mention the interface is just so much easier to use - GitLab's is mildly infuriating.

<comment><USER3> Also discussed in [https://news.ycombinator.com/item?id=11091964](https://news.ycombinator.com/item?id=11091964)

</comment></comment><comment><USER14> I've been using Bitbucket for 3 years now and i absolutely love the fact that you can create private repos and have many tools available for free, highly recommended.

<comment><USER15> Ditto! Bitbucket has served me well for so many years esp with their ondemand integrations. I really don't see why I should move to any other gitxxx. Moving tools is also a pain point so best to choose wisely.

</comment></comment><comment><USER16> Our University recently moved from SVN to self-hosted Gitlab for internal projects It integrates nicely with our LDAP server so that you can easily search for collegues and students to add them to projects. I totally love it.

It's probably not a coincidence, as Gitlab used to be Utrecht-based if I recall correctly.

Just want to thank you guys for not having to use SVN for my graduate project.

<comment><USER17> It's not a coincidence! I study Computer Science at Utrecht University and work at GitLab, so [https://git.science.uu.nl](https://git.science.uu.nl) only made sense :)

A little bit of stalking shows me we're actually in a class together, see you on Monday ;)

</comment></comment><comment><USER18> I for one am a very happy user of Github. Two mid size open source projects, dozens tiny ones and a few commercial private repos. Github has private repos you just need to pay for them and they are actually very affordable. I've seen developers who make >100 per hour choose bitbucket because they don't want to pay for private repos. How is that rational...? I like Github and I like paying them for a service I use every day.

Travis on the other hand... could use a bit of work :)

<comment><USER3> Consider using [https://about.gitlab.com/gitlab- ci/](https://about.gitlab.com/gitlab-ci/)

It only works with GitLab repo's but on GitLab.com you can use the mirror external repositories feature [http://doc.gitlab.com/ee/workflow/repository_mirroring.html](http://doc.gitlab.com/ee/workflow/repository_mirroring.html)

</comment></comment><comment><USER19> Recently had a need for something like this and Gitlab ended up losing to BitBucket Server which we bought along with JIRA and Confluence. Gitlab seems like a nice, light solution, but their issue tracker ain't JIRA.

<comment><USER20> My company is using atlassian products heavily and I was surprised to find very good support for GitLab. I run it locally and love it and I'm pushing to use it at work.

<comment><USER21> It's worthwhile noting that the integration between JIRA and Bitbucket (naturally) goes far beyond adding comments with links to a ticket.

Our aim was to provide an at the glance view of the development status (# of commits, branches, pull requests and their status, builds and deployments) with the option to see more detailed information right within JIRA. And of course you can create a new branch right from your JIRA issue.

Lastly, ensuring that the data is 100% reliable and up to date was an important consideration which most of the basic webhook integrations simply ignore.

Take a look at the documentation, which provides a great overview of the integration: [https://confluence.atlassian.com/jira/viewing-the-code- devel...](https://confluence.atlassian.com/jira/viewing-the-code-development- information-for-an-issue-445186939.html)

<comment><USER20> No doubt, that said I've used both before and I generally prefer GitLab to bitbucket and so as long as the basics work I'm happy. Also GitLab can satisfy both Bitbucket and Bamboo and since my company needs to host all apps it's MUCH cheaper to use GitLab than to pay for 2 more tools for all developers.

</comment></comment></comment></comment><comment><USER22> I think this is a nice article and I will take a peek at GitLab. I have to say the following though: I have been very annoyed with the difficulty in creating private repos in GitHub _BUT_ I think it is a brilliant plan to encourage people to make their code available. As much as GitHub's pay-for-private-repos approach annoys me, I think if they hadn't done that, 30% or more of what's available on GitHub would be hidden. People made and make their code public because they have to pay not to. Brilliant, and the right approach for GitHub.

<comment><USER3> Also discussed in [https://news.ycombinator.com/item?id=11091964](https://news.ycombinator.com/item?id=11091964)

</comment></comment><comment><USER23> Damn I knew GitLab was good but that article made it sound far more amazing than GitHub. I'm impressed.

One thing I've really wanted was a voting system -> merge. Is there a way to require X amount of votes (in general or from specific in a specific group) which, once that is hit, allows the PR to be merged into master? Part of our typical code review workflow is requiring a specific amount of people to approve the PR before it goes in but it's basically the honor system right now and it would be really cool to turn that into some sort of rule.

<comment><USER3> Sounds cool to me. Consider creating an issue for it and please indicate if you're interested in contributing it.

<comment><USER23> Done. I'd love to work on it but I'd unlikely have any time to do so (at least in the near future).

[https://gitlab.com/gitlab-org/gitlab- ce/issues/13411](https://gitlab.com/gitlab-org/gitlab-ce/issues/13411)

<comment><USER3> No problem, thanks for creating a feature proposal.

</comment></comment></comment></comment><comment><USER24> GitLab EE's source code is also available, though not under an open source license. Most of the differences are things I'd like to eventually see in an open source project (maybe GitLab CE, maybe a plugin, maybe a fork).

From my perspective the best thing would be for them to eventually open source some features I'd like to have in an open source project hosting service, once they've made more reasons for people to pay them. The worst thing would be if someone added it in a plugin or fork of GitLab CE and the company GitLab were to claim that they must have looked at the GitLab EE source code. GitLab Pages and audit logs are the features I'd most like to see in the open source version.

This is much like Nginx Plus's improved load balancing with health checks, which has me considering Tengine.

<comment><USER3> Thanks for your perspective and naming the features you would like to see in GitLab CE. Can I ask what open source project you are considering to host on- premises with GitLab CE?

We do try to open source features that are requested by open source projects, such as the branded login page after a HN discussion [https://news.ycombinator.com/item?id=10931690](https://news.ycombinator.com/item?id=10931690)

I agree that falsely accusing people of looking at the EE code would be very bad. So far we only once declined a contribution to CE by claiming it was EE code, in this case the code was verbatim, the diff showed a zero character difference. Future calls will be harder but we'll try to prevent false declines.

More about this our criteria to merge CE contributions if they are already in EE can be found in [https://about.gitlab.com/about/#stewardship](https://about.gitlab.com/about/#stewardship)

<comment><USER25> One example would be KDE, who considered Gitlab but ended up going with Phabricator because they are one of those 100+ developer projects that wanted the LDAP, analytics, logging, etc but also being a major open source software community wouldn't settle to not dogfood free software, and the CE was missing too much at the time.

Personally, I much prefer Gitlabs project -> code / issues / milestones / etc workflow over Phabricator's git / issues milestones -> projects workflow, and love using Gitlab, but there are a lot of free software communities (Gnome, Freedesktop.org, among others) who are almost certainly going to try moving to more modern project management services in the near future and will be forced away from the IMO best UX Gitlab offers for ones like gogs / phabricator that both sate their needs for a free software solution that also has the featureset for these thousand+ developer ecosystems.

<comment><USER3> Currently GitLab has LDAP, analytics, and logging. I'm glad you like the UX of GitLab. I'm not sure what essential features are still missing from it in your opinion. Can you elaborate?

<comment><USER25> I'm not one of the KDE web devs that run their infrastructure, I'm just a project contributor / maintainer. There has been some historical recording of the process that led to KDE having to give up on the idea, though:

[http://permalink.gmane.org/gmane.comp.kde.devel.community/61...](http://permalink.gmane.org/gmane.comp.kde.devel.community/618) [https://mail.kde.org/pipermail/kde- community/2014q1/000667.h...](https://mail.kde.org/pipermail/kde- community/2014q1/000667.html) [https://forum.kde.org/viewtopic.php?f=292&t=130854&p=350671#...](https://forum.kde.org/viewtopic.php?f=292&t=130854&p=350671#p350684)

<comment><USER3> Thanks for the links. I'm sorry I never got the chance to talk to the KDE people and address the concerns we had. We're always open to adding or open sourcing features that are needed by large open source projects.

</comment></comment></comment></comment></comment></comment><comment><USER26> I don't know, Gitlab seems a little too enterprisey for me. For example their documentation is too 'serious' they link to martin fowler's wiki for "feature branch" and wikipedia for "feature driven development". Their gitlab flow has waterflow development like production branch with things going to "production".I do oss for fun, not to go to another job after the first one.

They don't have the cool hipster vibe that github has, github earned their street cred. A copy cat will always be a copy cat.

All these features ppl are asking for are against the ethos of github. Can somone give github props for well implemented git lfs.

sorry gitlab guy who is watching this thread if that was too harsh.

<comment><USER27> Joke's on you, the sole reason Github "community" exists is to attract customers to their enterprise plans. That's where the money is earned.

<comment><USER26> yea, whats your point? you expect them to host the site out of goodness of their hearts?

HN is ycombinator trojan horse for HN startups with full censorship of articles critical of their startups. Yet you are here aren't you?

<comment><USER27> The point is that you state "Gitlab seems a little too enterprisey for me" and then call out Github as the perfect example of how it's supposed to be done. Which is quite peculiar, given that if anything Github its motto is "how businesses build software" \- it is an enterprise product they are building their business on. Hence I mockingly stated that the "joke's on you".

</comment></comment></comment></comment><comment><USER28> Not sure what's the hype about when alternatives like Phabricator.org are much better. Meh.

<comment><USER29> I'm getting to a point where I may have to save my "Phabricator promotional rant" as a text expansion of some sort. It's a prime example of people not looking hard enough. People don't want just code hosting otherwise GitHub and friends wouldn't have extra features.. So Phabricator lives out in "project management software land" and no one looking for a good GitHub alternative seems to find it... Meanwhile it's bloody amazing and deserves much more attention.

<comment><USER30> What are the high points of Phabricator?

I'm reading the landing page, but the terribly self-deprecating style makes it hard to find the actual pain-point solutions buried within.

<comment><USER29> The best way to check out Phabricator is to go look around the Phabricator instance used by Phacility to manage the Phabricator project itself.

[https://secure.phabricator.org/](https://secure.phabricator.org/)

This gives has all their documentation, applications, and handy nearby search to find answers to the questions you may be thinking about while checking out each application.

<comment><USER30> That URL gives me a not found error, I'm afraid.

</comment></comment></comment></comment></comment><comment><USER31> Using Gitlab on site and LOVE it, it's FREE, Big Thanks

<comment><USER3> You're very welcome, thanks for using GitLab.

</comment></comment><comment><USER32> I was wondering what would be the implications of publishing gitlab enterprise edition with an MIT license and make it easy to fork without subscriptions (basically like the community edition).

From what I understand, the real value that you are selling with an enterprise edition is the support, dedicated staff, monitoring services and training.

<comment><USER3> We tried licensing the enterprise edition under an open source license but asking people nicely to not distribute it. People didn't distribute it but our customer where very confused about this so we changed the license.

The current license [https://gitlab.com/gitlab-org/gitlab- ee/blob/master/LICENSE](https://gitlab.com/gitlab-org/gitlab- ee/blob/master/LICENSE) is proprietary but it does allow people to see the code, modify it and contribute patches [https://gitlab.com/gitlab-org/gitlab- ee/merge_requests](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests)

Part of the value of a subscription is our support and training, but the unique features of EE [https://about.gitlab.com/features/#compare](https://about.gitlab.com/features/#compare) also are important.

<comment><USER32> If you don't mind me asking, what was confusing to the customer?

Again, I don't mean to be rude, just curiosity, how would you react if people forked the community edition and implemented some of the enterprise edition features and released it under the MIT expat licence?

<comment><USER3> The customers didn't understand that they paid to get access to an Enterprise Edition that had an open source license.

If people forked CE to add features of EE we would wonder why we didn't merge those in. For our criteria for merging features that are currently EE only please see [https://about.gitlab.com/about/#stewardship](https://about.gitlab.com/about/#stewardship)

</comment></comment></comment></comment><comment><USER33> If only there were a way to get ~painless~ sync with repositories hosted elsewhere.

I'm stuck with TFS here, which is a PITA and broken on so many levels, it's not even funny. Running a GitLab front would solve nearly all of my problems while still complying with the dreaded "everything in TFS" policy. :/

<comment><USER3> We don't have two-way sync but we do have mirroring of external repositories in GitLab EE and .com. Please see [http://doc.gitlab.com/ee/workflow/repository_mirroring.html](http://doc.gitlab.com/ee/workflow/repository_mirroring.html)

<comment><USER33> That is more or less all that I crave. With two caveats:

\- updated once per hour or manually

Seems as if this would be generally good enough, but some sort of push integration would be awesome

\- EE only

The dealbreaker. I understand. It makes sense to feature-gate stuff. But my entirely personal situation is that the company enforces TFS. I (and quite some coworkers) would prefer GitLabs features. But there's just no way for me to ask for a budget. What for? "Replace TFS"? Not gonna happen. A C"C works fine, everyone's convinced that we should go for GitLab only" might work. Perhaps. But that's impossible at the moment, I guess.

<comment><USER3> 1\. I agree that push integration would be awesome. Consider contributing it.

2\. Thanks for understanding. Please consider emailing sales@ company domain to see if there are possibilities. If you are working for a large organization we can maybe do an extended trial. Please reference this comment in your email.

<comment><USER33> On the off-chance that you stumble upon this again:

How would one contribute something to a feature that is EE only? Is that a scenario that you had in the past? How does that work?

<comment><USER34> The repository of EE is publicly readable and customers have a license they can use for development for EE.

We've had customers contribute EE-specific features and changes several times in the past. In one case, CERN contributed improvements to certain EE- exclusive authentication options.

The workflow is identical otherwise.

</comment></comment></comment></comment></comment></comment><comment><USER35> [https://notabug.org](https://notabug.org) is also an option

</comment><comment><USER36> I've used GitLab before and had a very good experience with it. Meant mostly for private repos, however. I tried pushing it onto the teams I have worked with in the past but they resisted because they were unfamiliar with it and didn't want to deal with server maintenance. The latter was understandable. Still, this really is a great solution for those who want an alternative to GitHub, especially a decentralized one.

Albeit, I am little disappointed because I have finally started getting into open source and being active on GitHub, and now it seems the development community is vying for a way out. GitHub may not be open, it may be centralized, but it does offer the advantages of uniformity and easy discovery.

<comment><USER3> If people don't want to deal with server maintenance please consider GitLab.com (our SaaS) and GitHost.io (our single tenant offering where we do the upgrades and backups).

</comment></comment><comment><USER37> I had no idea that GitLab had support for changing what type of commit is created on-merge. That's actually a really temping feature; I've spent so much time trying to convince people (especially those starting out) why manually rebasing and merging is A Good Thing™.

</comment><comment><USER38> Despite setting up my own gitlab instance once, and trying to get the company I was working at onboard, I never knew that gitlab.com was a thing for hosting projects... is this recent?

Either way, just signed up. Excited to support Gitlab, any way I can.

<comment><USER3> Thanks for signing up! GitLab.com launched after a 'Show HN' in 2012 but recently it has been growing a lot faster, 6x project growth in 2015 [https://about.gitlab.com/2016/02/11/gitlab- retrospective/](https://about.gitlab.com/2016/02/11/gitlab-retrospective/)

</comment></comment><comment><USER39> One error in that write-up: SourceForge is open source, not proprietary. It's an open source project called Allura under the auspices of Apache that has paid coders at SourceForge contributing to it.

</comment><comment> r-s I have been using GitLab for some time and I am transitioning my projects to them currently. I prefer it to Github significantly, the downside is that recruiters are still looking for github on resumes.

<comment><USER3> I'm not sure we should aim for more recruiters on GitLab :)

But I get your point, GitHub currently is an extension of your resume. Based on a HN discussion we made a feature proposal to combine your GH and GL activity [https://gitlab.com/gitlab-org/gitlab- ce/issues/13401](https://gitlab.com/gitlab-org/gitlab-ce/issues/13401)

</comment></comment><comment><USER40> See, here's the thing: I don't want free private repos to exist. What GitHub has done is incentive making things open source, and that's immeasurably valuable.

<comment><USER3> I agree that this has been a very positive effect. On the other hand forcing people to make code public when they might not want to might lead to problems when people are haunted by code they didn't intent to be read by others.

<comment><USER41> Nobody is forcing anybody to make their code public. It's their choice. You can have your code on your machine and on your servers only. Hosting your code is an option.

<comment><USER27> And what if you are working with more than one person on the same private code base? You work on the same machine? Extreme programming?

<comment><USER41> You probably don't know how easy it is to push your code to another machine through SSH and share a Git repository that way.

<comment><USER27> Actually I do, isn't that how it is most frequently done? Fact is that even though it works and you can set it up yourself, it is not a good solution to decentralizing a code base. You might have a private machine to which everybody ssh'es and pushes and pulls from, but only a few do that because they don't want to be/have the ops people who run that box. And that is including but not limited to issues and a sane UI for collaborations. That's very well the problem that github/bitbucket/gitlab and the like solve.

So you are telling me that there is no problem and people should just use a private SSH connection to a box they own?

</comment></comment></comment></comment></comment></comment><comment><USER42> For a git solution in python this is quite good: [https://kallithea- scm.org/](https://kallithea-scm.org/).

</comment><comment><USER43> I had used GitLab for Mailman but I hadn't considered using it. I'll probably migrate off of Bitbucket thanks to this article.

<comment><USER3> Great to hear that!

</comment></comment><comment><USER44> As I've said before, we moved from GitHub to Gitlab and could not be happier. Most of our stuff is internal and we mirror our open source code to public repos. God damn it's good software - is there still room for improvement? Yes. Are they improving it every.bloody.week? Hell yeah they are!

<comment><USER3> Thanks, we'll keep on shipping!

</comment></comment><comment><USER45> > Do I have to tell you, it's good for people with vision problems?

Actually light themes work better for me. I have astigmatism and light themes open the pupil allowing me to see the text easier. With a dark theme I basically just see line noise.

This might be a misconception of dark themes.

</comment><comment><USER46> Exist something like this but for mercurial (I use BitBucket. I mean something to download private...)

<comment><USER47> Check our [https://rhodecode.com](https://rhodecode.com) it supports git, mercurial and subversion.

</comment></comment><comment><USER48> At work we'll probably be moving from TFS to gitlab. Phabricator looks nice but gitlab seems more polished and simpler to use. But once we move to git we will be easily portable and can switch easily if we regret our choice.

</comment><comment><USER49> As another guy that uses GitLab, it's really great. You can see GitLab improve every release, constantly. I don't even remember the last feature that GitHub added, to be honest.

</comment><comment><USER50> I tried to create an account on GitLab.com. It said I needed to fill in the Captcha. There was no Captcha. Tried on Safari. I will try again later on Firefox.

<comment><USER50> Worked on firefox after allowing gstatic. Email verification was rejected. My mail server didn't like your mail servers TLS settings. I will try again later.

<comment><USER3> Sorry but we need the Google Captcha to prevent spam. Can you please detail what is wrong with our TLS settings in [https://gitlab.com/gitlab- com/operations/issues/83](https://gitlab.com/gitlab-com/operations/issues/83) ?

<comment><USER50>
        lost connection after STARTTLS from so254-240.mg.gitlab.com[22.214.171.124]:35308

I have to register or sign in to post a comment. I can't register if I can't get the confirmation email. :-)

<comment><USER3> Please email email@example.com if you have trouble getting our confirmation email.

</comment></comment></comment></comment></comment><comment><USER51> I'm wondering if github and gitlab implemented their own version of git under the hood, or if they just use the vanilla git everyone else uses on their server.

<comment><USER52> AFAIK github implemented Libgit2 (or are at least a major contributor), which is an independent implementation. Am on mobile, so sorry for lack of sources.

<comment><USER3> With GitLab we sometimes shell out to git and we're using more and more Rugged [https://github.com/libgit2/rugged](https://github.com/libgit2/rugged), a ruby library that calls out to libgit2. For more information on our git calls see [https://github.com/gitlabhq/gitlab-shell](https://github.com/gitlabhq/gitlab- shell)

</comment></comment></comment><comment><USER53> I'd like to maybe try this one day. Both hub are lab are great though and fill different niches of mine

</comment><comment><USER54> Is there a way to port publicly viewable github issues and PRs over to gitlab automatically?

<comment><USER55> When you create a repository you have the option of importing it from GitHub. You'll have to authorize it to access your GitHub repositories, but then it can pull over all of the issues that are part of the project.

<comment><USER54> The issues are public though, why does it need my authorization?

<comment><USER3> To use your API key, if we use a single one we get rate limited.

</comment></comment></comment></comment><comment><USER56> They don't have the octocat.

<comment><USER57> They have a fox though, so that's cool.

<comment><USER58> The GitLab logo is actually of a Tanuki (Japanese Raccoon Dog), but still kind of like a fox, as in, it definitely has that scrappy, playful, spirit. Certainly equally as cool as an Octocat.

</comment></comment></comment><comment><USER59> The only missing feature is mailing lists. What's a good solution for that?

<comment><USER3> Contribute it to GitLab! [https://gitlab.com/gitlab-org/gitlab- ce/issues/4272](https://gitlab.com/gitlab-org/gitlab-ce/issues/4272)

</comment></comment><comment><USER60> Have two repositories on Gitlab, no complaints so far.

</comment><comment><USER61> github allows more than one private under paid plans..seems that author makes attempt at comparing apples to oranges

</comment><comment><USER62> Please don't... Github is an _institution_ and the only thing replacing it should be something equally _global_ but based on a new _protocol_ of sorts enabling truly decentralized and distributed sharing and collaboration on a higher interaction level.

But meanwhile, again _please_ let's not fragment needlessly - that's certainly not something worth the price to pay for an (admittedly great) "alternative" _service_ be it self-hosted or otherwise...

Edit: I'm strictly talking open-source projects here - Gitlab is a fantastic solution for private repos!

<comment><USER63> No idea why you were down voted to oblivion, having a contrary opinion is not grounds for that.

I also completely agree, newer Internet users don't understand that we've lost a lot of the decentralized nature of the Internet. Usenet is a perfect example where everything that is used instead is fundamentally worse. With modern computers and better protocols and distributed algorithms a UUCP-like project hosting facility would be really cool.

<comment><USER62> :) protocols > services indeed!

There always will be a market for well designed implementations!

We do should look into new projects like keybase fs, ipfs and the likes to think up a really new solution for sure - we probably still need to tackle some more "basic" foundational solutions first though.

</comment></comment></comment><comment><USER64> I'm a rails guy and have run a consulting shop based on rails. But Im actually a bit surprised (and impressed) that you distribute a self-installed piece of software based on Rails (yes I have seen Omnibus and all the cool things you do. As I said very, very impressive!)

I have personally lost many a "enterprise" contract because of the Ruby thing. Not just that, but at the end of the day Java is very performant _with least deployment effort_.

Which is why we became a JRuby shop first (and packaged JAR for distribution) and eventually to Spring Boot and Scala.

I understand the value of Rails (my current startup is also built on that) - but I'm wondering if it makes sense for you guys to bite the bullet and jump to the JVM.

<comment><USER65> Why the downvotes ? Rails is a PITA to install, Docker might change that but I've spent too much time fighting rvm, rbenv, old gems

<comment><USER66> Try the gitlab installation, and speak to it specifically, rather than to general Rails experience.

Gitlab install is fast and easy (though it didn't used to be). Gitlab has had a hugely successful rapid increase in usability/maintainability/installability.</comment></comment></comment>


Hypersonic Flight 'Breakthrough' Could Have Us in Tokyo by Lunch - <AUTHOR> http://www.wired.com/autopia/2012/11/reaction-engines-hypersonic/

<comment><USER2> I wonder if it would have any effect adding a statoreactor tube to the end of a rocket engine ( as a kind of postcombustion chamber) to take advantage of all that heat. Maybe adding some fuel to that part to make use of atmosferic oxigen to increase power. Above 30km you may drop it. I don't think it would be too heavy as it doesn't have moving parts. The question is if it would generate power enough to be worth all the trouble.

<comment><USER3> I'm not sure I understand what you're suggesting, but it sounds like some form of ram afterburner?

<comment><USER2> Yes exactly. Has it been done or studied?.

<comment><USER3> I do not understand how the physics of a ram afterburner would work. A ram duct generates compression via aerodynamic drag. It slows and compresses the air forced into it by controlling shocks.

The expansion stage of a brayton cycle engine maximizes exhaust velocity rearward and hence by Newton's third law creates thrust. Constricting the exhaust will only reduce efficiency.

If you're talking about an expansion duct with secondary combustion, that has nothing to do with ram effect and is just an afterburner.

By and large afterburners are hideously inefficient, but many military craft still include them because it is easier to manufacture an afterburner tolerant of secondary combustion temperatures than a turbine. SABRE erodes this motivation as the incident temperature into the flame holders (or rocket nozzles) is dramatically lower than common in a turbine engine, so you can get more of the energy possible from the oxygen density of the engine's intake flow without secondary combustion.

</comment></comment></comment></comment><comment><USER4> And of course, if you leave NYC after breakfast and head to Tokio you won't get there by lunch

More likely you'll get there for dinner and a night out

At Mach 5 this will take 2h (not considering acceleration/deceleration times)

<comment><USER5> Then standing in line for two hours at security will be even more ironic.

<comment><USER6> Does this happen anymore? I flew out of Boston the day before Thanksgiving (when I would imagine tons of people are traveling) and it took <5 minutes to get through security. Same thing on the way back.

<comment><USER7> One data point doesn't mean anything... It's the uncertainty that you _might_ spend 1h in line that makes you waste time in the end.

</comment></comment></comment></comment><comment><USER8> I thought another big issue with flying at such fast speeds was that you end up tearing pieces off your fuselage every time... This looks like one piece of a bigger puzzle to achieve what the headline of the article is suggesting.

<comment><USER9> That and cost. No one is willing to pay for supersonic flight, and the sonic boom makes it obnoxious over land.

<comment><USER10> People are willing to pay for supersonic flight. Concorde made a profit on most of it's flights, and it was only after the World Trade Center attacks and subsequent downturn in international commercial flight that it became a problem. Also, because not many Concordes were made, the R&D costs were never properly amortized.

The sonic boom however is an issue - Concorde was limited to a small selection of routes that passed mainly over water (e.g. London -> New York) because it was not allowed to go supersonic over a lot of countries. If you could fly supersonic all the way from London to Tokyo, or San Fransisco, or Sydney, then I'm sure it would be worth even more.

<comment><USER11> I think 9/11 was coincidental and unrelated. The important trend in 2001+ was the growth of telecommunications phenomena that reduced travel demand. I am not sure if the sonic boom was nearly as big a problem as it was made out to be. I think we can do some cursory math.

If 30% was at 50% of the speed, the total distance covered would be 85% less, adding about 20% flight time increase. Something that normally takes 8+ hours now take 3 or 4 hours. Did this kill the concord?

<comment><USER12> Airline stocks went down almost 40% the next day. Yes, the economy went down because of other factors, but the immediate hit to airlines was definitely caused by 9/11.

</comment></comment></comment></comment></comment><comment><USER13> Which still doesn't change the times involved getting to and from the airport. These are often worse than the flights themselves. Better to engage remotely rather than travel at all.

</comment><comment><USER14> Meh... you know what I want? I want to be able to go to Tokyo and not have the ticket cost multiple fucking days of work. In 2012, four-digit airfares for coach are fucking inexcusable. We were supposed to be better than that, 20 years ago. And don't get me started on business class: those tickets are more than some people in the world make in a fucking year. I want travel that doesn't belch a bunch of CO2 into the air, leaving our grandchildren with a world where there are palm trees in Winnipeg and a year-round hurricane season. That's what I care about. If this Mach-5 travel costs the same as airfare currently does, and burns a bunch of fucking hydrocarbons to get there, then I'm not impressed.

I'm sure the technology is cool, but would someone please solve the real problem? The real problem is that transportation hasn't improved since the 1960s. In the US, we call exorbitantly-priced, 130-mph trains "high speed", we use airplanes for mid-distance travel and it's ass-expensive as it should be because it makes no economic sense, and most of our transportation relies on burning fossil fuels in tin cans that can't be safely operated above about 90 miles per hour. Solve that one, please.

<comment><USER15> Transportation CO2 emissions make up a tiny fraction of total greenhouse gases. Water vapour is by FAR the biggest greenhouse gas. I wonder if a 787 burns more hydrocarbons flying 250 people from NY to LA than 250 cars driving that distance? Roughly ~9000gal (2500mi 787 @ cruise) is 36gal per car. Assuming everyone gets perfect highway mileage even if they're Prius it wont get them the whole way (50MPG*36gal=1800mi). And that's not considering the energy required to build and maintain 250 Prius cars vs. the cost of one 787. The retail cost alone for 250 Prius is nearly $90M. A 787 is more like $250M, but lasts a least 3x longer than a car.

Transportation has improved since the 1960 by a HUGE amount. Modern cars, trains, and airplanes are significantly better (safer, cheaper, more efficient) than those in the 1960s. I'm curious how much travelling you did in the 1960s compared to today?

<comment><USER16> _Transportation CO2 emissions make up a tiny fraction of total greenhouse gases. Water vapour is by FAR the biggest greenhouse gas._

Water vapor is the largest greenhouse gas, but it's a relatively constant contribution; it's _not_ part of anthropogenic contributions to greenhouse gases (which is usually what people are referring to in this sort of context).

<comment><USER15> Good point. I'm not trying to start an off-topic climate change debate, just trying to step back and look at the problem a little more broadly, but there's at least one big error in my calcs as has been pointed out.

</comment></comment></comment></comment><comment><USER17> Also discussed extensively here:

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

</comment><comment><USER18> Does anyone know how practical this is? Is it economically feasible to do this on a jetliner, at Concorde prices? A business jet?

</comment><comment><USER19> "could have us", who is us?

</comment><comment><USER20> The engine has never been the problem. Heat dissipation is the problem.

</comment><comment><USER21> They'll probably never let humans travel by air at hypersonic speeds, its far to dangerous.

They'll simply use Evacuated tube maglev(Elon Musk's HYPERLOOP) for long distances, same hypersonic speed.

Looking forward to breakfast in San Fransisco, Lunch in LA, and Dinner in Washinton DC.

<comment><USER22> Haven't they let humans travel by air at hypersonic speeds already?

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

<comment><USER23> Concorde has a max speed of just over Mach 2.0. Hypersonic means Mach 5.0 or higher. The rocket-powered X-15 max speed was 6.7, and of course the Space Shuttle also went faster than Mach 5.0, so yes, humans have already flown at hypersonic speeds.

<comment><USER22> _HYPERsonic means Mach 5.0 or higher_

Whoops.</comment></comment></comment></comment>


Myths about Integer Overflow in Rust - <AUTHOR> http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/ <comment><USER2> I very much believe overflow checking should be on for release builds, and not just debug. Overflow is defined by the language as an illegal operation, but if it's only enabled by debug builds, then it's effectively defined as "somewhat" illegal. I think this gives the community the wrong impression, and a firmer stance should be taken. This is a killer feature, in my opinion.

In practice, for anything which isn't a micro-benchmark, it's a negligible performance hit. For things resembling a micro-benchmark, you can specifically use wrapped-arithmetic operations, or disable it for that module.

I see a strong correlation between people complaining about overflow checking overhead, and people who don't actually care about the safety features.

<comment><USER3> > In practice, for anything which isn't a micro-benchmark, it's a negligible > performance hit.

Citation needed? Every paper I've seen has indicated a non-negligible performance hit in real apps.

> I see a strong correlation between people complaining about overflow > checking overhead, and people who don't actually care about the safety > features

I'm a counterexample.

<comment><USER4> It would be interesting to have support for saturated types as well. u8saturated 200 + u8saturated 200 = 255. That's often desired behavior.

Saturated arithmetic is supported in hardware in SSE. Although not much point if the values need to be constantly shuffled between SSE and scalar registers...

<comment><USER5> .saturating_add() exists. You can create a wrapper type around this and implement the Add/Sub/Mul traits.

<comment><USER4> Does it have branchless codegen?

<comment><USER5> Not right now (I'm surprised that's the case, there should be intrinsics for it), but that could change.

</comment></comment></comment></comment></comment></comment><comment><USER6> I started my career 35+ years ago programming in 8080 and then Z80 assembly language. A few years later I learned C and have been happily using it and C++ (I admit it, I use it as C plus classes) ever since. Because of my background I remember distinctly one of my first thoughts when encountering C was, "how do I access the overflow flag?" It seemed a huge problem. But I must admit I forgot all about it, (and have never had an overflow issue that I can remember), until recently when there suddenly seems a profusion of "C is a terrible language because of undefined behavior problems" posts, articles and discussions.

So I do wonder how strongly coupled overflow concerns are with most practical every day programming. In my favourite problem domain of chess, I use uint8_t to represent say the number of white pawns (8 is the upper limit), and uint32_t to represent the number of games in my database (10,000,000 is a practical limit). Hitting 4 billion games is about as much of a problem to me as hitting 256 pawns. And uint64_t is waiting if I ever need it.

Using integer types with massively excessive capacity seems a pretty obvious, easy and painless strategy to use for most everyday programming. Of course I realise that there are domains and situations in which this would be an exceptionally naive way to look at it - but I suspect they are at least somewhat exceptional.

<comment><USER7> C was always a terrible language for security - this is the language with 'gets' in its standard library - but it was years before it was fully recognized. Longevity of poor practice isn't a defense. It's our modern networked world that pulled back the rug on the horrors below.

For overflow in particular, it's because numbers - memory sizes, specifically - got bigger than can be represented in 32 bits. There's a class of attacks that depend on fooling a program into allocating much less than it thought it was allocating via overflow, and using that as a vector for exploitation. In the past, these programs simply wouldn't have been networked, or the numbers involved would have caused an OOM, but now the combination of both causes problems.

<comment><USER8> The sad thing is that in 1961 we already had operating systems and programming languages that took security seriously.

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

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

</comment></comment></comment><comment><USER9> This is a great writeup, thanks!

> in debug mode, arithmetic ... is checked for overflow

> in release mode, overflow is not checked

...

> "But what about performance?" I hear you ask. It is true that undefined > behaviour drives optimisations by allowing the compiler to make assumptions

Are there any targets that have instructions like integer-add-but-trap-if- overflow? Or maybe a mode that can be switched? It would be interesting if there could be a high-performing path to leave the check in for release mode.

<comment><USER10> > Are there any targets that have instructions like integer-add-but-trap-if- > overflow?

No "modern" targets. MIPS and Alpha could trap on overflow (on MIPS `add` would trap, `addu` would not, not sure about Alpha) but neither x86_64 nor ARM have hardware support for trapping on overflow.

x86 had INTO, which would INT 4 if the overflow flag was set, it still required additional instructions and the OS needed to convert that to an application trap, but there you are. It was removed in x86_64, likely because it wasn't used much.

<comment><USER11> > It was removed in x86_64, likely because it wasn't used much.

Well, to be honest (anecdotal data) in my career of programming (with lots of C++), I must say that I can't remember having any actual problems with integer overflow.

But for security (buffer overflow protection), it could be useful.

<comment><USER12> When doing integer math with medium sized numbers on systems without floating point hardware, I have to be careful to arrange operations so they do not overflow, and sometimes it's still necessary to give up and use a 64-bit type on a 32-bit CPU.

An example calculation would be projecting a 3D coordinate into a 2D space.

</comment></comment></comment></comment><comment><USER13> What we really need is a hardware extension for ARM/Intel that traps on under/overflow: [http://blog.regehr.org/archives/1154](http://blog.regehr.org/archives/1154)

<comment><USER14> The overflow flag does a fine job of this, IMO.

<comment><USER15> The overflow flag requires a operation and branch to check. A trap is "free" until it actually happens.

</comment></comment></comment><comment><USER16> One problem I have from a mathematical standpoint with dealing with overflow is often you may want the check to apply to an entire expression rather than individual operations. For instance, the expression "x + y - z" may cause an overflow when adding x and y, but may be "recovered" when subtracting z. We could change the expression to "x + (y - z)" but now we have to resign ourselves to the fact that addition is no longer associative, and requires the programmer to know which operations should be grouped together. Is there a way to do bounds checking of some sort on these expressions to ensure there is no overflow in a decidable way?

<comment><USER17> And x + (y - z) doesn't even fix the problem. y-z can still underflow, while (x+y) - z wouldn't. Being able to do it on the expression overall would be ideal.

<comment><USER16> Yeah, I'm wondering how that would look at the assembly level. In the "x + y - z" example we get an overflow from the "x + y" and an underflow when we add z. So you'd have to check if the number of overflows and the number of underflows are equal, and the assembly would probably be really slow. You'd want some kind of bounds check optimization to try and remove as many of those checks as you can.

Fortunately, I don't think these issues will appear too often (at least they haven't in my experience), and you can probably get away with just adding unit tests. To be completely thorough you should probably use some sort of formal modeling and proof system, which I would like to see someone try and develop for Rust.

</comment></comment></comment><comment><USER18> I don't understand their logic. If "for X in" gets rid of many cases where overflow checking might hurt performance, what is the argument for disabling it (by default) in release builds, in a language that aims to be safe? Do they think it is that important to win benchmarks run with default compiler flags?

Also, I expect Rust will still do bounds checking, and would guess many of the cases where the release build removes checks for overflow will now require some extra out of bounds checks: those for negative indices.

<comment><USER3> > in a language that aims to be safe

There are different levels of safety. Rust does not compromise on memory safety. Rust does compromise on integer overflow safety. This is not to say that memory safety is all that matters: rather it's to say that the line has to be drawn somewhere, and memory safety is where it was drawn.

> I expect Rust will still do bounds checking, and would guess many of the > cases where the release build removes checks for overflow will now require > some extra out of bounds checks: those for negative indices.

No, for two reasons: (1) you can only index arrays by unsigned values in Rust; (2) twos complement means that at the CPU level you can check for both negative indices and positive out of bounds indices by simply using one unsigned compare instruction.

</comment></comment><comment><USER19> If you allow overflow in your module, and then another module uses yours but disallows overflow, what happens? Could the overflow behavior be encoded in an integer's type to make this kind of code mixing explicit (via casts)?

<comment><USER9> The code generated for each will be different.

<comment><USER19> What I mean is, suppose your module does an arithmetic operation involving a _function from the other module like "x + other_module_function(y) * 2". You've enabled panicking on overflow in your module for safety. Is it still possible that "other_module_function(y)" will return a result that overflowed without panicking? Does this mean that anyone writing code with overflow disallowed must carefully choose what modules they call to avoid calling any that allow overflow?

</comment></comment></comment><comment><USER20> Will it be possible to set some flag in Cargo.toml or in compiler arguments to enforce "saturating" behavior everywhere is possible? (even by price of some performance degradation).

<comment><USER21> Why would you want that? "saturating" behavior is something you want only rarely. It certainly isn't something you want to use by default for arithmetic operations.

<comment><USER22> How about just different operators for different intents? Like prepending a special symbol in front of an operator to make it behave differently.

<comment><USER3> That's discussed in the article.

"The current state isn't necessarily the final state of overflow checking: the RFC even mentioned some future directions. Rust could introduce operators like Swift's wrapping +% in future, something that was not done initially because Rust tries to be conservative and reasonably minimal, as well as hypothetically having scoped disabling of overflow checking (e.g. a single function could be explicitly marked, and its internals would thus be unchecked in all modes). There's interest in the latter particularly, from some of Rust's keenest (potential) users Servo and Gecko."

<comment><USER22> Yes, I know. But more operators is the solution, it removes all that ambiguity with multiple intents and simplifies a lot of things.

</comment></comment></comment></comment></comment><comment><USER23> There are some architectures that support saturating arithmetic in hardware, DSPs for example. I wonder if the Rust saturating arithmetic commands get turned into those automatically?

<comment><USER4> And x86 (SSE).

[http://felix.abecassis.me/2011/10/sse-saturation- arithmetic/](http://felix.abecassis.me/2011/10/sse-saturation-arithmetic/)

</comment></comment><comment><USER24> It'd be nice if there were a function annotation for this.

</comment><comment><USER25> Before reading the article I just have to say that I love the design of your page.</comment>


'The Single Most Valuable Document In The History Of The World Wide Web' - <AUTHOR> http://www.npr.org/blogs/money/2013/05/01/180255276/the-single-most-valuable-document-in-the-history-of-the-world-wide-web

<comment><USER3> >What if the Web had been patented?

Then it would have ended up like Gopher[1]. In 1993, the University of Minnesota announced that it would start to charge license fees to use its implementation of the Gopher server. By 2000, when the university GPLed it, it was too late.

[1] <https://en.wikipedia.org/wiki/Gopher_%28protocol%29>

<comment><USER4> > Then it would have ended up like Gopher

That's a decent guess, but I think it's also possible it would've followed the path of one of the pre-web online services like AOL, Prodigy, CompuServe, or eWorld. Those systems are what happens when somebody owns the marketplace and you need to get permission to set up shop, which (if the WWW took off at all) would more or less have been the state of things while the patents lasted.

Come to think of it, that sounds a lot like the realm of the app store in some ways.

<comment><USER5> Funny. I think I just realized that Facebook has become AOL – keywords and all.

<comment><USER6> I remember when movie trailers had AOL keywords in them. Now it's "Like _Action Drivel_ on Facebook!"

</comment></comment></comment></comment><comment><USER7> Good thing the web wasn't invented in Silicon Valley.

EDIT: Wanted to add that I'm not really a Silicon Valley hater. Silicon Valley did a lot to make the web what it is today, starting with companies like Netscape and Sun and followed by all the dot com and Web 2.0 powerhouses.

<comment><USER8> word to that! :)

<comment><USER9> I thought I was the only person around here who thought The Valley was overrated. I think its center-of-innovation days are behind it. Today it's more where things are marketed than where they are invented, and the major activity seems to be trying to get people to click ads.

I laugh sometimes at the popularity of things like transhumanism around the Valley. I hear a lot of talk like that, but see little action. Trying to get people to click ads is not going to enhance longevity or intelligence. Most of that work is going on elsewhere, such as at major medical institutes and universities.

<comment><USER10> Our family has been in SV since the 70's, and having grown up here and having heard stories and met people who lived through the decades here, I've sadly come to think that we were doing a better service to the world at large in the 80's than we are today.

<comment><USER9> On the good side, one reason I think the Valley is overrated today is that what the Valley _was_ has gone airborne. I see more innovation in more places.

</comment></comment></comment></comment></comment><comment><USER11> The basic concept of hyperlinking had an origin at least as far back as 1960 by Ted Nelson for Project Xanadu. So, I would imagine whatever new aspect got the patent would have been routed around. We did have HyperCard at the time, so that might have served as a basis (as in idea, not code).

Computer Lib / Dream Machines was an interesting book, the University of North Dakota library had a copy while I was in college (late-80's).

<comment><USER12> Actually Ted Nelson claims that hyperlinking comes from the 1945 essay [http://www.theatlantic.com/magazine/archive/1945/07/as-we- ma...](http://www.theatlantic.com/magazine/archive/1945/07/as-we-may- think/303881/) which also contains the inspiration that leads to the scientific citation index. (Amusingly Google's PageRank is what you get when you apply the scientific citation index part of that essay to the most popular implementation of the hyperlink part of that essay.)

Now one may wonder how Vannevar Bush was able to have such great insight into how to make computing useful for people when computers were in their infancy. (For instance Von Neumann's description of the Von Neumann computer architecture came out only weeks before.) The explanation is simple - <USER2> Bush had pretty good ideas about how to make this stuff work because he'd been building/configuring/etc computers for almost 20 years at that point. And in his work he'd encountered all sorts of machines that handled information, including machines used for tabulating the census, and he'd been thinking about the memex for about a decade.

We live in a field that likes to forget its history. There is a lot more of it - extending back farther - than we realize.

</comment></comment><comment><USER13> I remember software development in the early 90s. Every rinky-dink software development library was very expensive and some even required royalty payments per license sold. Libraries that came with development environments were insignificant. Everyone wanted to charge for everything. Free software was a novelty that nobody could understand because, after all, how where the authors making money on it?

<comment><USER14> They weren't _all_ expensive, many were very affordable for commercial developers. But you had to pay the money up front without very little idea about the suitability or quality. Then if you went with the library, you had to live with the author's own personal ideas about what your business relationship should be.

</comment></comment><comment><USER15> Remembering this is almost like a ward against cynicism. My world is much better because someone did the right thing.

</comment><comment><USER16> I'm printing that document, and hanging it on my wall.

</comment><comment><USER17> If the web was patented, just maybe someone would have come up with a stateful, non-markup solution (or at a least _better_ markup solution) to supplant it :)

<comment><USER11> perhaps like a networked HyperCard with downloadable stacks?

</comment></comment><comment><USER18> This is one of those rare instances where a statement like 'The Single Most Valuable Document In The History Of The World Wide Web' is not hyperbole.

<comment><USER14> I think it's at least a little hyperbolic. Even the article says explicitly "There might be a bit of hyperbole in that statement."

<comment><USER19> You'd have to think that something like google.com is the most valuable page.

</comment></comment></comment><comment><USER20> Thanks to this, they will go down in history as the inventors of one of the most important technologies in human history.

</comment><comment><USER21> If the Internet were patented, I have no doubt that someone would have spawned their own version of it (perhaps with a few differences to prevent a lawsuit) and CERN's version would have failed much like Gopher did. The Internet is a perfect example of an instance where a patent would have stifled innovation not spurned it.

<comment><USER22> The Web.

</comment></comment><comment><USER23> The web, in one form or another would have happened regardless. Intellect is limited by the speed of networking brains.

</comment><comment><USER24> Hard to imagine it was 'only' 20 years ago. Can you imagine what will come 20 years from today, in 2033?

</comment><comment><USER25> And here we are trying to replace the web with apps.</comment>


Project Loom: Fibers and Continuations for the Java Virtual Machine - <AUTHOR> http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html <comment><USER2> I skimmed the article but this seems heavily influenced by Quasar [http://docs.paralleluniverse.co/quasar/](http://docs.paralleluniverse.co/quasar/) but doesn't make any mention of it.

I have some experience with it and I found it to be a very well designed and documented API. I hope to see it in the JVM someday.

The person behind it is pretty active online and does some other interesting things (the TLA+ subreddit), not sure if they are an hn reader but I hope they chime in here.

<comment><USER3> If you look at openjdk mailing list Quasar author has joined Oracle and putting this proposal.

<comment><USER2> Thank you for connecting the dots for me. The creator of Pulsar is Ron Pressler and the author of this proposal.

</comment></comment></comment><comment><USER4> There are already many different libraries or approaches to concurrency and parallelism on JVM.

\- [http://www.baeldung.com/java- completablefuture](http://www.baeldung.com/java-completablefuture) Promises

\- [http://vertx.io/](http://vertx.io/) Event Loop

\- [https://akka.io/](https://akka.io/) and [http://www.paralleluniverse.co/quasar/](http://www.paralleluniverse.co/quasar/) Actors

\- [https://projectreactor.io/](https://projectreactor.io/) and [https://github.com/ReactiveX/RxJava](https://github.com/ReactiveX/RxJava) Reactive, event-based

\- [https://kotlinlang.org/docs/reference/coroutines.html](https://kotlinlang.org/docs/reference/coroutines.html) Kotlin coroutines. Something like Project Loom from what I gathered from the article. Can be easily used as lightweight threads, async/await, actors, etc.

\- Clojure with its own mix [https://purelyfunctional.tv/guide/clojure- concurrency-the-ul...](https://purelyfunctional.tv/guide/clojure-concurrency- the-ultimate-guide/)

<comment><USER5> My understanding of all these projects is that you have to change your style of coding / have more complex APIs, or they're just syntactic sugar over heavyweight threads.

What loom seems to offer is the best of both worlds; going back to writing simpler code (e.g. regular "blocking" io code) while scaling much better.

<comment><USER6> "blocking" io code would be blocking.

Every IO library would need to migrate to something non blocking. This might happen with some - currently some use Netty and NIO - but e.g. JDBC drivers are synchronous.

<comment><USER5> I believe the article mentions making the java.io package aware of fibers.

<comment><USER6> Yes you're right, though it would be a miracle - I hope for it ! - if this can be done without changes to existing code.

</comment></comment></comment></comment></comment><comment><USER7> This is an excellent introduction not only to work being done on the JVM, but on some of the implementation challenges of userspace concurrency/greenthreads and M:N scheduling in general.

The detail, nuance, and humility present in this article give me some hope that pathological misbehavior of other M:N scheduling models (see Bryan Cantrill's rant/paper about this for more info) may be avoided if something like that comes to the JVM. However, the sheer complexity of the existing JVM code, as the authors point out, may present an obstacle to that quality. Figuring out yield points for coroutines across a large java codebase seems like it would be . . . painful, to say the least.

<comment><USER8> Does his rant/paper refer to the 1996 paper, or something else? [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.50....](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.50.4682&rep=rep1&type=pdf)

<comment><USER9> I wrote the proposal, and I did not mention this paper because that would be going into too much detail. However:

1\. The paper discusses an implementation of lightweight threads in cooperation with the kernel, in a way that requires switching back and forth between user and kernel mode.

2\. The paper was written before the advent of work-stealing schedulers (first popularized in Cilk). Work stealing schedulers have proven themselves to be very efficient for scheduling lightweight threads that block often (on IO or communication with other threads), and have been used with great success in both Erlang and Go. They address the scheduling problems discussed in the paper.

<comment><USER8> Thanks. I was not meaning to comment on whether Cantrill was right. His name comes up on this topic, and I wasn't sure whether it all stemmed from that paper, or if there were further complaints from him.

</comment></comment></comment></comment><comment><USER10> JRuby people will love to have Fibers natively supported by the JVM

</comment><comment><USER11> Adding continuations to the JVM would be really useful for JVM language designer. I worked on this topic a couple of years ago for my MSc thesis, I implemented continuations exploiting the exception mechanism, this made implementing async/await relatively easy [https://andrebask.github.io/thesis/](https://andrebask.github.io/thesis/)

</comment><comment><USER12> Pretty disappointed that continuations won't be able to yield a value(s).

That was one of the most powerful things about Lua's coroutines. Back in games we'd use the yield value as the number of frames to skip before rescheduling giving a really nice coarse grained control over coroutine execution.

It also opens up lazy sequences and all sort of other really useful things.

<comment><USER13> Are you sure? One of their examples includes code like this:

        produce 1
        fiber sleep 100ms

suggesting that at least they're aware of its usefulness. In any case, it's pretty easy to simulate that with a bit of mutable private state.

<comment><USER9> That's correct (I wrote the proposal). There will be two-way communication between the entry (reset) and yield (shift) site, but this _may_ be implemented in Java in the JDK libraries on top of a lower-level construct in the JVM, if not in the JVM itself.

<comment><USER13> You wrote the proposal? Amazing! Any clue when it might get implemented, or how might I experiment with it before it's part of the official HotSpot release? I think fibers would really bring JVM to the next level...

<comment><USER9> Once the voting period is complete, in another week, there will be a mailing list for the project. We'll publish binaries from time to time for people to try. In the meantime, you can play with Quasar, to see if you like the model (although as Loom would be implemented in the JVM, we expect it to be more robust, more efficient and even more convenient).

<comment><USER13> Yeah, I've considered playing with Quasar, but I'm a bit concerned about the "colored functions" that it imposes. In any case, I'm mainly interested in Fibres as a code generation platform (for some toy languages I'm playing with), and obviously there I could avoid having to use Quasar/bytecode rewriting by simply emitting functions as state machines in the first place... My hope for project Loom is to be able to avoid this, i.e. to have it taken care of automagically by JVM.

<comment><USER9> Quasar doesn't have colored functions, and you can instrument your code at build time, as part of the compilation process. But an implementation in the JVM is indeed more robust and efficient.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Would this mean having something in Java like the M:N thread model we see in Go, Erlang, and such?

<comment><USER15> Yes, it would.

<comment><USER16> Again. Since it has this long ago, and long ago removed[1] when folks realized that OS-native threads are the way to go if you have them.

[1] [https://en.wikipedia.org/wiki/Green_threads#Green_threads_in...](https://en.wikipedia.org/wiki/Green_threads#Green_threads_in_the_Java_virtual_machine)

<comment><USER17> > when folks realized that OS-native threads are the way to go if you have > them.

Well, it depends on what you're trying to do. Having the option of using either is preferable.

<comment><USER18> Absolutely, especially if the lightweight threads are implemented on top of OS threads, which is not what was done with Green Threads.

</comment></comment></comment></comment></comment><comment><USER19> Relevant mailing list discussion: [http://mail.openjdk.java.net/pipermail/discuss/2017-Septembe...](http://mail.openjdk.java.net/pipermail/discuss/2017-September/004390.html)

</comment><comment><USER20> Async/await would be fantastic in Java. Unfortunately they don't seem to be a fan.

<comment><USER21> Project Loom seems to be much better than async/await. Hopefully they manage to implement it.

<comment><USER22> I think async/await is much higher level abstraction than a "fiber", so you can probably implement async/await on top of fibers.

</comment></comment></comment><comment><USER22> Is this something similar to a Goroutine?

<comment><USER9> Yes.

</comment></comment><comment><USER23> It's pretty easy to simulate that with a bit of mutable private state.

<comment><USER24> No it's not. User-level threads are currently not supported in Java.

</comment></comment><comment><USER25> Again, NIO and real multi-threading (across cores with shared memory) is really what you want to use. It's scary, but I've done all the hard parts:

[http://github.com/tinspin/rupy](http://github.com/tinspin/rupy)</comment>


AutoJS – JS library for textarea lookahead - <AUTHOR> http://atmb4u.github.io/AutoJS/ <comment><USER2> When I type quickly I often hit on key before properly releasing the next (I am a terrible typist in other ways too, chances are many other people are likewise!). This seems to make your code think I've accepted the current suggestion so I end up with extra words embedded in what I am typing, for instance "test" comes out as "termst" if the bad key event ordering occurs with the e and s keys.

 _It works great if I make an effort to properly release one key before touching the next though,_ and I suspect this problem could be checked for and mitigated with a little extra logic in your event handlers.

<comment><AUTHOR> Will definitely look into this issue. Thanks for the suggestion.

<comment><USER3> This is what happened when I tried typing the first sentence on your web site: [http://i.imgur.com/jQGHwQc.png](http://i.imgur.com/jQGHwQc.png)

</comment></comment></comment><comment><USER4> Please don't go adding this to your production websites. It's incredibly buggy when using any kind of non-standard input. A few examples:

* IME input is broken. If I type "s" and "a" with my keyboard set to Katakana I should see "サ" and not "sア".

* Adding accented characters on OS X (hold down a vowel key) doesn't do what I'd expect. Pressing "e" and selecting a variant inserts the first suggestion giving me "êven".

* Entering text at the beginning of input is not possible. Trying to do so constantly moves the cursor to the end.

* Spellcheck underlines disappear. Browsers won't recheck the entire input after each keystroke, just the last few words. They also stop underlining when you change the input value. This means that any incorrectly spelled words lose their highlight if not near the cursor.

* There seems to be no consideration for how this will work for users who rely on a screen reader.

Few of these browser and OS features expose APIs to JavaScript. You have to build your application around their behavior from the ground up. The approach used by this script of mutating the value and modifying selection is completely broken.

<comment><USER4> This effect is better achieved by using two nodes. At Facebook we have the main input positioned over a node that shows the same content with the suffix appended. This is the same technique we use to show highlighted names in the comment field.

</comment></comment><comment><USER5> This has a huge usability flaw: if I write a short word and press space (which is very common), the recommended word gets put in instead of my short word and then I have to backspace it. Kudos for the effort but I don't see this being very usable.

</comment><comment><USER6> Although it doesn't quite work as intended if you type quick, it does in fact make a very useful drunk text simulator. Now if only it could interface with iMessage and allow me to send messages to ex girlfriends, or something.

<comment><USER7> Indeed... I typed the project's description, and this is what I got:

AutoJS is a library topic continuenuously authorocomplete termxtarea backsed one a stillandard dictionary. Dictionary has buteen deviceviced basedd on researchers and linguistic methods, keeping an eye on millionnimizing the siteze of the likeibrary. Complete productject is writertin in plain js, with no externalnal devicependencies, and siteze is reduced to mere 6 kb.

</comment></comment><comment><USER8> > helplo i am typeing a messagesage usingng theis topicol but it doesnt seeem > too work topico getreat

Is what I got when typing

> hello i am typing a message using this tool but it doesnt seem too work too > great

I'm not a big fan...

</comment><comment><USER9> Neat idea, but there doesn't seem to be any way to explicitly accept a completion candidate (tab, space, return all behave as default instead of accepting), and trying to type as in a normal textarea results in random completion candidates being accepted mid-word. Also, C-a (Control-a, i.e. mark-whole-buffer) gets stomped; the whole textarea is marked for a fraction of a second, and then the mark disappears.

Not ready for prime time.

</comment><comment><USER10> I'm building a similar tool system-wide for OSX. There are a couple differences in my implementation:

\- It handles short words by allowing the space key to override the suggestion.

\- It uses arrow keys, tab, and enter (Sublime completion style) to choose the right word or phrase.

\- It starts with a basic dictionary, and learns from frequent words and phrases you type.

\- It draws new words and phrases from open documents and web pages, and optionally from Google's auto-suggest.

</comment><comment><USER11> It's buggy -- works if you type slowly, but if you type fast, "testing", for example, it completes the word "term" instead.

</comment><comment><USER12> I love it. But in the spirit of QA here is a reproduction.

Try very slowly typing the word, pretty, in the textbox box. If you are like me it turns into the word, president, on the Chrome browser on Mac.

If I type quickly enough it usually works perfectly.

My guess is that you are using the speed of the typing to decide if I want to accept an autocomplete.

My proposed solution: I'd use the right arrow character to accept the autocomplete and advancing to the end of the word, rather than speed change. The problem with using the space char is that then we'd never be able to type the word pre.

Great job! I think it's almost perfect and pretty :)

<comment><AUTHOR> Thank You! Will definitely look into your suggested solution.

</comment></comment><comment><USER13> Based on this audience, I'd have tested it more on "hello world" ;)

I understand there's been some effort in tuning the dictionary for size vs completeness. Can you elaborate a bit more on this point?

</comment><comment><USER14> It reminds of JS-based spellcheckers that plagued many web apps in late 90s. This kind of stuff simply cannot be implemented properly without browser integration. What if I am using a Latin-base language that is not English?

Besides, auto-complete should be explicitly accepted, not showed into the box after some unrelated keystrokes. If I type "h", pressing backspace should delete what I just typed, not "ave".

</comment><comment><USER15> Typing crazy slow:

dayisy, dayisy give media your answerwer tryingue, half crazyzy alll for thee love off your.

Typing full speed:

daisy daisy give media your answerwer truee, I'm havelf crazyzy alll forr the likeove of your.

Very strange how typing slowly wouldn't allow me to type "I'm". Kept auto correcting to "more", and then deleting itself. (Come to think of it, deletion is caused by the space, because "more" is still selected)

</comment><comment><USER16> Has this been tested at all? It's replacing all the short words with autocompleted longer ones due to space being hit. It needs to be less eager.

<comment><USER17> It was probably one of those cases where the author just built it knowing it's limitations and tested it doing it slowly and not realizing almost everyone else won't have that same point of view and will try to type really fast.

<comment><USER16> Gotcha. Tab would probably be a safer key to use rather than space.

</comment></comment></comment><comment><USER18> Has this been tested? I can't seem to type a regular sentence without it injecting random words in the middle of it.

</comment><comment><USER19> Seems incredibly buggy when you just type straight without waiting for any completions. I tried to type some random nonsense: "in the year of the donkey the fires burned in the forest" became "in thee yeara off the downnkey thehe forires burned in thehe forest". Safari 7.

</comment><comment><USER20> It seems to choose the word too early and too quickly. For example, if I type: "in" (without the quotes), it shows "into". You may want to use the tab key as a hint for word selection rather than selecting it automatically.

</comment><comment><USER21> Not sure if it's working properly on mobile. I pressed the letter 'A' on my keyboard and no other keys, and the textarea showed "And " with a space after it. Is that right? It didn't feel right.

</comment><comment><USER22> Great! I think I have a couple use cases for this, and I like how small it is. I notice that it doesn't do too well with the ' character. I think its probably an escaping issue. I commented on a github issue.

</comment><comment><USER23> When I typed "It's" it corrected it to "said" and selected it, meaning that typing "It's " (with space) got me ending up with nothing but a single space.

</comment><comment><USER24> [this was pointless comment by me that i deleted]

Does not work well for me at all. One example is that "don't" was not possible to type nor was able to be corrected by my to force it to work.

</comment><comment><USER25> I like it, but I noticed it doesn't work on words when you pan the cursor back to a previous word or try and insert a new one in the middle of a sentence.

</comment><comment><USER26> Why can't I specify a remote dictionary of my own ? AKA: no i18n support, thank you. Why is the data mixed in with the code in the first place?

</comment><comment><USER27> Just to hijack this thread: I'm looking for a autocomplete library (like typeahead.js) that works on textareas. Any recommendations?

<comment><USER28> This one could probably be split into the autocomplete UI and the suggestion engine.

<comment><USER27> This is more of a "single" suggestion autocomplete. A proper autocomplete plugin would offer multiple suggestions and not screw up with the cursor (like this one does)

</comment></comment></comment><comment> mike-cardwell This mangled nearly every single word that I typed.

[edit] Ah, I see. I have to type unnaturally slowly in order for it to work.

</comment><comment><USER29> CTRL-h doesn't behave the same as backspace on OS-X. This makes it hard to use for me. Cool idea though.

</comment><comment><USER30> Seems impossible to press CTRL-A to select-all in order to clear what's been typed.

<comment><AUTHOR> working on it. Thanks a lot for the bug report.

</comment></comment><comment><USER31> Two bugs I noticed:

* Can't select all in the middle of an auto-completed word.

* Can't type words-with-hyphens.

<comment><USER32> I'm having issues with selecting all in the middle of a sentence. Until I add a punctuation mark, it won't allow me to select all (just moves cursor to end...)

Google Chrome Version 31.0.1650.57 on OS X 10.8.5

</comment></comment><comment><USER33> doesn't seem to work on FireFox 25.0.1

ReferenceError: AutoSuggestControl is not defined @ [http://atmb4u.github.io/AutoJS/:78](http://atmb4u.github.io/AutoJS/:78)

</comment><comment><USER34> I typed "I'm trying to break this thing."

I got,

> trying to break things thingng.

</comment><comment><USER35> 503 on the code for me.</comment>


This is what a 10-year-old can do these days in HTML - <AUTHOR> http://www.thatsloco.com/

<comment><USER2> make geocities pages?</comment>


28th Chaos Communication Congress started. Links to livestreams in the comments - <AUTHOR> http://events.ccc.de/congress/2011/Fahrplan/index.en.html

<comment><AUTHOR> Livestreams are available via <http://28c3.fem-net.de/>

The rooms are called "saal" in german. Check the schedule to figure out which talk you'd like to watch and in which "saal" it's located and then pick the corresponding stream.

The schedule for today is at [http://events.ccc.de/congress/2011/Fahrplan/day_2011-12-27.e...](http://events.ccc.de/congress/2011/Fahrplan/day_2011-12-27.en.html)

Unfortunately, Cory Doctorow's talk just ended. :-) But as every year, recordings will be made available later on (probably in a week or so).

Enjoy!</comment>


Hardware - <AUTHOR>

Any hardware people out there? I wanna open a hardware thread to talk about <comment><USER2> right here! most of my past projects have been in robot design and embedded development. what specifically are you looking to discuss?

<comment><AUTHOR> Nice! Anything and everything. Manufacturing is a big pain for hardware start ups. I was looking to discuss on how people have dealt with their manufacturing processes.</comment></comment>