Give me back my sanity: How I had to install Pandoc in a CentOS Docker container - <AUTHOR> https://gist.github.com/grownseed/4fd2e91eca829cc039de <comment><USER2> Congratulations! You are now closer to being Enlightened.

You now have a closer understanding pf the hundreds of thousands of man-hours that distribution maintainers spend doing this _every single day_ just to give you a working application. Keep in mind of course that all of which you performed will not replicate properly, because it doesn't use a spec file, doesn't record its build deps, run deps, permissions, has no uninstall or upgrade, doesn't use standard paths, probably skips a whole bunch of correct procedure and bug fixes, uses some real-time dynamic package managing/installing thingie, yadda yadda....

It's not that software development procedures are broken; actually, they're really, really well defined for most of the Open Source world. It's just that most humans have no clue how much work goes into giving them some 'basic' products. Kind of like how most people have no idea how much of a multinational effort goes into producing a bottle of Coke.

Could said tool be written with no dependencies? Sure. But that would be a total nightmare in and of itself. At the end of the day, code reuse and layers of abstraction are useful... as long as they're designed and used properly.

<comment><USER3> The funny thing is that given maintainers do this all the time so they'll work faster, and he's apparently figuring it all out the hard way the first time, by the time he's done the maintainers have likely already uploaded. Probably. Or at least they could have.

<comment><USER2> It's usually not that simple. If you already have passed the learning curve of knowing intimately how to maintain packages for your distro, it's a "simple" matter of updating the old .spec files with the newer versions and sending the distro maintainers your newer .spec. But there's no guarantee they'll incorporate your new package in a timely manner (and it will go into an -UNSTABLE tree anyway, which his Centos 6 install isn't using)

</comment></comment></comment><comment><USER4> This is just a case study in why using CentOS for anything is like amputating your left leg - if you're going to do it, you better have a damned good reason, and no matter how justified you are, it's still going to suck.

But I don't disagree with the author's pain point. Computing is sort of way harder than it needs to be a lot of the time.

<comment><USER5> Yeah I'm not sure I understand the choice of OS here unless it was required for some reason.

<comment><USER6> I have CentOS 7 installed on my desktop computer!

There are dozens of us! Dozens! But I honestly don't have any major complaints.

1\. Packages aren't THAT out of date (firefox is the latest ESR, gcc is 4.8)

2\. Things tend to be nice and stable

3\. I sometimes end up needing to compile some stuff from source even on faster moving distros anyway

<comment><USER7> That is because Centos 7 was just released. Let's talk again four years from now.

<comment><USER8> Yeah, every time I ssh into a box and see "terminal type not supported" (screen-256color), I know its using CentOS 5.x.

Which means ssh doesn't have netcat mode, rsync can't write to log files or show progress properly, and all my tmux bindings are messed up.

</comment></comment></comment></comment></comment><comment><USER9> Sometimes, the easiest thing is to just compile a binary elsewhere, and drop it into the system. Especially when you are dealing with CentOS (RHEL, Scientific Linux, ...).

"Linux"* is usually forward-compatible, meaning that a binary compiled with an old system will run on a newer one. Maybe you have to bring all your own libraries with you, and place them on LD_LIBRARY_PATH, but you can get it to work. I can't count the times I had to extract .so files from RPMs I found on the net. Feels a bit dirty, but surprisingly works.

Actually, at one point I compiled my own glibc (simultaneously with GCC), and then the full GTK stack. I played a bit with RPATH so the binaries looked for libraries at relative, not fixed paths. Then I could just drop the whole usr tree somewhere, source a script (setting a few variables) and I was able to run current software, including current versions of Skype, Firefox, and LibreOffice on my ancient OS __at work. There are binaries for the latter two, there is no way I would compile those, too.

Its a bit unfortunate that there is no "culture" of using binaries when necessary on Linux. If people were more aware of the use cases and details, the experience would be a lot smoother. For example, creators of binaries could compile against older system libraries to get maximum compatibility. Or, you could have bundles of libraries (distribution-agnostic, and not installed in /usr) to run new apps on an old OS. Ironically, Windows has the distribution of third-party binaries figured out much better... although I do not envy Windows for the installation situation there, and in 90% of cases prefer the package managers of the Linux world.

(* And here, I mean Linux distributions, not just the kernel. So Linux+glibc+GNU+bash+X11+related stuff, but maybe a few of those are swapped out for alternatives. Just a reasonably GNU/Linux-Like Posixy System, but not Cygwin or OS X.)

(* * Which I was stuck with for reasons out of my control.)

<comment><USER10> > The reason that there is no "culture" of using binaries when necessary

I don't understand what you mean.

Outside of Gentoo, most distros are based on binaries - I don't need to install GCC in order to install programs via 'apt-get' or 'yum install', nor do I need GCC in order to run them.

\--

Assuming you mean 'culture of not using the built-in package manager', here's what I think:

While I've definitely done "scp a.out $other_system:" that only works for the most trivial of programs. After you accumulate a few more files, it becomes "scp foo.tgz $other_system:" because there're some library files/whatever to be included.

But then it turns out some of those files need to get put in the right place, so the next step is a rudimentary runme.sh script that sets up the system.

Hang on, what's the last version we 'installed'? Just have runme.sh stick version info in /etc/foo.conf.

Congratulations, you've got a rudimentary packaging system!

The reason there's no culture of avoiding the package manager is because it's there to help you so you don't have to manually hunt down rpm files to extract .so files, among other things. (If I never have to use rpmfind.net again it'll be too soon.)

</comment></comment><comment><USER11> Have a look at this:

[http://ianmiell.github.io/shutit/](http://ianmiell.github.io/shutit/)

which is a means of capturing this complexity for automation purposes.

[https://github.com/ianmiell/shutit](https://github.com/ianmiell/shutit)

I'm working on a "shutitdist" to compile "everything" from source:

[https://github.com/ianmiell/shutitdist](https://github.com/ianmiell/shutitdist)

ShutIt can (among many other things) produce depgraphs like this:

[https://raw.githubusercontent.com/ianmiell/shutitdist/master...](https://raw.githubusercontent.com/ianmiell/shutitdist/master/docs/depgraph.png)

</comment><comment><USER12> Thank you for documenting this so others don't have to go through the pain. The best thanks people could give would be to file bugs for each of your annoyances that are still relevant. Now that the problem is actually a bit more reproducable, the bugs should be relatively productive uses of the maintainers' time.

</comment><comment><USER13> This about the impedance mismatch between building everything from source and using distro package management. Mixing and matching is painful, as package managers correlate a lot of package metadata in order to provide smooth integration and interdependencies of multiple packages.

Building everything from source "by hand" quickly runs into scaling problems, and admins start to roll their own "package databases" in order to cope. Fully-baked package management becomes the solution. The problem here is that distro packages are not the latest development snapshots (for good reasons, most often and presumably). Still, there are times where newer-than-distro- repo software is required.

The author's Pandoc case _may_ be one of those, but I doubt it. RHEL (and CentOS) packages should never (by definition) include showstopper bugs. It's more likely that bugfixes have been backported to the older, stable version. Still, it's possible that the author is correct, and the official package does not meet requirements or is otherwise unusable.

In that case, the best path forward is to build or reuse _an updated package_ , rather than installing from development sources "by hand", e.g. `make install`. It's likely that someone else has already had this problem and has built an updated package, which you could then install, but let's assume not.

Now we're into the wonderful world of package building. We can avoid some of the author's pain here, but mostly there is a tradeoff for having to learn and deal with the packaging pipeline. The upshot is that package building may be scripted and synched with development sources, and you are keeping the metadata inside the packaging system where it belongs and can be managed (think: future updates).

<comment><USER14> I can't help but compare this to OS X, where most applications are bundled together with any dependencies that you can't safely assume will exist because they aren't included in the OS.

Yes, it does waste some disk space. But the $5 worth of disk space that this approach costs me is more than justified by the $5,000 worth of gray hairs it saves me.

My only lament is that things still fall back to the annoying old-fashioned way of doing it whenever I need to install software that's more Unix than OS X. Which, given I'm a programmer, is still pretty much all of it.

<comment><USER15> Sure, and Windows is much the same wrt bundling. The tradeoff is that now you've multiplied the responsibility of library updates across everyone that bundled it. You probably won't care if simple library version updates are missed, if the app itself doesn't care. You might care more about bugs that require every app to update, especially if it's a security bug.

<comment><USER16> Sure there's a tradeoff, but for most people it's really rare to use software that isn't being actively maintained. So let the maintainers update their dependencies when there's a security flaw, the auto-update will pull in the changes, and I'll still benefit from OS X's 30-second install process.

</comment></comment></comment></comment><comment><USER17> I've been there many, many times and have often wanted to live on an island with no technology too. But to offer the opposite perspective ...

Yesterday I setup Docker and Fig to provide me with postgres and mysql containers so I could run the integration tests for a small sql oriented module I wrote. Other than waiting for the images to download, it was an absolute breeze. In a matter of moments and a simple config file, I get two databases at the drop of a hat, and they're not mucking with my main box at all. Sometimes, I really love software.

<comment><USER18> Setting up a private Docker registry though, especially with the (recommended) setup of an nginx proxy for basic auth and SSL... that's a complete nightmare. And I still can't get it to work =/

<comment><USER17> Maybe by design so you pay for Docker's private hosting? :)

</comment></comment></comment><comment><USER19> Providing feedback in the right places can work wonders for both the individual developer and her community. For anyone struggling with CentOS Docker sanity I suggest reaching out to the team with any questions on a related Github repo. [https://github.com/CentOS/sig-cloud-instance- images/issues/](https://github.com/CentOS/sig-cloud-instance-images/issues/)

I recently did such a thing [https://github.com/CentOS/sig-cloud-instance- images/issues/2...](https://github.com/CentOS/sig-cloud-instance- images/issues/2#issuecomment-58259012) In addition to a resolution, here's the caliber of (free, unpaid) support I received:

> ... let us know what other containers would be useful to you? ... Finding > out what's actually useful to folks helps immensely.

</comment><comment><USER20> 2 things:

\- distro developpers put a lot of work in making distros easy to use and thus why yum install pandoc is simple and easy. we often take this for granted.

\- when people create new apps they very, very often think they can do better than others and suffer from the NIV/+1 standard. Hence multi libs, multi package managers and 203939megs of bloat. Programs that are proud of make install vs make + make install generally have this behavior obviously.

In our case id recommend testing with some recent version of Fedora. its pretty close to CentOS but much newer. Of course that means you'll have to go through distro update more often.

</comment><comment><USER21> I had the exact same problem on an Ubuntu server at work. Since I don't have root access, I was forced to compile from source. I gave up when I couldn't compile Cabal.

My solution was Multimarkdown 4 [1]. It supports many basic Pandoc features I need (tables, etc.). Exports to HTML and PDF. Since it is written in C, the compilation was straight forward. 10 minutes later, my document is ready. Couldn't have been happier.

[1]: [https://github.com/fletcher/MultiMarkdown-4](https://github.com/fletcher/MultiMarkdown-4)

</comment><comment><USER22> Wildly the best thing I've found so far on dependency management: [http://nixos.org/docs/papers.html](http://nixos.org/docs/papers.html)

<comment><USER23> Yep, I just switched from Ubuntu to NixOS over the weekend. Solves these problems wholeheartedly.

<comment><USER24> Wow, I just read through the documentation for the Nix package manager and it's a breath of fresh air...Source based builds but with the convenience of pre-compiled binaries hashed with all the input parameters used to create those binaries:

[https://nixos.org/nix](https://nixos.org/nix)

Has anyone tried using this for development?

<comment><USER25> Yes, and it has been great. I recently had to diagnose a problem in some software and its dependencies, and I needed a quick way to try different build flags and dependency versions. Nix's deterministic builds (and having access to all of the packages definitions in one location) are a huge help here: it only took a couple _seconds_ of configuring between each build, and I quickly isolated responsible library/version out of a couple dozen deps.

</comment></comment></comment></comment><comment><USER26> In cases where I need later versions of applications than what comes with my distro (Ubuntu 12.04 ATM), using the original source packages is very helpful as they already correctly list all the dpendencies and they will install perfectly into the existing system.

So you grab the source package, update the version of the upstream ounces, update the changelog and build an updated package, with as much original OS dependencies as possible.

I don't know about RPM sources, but for debs, this is what I had the most success with.

<comment><USER27> This. The dumbass in the article doesn't know about packaging and made his life needlessly difficult.

</comment></comment><comment><USER28> CentOS is seriously in need of a better way to find and install programs not in the base OS.

Currently, if you want to install something that isn't in the official repos, you either need to compile from source or download a bunch of rpm's from random websites that may or may not be legitimate. (What is this, Windows?) None of the third-party repos have a decent search function, either, so it's difficult to tell whether they have the version I need. Heck, even the official repo isn't quite searchable on the web, you need to use yum on the command line.

Example: Using only a web browser, find out the latest version of OpenSSL in CentOS 6.5 and the list of its dependencies.

Compare this with Ubuntu, where nearly everything you could ever want is organized into easily searchable PPAs, and looking up a package on the web is as easy as going to packages.ubuntu.com/package-name. No manual downloading of packages from random websites. No need to dig into mailing lists to find out which version of bash actually fixes shellshock.

This is not a matter of rpm vs deb, or yum vs apt. This is not a matter of stable vs cutting-edge. This is a matter of the general ecosystem being totally haphazard, fragmented, and user-unfriendly.

</comment><comment><USER29> This was similar to my experience with Haskell and Ubuntu. The Haskell ecosystem seems to have both severe version compatibility issues and issues with transitive dependencies ballooning out of control.

I mean, this is a tool that processes text right? Not sure why there should be hundreds of megabytes of dependencies at any step.

Actually I was expecting a rant about Docker... it didn't really have anything to do with Docker, as far as I can tell.

</comment><comment><USER30> Hum. As someone who's fooled around here... this is the long way around for pandoc.

The 'proper' way would be to get the latest Haskell Platform in a RPM (I think?), and then using that, install pandoc.

It's the case that anything I depend on for up to date software is, as a rule, compiled from source, using the latest tag. The distro maintainers are years out of date, always. Sometimes this matters... usually it doesn't.

</comment><comment><USER31> I am not claiming this is going to be less painful than what author experienced but on Debian/Ubuntu - `apt-get build-dep` can be sometimes very useful for installing source dependencies of packages when you are compiling something more latest by hand (Such as, Compiling emacs 24.4 by hand? `apt-get build-dep emacs` and then compile emacs).

On another note - I like that additional ppas some more popular open source projects provide. Such as - nodejs. mongo etc. These def. help in installing _the latest_ version of required software. However maintaining ppas for lone developer project can be chore (although much of that can be automtated via launchpad).

</comment><comment><USER32> In general if you're going to run CentOS or RHEL, you need to either be ready for operating within their versions of packages, or for a lot of pain. Unfortunately the tradeoff between "stability" and "new" is pretty harsh with these. It is my hope that Docker alleviates this somewhat, and I think it was really smart for the author to install this "big bag of source compiled craziness" under a container instead of polluting the host OS environment.

</comment><comment><USER33> > I would like to extend my gratitude to Google, StackOverflow, GitHub issues > but mostly, the people who make the beer I drink

This should really just be my email signature.

</comment><comment><USER34> I've had very similar problems building in-house Openstack RPMs for CentOS 6 (now using Juno.)

You might have better luck in the future just grabbing the el7 stuff (or Fedora 20) and build them using the CentOS spec file:

[http://pkgs.fedoraproject.org/cgit/pandoc.git/tree/?h=epel7](http://pkgs.fedoraproject.org/cgit/pandoc.git/tree/?h=epel7)

</comment><comment><USER35> Somebody should contribute a Dockerfile to Pandoc upstream, so jgm can provide an official Pandoc Docker image (ideally as an automated build done by Docker Hub). Now, let the bikeshedding begin on which distro to use as the base. I vote Debian Wheezy, if it has a recent enough Haskell Platform.

</comment><comment><USER36> On CentOS it can be hard to stay current because yum tends to use older builds. I haven't found an ideal solution for all cases; what I do is build current versions from source, in `/opt/$program/$version/`.

I also use static linking when possible; this helps enable the binary to be copyable to other similar servers. I also use Docker and/or Ansible and/or scripted installs when possible.

This overall approach does mean being committed to updating dependencies and rebuilding, which is especially important for security updates e.g. shellshock. It also means specifying environment paths so you get the versions you want, rather than the default CentOS yum versions. YMMV.

</comment><comment><USER37> If the problem is that the version of pandoc in CentOS 6 is too old, then why not try to use a CentOS 7 container as a base? In the end aren't containers about choosing whichever OS image is better suited for a task?

<comment><USER38> Environment restrictions matter here. If you're running on Citrix Xen Server latest (v6.2 like we do and are heavily committed as a business to Xen Server) then you're stuck at CentOS 6.4 (or Ubuntu 12.04 and Debian 7.0).

Trying to run anything newer in any sort of mission critical role, and it screws up, will result in being told it's unsupported.

I'm keen on being able to support Docker but CentOS 6.5 is the earliest version that has out of the box support and CentOS 6.5 won't be supported by Citrix until the next XenServer release.

But, for us as a smallish hoster targeting businesses with managed services we value long term support and stability even if it means having to wait a bit for the fun stuff to arrive.

<comment><USER37> Isn't the Docker container all userspace with no kernel components? What is the difference between running a Docker container for pandoc with CentOS 7, or running a Docker container with CentOS 6.4 and manually built pandoc? Isn't pandoc equally unsupported in both cases? In fact as the OP mentions the pandoc in CentOS 6 was broken, so if it supported why wasn't a solution provided via the support channels?

<comment><USER38> _> Isn't the Docker container all userspace with no kernel components?_

Yes but you still need a minimum kernel version to run Docker (2.6.32-431 or higher according to [0]).

Earlier this year when we were exploring Docker, CentOS 6.4's latest kernel version didn't meet that requirement so Docker was a no-go. CentOS 6.5 was the min version with a supported kernel but our Citrix XenServer environment (6.2SP100) had no official vendor support for >=6.5. We don't run anything on our Citrix environments unless it's properly supported by them.

Now because of your comment and doing my fact checking, I just found out that CentOS 6.4's kernel is now at version 2.6.32-504 which is damn fine news for us. That said we'd still be stuck with CentOS 6.4 containers because CentOS 7 containers would still be unsupported by Citrix.

[0]: [https://docs.docker.com/installation/centos/](https://docs.docker.com/installation/centos/)

</comment></comment></comment></comment><comment><USER39> 7.8.3 is the current version of GHC.

I have no idea if these are compatible with CentOS or RHEL, but I have install instructions for Fedora in my guide: [https://github.com/bitemyapp/learnhaskell#fedora-20](https://github.com/bitemyapp/learnhaskell#fedora-20) that were contributed by davidfetter on github.

</comment><comment><USER32> If the folks behind Haskell want it to be used in an enterprise environment, I would think they'd want to release their own RPMs for recent version of RHEL/CentOS/SUSE.

</comment><comment><USER40> This sounds easy compared to some of the hell I have burned in to get certain things configured like converting an EC2 PV AMI to HVM. Or maybe using oAuth in any incarnation.

</comment><comment><USER41> If you're ok with using conda (python pkg mgmt tool) you can do conda install -c wakari pandoc, and it should just work

</comment><comment><USER42> I had to go through similar machinations with getting the latest subversion on rhel 5. I feel your pain.

</comment><comment><USER43> So it looks like he needed CentOS 7 and installed v6.

"Oh, I installed years old distribution and it's years old! OMG!"

</comment><comment><USER44> The _real_ problem is that Pandoc is written in Haskell.

<comment><USER45> In what way is that a problem?

Haskell is certainly a reasonable choice for a markup transpiler.

<comment><USER44> I agree, Haskell is a great language, but its ecosystem has much less support than C. Luckily for us Atwood made jgm write CommonMark in C.

</comment></comment></comment><comment><USER46> So you had to build a few deps, who hasn't had to do that?

I recall having to build a largish dependency tree to get a recent version of Gtk2 running on Solaris10, from Glib2, atk, cairo all the way up.

That's life.</comment>


Ask HN: How do you make sure your team completes the tasks they commit to doing? - <AUTHOR> What kind of criteria should you set for the team to meet their commitments for the sprint? Do you punish underperformers or just give underperformers less responsibility? If that's the case, how do you build up their confidence and velocity? <comment><USER2> If you are the team lead or senior person the first thing you do is don't let the team or an individual member overcommit what can be done. Managing expectations is the first rule before you ever get to team performance. Because if you fail at managing the teams internal or external expectations than the chances of failure go up dramatically.

Second, every team member needs to provide input on what is reasonable to get done and to be clear on what the expectations are. If the team isn't bought in leadership failure goes up for individuals and the team. So let's say the team has bought in and you have managed expectations externally and not let the team overcommit. Now you have someone that isn't meeting the expectations on your daily/weekly validation steps. You now need to have a conversation about why and what is happening. Is it maintenance on another project or component that is causing it, are there other outside factors, or is the person just behind because of a lack of proper skillset etc.

So essentially, if you are doing this right, you get team by in, manage expectations internal as well as external and than you follow up regularly so you don't have a team failure or even an individual fail without plenty of attempts to fix it or prevent it along the way. And when you are doing this, you aren't approaching team members confrontationally, you are getting feedback, understanding by listening and than communicating. Sometimes people do need a little kick in the butt (so far I've never met anyone immune to that need at some point), but most other times people need to be heard, and have clear expectations.

If you follow this, the teams' confidence and velocity almost automatically go up drastically. Holding people responsible is absolutely required, but you need to first have clear and managed expectations as well as communication.</comment>


Don't Bet on Moore Saving Your Ass - <AUTHOR> http://jeremy.zawodny.com/blog/archives/010841.html

<comment><USER2> I'm very interested in book recommendations for scaling websites from hundreds of users to millions of users. I'm interested in both database and web server configurations as well as hardware details, and war stories from the trenches. Also, I'd like to know if there bits of wisdom I can incorporate into my 1.0 codebase to make scaling easier should I be fortunate enough to have that problem.

Ideas from the HN crowd?

<comment><USER3> <http://oreilly.com/catalog/9780596102357/>

Building Scalable Websites by the Flickr guy.

</comment></comment><comment><USER4> Does anyone know if PostgreSQL has this similar multicore bottleneck?

<comment><USER3> PostgreSQL is much better at using multiple cores, but it doesn't matter (at least not for web applications).

Web applications don't have a problem handling one person. They have a problem handling 1,000 people who all want to load a page at the same time. That means that you're not worried about using all your server resources for one query. You're going to have 1,000 queries and so 250 go to each core in a quad-core box and you don't care that MySQL (InnoDB really) doesn't do the multi-core thing because it's not like PostgreSQL would benefit from it since it's just easier to do different queries using a different core.

Multi-core capabilities could help when you are running fewer concurrent queries than you have processor cores. However, once you get to 4-8 concurrent users, you don't need to worry about it so much because you'll saturate all the cores through the different queries and when you're below 4-8 concurrent users you don't need to worry about it because it's easy to serve few users.

Now, for data warehousing and other applications, multi-core capabilities can be the difference between a query taking 1 hour and a query taking 4 hours. But that's not a web application. In fact, using MySQL for data warehousing is just a bad idea.

The author is totally right that you shouldn't just expect technology to save you (and I personally think DHH is taking the "wait until it is a problem. if becomes a problem and new hardware can solve it, do that. if not, then deal with it" approach rather than simply expecting a solution). However, web applications are about running many things at once, not running one big thing.

P.S. Databases usually aren't CPU constrained. It's almost always memory or disk that slows you down. Spend the money on more RAM or better disks and don't worry about the CPU so much.

P.P.S. Both MySQL and PostgreSQL are wonderful databases for web applications so let's not turn this into some silly flame war, please?

<comment><USER5> PostgreSQL is much better at using multiple cores, and it absolutely _does_ matter for web applications.

When you have 1,000 people who all want to load a page at the same time, you're only going to hit the database once for that.

What you will have instead is 5,000 people who want to go to 1,000 different pages, some of them updating data and some of them retrieving it, and you will have 1,000 different queries that are either selects or updates.

Now, PostgreSQL was designed from the start to be robust enough to handle this type of concurrency - to allow the minimum amount of data to be locked while updating, to free the selects from being blocked by those writes. As a result of being built on such a solid foundation, it has been easy to optimize over the years, and has supported the emergence of commmon multi-core computing quite well.

MySQL, on the other hand, was designed to return queries extremely quickly, with as little getting in the way of doing so as possible. Unfortunately, their model did not scale as well. When you have 500 reads and 1 write, and you lock the entire table for that write, it's not a big deal because the write takes no time and you're unblocked again. But when you have an array of hundreds of simultaneous reads and writes, it becomes a mess if you don't have fine-grained locking capabilities. That having been said, MySQL is progressing as well.

But I think (not trying to start a flame war) that PostgreSQL did things slow and right in the beginning and it's paying off pretty well.

Finally, I disagree that databases are not CPU constrained. Any website with decent traffic will have the database entirely cached in RAM at all times, with the only disk activity being the journaling.

<comment><USER3> PostgreSQL was designed "correct" from the start. However, MySQL does many of the same things today.

You start by saying you'll have 5,000 people who want 1,000 different pages with some updates, some selects, etc. Well, once you have more queries than cores, the benefit of splitting work over multiple cores is gone since none of the queries can logically use even a whole single core given the level of concurrency.

You go on to say that PostgreSQL was designed to eliminate unnecessary locking so that selects wouldn't be blocked. MySQL's MyISAM database doesn't support this, that is correct. However, InnoDB does support the same MVCC model that PostgreSQL uses and likewise eliminates the locking issue.

Your argument rests on MySQL locking an entire table to do a write: "When you have 500 reads and 1 write, and you lock the entire table for that write, it's not a big deal. . . But when you have an array of hundreds of simultaneous reads and writes, it becomes a mess if you don't have fine-grained locking capabilities." A great article on this problem is here: [http://www.onlamp.com/pub/a/onlamp/2001/05/25/postgresql_mvc...](http://www.onlamp.com/pub/a/onlamp/2001/05/25/postgresql_mvcc.html). It's great that PostgreSQL supports that, but MySQL supports it too today (<http://wiki.oracle.com/page/InnoDB?t=anon>).

There are plenty of things that one can say are issues between the two. MySQL's inferior query planner. The fact that PostgreSQL can suggest indexes based on query history. PostgreSQL's weak replication (Slony-I's communication costs grow quadratically, yuck!). MySQL's acceptance of February 31st as a real date. MySQL's poor subquery optimization. PostgreSQL's more limited data partitioning.

They aren't equal in all ways and PostgreSQL is a wonderful database, but saying that MySQL needs to lock a table to do a write is just wrong in a very partisan manner. I've never really understood such partisanship. Knowing the strengths and weaknesses of multiple products makes you aware of what is good for a project and what isn't. Even better, once you're using one of them, you know what to do and what to avoid with it. Not confronting the reality of how alternative systems work just means that the chance of picking the best system is more luck than information. For what it's worth, I use PostgreSQL in my personal projects. It's great. However, it's also important to understand that MySQL of 2008 is not MySQL of 2001. It's come a long way in the "correctness" camp and the old arguments about Multi-Version Concurrency Control don't apply anymore.

Oh, and from Power PostgreSQL, Disks > RAM > CPU (<http://www.powerpostgresql.com/PerfList>).

<comment><USER5> 1) I understand that MySQL (with InnoDB) supports row-level locking today. I was speaking of both databases as they existed in the past, to express how much easier it was for PostgreSQL to optimise and scale over the past decade.

2) I am not trying to slam MySQL. But seven years ago, we had one database which was not ACID compliant and had inconsistent behavior, but was very fast. And we had another which was designed and built properly from the ground up - with the future in mind - but was quite slow. There were advantages and disadvantages to each one. But over the past seven years, PostgreSQL has had time to optimise and stabilize code, and as a result it performs just as well as MySQL in most cases. Whereas in the past seven years, MySQL has worked to implement the essential features that allow it to be a robust database. If you were starting a website in 2009, why would you pick MySQL? I could easily understand why in 2001, but not now.

3) My point is that the "Disks > RAM > CPU" argument is no longer valid. The point of that statement was that you should spend your money on disks first, then RAM, and focus less on CPUs. This is not true in 2009! Now (for web apps), you can easily buy enough RAM to cache your entire database. All of a sudden, RAM and Disks are no longer an issue and your DB becomes CPU limited. All that discussion about "more spindles = better" and "raid 1+0 > raid 5" is not very important anymore; you just need a disk that's fast enough to log your transactions.

<comment><USER3> Well, I personally choose PostgreSQL for my personal stuff, but your logic doesn't hold. PostgreSQL was slow, but correct. Now it is fast and correct. MySQL was fast, but wrong. Now it is fast and correct. Most of the reasoning behind picking one or the other has disappeared and we're left scraping the bottom of the nitpick barrel trying to convince people to use one over the other.

As for why someone would choose MySQL, there are a bunch of reasons. There are a lot more people with MySQL experience out there. MySQL has better replication facilities (and I've set up replication with MySQL, Slony-I and PgPool-II). I'd really like to see Mammoth Replicator become the standard in the PostgreSQL community (as well as for 1.8 to be out of beta) as I think it's a considerably better replication design than the other options in PostgreSQL, but right now MySQL replication looks a lot better. Maybe you have a good use for one of MySQL's less used storage engines. MySQL Cluster looks interesting, but I wouldn't trust my data to it today (even if Zillow seems to think it's the best thing since sliced bread).

The differences between the two are really minor today. Choose whichever one you like, but there are definite reasons to choose either one.

</comment></comment></comment></comment></comment></comment><comment><USER6> One thing to make note of: if you are in a space where you have massive concurrency, the right kind of hardware _can_ help you out. There was a time in the mid 90's when mainframes with CPUs we would regard as quaintly slow could still achieve I/O throughput that could dwarf the throughput of a PC with an order of magnitude faster CPU.

</comment><comment><USER7> Quite a few webapps just shouldn't be using a db for most things. It's lazy programming.

<comment><USER8> What then?

Asking out of curiosity/ignorance, not trolling

<comment><USER9> I think this website (hacker news) just uses persisted hash tables. I'm not sure why he thinks databases indicate "lazy programming" though.

<comment><USER7> It's really easy to just throw everything in a db, and then start worrying when you scale.

It takes more programming to think how best to organize things - what stuff should be in memory? How best to store it in ram for performance/size? What should be on the disk as flat files? What needs to be in a db? Should parts of the db be cached in ram and just used for writes etc.

Also does _everything_ need to be in a db? Or are some things better dealt with by just passing messages around, queuing them up if needed etc.

<comment><USER10> > Should parts of the db be cached in ram and just used for writes etc.

You are working way too hard. Let the OS figure out what needs to be in ram - it does it automatically anyway, and it does a better job that you an since it's caches what actually used, and not what you think should be used.

You should not use flat files for web apps - they don't handle concurrency very well.

> Also does everything need to be in a db? Or are some things better dealt > with by just passing messages around, queuing them up if needed etc.

Message passing, and db are not interchangeable, so that's a false question.

<comment><USER11> _You are working way too hard. Let the OS figure out what needs to be in ram - it does it automatically anyway, and it does a better job that you an since it's caches what actually used, and not what you think should be used._

So why does memcached exist?

<comment><USER10> > So why does memcached exist?

To cache the results of complicated joins (or queries without indexes).

It's pretty much pointless if all you are doing is caching the result of a simple query using an index.

<comment><USER11> _It's pretty much pointless if all you are doing is caching the result of a simple query using an index._

Not if your database is under heavy load, and you can easily shift some of that load by putting frequently accessed things in memcached instead.

<comment><USER10> That's if you have two machines. The comparison was vs keeping stuff in a hash table in memory, and I was saying databases are no worse.

<comment><USER11> _The comparison was vs keeping stuff in a hash table in memory, and I was saying databases are no worse._

But that's clearly not true. In the most extreme case, that hash table is referenced simply by a variable in your program - it's already in your program's address-space! There's no way a database can come close to that.

<comment><USER12> Not to mention that you can hash arbitrary objects in a hash table with no mapping of any kind.

        hash at: key put: anObject

Databases are vastly more complicated and require me to completely disassembly the object graph anObject may contain into a set of tables and rows to store it, and then reassemble the graph from tables and rows back into their object form when fetching.

The second one commits to using a relational database, one often easily triples the size of the code base. There's nothing simple about that.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> One other thing: Moore's law is fundamentally limited. Remember that the limit of the exponential function as t-> infinity is infinity.

This should be enough to show you that at some point, Moore's law will end. It is less important right now (there is still some development going, and new paradigms in the far future) , but the world is not limitless.

</comment><comment><USER14> I think all kinds of components and applications are going to hit the wall. The python interpreter doesn't even support multiple real threads let alone multiple cores. Programmers don't know how to write the code. Here is an article musing about the problems in Java: [http://www.devwebsphere.com/devwebsphere/2006/11/multicore_m...](http://www.devwebsphere.com/devwebsphere/2006/11/multicore_may_b.html) Do we all need to learn erlang?

<comment><USER6> I'd rather have some sort of support for multiple cores without real threads.

Stackless seems like a good alternative to Erlang.

Take the two statements above as standalone.

<comment><USER14> I agree that Stackless is better. Threads are very heavyweight. The problem is that the underlying C interpreter works on only one core. If Stackless can work with multiple interpreters then it may be the greatest thing since sliced bread. I haven't been following it closely enough to say for sure.

<comment><USER6> All you have to do is build a mechanism that distributes threads between interpreter processes then just spawn an interpreter for each core. For many applications, that's all you need.

</comment></comment></comment></comment><comment><USER15> I only just starting using MySQL to store tables of around 100,000 entries. But MySQL would take literally > 30 seconds (sometimes taking minutes) for a query that PostgreSQL (which I installed after it) can handle in 10 seconds.

It seems like MySQL is therefore dreck. I can't see any reason not to use PostgreSQL.

<comment><USER16> There's something terribly horribly wrong with either your database setup or your queries. 100,000 entries is miniscule. Do you have indexes on the join columns in your queries?

(But do use Postgres, it's better than MySQL for most cases!)

<comment><USER15> I learned SQL at University, but that was 5 years ago so I'm a bit rusty. There's 1 table with a primary key (a string ID), which is used for rows with duplicate ID's, so in theory MySQL should be quick with it.

Thanks for the info, I'll have to dig further, but at least now I know it should be fast even in MySQL.

<comment><USER17> Try using EXPLAIN on your queries. That will give you a lot of info on how many rows are examined by your SELECT statements.

</comment></comment></comment></comment><comment><USER18> A website can grow a lot faster than Moore's law would account for.

<comment><USER18> Though I suppose Moore's law has a head start, and grows faster than the overall population. At some point, if it continued indefinitely, databases would become powerful enough to serve 100% of the human population for a typical app on a single server.

<comment><USER19> All this Moore's law talk is driving me insane. Improvements in performance are only a side effect of Moore's law.

Moore's law only states that the density of transistors on a chip will double every 2 years. This will fail because of the Zeno's paradox-like effect of limited miniaturization.

At some point, transistors will have to become molecule size, and then atomic, at which point it should be theoretically impossible to get any smaller.

(Sorry for the derailment, and yes, I also go bonkers over centrifugal vs centripetal.)

Finally, DHH may be amazing at writing frameworks, but he is just about the absolute last person I would trust with anything that resembled math.

<comment><USER20> The issue isn't about math. The opinion of anyone who's maintaining a profitable business should be given extra attention.

<comment><USER18> I don't agree with that. Running a profitable business doesn't automatically make your opinions on everything unusually worthy of consideration.</comment></comment></comment></comment></comment>


Elance-oDesk Rebrands As Upwork, Debuts Slack-Like Chat Platform - <AUTHOR> http://techcrunch.com/2015/05/05/elance-odesk-rebrands-as-upwork-debuts-slack-like-chat-platform

<comment><USER2> The main issue Elance/oDesk needs to fix - is to eliminate `the race to the bottom` moment. Maybe set some minimum acceptable rates? (e.g. $50/hr)

If this is fixed, it will become attractive workplace for lot of qualified engineers, including those on HN.

This will be a radical move, but it will also eliminate "bad" clients.

<comment><USER3> Are there valid alternatives ?

What is the preferred platform for freelances looking for remote work at decent rates, today ?

<comment><USER4> I'd recommend PPH: [http://www.peopleperhour.com/](http://www.peopleperhour.com/)

It used to be pretty popular in the UK. I don't work freelance anymore but I still check the site out once in a while, it's fairly high quality and I've had several high-paying clients from there.

<comment><USER5> Just so people know they also send an ungodly amount of spam so don't sign up with your main email address.

<comment><USER4> Do you mean they sell their customers' emails or are you just talking about their own marketing emails? Because they do send a lot of crap but I opted out of those and haven't had issues since.

<comment><USER5> Their own marketing emails, I opted out but they still send a fair amount to me.

</comment></comment></comment></comment></comment></comment><comment> k-mcgrady I wish they'd focus on improving the market by weeding out poor contractors and employers. The rating system doesn't work. If you're an employer you post a job and have to wade through dozens of messages from outsourcing companies who usually do a poor job. And if you're a contractor trying to get seen through that pile is a nightmare - the only way to succeed to is to watch for new job posts and immediately bid. If there are already a few bids you don't have a chance.

<comment><USER6> I've spent a bit of money (over $10k) on oDesk for my mobile app. I used a lot of translators and some artists (Illustrator), and did the programming myself.

Everyone wants you to review them with 5 stars because anything less is bad for business. The quality does greatly vary and so does the pricing. You can get good deals and you can get burned. I once had someone using a keep-active program so they could log more hours. Thankfully I looked close enough at the screenshots to notice.

If anyone can recommend a great mobile designer on oDesk, I'd like to redesign my iOS app: [https://itunes.apple.com/us/app/h4-spanish- lite/id388918463?...](https://itunes.apple.com/us/app/h4-spanish- lite/id388918463?mt=8)

My account on oDesk is h4labs, not sure how to link to it.

<comment><USER7> You can invite me to the design project [https://www.upwork.com/o/profiles/users/_~015159f894bb70a226...](https://www.upwork.com/o/profiles/users/_~015159f894bb70a226/)

</comment></comment></comment><comment><USER8> They didn't even send email about this change, and now I see their "oDesk Team" tool doesn't track time so I can't work. Good news everyone!

<comment><USER8> fixed now.

</comment></comment><comment><USER9> They could just have rebranded themselves as "cheap" or "bottom" because that's what those platforms promote. I appreciate the efforts they've tried to improve the platform(s) but they're dealing with something no one was able to fix yet: solve the lack of scalability of work-people matching.

</comment><comment><USER10> I loved the new interface. There is already a cool review on UpWork here [http://www.websiteplanet.com/review/upwork/](http://www.websiteplanet.com/review/upwork/)

I agree with most parts, not about price (nver liked odesk payment way)

</comment><comment><USER11> Elance-oDesk aka UpWork vs Freelancer.com and the race to the bottom and dismal customer service but I think that when it comes to poor customer service Freelancer.com shines through as the heavyweight champion in this regard across the board.

</comment><comment><USER12> The "slack-killer" feature is nice, but I don't think this move does anything to Slack's business. In other words, its just clickbait / PR nonsense.

Why do journalists feel the need to artificially position articles like this?

<comment><USER13> Took a quick look at Slack, what does upwork and Slack have in common, it looks to me that they are operating in different markets.

</comment></comment><comment><USER14> I was wondering when they were going to get rid of the separation of sites. Curious to see if the chat platform really makes any bit of difference.

</comment><comment><USER15> The live chat feature is a game-changer. We need things fast, tired of sending an inquiry and getting an answer a day later when I usually already settled my issue or found someone local ready to do it.

<comment><USER16> I mean... really? You don't just say "this is my Skype, what's yours?" when you start a contract?

<comment><USER15> I do, but it usually takes hours to get a reply back. With the chat feature, when you see someone online, you can get their skype immediately.</comment></comment></comment>


SpaceX just landed a rocket on a drone ship for the first time - <AUTHOR> http://techcrunch.com/2016/04/08/spacex-just-landed-a-rocket-on-a-drone-ship-for-the-first-time/ <comment><USER2> [https://news.ycombinator.com/item?id=11457263](https://news.ycombinator.com/item?id=11457263)

</comment><comment><USER3> Seeing this puts my daily job in another perspective. Engineers at SpaceX can launch a rocket, deliver the cargo, and safely land it ON A FREAKING MOVING PLATFORM IN THE MIDDLE OF THE FREAKING SEA perfectly, and I can't write a stupid UI that doesn't break some unit tests.

I've become so used to writing (and working with) less than perfect (sloppy) software, I'm ashamed to be called an engineer (not that anyone calls me that). I wouldn't be able to write software that lands a rocket anywhere without first crashing ~100 prototypes.

<comment><USER4> I agree 100%. After reading "Elon Musk: Tesla, SpaceX, and the Quest for a Fantastic Future" I was really blown away by what kinds of problems the engineers at spaceX deal with. It makes my job as software engineer seem like a monkey with a typewriter could do it. It's many levels of magnitude more complex and there are no frameworks to just download and leverage. you're pretty much constantly inventing new stuff.

edit, one example of the kind of problems they deal with: initial rocket testing was done on an island near Hawaii, so the engineers had to build their own living space and stay there full time rolling out this big heavy rocket onto an open field for testing and then rolling it back into it's hangar every day in grueling heat. they'd work 15 hr days which was pretty much expected and thankless. when there was component failure Elon would use his Jet to get parts at radio shack in a different state and fly it over to CA for testing, and then straight to the island speed up the work. Something that would take NASA months would take SpaceX days or weeks since they didn't need "space grade" components but instead used common parts. They'd just ensure that those parts passed enough tests that they could be confident of the quality.

<comment><USER5> Oh interesting. First time hearing about this book.

Amazon link for anyone interested: [http://www.amazon.com/Elon-Musk-SpaceX- Fantastic-Future/dp/0...](http://www.amazon.com/Elon-Musk-SpaceX-Fantastic- Future/dp/0062301233/)

</comment></comment></comment><comment><USER6> Here's one thing I don't understand... The rocket lands upon a floating platform in the ocean. Presumably the platform rocks along with the waves. How do they keep the rocket from tipping over after the landing? If it were as huge as an aircraft carrier I can imagine that it might be possible but the platform is relatively small.

<comment><USER7> Elon mentioned at the news conference that the pitch/roll of the ship was 2-3 degrees for this landing, and that it should be easy to handle twice that, with a maximum of about 8-9 degrees.

[https://youtu.be/VNygOavo2mY?t=934](https://youtu.be/VNygOavo2mY?t=934)

<comment><USER8> That's insane. In offshore heavy lift we stick to barge motion limits around 2 degrees. Maybe we're just far more risk averse, but I cannot fathom how this would work with 8-9 degrees rotation. Even being on a ship with 2-3 degrees rotation you really feel like you're walking up and down a hill.

<comment><USER9> The barges are autonomous. The lack of people on board presumably significantly increases their tolerance for rough seas, both in terms of risk of human life and tolerance for human factors like seasickness and ability to perform labor in a bumpy environment.

<comment><USER8> That's true but there still have to be people coming aboard to seafasten the rocket. To my knowledge it's not welding itself to the deck.

<comment><USER10> If not already, this seems like a job that could be done by specially designed robots.

</comment></comment></comment></comment></comment></comment><comment><USER11> Falcon 9. On a boat.

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

<comment><USER12> apparently Elon tweeted this, but it has since been deleted.

</comment></comment><comment><USER13> Here's some information about the drone ships themselves:

[https://www.nasaspaceflight.com/2015/06/spacex-augments- upgr...](https://www.nasaspaceflight.com/2015/06/spacex-augments-upgrades- drone-ship-armada/)

Some pictures of Marmac 303 : [http://www.worldmarine.com/projects/barges](http://www.worldmarine.com/projects/barges)

</comment><comment><USER14> Presumably once it gets "cheap" to launch stuff many projects which were uneconomic become possible. Does this mean low earth orbit gets overcrowded rapidly? Is there an international space traffic control? I wonder if this will be another area where the regulation is as tough a problem as the tech.

<comment><USER15> I think it already is pretty overcrowded and this has become a problem that NASA/ESA and others are thinking about. Here is a good ESA video on space debris:

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

</comment></comment><comment><USER16> Maybe this is a stupid question, but why is it better to land the rocket on a ship instead of having it plop into the ocean and float for a few hours or days until a nearby ship can scoop it up?

<comment><USER17> The sea is filled with all kinds of stuff that pretty much ruins anything it gets into.

The cost of cleaning, refitting, and fixing issues from a splash landing is more expensive than doing it this way. At least that's what SpaceX's whole model is pretty much based on.

<comment><USER16> Thanks. I'm just surprised that the cost of damage from seawater to a dumb rocket with a parachute and floats is more than the cost of a smart rocket making a much more error-prone landing on a tiny ship.

<comment><USER18> There is no such thing as a dumb rocket : to get down, they are using almost exactly the same stuff they use to get up, weight wise: they use the gimbaled engines, and the nitrogen attitude thrusters. The only additional devices are the grid fins, to control aerodynamically the descent, and the legs. Then you have to write the right software, and it does not weight much more ;-)

<comment><USER19> Is this the first rocket with legs?

Seems like every thing else in history has really been a missile. This thing can land, so seems like it's literally the first rocket. Do we have a definition of missile vs rocket?

<comment><USER20> A missile historically has been anything that was thrown or launched. Nowadays it usually means a self-propelled weapon.

A rocket is just something with a rocket engine. Note that missiles do not need to use rocket engines and rockets don't need to carry warheads.

</comment></comment></comment></comment></comment></comment><comment><USER21> Very Iain M Banks-esque name for that drone ship. Is Musk a fan?

<comment><USER22> Yep. He named all these barges after the ships in the book series.

<comment><USER23> I always wondered if he'd consider reading such SciFi a waste of time.

Happy to see that he enjoys those books aswell as I do.

<comment><USER24> After reading his biography, I came to realize Musk loves video games and books of all sorts. He thought about going into video game development when he was younger but didn't think he could have as much of an impact on the world in that line of work. He was featured in a gamer magazine around age 12 for a scifi game he developed. He brings the term work hard play harder to a new level!

</comment></comment></comment></comment><comment><USER25> I can't seem to find the answer to this anywhere: Why did the Stage 1 not land on the midpoint on the drone ship (which has seemed to be the goal of all the other landings)? Did SpaceX take a page from Blue Origin and not aim for a perfectly mid-point landing to increase the chance of it surviving?

<comment><USER26> > not aim for a perfectly mid-point landing

That was a perfect landing.

As far as not aiming for the center. Of course it is aiming for the center. That's where you have the greatest margins. Yet, this is nothing like what Blue Origin has been doing. The comparison is simply not warranted.

Rather than go into a long explanation I'll just give you this data point:

Blue Origin is FALLING down from zero velocity. It reaches a terminal velocity of around 300 to 400 miles per hour. It uses fins to navigate down to a spot that, for all intents and purposes, is almost straight down.

Falcon 9 is FLYING down from somewhere around 17,000 miles per hour. During that time it has to flip around and use three of it's engines to slow down enough not to burn-up on re-entry. The grid fins also need to fly the rocket to a ship, in the middle of the ocean, about 600 miles from the coast...and then use a precisely timed single engine burn to land it.

Here are a couple of pictures to further illustrate the point:

[http://goo.gl/BT92J8](http://goo.gl/BT92J8)

[https://goo.gl/9Vttob](https://goo.gl/9Vttob)

Like I said. Perfect landing.

<comment><USER25> Yes, it's clearly nothing like what Blue Origin is doing and the landing was perfect. You're arguing against something I never said. My question was specifically about the centering, which up until this point, SpaceX had always seemed to land (and aimed to land) right on target. This time it was not centered, and I wanted to know if anything had changed.

<comment><USER26> This ain't software. Contact with the real world with physical things introduces, among other things, variability. They didn't aim to land 25 feet from the edge of the ship, it just happened. Can they do better. Probably. Give them time. Just don't expect perfection.

A perfect landing is one where you get to recover and reuse the rocket. It was perfect.

</comment></comment></comment></comment><comment><USER27> We will be talking about this milestone (first reusable space rockets) the same way my parents talked about first step on the moon.

<comment><USER28> Nope. I don't want to diminish this great technological achievement in any way but this is not even close to setting foot on the the Moon. Actually I am not even sure that setting foot on Mars will top the Moon, in some sense it's the same thing. And yes, I am aware of the huge difference between Moon and Mars. The first permanent human outpost, whether on the Moon, on Mars or elsewhere, may be the next step after going to the Moon and living in space stations that doesn't have the feel of an incremental step.

<comment><USER29> > this is not even close to setting foot on the the Moon.

You're right, this landing is a _much_ bigger deal long-term. The Apollo program proved that one of the world superpowers, with a decades-long presidential mandate and a giant, massive bucket of funding, could do incredible things.[1] It was awesome, and it's clearly one of the defining moments in human history. However, the pace of space travel actually _decreased_ after the Apollo program.[2] This probably had something to do with the fact that nobody wanted to spend untold billions of dollars to keep doing this stuff. The Moon landing was a big deal, but it was a one-off big deal. It didn't have world-changing impacts on the future, only on the moment.

The whole Mars objective of SpaceX probably isn't going to be their lasting contribution to humanity. All their technological achievements so far pale in comparison to how hard it will be to live on Mars. They may well fail. However, the reusability improvements they are making have significant potential to increase the rate of space flight for the rest of our existence. That's a gift-that-keeps-on-giving big deal, and enables all sorts of options that were prohibitively expensive before. We're all really hoping the graph in [2] starts spiking up soon.

[1] [https://en.wikipedia.org/wiki/Budget_of_NASA#Cost_of_Apollo_...](https://en.wikipedia.org/wiki/Budget_of_NASA#Cost_of_Apollo_program) [2] [https://en.wikipedia.org/wiki/Timeline_of_spaceflight#Orbita...](https://en.wikipedia.org/wiki/Timeline_of_spaceflight#Orbital_launch_rates)

<comment><USER30> > _decades-long presidential mandate_

A small note to put things into perspective: moon landing happened only 12 (!) years after Sputnik. It happened only 8 (!) years after Kennedy's speech and Gagarin's first space walk. The first launch of actual Apollo equipment was 3.5 years before the manned landing.

In other words: humans went from launching the first satellite to putting people on the Moon in 12 years. In 8 years from first person in space to first person on the Moon.

That's the speed of _focused_ progress. Something we very much lack these days.

<comment><USER31> We've also got a much lower appetite for risk.

<comment><USER32> Challenger _really_ screwed things up

<comment><USER33> I don't think that's true, or rather it didn't help but it's not the problem. The program wasn't doing so many interesting things before Challenger, either.

I think the "space race" was born with the seeds of its own doom. Wanting to beat the Russians to the moon provided the political and economic will to put a huge effort into the Apollo program - but after that was achieved the interest evaporated.

If you are more interested in the pissing contest than the science and exploration, it isn't surprising that the latter gets short shrift in the long run.

</comment></comment></comment></comment></comment></comment></comment><comment><USER34> So... cheaper satellites? Thrilling.

<comment><USER35> Cheaper satellites is good don't underestimate it - that's not the point though. This is cheaper anything to space, which means components of space missions that are suddenly an order of magnitude cheaper than they were.</comment></comment>


Ask HN: List things in Maths that we don't have an intuitive understading of? - <AUTHOR> <comment><USER2> Very subjective, your intuition of maths is different from someone else's. My own intuition of maths concepts is terrible...

</comment><comment><USER3> The material conditional, if you're willing to admit it to be a part of Math.

</comment><comment><USER4> The monster group

</comment><comment><USER5> Probability.</comment>


Wave for today's VC Panel with Paul Graham at Google I/O (3pm-4pm Pacific) - <AUTHOR> https://wave.google.com/wave/#restored:wave:googlewave.com!w+v_K9zbZkBXX

<comment><AUTHOR> Q: Will web apps replace native apps?

PG: I hope so. I'm afraid of a world where we're all Steve Job's slaves.

</comment><comment><AUTHOR> Brad Feld: I'm completely allergic to MBAs that outsource their coding to a consulting company.</comment>


Beyond Bar and Line Graphs: Time for a New Data Presentation Paradigm - <AUTHOR> http://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.1002128

<comment><USER2> FWIW, and this is a very common misconception, nonparametic tests in general _do_ make assumptions about the distribution of data. Sometimes quite strong ones.

</comment><comment><USER3> Reminds me of Tufte: "There is no such thing as information overload, just bad design."

</comment><comment><USER4> I agree BUT it really is to the audience which you are presenting. It was a several year fight to stop pie charts at my work. It is almost like if it isn't a default in Excel people struggle to grasp other forms of visual representations.

Normally if I need to go beyond a line or bar I feel the need to present the raw numbers first and than put in whatever figure I created that I feel communicates the numbers in a way people will understand. Still it causes friction due to people's tendencies to just use pie, bar and line. Everything else has a certain unknown magic to certain people and they feel like someone is trying to nuance something away.

<comment> _-__--- Pie charts aren't typically heaps useful when presenting experimental results, but I get your point. Stats in the biosciences are in a ~ish state atm. I agree with the article - just slapping down a bar plot of means and scribbling a p < 0.05 rating on it isn't giving people the whole picture.

</comment></comment><comment><USER5> That is quite a grand title for what is essentially the remark that you can just make a scatter plot if you have few points. Which is a good observation, but I feel it strains the meaning of "paradigm" a bit.</comment>


A Photo's Hidden 'Exif' Data Exposes Your Personal Information - <AUTHOR> https://www.consumerreports.org/privacy/what-can-you-tell-from-photo-exif-data/ <comment><USER2> Most people know this, but still continue to upload images without stripping the EXIF data. I think it's just convenient to not strip it, but they pay with an invasion into their privacy. If I recall correctly, Twitter strips EXIF information so you don't accidentally reveal your location and other metadata.</comment>


Ownership Story: Why I'll Never Buy a Gas Car Again - <AUTHOR> https://medium.com/tech-biz-d-sparks/why-i-ll-never-buy-a-gas-car-again-c87f63a6cee8

<comment><USER2> I believe this smug author, but the car costs too much. I can buy a used Honda for $8,000 and use the $70,000 in savings to buy 200 flights to Vegas, get 3,000 Uber rides, buy 2,500 gallons of gasoline, buy 140 refrigerators, or get 700 annual subscriptions to People magazine.

<comment><AUTHOR> Yeah, isn't it horrible how people buy things with the money they have.

<comment><USER2> just waiting on tech bubble to burst.</comment></comment></comment>


Ask HN: Is YC really cool with a lifestyle business? - <AUTHOR>

Apropos http://paulgraham.com/swan.html#f1n "it's cool with us if the founders want to sell early for a small amount, or grow slowly and never sell (i.e. become a so-called lifestyle business)"
I run a side business that I hope will eventually become a lifestyle business; there must be lots of other HNers in a similar position. I've assumed that since we never intend to be the next Google–or even the next Dropbox–we should never apply to YC.
Is YC really open to applicants like me? How could it be rational for YC to accept me instead of yet another wanna-be billionaire who "radiates 'winner'"? <comment><USER2> YC is looking for companies that will be home runs. The essay should have made that pretty clear!

The footnote you quote is saying is that if a YC company doesn't turn out to be a home run, but instead becomes a lifestyle business or a small acquisition, YC will be happy for you and supportive of your decision. This is because they are nice people who know that these outcomes are meaningful for the founders, even though they don't really have an impact on YC's bottom line. But that's not the same thing as deliberately looking for founders who are trying to build "lifestyle businesses" from the outset - in fact, that's the opposite of what they're looking for.

</comment><comment><USER3> No one can predict the future - so my advice would be to not go about limiting your future options. You may be one pivot off from being the next big thing and YC could help find that. At the very least, YC will help you be a better entrepreneur.

</comment><comment><USER4> Many of YCombinator founders have smart but little ideas, in my opinion you should always apply because YC is open to all sort of ideas, you don't have to be a wanna-be billionaire who "radiates" winner, that only happens once in a long time

</comment><comment><USER5> Why are you limited yourself and your goals in the first place? if you had more money to fund your idea could it become bigger? expand into other areas?</comment>


Show HN: I made an NLP based essay grader - <AUTHOR> https://www.gradeflex.com/ <comment><USER2> [https://www.gradeflex.com/graded/5856a241de6a2008562d2b88](https://www.gradeflex.com/graded/5856a241de6a2008562d2b88)

A+

Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like? Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like; Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like?

Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like.

Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like? Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like?

Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like; Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like.

Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like, Has Anyone Really Been Far Even as Decided to Use Even Go Want to do Look More Like?

<comment><USER3> So apparently that has perfect grammar?

</comment></comment><comment><USER4> I had a history teacher in college that assigned a 20 page paper. It was one of the biggest classes at the school, 100 students, so he had about 2,000 pages of grading to do. I got a decent grade, an A- if I recall, and two pages of handwritten notes about which arguments I could strengthen and sources that would have bolstered my arguments. Finally, the entire paper was marked in red with style and grammar notes, including the bibliography.

Grading is indeed time consuming, but it is one of the best opportunities that we have to give personalized feedback to our students. If we throw away that chance to analyze, consider, and connect, then we might as well substitute YouTube videos for all of education and be done with it.

</comment><comment><USER5> "Actually, reasonably capricious investors tend to emulate the science of quantum mechanics enhanced to mars gyroscope. Fourteen decided to whimsically trade symphonic trends on the market. Subsequently, eight and over 15.84 percent of astronauts landed on mars with mechanically whirring robotics capable neural networks. Tend to miss the forest for the individual trees. Although over seventeen of our reports turned up airplane maneuver killed over two hundred and fifty police men. After wikipedia, high schools demanded articulation and substantial loss. In conclusion, we have decided that over Harvard nineteen hippopotamus giraffe and lions decimate forests every year. Therefore, carnivorous angiosperm and glycoproteins tend to transpire sodium ions at 456.56 Hz. Thus it can be concluded, therefore, indeed."

Got me an A+, according to this algorithm.

EDIT: I'm not criticizing you! This is really cool, and you should keep working to improve it. Automating graduate students is definitely gonna happen, and this will bring us one step closer -- if we can work out the kinks. That said, it's always fun to poke and prod the AI nerds :D Makes them better!

<comment><AUTHOR> Thanks for the feedback. Yeah I've noticed it's not too hard to trick the grader into giving you a good grade. That's probably a serious issue with AI graders going forward. Almost a bit too reminiscent of the defeat of Deep Blue.

<comment><USER6> at least detecting the above example is 'easy-ish', as it keeps jumping from one topic to another. So you can use something like 'topic classification' per sentence and detect the jumping around. (e.g. [http://nadbordrozd.github.io/blog/2016/05/20/text- classifica...](http://nadbordrozd.github.io/blog/2016/05/20/text- classification-with-word2vec/) )

<comment><USER5> This is true; language, like other complex systems, exhibits order at various scales. However, even using a "state-of-the-art" algorithm like Wavenet will be insufficient.

For example, suppose we implement short range order detection, as you mention. Then, a very well written essay about the history of various metaphors used to describe General Relativity would receive a low score, because we'd be talking about trampolines, marbles, spider webs, and maybe even balloons at the same time. Your algorithm would immediately classify this as nonsense (similar to what I have written above).

The problem is not in detecting structural integrity. The problem is in detecting information integrity.

A nonsense essay about metaphors cannot be distinguished from a reasonable essay about metaphors unless your network knows what a metaphor is, how isomorphism works, and knows how various ideas relate to that.

Long story short, you can't hire an _english_ teacher to grade a paper you're submitting for your _GR_ course. Such a paper would be immune from random insertions of the word "not" or changing random real-valued numbers to other numbers, etc. Any NLP-only algorithm would immediately identify a false positive here.

On the other hand, a grammar-only-grader would be reasonable, because grammar is mostly independent of topic, meaning the AI would not need domain knowledge to grade it.

To understand language, AI is going to have be a lot more versatile than simply finding order within a paragraph, which is the most naive approach.

When a human reads a paragraph, they are playing with much more than simply the words contained inside the paragraph. IIRC, the ML community isn't there yet -- not because they don't know -- but because computing isn't there yet.

</comment></comment></comment></comment><comment><USER7> "The cat ate my homework. The cat ate my homework.The cat ate my homework.The cat ate my homework... Etc"

Got me an A-

<comment><USER8> Welcome to America!

</comment></comment><comment><USER9> I am fascinated with automatic grading. Predicting the grade of an essay isn't fundamentally different than classifying an email as spam. There was a kaggle competition for automatic grading, and IIRC the best results were pretty close to, or even better than human graders. As NLP improves, this will too.

But there is huge resistance to it because of Algorithm Aversion ([http://opim.wharton.upenn.edu/risk/library/WPAF201410-Algort...](http://opim.wharton.upenn.edu/risk/library/WPAF201410-AlgorthimAversion- Dietvorst-Simmons-Massey.pdf)). People really distrust statistical algorithms over (even really bad) human judgement. Unless they believe the algorithms are infallible.

One interesting thing you can do with automatic grading, is semi-supervised learning. If you know some students are good or bad already (perhaps from multiple choice, or from already graded essays), you can predict the grade of their essays. And then use the predictions to train a more accurate classifier.

<comment><USER10> A potential issue with algorithms is that the successful ones might become a resilient standard, with nobody knowing why, or being able to challenge it. Suppose computer programs were graded by algorithm. That might be the end of the road for developing new languages and coding styles.

And I could imagine a consolidation of the grading tools, down to a small handful, or maybe even just one vendor. This is the pattern in textbook publishing. Once the human graders are laid off and their skill vanishes, education will be wholly dependent on the whims of those businesses.

Do you want to hire or work with 1000 engineers, who have all been through exactly the same training, and have adapted their styles to exactly the same template, worldwide? What if a new idea or problem comes along, that isn't addressed within the capabilities established by that template?

This is not too far fetched. I was in college when word processing and microcomputers were introduced to academia. I was one of the early adopters at my college. Both of these things radically changed how people did academic work, but a word processed essay might have gotten a low grade if the algorithms were tuned to the established preferences of teachers for reading hand-written essays.

</comment></comment><comment><USER11> Paul Graham's "Writing, Briefly" gets a B+ and a Grade Level Estimate of Junior High. ([https://www.gradeflex.com/graded/5856ad12de6a2008562d2b95](https://www.gradeflex.com/graded/5856ad12de6a2008562d2b95))

It seems like the criteria used here would favor longer, more complex, and more formal pieces going against most of the writing advice in Graham's piece above. These would generally match up with how writing is graded in schools though so it makes sense in that regard.

Incredibly cool project! Well done. I'd love to read more about the process of making this.

</comment><comment><USER12> This is clearly giving out terrible grades. If anyone is interested in something real like this, check out gradescope. It's by pieter abbeel and his phd students, top researchers in Deep reinforcement learning. It uses a similarity based system to assign scores from humans to new essays.

Disclaimer: I'm not associated with gradescope.

<comment><USER13> If I'm not mistaken, the GRE test grades each essay using one human and one automated grader, and if their scores differ by >1, it goes to a second human for arbitration.

</comment></comment><comment><USER14> Postmodern Essay Generator gets an A-.

[https://www.gradeflex.com/graded/5856b8c2de6a20085a2d2bd9](https://www.gradeflex.com/graded/5856b8c2de6a20085a2d2bd9)

[http://www.elsewhere.org/journal/pomo/](http://www.elsewhere.org/journal/pomo/)

</comment><comment><USER15> I'm surprised I got a 80/100 on vocabulary when I pasted a German news article.

</comment><comment><USER16> Lincoln's second inaugural is an A- as well, and is estimated as "High School" Grade Level. Harsh. [https://www.gradeflex.com/graded/5856996dde6a20085a2d2b97](https://www.gradeflex.com/graded/5856996dde6a20085a2d2b97)

<comment><USER17> Edgar Allen Poe gets a B+ and "Junior High" Grade Level. [https://www.gradeflex.com/graded/5856a79dde6a2008572d2b84](https://www.gradeflex.com/graded/5856a79dde6a2008572d2b84)

</comment></comment><comment><USER18> I pasted in the first chapter to A Tale Of Two Cities. Got an F. [https://www.gradeflex.com/graded/5856c806de6a2008572d2b9d](https://www.gradeflex.com/graded/5856c806de6a2008572d2b9d)

</comment><comment> rm_-rf_slash I did a multiple-choice grader with image recognition that operated at a fraction of the exorbitant Scantron costs and at the time I thought we had a business model in the bag.

Turned out that none of the schools we contacted wanted to actually implement our system because 1: they didn't want to switch from all-paper to paper- digital now to all-digital in the future because education moves at geologic timescales, and 2: nobody had tried it before, so if something went wrong, whoever vouched for the program would get the blame.

Just something to consider if you plan to commercialize this application. CYA matters a lot on purchasing decisions.

</comment><comment><USER19> I would consider substituting "sentence length" with "sentence variability". It's a bit harder to cheat, basically a super-set of sentence-length, and more accurate to 'quality writing' IMO.

</comment><comment><USER20> I put the Declaration of Independence through the engine. It seems the NLP has some strong views about our president elect: [http://imgur.com/a/pjsQy](http://imgur.com/a/pjsQy)

source: [http://www.ushistory.org/declaration/document/](http://www.ushistory.org/declaration/document/)

</comment><comment><USER21> Interesting project. It only seemed to work with English. I got no problem with that, but it'd be nice to give the user a warning or note about this. Either a warning/note ahead of time, in the FAQ, and/or if non-English is detected.

</comment><comment><USER22> can you provide some insight on how its built internally, i am kind of new to NLP.</comment>


Founder of invitation only dating app "The League" responds to critics - <AUTHOR> https://www.facebook.com/pearlouise/posts/10100967984448249?ref=a <comment><USER2> Tl;dr: "Haters gonna hate."</comment>


Rethinking the Stop Sign - <AUTHOR> http://wheels.blogs.nytimes.com/2010/06/11/rethinking-the-stop-sign/?hp <comment><USER2> So he broke the law by not fully stopping at a STOP sign and decided to go on a tirade on how to change the system so that what he did was not breaking the law?

Only in America.</comment>


Show HN: My iPad game and I are going to be on TV tonight (Animal Planet) - <AUTHOR> http://animal.discovery.com/videos/must-love-cats-tabby-technology.html

<comment><USER2> My Girlfriend has this app for out cats already! It is very entertaining watching them score points.

</comment><comment><USER3> Very nice, my cat especially likes paint for cats. Here she is playing: <http://i.imgur.com/uudTY.jpg>

</comment><comment><USER4> Congratulations from me as well. As an animal lover I truly enjoyed the video.

It's interesting how tablets are appealing even to different species.

</comment><comment><USER5> Congrats! Did you get it on through PR or was it out of the blue?

</comment><comment><USER6> incoming sales spike!</comment>


Workfu is shutting down. - <AUTHOR> https://workfu.com/the-end

<comment><USER2> Visiting their front page at <http://workfu.com/> yields a lightboxed "UPDATE 31/08/2012: We are currently in discussions regarding the possibilities of keeping WorkFu alive and will update as soon as we have more information."

<comment><USER3> Announce imminent closure of nascent service, submit to HN

Get more traffic than you ever had in 9 months previous combined

...

Profit

(colour me sceptic)

</comment></comment><comment><USER4> Is nine months really enough time to make a determination whether a company is viable? It seems a little on the short side, and I recall reading in a number of places that you can only truly know how it's going a couple of years in. Is the issue here that resources/finances weren't adequately planned for?

<comment><USER5> Determining if a company is currently viable is pretty easy maths in most cases.

But most likely you could have written it "whether a company could become viable soon"?

<comment><USER6> >Determining if a company is currently viable is pretty easy maths in most cases.

That sounds very interesting, could you care to elaborate please ?

<comment><USER5> Is that a real question?

In this case, income and its recurrence, expenses and their recurrence, current cash reserve and trends give you a pretty good picture to figure out if you can pay the 4 families behind workfu or not.

I'm not talking about complicated monster companies with heavy fiscal tactics, more about classic companies where you sell something.

<comment><USER6> Oh, I see, I was thinking more about a startup project and expecting a thumb rule of viability à la lean startup. Of course income - expenses is easy :)

<comment><USER5> Exactly :) It can be applied to B2B startup projects easily too.

Well - startups waiting to be acquired and/or do not charge the users is another story :)

</comment></comment></comment></comment></comment></comment><comment><USER7> I'm somewhat in the same space with Folyo (<http://folyo.me>), and I know it's not an easy market.

But Workfu was one of the competitors I was most impressed with. They had a great team and great execution, so I hope they find a way to pull through somehow.

I guess this is the only time being a single founder is actually an advantage. Since I run Folyo by myself I have very few expenses, and can always feed myself by taking on client work if need be.

<comment><USER8> > Since I run Folyo by myself I have very few expenses, and can always feed > myself by taking on client work if need be.

I believe that's also true if you're a team. In my opinion even more, because you don't have one person being distracted by too many things, but can distribute tasks to various people, where each of them can focus on those that are related.

<comment><USER9> One of their blog posts states "4 wives placated" ... your life situation tends to determine what risk and austerity you can afford so this particular team might find it harder than other teams would to also do side projects to pay the bills.

</comment></comment></comment><comment><USER10> I read a quote recently that "most startups get interesting around 18 months". I think you guys are giving up too soon. Workfu has enormous potential. Either way, kudos for making it as far as you have.

</comment><comment><USER11> From the looks of it, this announcement dates back to August 8? <https://twitter.com/workfu/status/233143828503224320> \- and as mherdeg points out, their most recent update is to be found on the homepage.

</comment><comment><USER12> Took a look at the home page, did a double take when I saw the "FU Score". Maybe that resonates poorly with potential users? I get that we're supposed to use cutesy Web 2.0 names, but if what makes a hacker smile doesn't lead to revenue, it has no place.

</comment><comment><USER13> It's a beautiful site. I'm thinking someone is in the process of buying it.

<comment><USER5> My thoughts exactly. It's really polished for something bootstrapped. Were there designers in the founders?

</comment></comment><comment><USER14> Interesting, I saw one of the founders talk about the company a couple of weeks before this was announced and they were heavily promoting the company, felt like things were going well for them.

<comment><USER15> See the other front page story about startup founders and bullshitting.

<comment><USER14> Sure but it wasn't a big startup event but a small event for teens looking to get into tech. He had little incentive to lie and put that much effort into personally conversations.

<comment><USER16> Sometimes the truth hits suddenly.

</comment></comment></comment></comment><comment><USER17> I'm actually launching something in the same space on Labor Day (<http://codewren.ch>). This is not a particularly good omen ...

<comment><USER18> Off topic, but I'm very curious... why did you decide to launch on Labor Day? Aside from the slight symbolic connection to your product, aren't you concerned that you'll have a much smaller audience due to the holiday?

<comment><USER17> I literally conceived of this idea a month ago. My day job is in finance, so this break is the first contiguous block of time I could find to put it together. As far as audience is concerned, its true that the audience is smaller but that's good insofar as emergent problems can be addressed before people come back on Tuesday :)

</comment></comment></comment><comment><USER19> any other insights as to why they are shutting down? did they raise anything after being featured on the TC London Web Summit in March? how were they bootstrapping?

</comment><comment><USER20> Wonder if they will open source the code they built

</comment><comment><USER21> What were they missing? Distribution?

<comment><USER22> They were missing two, directly related things: a revenue model and paying customers. (Not meant to be snarky or to point out the obvious, but simply factual.)

<comment><USER23> Why not spend the afternoon figuring out a freemium vs. paid model, 15 minutes to setup Stripe, a few days setting up an LLC/Inc + Banking account all the while integrating?

Worst case you're out a few hundred bucks for the company formation, best case you start making money.

<comment><USER5> Maybe they did the maths and it turns out even with many clients, the current costs are too high (just an hypothesis)?

Or it would take much more time than allowed, even with some outside funding?

For sure, I find the site is really, really beautiful and polished for a bootstrapped venture. It could maybe have helped to have something less polished but focusing on selling subscriptions earlier on? (no sarcasm really here, real question).

If one of the founders is reading, as a bootstrapper myself, I'd love to hear more about the underlying reasons to close.

</comment></comment></comment></comment><comment><USER24> Why don't they just sell the company?

<comment><USER25> Have you ever tried to sell a web app with no traction or revenue? Its not easy

<comment><USER26> Can you elaborate on what your best courses of action are if you are in this spot and would like to sell?

<comment><USER27> You could probably get a small chunk of change on Flippa.</comment></comment></comment></comment>


My Efforts to solve "Travelling salesman problem" through JavaScript - <AUTHOR> http://activegeek22.wordpress.com/2014/03/18/my-efforts-to-solve-travelling-salesman-problem-through-javascript/

<comment><USER2> Your English is a bit stilted in places - "Just check that the distance from A-B and B-A are not equal because it is the distance related to road.".

And I'm getting Application Errors too.

<comment><AUTHOR> Sorry for the bad explanation but I mean to say that when we travel through road it does not necessary that distance form A-B and B-A will be same and you can check my app on [http://short-route-demo.ap01.aws.af.cm/](http://short- route-demo.ap01.aws.af.cm/) I have only one instance on heroku and it was crashed, so now finally uploaded to appfog

<comment><USER2> >>paris london berlin

>The shortest Distance is paris to london to paris accounting upto 0 kilometers.

You've got a bug somewhere.

<comment><AUTHOR> The shortest Distance is paris to berlin to london to paris accounting upto 2595.005 kilometers.

Ya I know that, sometimes it comes but please refresh the app and try again. If you are getting then download the npm package and set it on your localhost.

Everything is working fine in localhost but when I upload my code to the server like appfog or heroku then these weird issue comes. Visit my app on this link [http://short-route-demo.ap01.aws.af.cm/](http://short-route- demo.ap01.aws.af.cm/)

</comment></comment></comment></comment><comment><USER3> Keeps getting Application Error

<comment><AUTHOR> So uploaded on a appfog [http://short-route- demo.ap01.aws.af.cm/](http://short-route-demo.ap01.aws.af.cm/) Now you can check.

<comment><USER3> That works better. When I only type two cities it adds an undefined city, which won't go away.

<comment><AUTHOR> It's a wierd issue because on my localhost everything is fine but when i deploy it to some servers like appfog or heroku then this issue comes. I am checking logs and trying hard to fix it. But if you are getting this error try refresh the page and try again.</comment></comment></comment></comment>