Update on Multi-Process Firefox - AndrewDucker
https://blog.mozilla.org/futurereleases/2016/12/21/update-on-multi-process-firefox/
======
saberworks
It would be really nice if the addons/extensions page showed which addons were
listed as compatible and which weren't. I might thus make a decision to
disable/delete an addon or two that were blocking me from using multiprocess
firefox. As it is, I have no idea if my firefox is using multiprocess at all.
All I know is that I use a lot of addons and I'm probably not, then, using
multiprocess.

~~~
pipeep
You can figure out what add-ons are compatible by cross-referencing
[http://www.arewee10syet.com/](http://www.arewee10syet.com/)

~~~
FreeFull
Seems the only addon I use that isn't compatible is "Disable Ctrl-Q Shortcut".
It's an addon I really don't want to get rid of, there have been many cases in
the past where I've accidentally pressed ctrl+q instead of ctrl+w, and had
Firefox quit on me..

Edit: The page for the addon has a comment saying it does work with
multiprocess, so I just forced it on. I'm on Linux, and I don't know of an
about:config key to disable ctrl+q

~~~
djsumdog
I think you can set that in `about:config` without a plugin

~~~
0942v8653
If you set browser.showQuitWarning to true (also make sure browser.warnOnQuit
is true; that should be default) it will show a dialog to confirm if you want
to quit. But if you check the box "do not show next time" it will set
browser.showQuitWarning to false.

------
newscracker
I like how Firefox multiprocess has evolved and continues to evolve taking
measurements into account.

When multiprocess was announced several years ago, my main worry was that it
would be a Chrome clone with one process per tab and become sluggish like
Chrome (my general use of browsers is a minimum of 10 tabs and on certain
machines a lot, lot more). Finding a balance between responsiveness, security
and stability is what I'd prefer. I personally don't see many stability issues
in Firefox even without multiprocess. So I'm happy with this progress even
though it may seem slow to dime people or that Firefox isn't keeping up with
Chrome (the latter is meaningless for my use since Firefox and it's extensions
provide a lot more).

~~~
newscracker
I hate typos, and can't edit the comment anymore. The last sentence should
read:

So I'm happy with this progress even though it may seem slow to some people or
that Firefox isn't keeping up with Chrome (the latter is meaningless for my
use since Firefox and its extensions provide a lot more).

------
mmastrac
I force-enabled multi-process FF a while ago and haven't had any issues. In
the 49.x series there were one or two tab crashes, but I can't think of any
recently. All of my extensions have worked just fine too.

~~~
binaryanomaly
1Password unfortunately is still incompatible so force needs to be applied.

But in general I share your observation - runs very smooth.

~~~
JoshTriplett
Why use 1Password, rather than Firefox Sync/Accounts?

~~~
mcpherrinm
I have a few reasons to prefer 1P over a browser based option:

1Password doesn't require a cloud sync. I just use the local wifi sync. I'm
less worried about data breaches as a result.

1Password lets me save more than browser passwords: especially on mobile where
I have lots of apps to log into, which shares a password with a desktop
website.

Also, I store additional data (like bank info, account numbers, etc) in 1P,
and browsers don't have UX for that, even if the back end could be useful for
that.

It also doesn't lock me into a browser.

~~~
JoshTriplett
> 1Password doesn't require a cloud sync. I just use the local wifi sync. I'm
> less worried about data breaches as a result.

Firefox Sync encrypts all of its data; a data breach on the server would only
result in a pile of email addresses and encrypted blobs.

> 1Password lets me save more than browser passwords: especially on mobile
> where I have lots of apps to log into, which shares a password with a
> desktop website.

Fair enough. All the mobile apps I use just stay logged in once you log in
once.

> Also, I store additional data (like bank info, account numbers, etc) in 1P,
> and browsers don't have UX for that, even if the back end could be useful
> for that.

Hadn't occurred to me to store non-passwords in a password manager. That seems
like something a Firefox extension could provide on top of the Firefox
password manager, which would make a nice substitute for a locally encrypted
file. I wouldn't mind using that to store things like security
questions/answers.

~~~
mook
The old Firefox sync used a local-only passphrase to encrypt things. The new
one, as far as I can tell, just tires everything to your Firefox Account (i.e.
nothing local is required). That's not really better than what 1Password does,
I think.

~~~
JoshTriplett
The current Firefox Sync (based on Firefox Accounts) still keeps everything
client-side encrypted, rooted in password-derived keys and locally generated
keys. It never sends the password to the server.

~~~
zeveb
> It never sends the password to the server.

It does, however, download JavaScript served by Mozilla when you log into your
Firefox Account, which means that Mozilla can cause your password to be sent
to them unencrypted, if they so choose. This in turns means that a disgruntled
employee, Mozilla the organization and any government which is able to compel
Mozilla the organization or key employees can get access to your password at
any time, rendering Firefox Sync completely untrustworthy.

~~~
JoshTriplett
That only occurs when you log into your Firefox Account via the web-based
system, which necessarily has to use JavaScript to provide a client. If you
log in via your browser, all the code lives in the browser.

Or, if you prefer, you could run a self-hosted version of Firefox Accounts on
your own server.

------
davidgerard
FWIW, I've been running FF multiprocess with a pile of extensions since it was
first introduced (there's a preference you can set to say "yes really I want
to do this and I realise I get to keep both pieces"). A few extensions failed,
but mostly it's been wonderful and I would recommend it to any techie user.

How to force it on:
[https://wiki.mozilla.org/Electrolysis#Force_Enable](https://wiki.mozilla.org/Electrolysis#Force_Enable)

------
mandelbulb
Make Vimperator great again - still no support. :'(

Two year old github issue but yet any development to be seen or reported :/

~~~
wsha
Sadly it's not realistic. Even if someone were to put in the time to make it
work, Vimperator would just break again within the next year when XUL addons
are deprecated in favor of WebExtensions, and unfortunately WebExtensions do
not support all the features of Vimperator. You can use VimFx for now, but
again it is a XUL addon and would take a massive amount of work to port to a
WebExtension. Hopefully someone can get Vimium or cVim ported over as a
WebExtension. I have played around some with this but haven't got it to work.
It seems some of the needed API's are missing from WebExtensions at the
moment.

~~~
pmoriarty
Pentadactyl is also going to break then, for the same reason. That's why I've
been moving from Firefox to Pale Moon, where Pentadactyl continues to work. I
expect Vimperator will continue to work on Pale Moon too.

------
mwcampbell
Looks like accessibility tools (e.g. screen readers) also disable multi-
process support as of Firefox 50. I know enough about accessibility APIs and
their implementations to guess that it's going to be difficult to modify that
code to work efficiently in a multi-process configuration.`

Edit: I'm talking about Windows. Don't know about other platforms.

~~~
dblohm7
I'm the dev who is responsible for the Windows implementation. It has been
quite the... gnarly experience to say the least. We were shooting for 52 for
enabling a11y+e10s, but it is increasingly looking like we're going to need to
slip to 53.

~~~
hashhar
I would like to help out in any way I can. Where should I look to get an idea
of the project and what do I need to know to be able to work on it?

~~~
dblohm7
Here are a couple of links that outline the design and contain some notes:

[https://wiki.mozilla.org/Electrolysis/Accessibility#Windows](https://wiki.mozilla.org/Electrolysis/Accessibility#Windows)
[http://dblohm7.ca/blog/2016/04/06/new-team-new-
project/](http://dblohm7.ca/blog/2016/04/06/new-team-new-project/)

Note that the approach we are taking on Windows is different from the way that
Chrome works. They cache the entire a11y tree in the parent process so that
the DLLs injected by assistive technologies may quickly enumerate the a11y
tree via virtual function calls.

In 2017 we want to start moving away from injected DLLs in Firefox. As part of
that initiative I decided not to take the caching route in a11y as that would
require continuing to allow injected DLLs for a11y purposes. Instead I am
implementing a COM handler that should allow us to significantly reduce the
number of round trips required to enumerate the tree. I am hoping that this
will offer AT vendors a migration path that eventually moves them out of our
process.

Feel free to join us in the #accessibility channel on Mozilla's IRC server to
chat further. I am aklotz on that server.

~~~
hashhar
Sure. I'll start reading up. I'll join after the new year. Thanks for
replying.

------
rocky1138
Thank you to the Mozilla team who have given my old laptop life again.

------
neves
How do I know if my extensions are multiprocess compatible?

~~~
Twirrim
Install [https://addons.mozilla.org/en-US/firefox/addon/add-on-
compat...](https://addons.mozilla.org/en-US/firefox/addon/add-on-
compatibility-reporter/) and go to your add-on page and it'll tell you.

~~~
JamesSwift
It should be noted that 'compatible' is not actually the tested compatibility,
it's whether or not the add-on author has declared that it is compatible
within their manifest.

------
pwg
Has anyone noticed bookmarklets not working when multi-process is turned on?

I installed a V 51 developer edition to test out multi-process, and when
multi-process was on, my bookmarks that modify the dom did not work. Any one
else noticed anything similar?

~~~
cpeterso
That's sounds like a bug, as if the bookmarklet is executed in the main
browser process and can't see the page's DOM. What DOM bookmarklet water you
using? The Pinboard bookmarklet works for me but it is not agreeing the DOM.

~~~
cpeterso
I tried the "WhatFont" bookmarklet, which inspect DOM elements and reports the
fonts used. It works for me in Firefox Nightly 53 with e10s enabled.

[http://www.chengyinliu.com/whatfont.html](http://www.chengyinliu.com/whatfont.html)

~~~
pwg
Just tested Firefox Nightly 53 with the three bookmarklets I use most often,
they all work in 53. Therefore it must have been a bug with the 51 version.

~~~
cpeterso
What are some of the bookmarklets and sites you are testing? I'm not able to
reproduce the failure with the "WhatFont" bookmarklet in Firefox 50-53.

------
shmerl
_> Our measurements and user feedback were all positive and so with Firefox 50
we deployed multi-process Firefox to users with a broader set of extensions,
those whose authors have marked them as multi-process compatible._

How can one check if some extension is marked as such?

I'm using Firefox beta (which is now 51.0b9) and I noticed that Firefox now
splits a separate "Web" process. Is that the indication that multiprocess is
enabled?

I also set in the past in about:config

        browser.tabs.remote.autostart = true

~~~
hashhar
Yes. I do think you it enabled. To confirm, go to about:support, and look for
the field that says, "Multiprocess Windows". If it is a value > 0, you do have
multiprocess.

If you are on an old version, check for the string "Multiprocess staged
rollout". If it is true, you do have e10s enabled.

And for checking extension compatibility install this extension,
[https://addons.mozilla.org/en-US/firefox/addon/add-on-
compat...](https://addons.mozilla.org/en-US/firefox/addon/add-on-
compatibility-reporter/)

------
satysin
Even on a clean Firefox 50.1.0 x64 install with just uBlock Origin and multi-
process enabled Firefox _feels_ quite a bit slower than Chrome. This really
shouldn't still be a thing especially with Chrome also having to deal with a
bunch of Flash based content on some sites (looking at you BBC News).

~~~
cdevs
I've noticed most people at my office seem to use chrome because of that seems
faster feeling and it's always chromes obsessive page caching which a lot of
the time is a pain to deal with. Our site added some cache busting params in
the Javascript request based around our git pulls but there's so many times I
have to figure a situation because a chrome user is seeing something to old.

------
baby
Anyone knows if Tree Style Tab is supported?

~~~
swenn
An alternative vertical tab bar I discovered some time ago is Tab Center
([https://testpilot.firefox.com/experiments/tab-
center](https://testpilot.firefox.com/experiments/tab-center)). Although still
a little buggy, I switched over from Tree Style Tab. It feels better IMO and I
really didn't care about the "tree style" of TST, I just felt the need for a
vertical tab bar.

~~~
KingMob
Wow, I just tried it, and it's the tab interface I always wanted. More
vertical space for reading web pages, and wider tabs to read the tab titles
more easily. Why isn't this the default yet?

~~~
baby
A lot of people are wondering why this is not the default. If you like this
you should try Tree Style Tab ;)

------
jayweb1
Cool stuff

------
nikolay
I've been gradually disappointed by Firefox - more and more websites no longer
work. Okay, I'm using Firefox Developer Edition, but nonetheless, it's been
disappointing compared to, let's say, Google Chrom Canary. Memory and CPU
footprint is worse than latest Canary, too!

~~~
ngokevin
The compatibility issue isn't to blame on web developers increasingly testing
only on or making their apps exclusive Chrome?

~~~
nikolay
I think it's the privacy and other "features" that make Facebook and Google
login not work, for example.

~~~
oblio
What "privacy"?

------
dirkg
So now Firefox will become much slower due to per tab process overhead, just
like Chrome, will pollute the task list with processes, and lose the enormous
benefits of it's fantastic extension model, all for some intangible security
benefits?

I've almost never had a security issue or crash on Firefox with a hundred tabs
and maybe fifty extensions, it's still faster than chrome with 10 tabs.

~~~
runeks
I hope they chose a model of mapping a lot of virtual tab threads to a single
OS thread, rather than one OS thread per tab, but I don't know.

------
dilly_li
Is this done in Chrome as early as 8 years ago?
[https://blog.chromium.org/2008/09/multi-process-
architecture...](https://blog.chromium.org/2008/09/multi-process-
architecture.html)

~~~
gsnedders
You mean what was done in IE8 six months before Chrome?
[https://blogs.msdn.microsoft.com/ie/2008/03/11/ie8-and-
loose...](https://blogs.msdn.microsoft.com/ie/2008/03/11/ie8-and-loosely-
coupled-ie-lcie/)

More seriously—it's somewhat sad to see Chrome get all the credit for this,
when it's undoubtedly the case that both IE and Chrome were working on this at
the same time.

~~~
flukus
If anything we should give the IE guys extra credit, I doubt the code base was
pleasant to work with.

------
nxc18
Does anyone have insight on why we're getting this for Firefox in (very late)
2016 while Chrome has had this since 2008 and IE since 2009?

Seriously, I understand the need for competition in the browser, and wish
there was a viable alternative to chrome on things that aren't Windows, but
the failure of Firefox to keep pace is really disappointing.

Slow and lacking basic features for years almost makes Firefox feel like the
new IE, but at least we can be thankful that not many people are stuck with
it.

To put this in perspective, Firefox has lagged on multi-process for 8 years.
Everyone's beloved IE6 only had 5 years of ruining the internet before it was
replaced.

~~~
nnethercote
Adding multi-process support is the biggest single architectural change ever
made to Firefox.

It was started, then put on hold for a couple of years because it seemed
insurmountable, and then started again. It's taken a huge amount of work, and
thus a huge amount of time. But it's mostly done now and the benefits are
reaching users.

~~~
sp332
And during the same time, they changed the JS engine to use a generational
compacting garbage collector, which was also a bizarrely large amount of work
for a more flexible future.

------
chrisper
Does anyone know what the incentive behind the development of Firefox is at
this point? Like, Chrome has such a huge browser market share, so why do they
still develop Firefox? I assume it is not that feasible to invest time and
money if the share is only 4%.

I am just curious, and not trying to hate on Firefox. But I think most (?)
non-tech people use Chrome. So maybe I am asking, what is the point of Firefox
if the shares are so low?

Again, not trying to hate on it, but I am just curious for the reasons, which
I am sure are valid.

~~~
sergiotapia
There was a time where Chrome was the up and comer with very low market-share.

We need competition or we will suffer as end users.

Chrome's time will also come eventually. It's not a matter of if, but when.
Vivaldi and Brave are growing and coming along very nicely. Brave is actually
spearheaded by the ex CEO of Mozilla before he was fired for some nonsense.

[https://brave.com/](https://brave.com/)

~~~
geofft
I feel like there are a ton more flattering ways to refer to Brave's CEO -
"inventor of JavaScript," "co-founder of Mozilla," or "CTO of Mozilla for 9
years" are all way better and way more relevant than "CEO for not even two
weeks," and much less likely to cause an argument.

~~~
sergiotapia
True! He's the father of Javascript - much respect.

------
DanBlake
Does firefox run each tab in its own process yet? Or live inside a sandbox? I
switched from firefox + noscript to chrome after accepting that firefox's
security (even with noscript enabled) was just so far behind that of chrome.

~~~
rockdoe
Isn't this exactly what the article explains and clarifies?

~~~
nindalf
Yes but why bother actually reading the article when you can shoot off in the
comments with minimal effort? If you're wrong, someone will correct you.
Amirite?


Paul Buchheit: Chrome OS Will Perish Or “Merge” With Android - harscoat
http://techcrunch.com/2010/12/14/gmail-creator-paul-buchheit-chrome-os-will-perish-or-merge-with-android/

======
paul
I like that the screenshot says "11 seconds ago". An idle thought while
setting up my new MacBook Air became a TC post in record time!

~~~
i386
When Google started to make noise about Chrome OS I had a similar thought -
what company in their right mind would want two mobile operating systems?

~~~
paul
It was a more plausible sounding strategy before the iPad came out. Now that
it's clear that tablets are huge, and that Android will be Google's tablet OS,
then you start to wonder why adding a keyboard sudden switches you to a
different OS (losing all of the Android apps in the process).

~~~
AlexMuir
"it's clear that tablets are huge". I agree but I'd say it's clear that the
iPad _is_ huge, and that tablets _will be_ huge. So far there's no competitor
to the iPad. I'm not sure why Google are arsing around with the Cr-48 (a
netbook/laptop) - they need to get their resources behind a tablet.

~~~
axod
Are tablets huge, or are touchscreens huge?

To know, we need some decent laptops with touchscreens.

It seems like the best of both worlds will clearly be a tablet that docks to
the bottom half of a laptop - so we get a laptop with a tablet that can be
carried around.

I also think it's a fairly good long term bet. At the moment we're in this
strange 'appstore' download applications era which is like being back in the
1990s. This current era will end once wifi etc is _everywhere_ and the novelty
value of downloading an application has worn off.

Obviously for a hardware heavy device such as a mobile phone, you need some
specific OS to be able to interface with all the hardware, take calls, etc.
But for a laptop, where the user is mainly just surfing the web, things don't
need to be so involved. That's why I think both are necessary.

~~~
AlexMuir
I think Bluetooth keyboards might take off. What you're describing sounds
exactly like the iPad docked with a keyboard.

Edit: And to test it out I've just paired a keyboard to the iPad and edited
this. It works a treat - I might stop rolling with a laptop when I travel now.
I keep reaching for a mouse though!

~~~
axod
The hinge is kinda useful to angle the display.

------
rms
Paul, I will bet 1000 HN karma at even odds on the following prediction:

Chrome OS will not be killed or merge with Android in the next year.

 _(if it was in the next two years, I would give 80% odds on the existence of
a Google operating system not called Android that was the successor of
Android+Chrome)_

~~~
J3L2404
How exactly would you "settle up"?

~~~
rms
IOU's

or something not very likely like myself founding a Y Combinator company
making prediction markets using HN karma. It would take a lot to convince pg
to allow for direct HN karma transfers. It doesn't mean we can't create a
shadow market with words.

I created a similar fake prediction market on Less Wrong.

[http://lesswrong.com/lw/1tr/creating_a_less_wrong_prediction...](http://lesswrong.com/lw/1tr/creating_a_less_wrong_prediction_market/)

~~~
jimfl
"Good morning. In WallNet news, the Karma continues its rise against the
BitCoin in heavy wagering over whether cloud computing giant Facebook will
kill the popular Java language following an acquisition of foundering Internet
retailer Oracle corporation."

------
jrockway
Prediction: Windows Phone 7 will merge with Windows 7 or perish. iOS will
merge with OS X or perish.

Oh wait, I don't predict either of those things. In each case, one is a
desktop OS and one is a mobile OS. Sure, they all include web browsers that
use the same rendering engine, but that doesn't mean they need to merge.
Mobile and Desktop are two separate problems.

There's a reason why Windows CE laptops were never successful; people don't
want a phone OS on their computer.

~~~
jokermatt999
I don't know if that comparison is completely apt. Chrome OS is very different
from most "desktop" OSes. I can actually do _more_ with Android instead of
less. I agree that the UI and interactions would be odd running off of stock
Android, especially if the device (laptop/tablet/hybrid) isn't specifically
designed for it, but I don't think it's as insane of an idea as you seem to be
implying.

In all the other instances, a phone OS loses functionality and flexibility
from the desktop, while it would gain it in this case.

------
someperson
Dec 13 2010: > Google co-founder Sergey Brin, however, has _very recently
stated_ that Google will likely “produce a single OS down the road”.

Linked article: "November 20, 2009 12:00 PM PST "

Not said ~1 month ago. Actually said ~13 months ago.

------
JarekS2
Google ChromeOS and Google Wave share some similarities in terms of marketing
messaging behind those products. In both cases biggest value of both products
is in business - they should never be marketed as a consumer products.

I agree with Paul that ChromeOS with its current market target will fail -
just like Wave did.

But there is still hope for ChromeOS. Google should target bigger companies
with it. Make it a hardware extension of their Google Apps offering. IT
departments and CFOs will love them.

And you know what? I think that they are thinking about this already - that is
why we've seen Citrix client there.

------
htsh
It makes sense from a marketing perspective considering how well the Android
brand has caught on.

Also, Android is a more fully-featured OS considering it has local apps and
storage as compared with the cloud-dependent ChromeOS. It's likely a consumer
would prefer Web+apps to just web, especially if it means they can do things
like play games while offline.

And whatever happens, this is good for Linux. At the very least, we should see
much better drivers...

------
ddfall
To quote a friend about this story, "Man no longer at Google makes
assumption"...

~~~
paul
Actually, the word I used was "prediction":
[http://friendfeed.com/paul/1af77944/prediction-chromeos-
will...](http://friendfeed.com/paul/1af77944/prediction-chromeos-will-be-
killed-next-year-or)

That I don't work at Google is not relevant. (though perhaps you are working
on ChromeOS?)

~~~
greyman
Paul and why do you actually think so?

------
rwhitman
Isn't Chrome just an OS layer optimized to run Google Apps and logically
intended more for enterprise use? Who really needs to deal with Windows and IT
issues for sales reps? If they can use Salesforce & Google Apps all they need
is a browser. No IT dept, no expensive licenses, viruses etc.

A free or dirt cheap OS with little to no IT configuration and that can run on
cheap legacy hardware is probably a big win for many businesses.

For a certain segment of business use, it would render Windows obsolete and I
think thats the point.

~~~
gaiusparx
Centrally managed enterprise computing exists since the beginning with
mainframe with dumb terminals. And you have Citrix thin client or vmware
virtual client infrastructure for such purpose. ChromeOS is trying to solve
the same problem, the problem of IT management rather than users need,
experience and the advance of end user computing. ChromeOS if successful is
not a good idea for the future of computing, where I believe an intelligent
and powerful client is needed for the advancement of user-computing
interaction design. ChromsOS reenforce the idea that computing is about the
web with a screen and a keyboard. Cloud computing is more than just http
right?

------
jallmann
This whole state of affairs is making me very, very sad.

I hope ChromeOS wins, only because it has a sane development model -- sans the
whole being-stuck-in-the-cloud thing. If ChromeOS ever allows running local
apps, that'd be tops. I'm not talking about offline HTML5 either, but exposing
hardware/OS capabilities via JS or an FFI.

The iPhone/Android approach to app dev is antiquated and absolutely painful in
comparison.

I really should be rooting for WebOS. Go HP!

------
russellperry
The problem I have with this theory is that Android just wasn't written as a
general-purpose GUI framework/OS. It's very mobile and memory-constraint
centric, and IMO would need a whole new UI layer, if not a major re-write at
the OS level. Who would want to write tablet or netbook apps with the whole
Activity/Intent structures, and listviews that populate dynamically when
scrolling, or apps that the OS may kill at certain thresholds of memory
pressure?

~~~
vetinari
Actually, I think that th Activity/Intent structuring of applications is a
very good idea, one that could be brought into the world of desktop
applications too.

It allows to use parts of applications in a way that OLE/COM promised, but
never delivered.

------
albertzeyer
I wonder why this the prediction goes this way.

Wouldn't the other way around make more sense? Chrome OS seems much more
modern. But maybe too far ahead.

~~~
al_james
Why is it more modern? Its just a thin layer of Linux with chrom(ium) over the
top. True, chrome is modern, but I am not sure the Linus layer is.

~~~
albertzeyer
Everything works in the cloud. It works from every client. You have all your
data everywhere. You have a well defined, powerful, standardized and cross-
platform interface to it. All such applications will probably work on every
computer also in the next 10 or 20 years.

You don't have those properties for most Android applications (they don't
really work that well on your desktop PC even right now).

------
al_james
In many ways, the most difficult decision would be how to merge the two
different app development environments. Andriod is getting traction (in part)
due to some excellent apps. These apps are developed in java that compiles to
Android specific bytecode. So, from that, any merged OS would need to maintain
the Android VM layer, otherwise backward compatibility would be hard.

On the other hand, chrome could be ported to Android quite easily.

So I see a Android like OS where Android Apps and Chrome web apps exist side
by side (on the same desktop).

------
jasongullickson
Android is a platform for native applications and runs web apps out of
necessity. Chrome OS runs nothing but web apps and has no support (in fact, it
has anti-support) for native, non web-based apps.

The fact that these two systems come from Google is about the only thing they
have in common. Why would they "need" to be merged, when doing so would do
nothing but dilute each in turn?

I think Google has enough smart people on board to effectively support two
platforms...

------
Supermighty
But having one OS doesn't necessarily mean one recognizable product. I think
it could just be the convergence of low level systems, drivers and creating a
unified build system. Then on top of that they could plop a unique shell
depending on the deployed platform.

Unify the developer tools, unify the build and deployment system, and merge
the dev teams. You reduce duplication of work and streamline the whole
process.

------
va_coder
I wonder why a Python/C/Linux mobile environment isn't here that could replace
both Android and ChromeOS?

I'm going to assume if there's silence it's already being done in stealth
mode.

------
trezor
My favourite quote from that article is the following one:

        Update: more from Buchheit in the FriendFeed thread:

        ChromeOS has no purpose that isn’t better served by Android (perhaps with a few
        mods to support a non-touch display).

        I was thinking, “is this too obvious to even state?”, but then I see people
        taking ChromeOS seriously, and Google is even shipping devices for some
        reason.

I fully agree with this one, and honestly don't understand the rage around
Chrome OS. OK, so it's from Google, but it's still merely a crippled Linux-
distro where you don't get to touch the local filesystem.

I doubt it will stay around for long.

~~~
axod
It still makes an absolute ton of sense for people who _only_ use the web.

The browser on android is OK, but it's nowhere near Chrome afaics.

I believe ChromeOS is going after the non-techy market of people who don't
care about all the bells and whistles of android. I think both could still be
successful.

~~~
statictype
_It still makes an absolute ton of sense for people who only use the web._

How many people do you know who _only_ use the web?

~~~
bockris
My parents, my in-laws, and to some degree my wife and kids. I was lucky
enough to receive a Cr-48 and it's been in constant use for the small time
we've had it. Some of that is the 'new' factor but my wife has a regular
laptop that she uses on the couch occasionally. Now she asks "Where is the
Google laptop?" It is partially form factor but the boot/wakeup speed is
addicting. Also the fast user switching makes it very easy to trade around.
Last night I was using it for Google reader and my wife asked when she could
use it. I was just messing around so I closed the lid and handed it to her.
She lifted the lid, it was on instantly, she signed me out and signed herself
in and was reading her mail in probably about 10 seconds.

Even with the problems with the trackpad and the stuttering flash I can see
the potential. I would buy at least 2 Cr-48's today if they were for sale.
Another one for my family to share and the other for my parents. I would set
up a gmail account for my parents and ship it to them and be safe in the
knowledge that I would only be doing application support for them, not system
support.

~~~
trezor
> My parents, my in-laws, and to some degree my wife and kids.

Until they want to play some music not on youtube, dig up some pictures they
didn't upload to facebook etc etc. Or just actually do a slideshow of
pictures, since most web-pages don't really allow you to do slideshows.

There's a ton of use-cases I see most people do all the time which a no-local-
storage platform will simply not support.

> She lifted the lid, it was on instantly, she signed me out and signed
> herself in and was reading her mail in probably about 10 seconds.

I fail to see how this is different from any other laptop on the planet. I
have a regular Windows laptop and this has _always_ been my experience. Heck,
switching from my GFs account to mine I can be on in about 5 seconds. A _cold
boot_ however will take me 10. SSDs are pretty cool that way.

Regardless. Back to the topic: I also fail to see how any of this relates to a
platform being locked down to not allow local applications. Just where does
the Linux-lockdown start providing real, actual benefits you don't get
elsewhere?

I'm not saying you must be _wrong_ or mistaken, but what I do suggest is that
there are normal use-cases which will benefit from having local-storage and
applications and that I see absolutely no use-cases where having the local
option completely blocked and removed provides any benefits.

Your "google laptop" is my Windows-laptop. Amputated. Without any benefits
added what so ever.

~~~
bockris
We agree to disagree. I don't see any of these things as issues for my use
case. My parents don't have a computer now. They don't want to listen to music
and they mostly want to consume pictures of their grandkids which we would
email to them or post to Picasa. The video chat through google talk is icing
on the cake.

I can't get rid of my 'real' laptop because I need to interface with other
hardware like my Arduino, etc. But for emailing and reading my news feed I
like the Cr-48. Would the same purpose be served by a different netbook?
Probably but I don't have one of those to compare to.

And my experience with fast user switching on windows is totally different
from yours. Maybe it's the age of the laptop and not having an SSD but it's
not even something I consider doing it's so slow. When my kids want to check
their email, we fire up an incognito session on chrome on the existing windows
session. Again, probably to do with my hardware.

~~~
flogic
I think it's important to not compare this to Windows. Windows is such a
complete disaster on so many fronts of course ChromeOS seems like a better
idea. The problem I and other have with it is "ChromeOS isn't really a better
idea when compared to other operating systems." It's more crippled then iOS
and Android for gains that aren't significantly better. Sure Chrome maybe a
better browser but that's just a matter of porting Chrome not a new OS.

------
shareme
unfortunately TC is both wrong and late as usual..let me explain..

Lets start with what android OS and Chrome OS share..lets see that would be
that Chrome Browser..ever wonder why the browser in android is behind in build
numbers compared to the iOS safari trunk as far as HTML5 etc?

There is a reason..its use new functionalities are added to me it a chrome
browser..the same feature set that persuaded Google to start Chrome OS in the
first place..

Thus, in-fact android OS and Chrome OS have already 'merged'..


Instagram Limits Photo Integration as Facebook Challenges Twitter - obeone
http://www.businessweek.com/news/2012-12-05/facebook-s-instagram-limits-twitter-photo-integration

======
JeremyMorgan
No surprise here, Facebook didn't buy Instagram for their crappy image
filters.


Ask HN: For help: Gmail is filtering our URLs - e79

The gmail.com client normally renders the hyperlinks in our outgoing email just fine. Yesterday morning, this suddenly stopped happening and users were sent links that could not be clicked in their transactional emails from us. I was able to reproduce it by simply including our domain name in an e-mail, which leads me to believe e-mails are being filtered for our domain name specifically. I've reproduced this across multiple Gmail accounts of ours, and all hyperlinking is always fine right  until I include our domain name anywhere in an e-mail. Viewing page source shows that gmail.com is employing some HTML to break our URL up so it doesn't turn into a valid hyperlink.<p>I suspect this is some sort of anti-spam measure. Has anybody else experienced this? I am asking Hacker News for help because there doesn't appear to be any way to get in contact with Google regarding gmail problems. We've already employed everything in their FAQs about avoiding their spam filters. We use DKIM and have a healthy standing with all email blacklists. I'm really not sure what other options we have left.
======
therealmarv
I've found out what is reason for this! It only affects text mails: Gmail is
analyzing the links in text mails and when it is adult content it refuses to
make them clickable! For me this is censorship. I'm an adult and I can decide
myself what I want to see and what not. I do not want Google to filter out
adult links (categorize them!) and make them not clickable!

Solution: Make HTML Emails

~~~
e79
From something I posted on our site:

From my experience, unless a change in a Google product degrades functionality
for a large portion of end users they aren't going to publicly acknowledge it.
They don't seem to have the same policies regarding transparency that other
companies like FetLife do (we acknowledge when we mess up and break stuff!).

When ReCAPTCHA went down last year I looked and could not find any
acknowledgement of the issue from a Google employee. This was while FetLife
and other large websites tweeted about it and posted in Google's product
forum. All we had to go with was speculation and helping each other out with
recommendations for temporary solutions.

Likewise, this change in Gmail may never be officially acknowledged. It may be
related to the arrival of Google's new Inbox product or it may be related to
some sort of spam filtering they deployed into production. It doesn't appear
to be specific to adult websites. Other large community websites are affected
too. The result is that affected websites using plain text emails are now
forced to switch over to HTML-based email. I could see a conspiracy theory in
there about Google pushing HTML-based email for a nicer looking Gmail/Inbox
experience. No matter what, I think it's very unlikely we'll ever know what
change caused this or why.

------
e79
Someone e-mailed me to let me know that a discussion forum they post on has
run into the same issue. Seems like we are not the only one...

------
dangrossman
Use a link shortener (perhaps buy a domain of your own for it) to avoid
linking to your domain?

~~~
Someone1234
Link shorteners are pretty heavily penalised in email since spammers use the
same trick to bypass the same filters.

------
ChristianBundy
Is your domain name fetlife.com?

~~~
e79
Yes. (Site is NSFW, by the way)


Beyond Intelligent Machines: Just Do It (1993) - mr_golyadkin
http://www.cs.umd.edu/hcil/trs/93-03/93-03.html
======
benbendc
Thanks Don for that mention of the old paper, which is still on the right
track. My new paper appeared on line Friday and will be temporarily freely
accessible:

> Shneiderman, Ben (2020). Human-Centered Artificial Intelligence: Reliable,
> Safe & Trustworthy, International Journal of Human-Computer Interaction,36,
> 6 (Published Online March 27, 2020).
> [https://doi.org/10.1080/10447318.2020.1741118](https://doi.org/10.1080/10447318.2020.1741118)

I have spent a year developing these ideas, but the evolution was dramatic,
based on thoughtful feedback from the 25+ people mentioned in the
Acknowledgements. Speaking at U-W, Stanford, UBC, NSF & ONR and elsewhere
helped repeatedly reshape my arguments. All that commentary added to the
journal editors’ confidence that this was an important paper, so they fast
tracked reviews & production and gave it priority in the publication queue.
Please send this link around to your colleagues, where appropriate.

Feedback welcome... Stay healthy... Ben

~~~
DonHopkins
Woops, due to obscure formatting syntax issues, the link you included didn't
get hypertextified, because the line was indented, so it formatted it as code
without links. (Principle of Least Astonishment Violation!)

What a great coincidence that you just happened to publish a new version of
this paper, and thank you for dropping by and sharing it!

Here's a clickable version of that link:

Shneiderman, Ben (2020). Human-Centered Artificial Intelligence: Reliable,
Safe & Trustworthy, International Journal of Human-Computer Interaction,36, 6
(Published Online March 27, 2020).

[https://doi.org/10.1080/10447318.2020.1741118](https://doi.org/10.1080/10447318.2020.1741118)

~~~
dang
(I've fixed the formatting in the GP now.)

------
DonHopkins
I love this article! I worked with Ben Shneiderman at HCIL, and when he sent
me a copy of this article to review, I was inspired by the "Dynamic Queries"
of his "Dynamic Home Finder" demo, to implement something like that for
SimCity (the Frob-O-Matic window). [Video and transcript below.]

Here are some of the main points of his article:

Don't label machines as "intelligent".

It limits the imagination. We should have greater ambitions.

Enable humans to accomplish tasks that weren't before possible, instead of
trying to enable machines to accomplish tasks people can already do.

Predictability and control are desirable qualities. Give users the feeling of
mastery, competence, and understanding, sense of accomplishment.

The "intelligent machine" label limits or even eliminates human
responsibility.

If you treat machines like people, you're likely to end up treating people
like machines.

Ben Shneiderman called his lab HCIL instead of CHIL, to explicitly put Humans
before Computers.

Here's his description of "Dynamic Queries" and the "Dynamic Home Finder":

>Dynamic Queries. These animations let you rapidly adjust query parameters and
immediately display updated result sets, which makes them very effective when
a visual environment like a map, calendar, or schematic diagram is available.
The immediate display of results lets users more easily develop intuitions,
discover patterns, spot trends, find exceptions, and see anomalies.

>Figure 2 shows a screen from Dynamic HomeFinder, a prototype interface for
real-estate agents that uses dynamic queries, written by Christopher
Williamson of UM. Users can adjust the cost, number of bedrooms, and location
of the A and B markers, among other characteristics, and points of light
appear on a map to indicate a home that matches their specifications. Clicking
on a point of light brings up a home description or image.

>Users of Dynamic HomeFinder can execute up to 100 queries per second (rather
than one query per 100 seconds as is typical in a database query language),
producing a revealing animated view of where high- or low-price homes are
found-and there are no syntax errors.

>Our empirical study of 18 users showed Dynamic HomeFinder to be more
effective than a natural-language interface using Q&A from Symantec (C.
WIlliamson and B. Shneiderman, The Dynamic HomeFinder: Evaluating Dynamic
Queries in a Real-Estate Information Exploration System," Proc. SIG
Information Retrieval, ACM Press, 1992, pp. 338-346).

[https://www.cs.umd.edu/users/ben/papers/Williamson1992dynami...](https://www.cs.umd.edu/users/ben/papers/Williamson1992dynamic.pdf)

That inspired me to implement a version of the "Dynamic Home Finder" in
SimCity:

Multi Player SimCityNet for X11 on Linux (Dynamic Home Finder / Frob-O-Matic
demo at 3:35).

[https://www.youtube.com/watch?v=_fVl4dGwUrA&t=3m35s](https://www.youtube.com/watch?v=_fVl4dGwUrA&t=3m35s)

Transcript:

Here's an interesting thing inspired by Ben Shneiderman.

We can look at the ... This is the "Dynamic Zone Filter".

So we are going to set this to be dynamic.

Now it's going to show all the zones, but it's not going to show the ones that
don't pass this filter.

So this filter is currently all the way open.

Now we're going to change population density.

This is a two-ended slider.

This is the segment of the population density, from zero to 81.

So everything else will disappear.

Say I'm looking for a home. I want low population density. But I want high
rate of growth.

And now, these are the places that have low population density and high rate
of growth.

And then you can just interactivally ... So each of these filters out some of
the places.

So you can look at ... I don't want high traffic density. I don't want any
pollution. I don't want any crime. I want land value to be high.

I'm getting pretty picky. So maybe I'll deal with more people. Lower rate of
growth. I'm too picky about pollution. I'm too picky about land value. That's
it.

So basically, Ben Shneiderman demonstrated this as the "Dynamic Home Finder",
and I realized that SimCity has all these layers of information that it can
draw on, as fictitious as they are, to do that kind of real time, interactive,
smooth database query.

It's just a much higher bandwidth way to query a database than is
conventionally used.

Anyway, that was the dynamic zone finder.

Also: Here's some email I wrote to Ben about this article, after re-reading
the article again in 2009:

Date: 28/02/2009 18:51 Subject: Re-reading "Beyond Intelligent Machines"

A long time ago, you sent us (me, Brad Myers, Jack Callahan and Mark Weiser) a
preview of your IEEE Software article "Beyond Intelligent Machines", which I
ran across and have re-read.

It's still delightful, inspiring and relevant today.

Speech synthesis and recognition has come a long way, to the point where the
"talking car" scenario is quite common (TomToms that speak and recognize
street names and addresses).

But I think the development of user-customizable user interfaces has been
dreadfully stalled since HyperCard died.

An "Interactive Learning Environment" is a great description of what I'm
developing SimCity into.

Remember when you visited CMU and I showed you the version of SimCity with the
dynamic query feature, an "homage" to your Dynamic Home Finder? You could dial
a series of filters on spatial properties like population density, pollution,
traffic, land value, police coverage, etc. That code is now open source, and
I'm redeveloping it!

It's now very easy to write Python code to dynamically query and filter the
map and data layers, and visualize with transparent colored tiles and pixel
overlays, depending on arbitrary Python functions over the state of the map
and its data layers.

And it's also possible to script agents in Python!

Here's a picture of SimCity with the traffic overlay enabled (showing
yellow/orange/red haze over high traffic areas), with some PacMan agents,
which are programmed to follow roads, go towards high traffic and eat the
cars! Notice the clear road behind each PacMan!

[http://www.donhopkins.com/home/images/SimCityPacMan.png](http://www.donhopkins.com/home/images/SimCityPacMan.png)

        -Don

Micropolis Online (SimCity) Web Demo

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

A demo of the open source Micropolis Online game (based on the original
SimCity Classic source code from Maxis), running on a web server, written in
C++ and Python, and displaying in a web browser, written in OpenLaszlo and
JavaScript, running in the Flash player. Developed by Don Hopkins.

Source Code:
[https://github.com/SimHacker/micropolis](https://github.com/SimHacker/micropolis)

HAR 2009 talk: Constructionist Educational Open Source

[https://medium.com/@donhopkins/har-2009-lightning-talk-
trans...](https://medium.com/@donhopkins/har-2009-lightning-talk-transcript-
constructionist-educational-open-source-simcity-by-don-3a9e010bf305)

------
mr_golyadkin
pdf of the original magazine article:
[https://www.cs.umd.edu/~ben/papers/Shneiderman1993Beyond.pdf](https://www.cs.umd.edu/~ben/papers/Shneiderman1993Beyond.pdf)

------
hardmaru
Thanks for sharing. This is awesome-


Ask HN: What do you do when your DNS fails? - hayksaakian

Zerigo is having an outage right now on all name servers. This means all heroku apps using zerigo (the only DNS addon) probably don't resolve at their usual domain.<p>What do you smart people who have a plan B do when SHTF with your DNS?
======
mike-cardwell
I use three separate and unrelated providers. The first being myself (a single
Linode VM), and the other two:

[http://rollernet.us/](http://rollernet.us/)
[https://puck.nether.net/dns](https://puck.nether.net/dns)

They both offer free backup DNS.

------
staunch
You use a major provider. Providers that have the resources to defend against
almost any attack. I trust Route53, Dyn, and Cloudflare. You can also use your
registrar (but that often has limitations).

------
danypell
I just use CloudFlare. They just can't really afford going down, and if they
do, they're big enough to fix it quickly enough I guess.


Ask HN: How do you plan for your vacation? - tixocloud
Hi guys,<p>We're looking to understand more about how people plan for their vacations (i.e. well thought out? last minute? etc.) and thought HN-ers might have great insight.
======
ReefAftershock
My general sequence for an overseas trip is to use a slew of tools:

1\. Choose the dates based on compatibility with my work schedule or
particular events I want to visit (e.g. festivals)

2\. Use Google Flights and matrix.itasoftware.com to get a idea of prices

3\. i. Use a shared Google Sheet to list out options and my schedule (e.g.
plotting out a row for each day of the trip, to allocate out days to each
destination)

3\. ii. Check Google / Wikipedia / TripAdvisor to see the top attractions -
add these to the Sheet for reference while I'm on the trip, and also use this
to make sure I've allocated the right amount of time to each place.

4\. Use booking.com or Expedia to find the best deals for accommodation
(usually I use hotels)

5\. Book directly on the airline's website, since that often has the best
price.

~~~
tixocloud
Thanks. For any of these destinations, do have to do a lot of pre-planning
around how to get the top attractions? Print maps, etc.?

------
dirktheman
Oh brother... For our summer holidays we always pack up our caravan. A couple
of years ago I started to make a list of campsites that friends/family
recommend or that I stumbled upon on the internet. They’re all on a Google
Map, and the list is sortable by country, region, stars and amenities.

Also a couple of years ago I made another document with possible routes (we
always make it a road trip, with anywhere between 3 to 6 stops in 3 weeks). I
currently have a list of about 80 destinations, so we have a couple of
hundreds possible routes to choose from. I make a general plan before we go
(for instance this route from our last holiday to France):

Route Kilometers Nachten Datum

Ede – Le Crotoy 463 km 5 do 16/7 – di 21/7

Le Crotoy – Seillac 372 km 2 di 21/7 – do 23/7

Seillac – Brantome 319 km 6 do 23/7 – wo 29/7

Brantome – Aydat 267 km 6 wo 29/7 – di 4/8

Aydat – Melun 403 km 3 di 4/8 – vr 7/8

Melun – Ede 544 km

The beauty of this seemingly rigid planning is that I can adjust it on the
fly. The weather sucks? We move on to our next stop. Campsite isn’t what we
expected? I can find another campsite close by that we’ll probably like in
seconds. And because my route file I have a myriad of options to choose from.

You might think that a planning like this takes away the adventure, but it
doesn’t. A couple of years ago we liked our first campsite so much that we
stayed the full 3 weeks there. I’m not bound by my planning, but it’s more
like a guideline that we can divert from.

For citytrips I book months in advance. I make a list of all the things I want
to see and do, and plan them in advance. So our citytrips tend to be more
rigid, but we like that. I would hate to waste time on finding out what's cool
when you're at your destination, only to find out smart people booked in
advance and you're too late. (This got us in the crown of the Statue of
Liberty, for instance. And I prepared a bicycle trip around the island of
Manhattan on forehand, since it wasn't a marked route there would have been no
way to do it without preparation).

I get that some people book last minute, but for me the preparation is just as
much fun as the vacation itself.

~~~
tixocloud
I love this. I'd love to somehow find the balance between planning and
spontaneity. Thanks for the insight especially for the value of booking way in
advance.

May I ask how did you start gathering the list of all the things you want to
see and do? Or even how did you decide on the destination in the first place?

~~~
dirktheman
Sometimes I stumble upon things on the internet, sometimes I search specific
things in the surroundings. I'm a history buff and I love exploring old
bunkers, so I search online for bunkers in the vincinity of, let's say,
Avranches.

Some destinations are chosen because of their convenient location. I can't
travel to the south of France in one long drive, so I need two stops that are
approximately 1/3 and 2/3 on the way. I check Google Maps for interesting
geography, and do some research about towns/cities in the vincinity. This
applies to other road trips as well: I found one of my favorite hotels ever
this way (Kasbah Tebi in Aït Behaddou, Morocco: a UNESCO-protected kasbah
without electricity or running water.)

For the city trips I browse forums (TripAdvisor, Zoover) and 'things to do
in...'-lists.

------
siegel
Do you mean in terms of actually planning the vacation? Or in terms of dealing
with being out of work?

~~~
tixocloud
Good one. I mean actually planning a vacation.

~~~
siegel
I'm an obsessive planner. But I mix some spontaneity in, as well. Basically, I
plan out the trip (including places to stay, etc...). But any particular day,
if something strikes me, I allow myself to do something completely different.
However, I always have a framework in place.

In terms of picking places to go, what are you interested in? I like food. So,
I do Google searches for best food destinations. I read chowhound to get ideas
on where foodie travelers like to go.

If you have an interest, just do targeted searches for places to go for people
with those interests. Might sound too simple, but it works quite well for me.

~~~
tixocloud
Thanks. I'm building a mobile travel assistant but also wanted to learn how
different people plan their trips.

I was planning a massive trip for my family and it took a lot of great effort
but also left me feeling that I needed to have the Internet with me in case of
an emergency.


Experiment: Unit testing isn't enough; You need static types, too  - fpgeek
http://evanfarrer.blogspot.ca/2012/06/unit-testing-isnt-enough-you-need.html

======
davesims
The sample size of this study is statistically too insignificant to draw the
conclusions given. The counterfactuals to the claims of dynamic type advocates
were already true and provable, so even if the sample size of the codebases
studied were statistically significant (not to mention vetted for _quality_ of
unit test as well as _coverage_ ) the conclusions are nevertheless trivial.

In addition, the hidden assumption is that all static and dynamic typing are
created equal, i.e., since Haskell is statically typed and Haskell appears to
have caught Python bugs that unit tests did not, therefore Java will catch
bugs in a Ruby codebase, C++ will catch bugs in a JavaScript codebase, etc. Of
course this assumption is gratuitous. Haskell in particular has a specific
sort of type checking that is far different from Java's or C++'s, for
instance.

Further, not all _dynamic_ systems are created equal. Ruby, for instance, I
think can be shown to require fewer lines of code to achieve similar
functionality to, for instance, Java. Fewer lines of code, should in principle
mean fewer opportunities for defects. Dynamic languages with metaprogramming
features like Ruby's or Smalltalk's should in principle be able to eliminate
more code duplication than an environment like C++. This aspect of dynamic
languages should be taken into account, again with a statistically significant
sample size, and weighed against bugs caught by static typing.

The study is interesting as a preliminary investigation, but the conclusions
should have been much more modest, proportionate to both the sample size, in
terms of % of production codebases and the extremely important idiosyncratic
nature of Haskell vs. other static typed environments. Something like: "The
study has shown Haskell's type system will catch some bugs not caught in an
otherwise well-covered Python codebase. These bugs could _in theory_ have been
caught by unit tests, therefore it is recommended that when using a dynamic
language, more care must be taken to cover these types of bugs."

That would have been a more appropriate and modest conclusion, consistent with
the data, than the sweeping generalization "You need Static Typing."

~~~
efarrer
I (the author) appreciate the feedback. I believe that many of your criticisms
are addressed in the actual paper. First of all I completely agree that my
sample size is too small for a conclusive proof. I mention in the paper that I
hope that others will try and replicate this experiment on other pieces of
software. I do think it's appropriate when conducting an experiment to publish
a conclusion, not that the experiment will constitute proof (or an established
scientific theory), but as a conclusion to the study that others can try to
confirm or refute.

I also mention in the paper that it would be beneficial to conduct this
experiment using different type systems for the reasons that you stated above.

The argument against static typing that I was testing didn't mention any
particular type system nor any particular dynamically typed language, it was a
general argument that stated that unit testing obviated static typing. Because
the argument was so general and absolute I felt that any static type system
that could be shown to expose bugs that were not caught by unit testing would
be enough to refute the argument. I was not trying to prove that _any_ type
system would catch bugs not found by _any_ unit tested software. The paper
also points out that I'm trying to see whether unit testing obviates static
typing in practice, in theory you could implement a poor mans type checker as
unit tests, but my experiment was focused on whether in practice unit testing
obviates static typing.

Finally I believe that my conclusion in the paper was at least a bit more
modest than that of the blog post. The lack of apparent modesty in the blog
post was caused more by a lack of ability on my part to accurately summarize
than an inflated sense of accomplishment and self importance.

~~~
davesims
Thanks for the response! I appreciate the effort you went to here, this was no
small task you set yourself to.

I appreciate the clarification. I think now I see better where your emphasis
was: the purpose of the paper was to refute an argument, and of course the
level of burden of proof is different and far less in that case. I think this
misunderstanding on my part is what caused me to call the conclusions
'trivial' -- too strong and dismissive language on my part anyway.

The irony is, you were attempting to do to the unit-testing-is-sufficient
argument what I was attempting to do to what I _assumed_ yours was: provide
one counter-example to falsify a broad and generalized thesis.

That said, I think I would have liked to have seen your original unit-testing-
is-sufficient argument punched up and qualified into something a little more
reasonable and real-world. As you stated the argument, it seems like a straw
man to me. It seems one could reduce your version of the argument to something
like: "Dynamic languages with unit test coverage will always catch errors that
statically-typed environments will." And of course this is far too broad and
unqualified a statement, and that is precisely why all you needed was one
counter-factual to refute it. You didn't even need a handful of Python
programs, or 9 or 20 or 100 errors to prove your point. You only needed one,
as you stated above. This is why the burden of proof for your thesis was so
small, but also why, in my opinion, even with that reduced scope and more
modest conclusion, we haven't really learned much.

As someone who has spent most of my career in statically-typed environments
and the last 6 years or so mostly in dynamic environments, and also as someone
who has made _something like_ the argument you were attempting to refute, I
have to say I would definitely never have made such a brittle and unqualified
statement as the one you refuted in your paper. To put it more directly, I
think I'm probably a poster-child for the kind of developer you were aiming
your thesis at, and I don't feel that my perspective was adequately or
reasonably represented. More importantly, having looked at the examples given
in your paper, I may have learned a bit about the kinds of errors that Haskell
can catch automatically that some coders might miss in a dynamic environment,
but not much useful to me in my everyday work context.

I think a more reasonable version of the argument, but more qualified and
therefore requiring a far larger sampling of code to prove or refute, would be
something like: "Programs written in a dynamic language with adequate or
near-100 percent unit test coverage, are no more prone to defects than
programs written in a statically-typed language with a comparable level of
unit test coverage."

I agree this is a very important conversation to have, and again kudos to the
work you put in here. Obviously people have strong opinions both directions,
and the discussion, however heated at various moments, is an important one, so
thanks for this!

------
cageface
I'm convinced that dynamically typed languages are a transitional technology
that will be superseded once we develop type systems that are both usefully
strict but also flexible.

After over ten years working in dynamic languages I'm very happy to have a
compiler on my side again.

~~~
dochtman
Seems to me that that's what static typing proponents have been saying for
years (if not decades), and it still isn't true.

That said, I'm currently hacking on a compiler to see if I can come up with a
design for a static language that's almost as pleasant to use as a dynamic
one, so I'm not completely hopeless. But it certainly seems like the data
point that until now no such superior type system (strict but flexible) has
become widely popular should not be underestimated.

~~~
cageface
That's because it takes years or even decades to really get this right, like a
lot of other sophisticated technology. Look how long it took to get the JVM to
where it us today. This is fundamental research and hard stuff.

------
glenjamin
I applaud the effort to try and dissect the problem scientifically.

If a whole program has 1 bug due to being implemented with dynamic types over
static types, and that bug has gone unnoticed, then it can't be particularly
important.

The other common proposition is that dynamically typed languages are faster to
write in than statically typed languages. If this is true then we need to
compare the saving in development time with the cost of the bugs which go
undetected.

My gut feeling says that this line of analysis is never going to prove that
static typing in inherently "better".

~~~
johnkchow
From my personal experience, the saving in development time is very much real.

I used to work on .NET, and you'd have to program against crazy, non-intuitive
patterns in order to have your code "clean" (I hated IoC containers as well as
writing all that boilerplate code for Attributes. And for Java, remember that
hilarious post about Factory-Factory-Factory patterns
<http://discuss.joelonsoftware.com/default.asp?joel.3.219431?>)

I'm not saying statically typed languages are bad. Type errors always bite me
the ass in Ruby, but it's a small price to pay (IMO) for better
maintainability.

EDIT: By the way, it sounds like I'm an ignorant dynamically-typed lover. I'm
not, I still yearn for those type safety net, but I'm just speaking from a
pragmatic perspective.

~~~
cageface
The kinds of static type systems you find in C# & Java are too primitive.
Something like Haskell with perhaps a little less religion about mutability is
a whole different story.

~~~
michaels0620
Does Scala fit your idea of something in between? It has nice type inference
features and does not require pure immutability.

~~~
cageface
Personally I like Scala but I think it's too complex and a little too clever
to escape the FP niche. I'd be happy to be wrong about this.

~~~
soc88
Interesting. I never perceived Scala to be in a functional niche. As far as I
know most people consider it to be an object-oriented language first and
foremost, with functional features.

Removing inheritance would have made the language (and every other language,
too) a lot easier, but seeing that people cope with C# or Java quite well I'm
not sure about the merit of the "complex" claim.

Comparing the C# and the Scala spec is very enlightening, even though they
have different writing styles of course (so I won't bother bringing up page
numbers).

Checking and realizing which "features" are in one language, but not in the
other, is very helpful to gain some insight into this topic.

What do you think?

~~~
cageface
I don't think page counts of specs or feature lists really tell you that much.
I didn't find it that hard too get up to speed in Scala but it seems to scare
away too many Java people.

My main criticism is that it allows too much syntactic flexibility.

~~~
bad_user
I'm a programmer that in general prefers dynamic languages. Recently I've
started writing production code in Scala for a couple of web services for
which I really needed the performance and flexibility of the JVM.

Scala does have problems. But NOT the language. I find the language to be
extremely elegant and well designed.

The problem lies with the community. I find Scala libraries to be an
abomination of taste and common-sense. I don't know why that is, but in
general I stay away from libraries commonly used by Scala developers.

For instance I prefer JUnit over ScalaTest, I prefer JAX-RS (DropWizard) over
Scalatra or Play. I prefer Maven over SBT.

Of course, you could say that the language itself invites this nasty style of
programming, because the syntax is too flexible and the features too powerful.
However I strongly disagree.

For instance I've worked with a lot of Ruby and Python libraries over the
years and most popular Ruby/Python libraries are extremely well designed, easy
to use and easy to look under the hood. Ruby on Rails for instance was not
pretty, however starting with version 3 it went through a major refactoring
effort and now the codebase is clean and easy to follow; while being one of
the easiest to use and full-featured web frameworks ever built.

Unfortunately when picking a language, you do have to rely on a community and
an ecosystem of libraries. However in the case of Scala, if you don't like the
style of the current community, you can just pick from the thousands of
already available and mature Java libraries.

~~~
cageface
David Pollak has long been one of Scala's greatest champions but his grudging
acceptance that Scala is hard, from a lot of experience in the field, is worth
a read:

<http://blog.goodstuff.im/yes-virginia-scala-is-hard/>

~~~
bad_user
Yeah, but Scala is hard in the same way that Ruby is hard.

You can use a subset that's easier, however the usage of the more advanced
language features need a level of understanding that's beyond the capabilities
of many developers.

And this is in fact true of most mainstream languages. Java may be an easy
language to learn, but Java isn't just a language, but a platform - and as
soon as beginners start messing around with multi-threading (since multi-
threading capabilities in Java are in your face), then all hell breaks loose
... from this point of view, Scala may in fact be easier to deal with than
Java is for beginners.

And for instance I see people complaining about the method signatures exposed
by the collections API. I can't read those signatures very well myself,
however in the case of a dynamic language, such as Ruby, you'd have to look at
the source-code to see what the method actually returns. So IMHO, even if
those signatures are complicated, at least you've got signatures to look at.

~~~
cageface
I really don't think so.

Scala requires a more disciplined mindset. David Pollak actually developed
Lift in response to problems he had managing big Rails projects so I don't
think he would be advancing this analysis if he didn't think Scala was harder
than Python/Ruby.

------
AngryParsley
I think most people would agree that these two circles overlap on a Venn
diagram:

        (    Bugs found by unit tests (     ) Bugs found by type-checking    )

The disagreement is how much. Also, type-checking is free[1], while unit tests
have to be manually written.

I'm glad someone spent a lot of time trying to answer this question, but I
don't think it will affect my choice of language in any new project. I like to
write code in the languages I like, and bugs be damned.

1\. A common argument is that static-typed languages slow development. I'm not
touching that land-mine.

~~~
Goladus
> 1\. A common argument is that static-typed languages slow development. I'm
> not touching that land-mine.

If you claim type-checking is _free_ , the counter-argument is not that it
"slows development." The counter is that type-checking is _not_ free because
it incurs measurable costs. You may sacrifice dynamic features, you may have
to add declarations and type casts-- these are all costs whether they "slow
development" or not.

(Simple solution: don't waste time trying to claim type-checking is free and
just focus on the benefits.)

~~~
Peaker
I am not claiming static typing is free.

But it is also untrue that you have to "add declarations and type casts". With
type inference, you don't actually have to.

~~~
Goladus
But you have to use a language with type inference. That's still a cost. Maybe
not a big one, but that was my point (and I'm definitely nitpicking a bit, I
realize that.)

~~~
dllthomas
A constraint is only _possibly_ a cost - if it forces behavior you wouldn't
have chosen otherwise.

~~~
Goladus
True, but free usually means freedom from both cost and restraint, so the
point doesn't change much. I should have said "constraint" rather than "cost".

Though the original commenter did follow-up, clarifying that the common
interpretation of "free" doesn't closely match the point he'd intended to make

~~~
dllthomas
Fair.

------
afrozenator
The author really needs to be complemented on rewriting swathes of code from
Python to Haskell.

In Google, in my project, we've had runtime errors in Python code, due to
wrongly spelled variables(although that is a different problem), and type
error, something a compiler would have caught.

Strong type checking is something that I truly like about Haskell and OCaml,
I'm reasonably convinced that once my program has passed the typechecker, it
is logically correct. Though debugging in Haskell is truly a different
ballgame altogether (I'm a Haskell noob).

I'll stop here lest this turns into a flame war.

~~~
kingkilr

        I'm reasonably convinced that once my program has passed the typechecker, it is logically correct

Yup, this is one of my favorite things about Haskell, that's how I know that
<http://bpaste.net/show/32033/> is a totally correct program.

~~~
dons
If you're hoping to catch a specification error, don't use a type like
`Integer -> Integer`, which doesn't capture the specification except in a most
general sense.

Just as you should write good tests, that actually test for useful properties,
so you should write good types -- and get useful proofs back from the compiler
as a result.

~~~
kingkilr
I wasn't trying to catch the error of "program author is a moron who doesn't
know the difference between Fibonacci and factorial". Were I trying to catch
that error I would have been aware of it, and then much less likely to write
the bug in the first place. This is a truism that is well accepted by testing
proponents: which tests you write are incredibly important, and you need to
write your tests first in order to avoid a curve fitting problem (so to
speak). Any non-trivial test would have shown my function to be very broken,
what type would you have used to represent that so it wouldn't compile?

~~~
dons
Numerical algorithms suffer from a paucity of types. So either you enrich your
numerical type hierarchy, or you prove an implementation matches a model, e.g.
for fibonacci <http://stackoverflow.com/a/8434107/83805>

~~~
kingkilr
I don't have a response to that, other than to say, now you know why I decided
to write compilers instead of pursue a graduate degree in computer science.

~~~
Peaker
If you write compilers, it would be really beneficial if you had a curiosity
about the state of the art in programming languages.

------
kingkilr
If you can convert a program from one language to another (which is non-
trivially different), in the time it takes to complete your masters, I'm
pretty sure it wasn't a very interesting program. Further, the quality of the
developers is going to play a large role in how effective any tool (and make
no mistake, static typing is a tool) is. This is not intended as a disparaging
remark to the authors, but in the 30 seconds I spent reviewing each of these
code bases, I was totally unimpressed: none of them seemed to follow PEP8, and
several of their test files weren't even unit tests, they were just a random
scrip that appeared to exercise a tiny part of the codebase. I therefore
conclude that the methodology used in operating this experiment was flawed
and, consequently the conclusion cannot be taken as scientifically valid.

~~~
scott_s
I have not looked at the programs, but programs don't have to be long to be
interesting. There are many "interesting" programs under 100 lines of code -
and they can be important if they form the kernel of a larger program.

Also, the author responds to a similar point in his comments:
[http://evanfarrer.blogspot.com/2012/06/unit-testing-isnt-
eno...](http://evanfarrer.blogspot.com/2012/06/unit-testing-isnt-enough-you-
need.html?showComment=1340076330696#c8509818811145591834)

~~~
kingkilr
The author doesn't really respond to the point, he simply says they were non-
trivial in complexity, which may be true, but that doesn't mean they're non-
trivial in their dynamacism (is that a word?). Moreover it in no way responds
to the claim that these codebases aren't very good.

~~~
evincarofautumn
_Dynamicity_ or _dynamicness_.

~~~
dllthomas
What's wrong with "dynamism"?

~~~
evincarofautumn
I considered it, but _dynamism_ refers to personality and philosophy, while
_dynamicity_ is just the condition of being dynamic.

~~~
dllthomas
The Wikipedia disambiguation for Dynamism (last edited in March) includes:

"Dynamism (computing), When any process in computer is using Dynamic
management methods for its processing/computing/memory management/parallelism
handling for being able to give more user friendly work that are more easy to
interact and modify."

... for whatever that's worth.

------
dmethvin
The lack of static types really comes into play not _inside_ a library, but in
the interface between the external code and a library. Note that at least a
few of the bugs that were found involved invalid API inputs. From the library
writer's view it's not a bug because those values are not in the domain of
defined behavior. From the caller's view it's a PITA that the library doesn't
yell at them when they pass it garbage. Of course, _they_ could find the
problem with unit tests but the further up the food chain you get the more
scarce unit tests tend to be.

------
swannodette
Static types or static analysis?

      * KLEE: Unassisted and Automatic Generation of
        High-Coverage Tests for Complex Systems Programs
        http://llvm.org/pubs/2008-12-OSDI-KLEE.html
      * Erlang Dialyzer
        http://www.erlang.org/doc/man/dialyzer.html
      * Datalog based systems
        http://www.cse.msu.edu/~cse914/Overheads/mmcgill-java-static-race-detector.pdf

If you want static analysis hard coded into your language - what feature set
do you want to support? The following support different styles of programming
thus have _very different_ static type systems.

      * Standard ML / OCaml
      * Haskell
      * Scala
      * Typed Racket
      * Qi

And there's still the question that some kinds of extremely useful programs
are very difficult to write in popular languages with strong static typing.
miniKanren, a flexible embedding of Prolog and Constraint Logic Programming
into Lisp, comes to mind here. I've seen versions of miniKanren written in
Haskell and it abandons the most powerful feature of miniKanren - it can be
trivially applied back on the language it is written in!

~~~
IsTom
Dialyzer is not very good. We've been using it, but it rarely catches anything
non-trivial. On the other hand Haskell has a better support for unit tests
than many of dynamic languages.

------
timclark
Interesting, but worth remembering, as Rich Hickey says, every bug has got
past both your unit tests and your type checking.

~~~
barrkel
That statement, though, is almost content-free. It's a truism. If you don't
have type checking, then every bug has gotten past your unit tests; but some
proportion may have been prevented with type checking. And vice versa. The
statement doesn't say anything about the value or non-value of unit tests or
type checking.

~~~
mike_ivanov
No, it's not content-free, at least when put back into context.

It's like coffee. If your coffee is shitty (complect), then no amount of sugar
(unit tests) or cream (type checking) will make it any better.

~~~
barrkel
Your coffee analogy also says nothing about whether sugar or cream are better
than one another, or if either is necessary.

Though I can guarantee you that either sugar or cream with only 0.1% coffee
content will still be usable as sugar or cream for other purposes, so I can't
even agree with your analogy taken to its limit: that no amount will make the
coffee better, because enough will make it usable for other things.

In fact, unit testing and static type checking are largely orthogonal to the
complecting issue that Rich was getting act. Unit testing and static typing
will both increase complexity; they are both ways of making assertions about
the behaviour of the code, and for working code, they should both actually be
redundant. But that doesn't mean, as a practical issue, that we should do away
with either or both. We're fallible. Saying the same thing twice or three
times increases the probability of finding something inconsistent if our
statements are not representative of the Platonic ideal we're trying to
express.

------
timruffles
I wish more of these open questions in coding (and everything) had people
making such a good effort to research them! There never is a simple answer, or
they'd not be an open question.

Really inspiring, painstaking piece of work.

~~~
efarrer
Thanks for the compliment, one of my goals is to put the science back in
computer science.

------
drharris
It is definitely refreshing to see some actual evidence in something where
arguments tend to be based on speculation, experience, or opinion. Now, we
just need someone to research Emacs v. Vim, Tabs v. Spaces, etc.

~~~
crazygringo
Don't forget about braces versus indents, and above all, semicolons or not! :)

On second thought, let's forget about them after all...

~~~
Deestan
Any development environment where there exists a _rule_ on Braces versus
Indents is a place I'd stay well away from.

Put braces where they make the code readable. Use indents instead where they
make the code more readable.

And if you _do_ need a rule, make sure it's based on actual need. I.e. start
the discussion with "the past two months we've had 4 non-trivial bugs which
could have been avoided if we enforced braces.", _not_ have a bunch of people
bicker about their Personal Preferences (usually goes by the name "Best
Practices").

~~~
simias
I disagree. I prefer a development environment that settles on a coding style,
even if I don't like it, rather than chaos. I find reading code using multiple
coding style painful.

It also ends the bikeshedding, "that's how we do it there, deal with it".

~~~
Deestan
Such binary arguments bother me - Things won't degenerate to complete and
utter chaos unless you go and add strict rules for everything. Good developers
tend to follow the style of code they're in, and over time converge on a
consistent style within projects or at least modules.

If they _don't_ respect existing style, you don't have a "lack of rules"
problem. You have a lack of education problem. Do code reviews. Point out to
Bob that he's making the code less by letting the style alternate.

But you're sort of touching on what I meant when you say you don't want
"chaos". If you can point at a code file and say "this is chaotic and hard to
read - we could improve that by converging on style X or Y.", then we could
come to some agreement.

Personally, I'd rather deal with slight aberrations in style than having a
flaming row and angering half my team.

------
pimentel
How can you translate from python to a static language, when the code is
written for the interfaces, and not types? How willl you translate a function
receiving a (possibly custom) iterable, when the function doesn't care about
the type, but just whether it implements a next() method?

~~~
pja
Hindley-Milner type systems to the rescue! (With a sprinkling of Haskell style
type classes.)

      f :: Iterable a => a -> b
      f x = (do stuff with x...)

f is defined to be constrained to accept only on types which implement the
Iterable interface (however that's defined) as it's first argument and the
compiler (or interpreter) will enforce that constraint.

~~~
emillon
> Hindley-Milner type systems to the rescue!

You're implying that all type-systems derived from HM have a form of bounded
polymorphism. They're not, for example OCaml does not have type classes (you
could probably encode a lot into objects, though).

~~~
carterschonwald
False, ocaml has type classes now! (or maybe I'm thinking of coq)

~~~
pja
I don't think so: If you want the equivalent of Haskell type classes in OCaml
then you have to either use a functors or some sort of class IIRC. I'm sure
Oleg will have done something though.

I believe they're experimental in Coq.

~~~
carterschonwald
yup, you're right, you got to use functors or go home.

Yeup, some folks did show the functors + modules \equiv type classes in some
sense, for system F or a variant thereof. Theres also an oleg approach too I
think.

------
eta_carinae
The advantage of statically typed languages has a lot less to do with tests
and everything to do with tools. IDE's can do very little when no type
information is available, and most automatic refactorings require human
supervision when performed on dynamically typed languages (read this for
details: [http://beust.com/weblog/2006/10/01/dynamic-language-
refactor...](http://beust.com/weblog/2006/10/01/dynamic-language-refactoring-
ide-pick-one/) ).

~~~
thebluesky
Tooling and performance are two largest advantages. Disadvantage is more
verbosity, but it's a trade-off.

With dynamically typed languages I find that you still need to worry about
types, but you have to trace through the code to figure out what type a
particular variable is (esp. if you're not the only one working on a project).
In a statically typed language that information is readily available.

~~~
gnuvince
> Disadvantage is more verbosity, but it's a trade-off.

When I was learning Haskell, I wrote a program to count the value of a
cribbage hand. The code was half the length of an equivalent JavaScript
program.

The expressiveness of a language has more to do with the length of a resulting
program than static or dynamic typing.

------
dspeyer
For the cases I was easily able to count, this is one bug per thousand lines
of code. I realize that's a handwavy metric, but it's enough to say we're not
talking about a ton of bugs.

On the other hand, successful conversion of these codebases is a very
interesting result. Apparently static, at least static as sophisticated as
Haskell, actually can express most of the idioms in standard python. This
surprises me, as I've never seen a C++ program of significant complexity that
didn't resort to void*s somewhere.

------
njharman
> "frequently cited claim by proponents of dynamically typed programming
> languages that static typing was not needed for detecting bugs in programs"

Who says that? There's trade offs, multitudes, in choosing paradigm /
language. It's never so black and white (except for academics, and twits who
like to argue more than code)

I did not read paper, don't have time for 60 pages of pointlessness.

~~~
zopa
> "Who says that?"

<http://news.ycombinator.com/item?id=4137283> comes pretty close to making
that claim, and that's just on this page.

> "There's trade offs, multitudes, in choosing paradigm / language. It's never
> so black and white"

Sometimes, it is. Most people don't use COBOL anymore, with reason; better
languages came along. Programming is still a new field in the scheme of
things. It would be strange if our languages were perfectly optimized, with no
room for improvement without offsetting costs.

> "twits who like to argue more than code"

Some of us like to do both :) But go program; we won't stop you...

------
gtani
related:

[http://www.artima.com/forums/flat.jsp?forum=106&thread=3...](http://www.artima.com/forums/flat.jsp?forum=106&thread=335110)

[http://tratt.net/laurie/tech_articles/articles/a_modest_atte...](http://tratt.net/laurie/tech_articles/articles/a_modest_attempt_to_help_prevent_unnecessary_static_dynamic_typing_debates)

[http://www.tbray.org/ongoing/When/201x/2011/12/27/Type-
Syste...](http://www.tbray.org/ongoing/When/201x/2011/12/27/Type-Systems)

<http://blog.jcoglan.com/2011/12/29/black-box-criteria/>

<http://www.stanford.edu/class/cs242/slides/Types.ppt>

------
gouranga
Slightly different view here.

I think the nirvana of typing is hybrid static/dynamic and it hit us with
visual basic 6. I don't think anyone really noticed it though.

It supports traditional type checking by the compiler, runtime type inference
and dynamic typing without boxing. Each case can be chosen at will. It
supports all theoretical programs, supports unit testing and runtime
assertions.

The least buggy software I've seen over the years was written in vb6 (by
professionals, not the crap that haunts the web).

Now I'm not saying we should all switch to vb6 but some of the ideas may be
worth investigating.

------
jknupp
The author's interpretation of the argument in favor of dynamic languages
seems purposefully naive. I don't think that any proponent of dynamic
languages or unit testing claimed that the mere presence of unit tests
guaranteed bug free code or that it was impossible to have type related errors
at run time if you have unit tests. It's a more nuanced argument asserting
that the benefit to programmer productivity when using dynamic languages
outweighs the cost of potential type related errors not possible in a
statically typed language. Whether it has merit or not is the question I hoped
this paper would answer.

------
petercooper
On a related topic, another interesting paper:
[http://www.cs.washington.edu/education/courses/cse590n/10au/...](http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-
oopsla2010.pdf)

------
6ren
Regarding bugs, I think it's clear that static typing does detect more errors
- the issue is whether it's worth the trouble.

I think a more significant difference is the inertia of the codebase, how
difficult it is to change. Static types make it harder to evolve interfaces;
but unit tests make it even harder.

But both the above are just fiddling: the real advantage of static typing is
runtime speed; the advantage of dynamic types is development productivity. In
the history of programming, the latter always wins.

~~~
Peaker
> But both the above are just fiddling: the real advantage of static typing is
> runtime speed; the advantage of dynamic types is development productivity.
> In the history of programming, the latter always wins

Have you used Haskell? Speed is just a (nice) bonus. Type safety is not about
speed at all.

And I am much more productive in Haskell than I could be in a dynamically
typed language. I can turn the code base inside out, and trust the type system
to guide me to everywhere that needs to be fixed. When I compile it, it
_almost always_ works. I barely have to test anything.

------
jhrobert
There is a case for "optional typing". It's speed. I guess everyone agree on
this one.

Better than "strict" typing, sometimes "hints" about the type would be enough.

ie: "ii often integer" versus "ii" or "ii integer"

From then on, those who favor strict typing would be happy, those who favor
dynamic typing would be happy and those who favor "efficiency" (whatever this
means) would be happy.

Let's close this silly debate.

------
anamax
It's almost always the case that applying a new set of tests finds more bugs
so this experiment doesn't actually prove its conclusion.

------
debacle
The better programmer you are, the less you need static types.

But a group of ten programmers create a codebase that is only as good as the
worst programmer's code.

~~~
simias
No true scotsman much?

~~~
debacle
I don't know how you could contrive what I said to be cognitive dissonance.

If you have a team of N good programmers, you can probably write without
static typing. If you have a team of N-1 good programmers and 1 bad
programmer, you should really use a language static typing.

~~~
simias
I just read the first part of your comment as "no true programmer would need
no filthy static type checking". Sorry if I misunderstood.

I find it hard to correlate use of static typing with development experience,
that's all.

~~~
debacle
If you are a good programmer, you don't need typing, you don't need
interfaces, you don't need many things that make bad programmers better
programmers.

You might still use them, and there's nothing entirely wrong with that, but
you probably don't need them.

This is why so many people have problems writing JavaScript.

~~~
dllthomas
Even if you're a good programmer, typing and interfaces make refactoring
quicker and typos easier to find.

This is why so many people have problems writing in JavaScript.

~~~
debacle
Typing makes refactoring quicker only if you're relying on it. If you're not,
then it will actually make refactoring slower.

Interfaces will not make refactoring faster, just easier.

~~~
dllthomas
> Typing makes refactoring quicker only if you're relying on it.

As opposed to?

------
soc88
I wonder how long it takes until the first one picks Java to argue against
typed languages.


How Projections for Linux Smart Phones Mislead - unwiredben
http://www.linuxpromagazine.com/Online/Blogs/Off-the-Beat-Bruce-Byfield-s-Blog/How-Projections-for-Linux-Smart-Phones-Mislead?utm_source=Linux+Update&utm_campaign=Linux_Update_100_Pi-Top_2015-12-16
======
profeta
well, there is still none. So even the most conservative projection of "one"
would have missed.


Ask HN: How you promote your crowdfunding campaign? - scoptimal

Hi all,
We're running our crowdfunding campaign at Indiegogo, and got wonder how to drive traffic to our campaign ?
We had great traffic in the first 3 days, but after that we went down drastically.
We are advertising non-stop on Facebook, Twitter, Reddit & everyplace we can find, but still not getting the traffic we looking for.
Any suggestions ?
======
scoptimal
Anyone ?