Fusion.js: A Plugin-Based Universal Web Framework - <AUTHOR> https://eng.uber.com/fusionjs <comment><USER2> Seems to use Flow instead of Typescript. I wish MS and FB just merged their projects already. Really unnecessary friction when their syntax is 90% the same AFAICT.

<comment><USER3> Yes. I wonder what's the future of Flow (even if it's still used and maintained). As I posted in another topic about TS:

> It's kind of crazy that Facebook has let TypeScript takes so much market > share. I've been using Flow for so long now. The techno is good, the > integration with the code editors is good too, but Flow has a lot of small- > but-really-annoying bugs (2235 issues on GitHub right now), the type > definitions for third-party libs are meh (you often have to update/fix the > definitions by yourself), the team seems extraordinarily unstaffed for such > an important project, they don't share the roadmap at all, the priorities > are clearly internal first (like improving the performances instead of > fixing the bugs) and they don't seem to do much marketing or communication > about it.

> I'd love to still recommend Flow, and as I said the techno is good and does > the job, and they continue to release new versions, but I just don't see > what benefits you would get by choosing Flow over TS at this point. Flow and > TS do exactly the same job, with almost the same syntax (with different ways > to transform it in JS tho), but TS has a bigger community and MS seems to > put more efforts/resources into it. This has been true for 1 or 2 years now, > so…

<comment><USER4> We chose Flow for a number of reasons. One of the main ones is type inference. For example:

[https://www.typescriptlang.org/play/#src=function%20a(x)%20%...](https://www.typescriptlang.org/play/#src=function%20a\(x\)%20%7B%0D%0A%20%20return%20x%20-%201%3B%0D%0A%7D%0D%0A%0D%0Aa\('a'\))

[https://flow.org/try/#0GYVwdgxgLglg9mABAQwBQA8CUiDeAoRRAJwFM...](https://flow.org/try/#0GYVwdgxgLglg9mABAQwBQA8CUiDeAoRRAJwFMoQil1EBaRARgG48BfPPNAcmU8yA)

With Flow, we can surface type errors even in files that don't have any type information other than the @flow directive, e.g. [http://eng.uber.com/wp- content/uploads/2018/07/image4.png](http://eng.uber.com/wp- content/uploads/2018/07/image4.png)

<comment><USER5> To me that's a feature and not a bug. A good codebase would have --noImplicitAny enabled, which would catch this. Relying on usage of a function to know its types is fragile, the function should be the one declaring the types it uses so that callers can adapt to changes, not the other way around.

<comment><USER4> \--noImplicitAny isn't quite equivalent though. What type inference provides is the ability to define the type of something somewhere and propagate that contract throughout a complex system such as a DI container.

The playground examples are just an oversimplication to illustrate the core difference between TS and Flow, but the screenshot gives a better idea of how it actually plays out in practice. In our case, we tie the type to the DI token and a plugin receives something that is guaranteed to be of that type.

This means someone migrating doesn't need to explicitly add types to their code, but can still get better gradual type coverage than `any` or the break- the-world `--noImplicitAny` flag.

<comment><USER5> I can totally see an argument for that if you need gradual type coverage, which I guess is needed on large code bases. I have only worked on smallish ones of a few thousand lines of code, and it took maybe an hour to type everything, although most of it was really fun and exciting :) but in cases where that's not realistic, I could see using Flow to help transition.

</comment></comment></comment></comment></comment></comment><comment><USER6> I'll use anything that the author of this article (Leo Horie) releases or is attached too. He is one of the greatest minds in JavaScript of this generation. After Angular, Vue and React I stumbled upon his framework Mithril.js and it was like I stumbled across the shroud of fucking turin, that framework is true poetry.

<comment><USER7> hmm. so he made Mithril but he's using React here? any insight on why that decision?

<comment><USER4> I joined Uber last year. They had already standardized on React long before that.

</comment></comment></comment><comment><USER8> The Fusion plugin system is rather powerful and enables colocation of related/coupled code that would normally be spread across several places. For example, the Styletron plugin for Fusion (an integration for a CSS-in-JS implementation) will do several things:

* Wrap the application component tree in a React context provider component (which provides an instance that components will render styles into)

* On the server, extract rendered styles after SSR from provided instance and add necessary markup into the server-rendered page

* On the client, hydrate the provided instance from the server-rendered styles

* On the server and in development, set up a route handler that serves two assets, a web worker implementation and associated WebAssembly binary [1]

* On the client and in development, fetch and execute the web worker. Normally, this would be a somewhat difficult integration because of CSP-related issues with web workers, but because the plugin sets up its own route handlers, the requests will be same-origin, sidestepping most CSP issues that normally arise. Additionally, Fusion plugins can also modify response headers for requests, so if needed, CSP headers could also be set appropriately.

All the code to do this actually is related to a single concern, namely styling, but in a universal web app, such things typically requires the involvement of many different parts of the application lifecycle and both server and client code. Fusion plugins allow you to slice up the independent parts of your application logic in this fashion, somewhat analogous to how colocating HTML/CSS/JS for individual components in CSS-in-JSX is often much nicer than splitting apart component implementations across separate HTML/CSS/JS files.

[1]: This web worker generates debug CSS at runtime that maps rendered CSS to the source styled component definitions in JS using source maps, making it easier to reverse map the rendered CSS to the source CSS-in-JS when inspecting the DOM with the styles pane. [https://github.com/rtsao/css-to-js- sourcemap](https://github.com/rtsao/css-to-js-sourcemap)

</comment><comment><USER9> I've been working with the Fusion.js team for the last year now, and I think it's evolved into a really interesting and modern web framework. Internally we've started rolling this framework to a few dozen web applications, and soon we will have hundreds of web apps running it. I think it's a great choice to use as a base for high-performance and complex web applications.

</comment><comment><USER10> Looks like a competitor to next.js, and from their docs built on koa.

It's nice to see more libs in this space, but it seems a little over complicated to me with the "plugin" style arch.

<comment><USER9> Correct about Fusion.js being based on koa. We find that this fits really nicely within the plugin system. The diagram is complex, but we inject the render phase into the middleware stack. Everything before `await next()` is pre-render, and everything after `await next()` is post-render. It makes it very easy to reason about the lifecycle of a plugin, as everything is in one place.

<comment><USER11> Koa is an improvement over Express, but I think it would neat if the JavaScript ecosystem adopted an even more functional middleware style, like Python's WSGI, Ruby's Rack, Clojure's Ring, etc.

Conceptually it's simple: middleware is a function that typically accepts a downstream "app", and returns a new "app" which accepts a "request" and returns a "response":

        const middleware = (app) =>
          async (request) => {
            // do stuff with request
            const response = await app(request);
            // do stuff with response
            return response;
          };

I worked on this idea way back in ~2009 (creatively called "JSGI" for the interface spec and "Jack" for an implementation) but promises weren't really a thing in JS, and async/await definitely wasn't a thing, so it was awkward.

More recently Michael Jackson had a project called Mach which was a similar idea, but it's no longer active either: [https://github.com/mjackson/mach](https://github.com/mjackson/mach)

As an aside, one of my favorite aspects of this style is having symmetric interfaces for HTTP servers and clients. You could do neat things like use a cache middleware for both a client and server, or write a simple HTTP proxy in a couple lines.

Anyway, with the addition of promises, async/await, and async iterators to JS I'm starting to dust off these old ideas. prototype here [https://github.com/tlrobinson/twosixonesix](https://github.com/tlrobinson/twosixonesix)

<comment><USER12> Years ago, I played with the idea: [https://github.com/danneu/klobb](https://github.com/danneu/klobb)

I went on to implement it in Swift ([https://github.com/danneu/hansel](https://github.com/danneu/hansel)) and then seriously improved on it in Kotlin ([https://github.com/danneu/kog](https://github.com/danneu/kog)).

It was fun but hard to really make a convincing upgrade to Koa once you consider the rest of the ecosystem. For example, since Koa exposes Node's req/res, then you can still use existing Node/Express middleware.

<comment><USER11> I think it should be possible to write an adapter to use existing Express middleware. I haven't tried, but it's on my TODO list.

</comment></comment></comment></comment></comment><comment><USER13> The author seems to be the same person behind [http://mithril.js.org](http://mithril.js.org)

<comment><USER4> Hi, that's me :)

Fusion.js is a team effort though: [https://fusionjs.com/team](https://fusionjs.com/team)

<comment><USER5> I thought your name sounded familiar! I played around with Mithril.js for a bit before settling on React.js and was really impressed with how you took the simplicity of JS and used it to your advantage with Mithril! Sad to say that I couldn't replicate that cleverness in my own code because I could not really wrap my head around the reasoning you used to come to code you did in your examples of using Mithril, but that's just more evidence that you're a smart guy, so thanks for making Mithril which helped widen my view of what could be done with JavaScript frameworks! Also is there any reason you chose Flow over TypeScript?

<comment><USER14> Funny you say that, as for me it was the exact opposite. I had tried multiple frameworks before discovering Mithril, and it was the first that clicked with me. I think what appealed to me the most was the lack of magic, its minimalism, and flexibility. Whereas with other frameworks, I felt I was always encouraged to `npm install <another-package-or-plugin>`, Mithril made me dig deeper and understand the nuances of JavaScript.

</comment></comment></comment></comment><comment><USER15> Can someone write a sales pitch / direct comparison to next.js please?

Does it only support react?

<comment><USER4> I wrote a small comparison here:

[https://fusionjs.com/docs/getting-started/framework- comparis...](https://fusionjs.com/docs/getting-started/framework- comparison#nextjs)

The main difference is Fusion.js has more support for backend things. For example, we provide a GraphQL plugin, and plugins such as I18N are bundle- splitting-aware out of the box.

The plugin system is universal (meaning you can isolate concerns by what the library is responsible for, rather than whether the code is server code, browser code, React provider boilerplate, HTML hydration code, etc).

This plugin architecture has already proved to be very valuable on more than a few occasions. One example is a service worker implementation we've been working on. It needs a middleware, browser-side registration code, etc, but all of this complexity is encapsulated in a plugin that can be added to any app with one line of code.

> Does it only support react?

Many plugins have a `-react` version that allow them to auto-integrate with React, but the core itself is view library agnostic.

<comment><USER16> There's a typo in the beginning of the Next.js paragraph, developer -> developed.

<comment><USER4> Thanks! Pushing a fix

<comment><USER17> One more under the Electrode comparison:

monolythic => monolithic.

</comment></comment></comment></comment></comment><comment><USER18> The idea behind this looks awesome - if I understand correctly, this is to encourage people to program more to interfaces provided by plugins so that implementations can be swapped more easily. This does not require a type system either to use, which lowers the barrier.

The one thing I think should change though is decoupling from requiring Node from the runtime. I think the broader JS ecosystem could benefit from some of the ideas this library seems to promote.

</comment><comment><USER19> Is this framework tightly bound to nodejs or can it be used with other backend stacks like asp.net core or spring?

<comment><USER9> Fusion.js is a javascript framework meant to be run on Node. There's nothing stopping you from calling out to other backends and asp.net if you stand up a Fusion.js frontend Node server.

</comment></comment><comment><USER20> Looks awesome and love the focus on plugins. I also like some of the choices made, Redux, React Router, Security, etc. but going with Flow??

Our company has standardized on Typescript, it has practically "won". Unfortunately for me, introducing Flow would get shot down.

<comment><USER21> It's a library so either they need to be convinced to provide definitions or the community needs to be convinced to build them. But at the point that they are built it's no different than anything else in your stack.

</comment></comment><comment><USER22> Looks like Angular 1

<comment><USER23> Can you explain what you mean?

<comment><USER4> The dependency injection (DI) system is indeed inspired by Angular's. It has some major differences though:

\- Fusion.js DI is token-based rather than string-based, so no naming collisions

\- We support statically typing injectables (similar to Angular 2+)

\- plugins are the only injectable entity type (whereas Angular is conceptually complex: e.g. modules, services, providers, factories, etc)

\- plugins are isomorphic, whereas AngularJS injectables are not

I sorta already expected that people might get mixed feelings when seeing a DI system, but we spent a lot of time designing/tinkering with the plugin architecture to make it truly useful for managing complex library integrations and complex backends. I'd be happy to answer any questions about how we've been using it.

</comment></comment></comment><comment><USER24> Have any of the maintainers used Next.js? What was your opinion? What does Fusion.js do differently/better?

<comment><USER4> We did evaluate it. Some of the things off the top of my head that I think Fusion.js does better:

\- isomorphic treeshaking

\- more powerful bundle splitting (i.e. lazy loading can happen in any component rather than only at "page" level)

\- async server-side rendering is composable via HOCs rather than only at top- level getInitialProps

\- more things are provided by the team via plugins (e.g. I18N, CSRF protection, atomic CSS, async font loading, etc)

\- better support for maintaining server-side complexity (e.g. by using Koa + DI system to make testing/mocking easier)

\- out-of-band brotli level 11 compression for static assets

The team is about a dozen people now and we've been working on Fusion.js for over a year, so there's probably other stuff I'm forgetting right now :)

<comment><USER24> Thanks!

> lazy loading can happen in any component rather than only at "page" level

You can use dynamic imports anywhere in Next using `react-loadable`.

> more things are provided by the team via plugins

Next relies on its thorough `examples` dir for integrations. But it means a lot of manual coding.

I had a crack at a plugin system in the past (i.e plugins for adding features like apollo, redux, etc. AOT like stuff). I found that it obfuscated the code too much. Makes it hard to trace what is happening and make adjustments. The closer the code is to the "Getting Started" examples of Redux, I18n, Apollo, the easier it is to tweak and understand.

E.g. Sometimes it might be clearer to just wrap a Provider manually around the app root, than expose a plugin hook. Because you can see the React tree, whereas with plugins everything is dynamic so you must rely on logging.

I think devs are naturally drawn to DRYness and dividing code up by feature, which is what a plugin system offers, but there are big tradeoffs. I'm interested to dive into Fusion to learn more about their approach though.

> \- better support for maintaining server-side complexity (e.g. by using Koa > + DI system to make testing/mocking easier)

Great to see you adopting Koa! I use it myself, and feared that the community had stagnated, but now with Fusion, it may be reinvigorated.

> DI system to make testing/mocking easier

Very cautious of DI systems. Same reasons as plugin systems: its hard to see what is going on. And sometimes manually wiring up all the dependencies is actually not much code at all, and you can manage cyclic dependencies and ordering easier.

Keen to dive in deeper though.

<comment><USER4> > You can use dynamic imports anywhere in Next using `react-loadable`

I joined the team after the code splitting part was done, so I don't know off the top of my head whether this library was considered, but it does look interesting. From a glance, it seems to suffer from the issue of sprinkled configuration, but it might be something that we could potentially use to replace our current implementation. Does it support HOC-level async data fetching?

> Very cautious of DI systems. Same reasons as plugin systems: its hard to see > what is going on

Interestingly we had a completely opposite experience maintaining our old closed-source framework. Everything was built on top of express and it was really hard to reason about where code for any given thing was. For example, trying to debug some I18N thing meant digging through at least 3 files filled with unrelated concerns in completely unrelated packages.

FWIW, we spent _a lot_ of time designing and redesigning the plugin system (like months). What is there today looks nothing like our first approach. I think we arrived at a pretty good solution, which is centered around colocating related concerns into one place.

> sometimes manually wiring up all the dependencies is actually not much code > at all

Yes, wiring things up manually is relatively easy. The challenge we kept running into was taking things out (e.g. no-op-ing production-hitting tracing/metrics code in tests)

</comment></comment></comment></comment><comment><USER25> This looks really promising. Amazing work! I hope this will catch on, so it can be improved even more.

</comment><comment><USER26> Dependency injection scares me as it feels like a move towards the JavaEE/Spring world.

<comment><USER4> Having used other DI systems, I think the parts that most confused me were that the injector would usually be hidden away (meaning you couldn't see _what_ was being injected), and also the conflation with various initialization patterns (factories, providers, singletons).

In Fusion.js, the injectable registration is done in the entry file, and initialization patterns are the concern of the service API. I think these design choices simplify things a lot.

</comment></comment><comment><USER27> Reframe ([https://github.com/reframejs/reframe](https://github.com/reframejs/reframe)) is an alternative that focuses on flexibility.

Fusion.js locks you in, Reframe doesn't.

(I'm Reframe's main author.)

<comment><USER28> Can you expand on why you think Fusion locks you in?

Without a more detailed argument this sounds like you're just plugging your product.</comment></comment>


Seventeen or Bust loses all data, and backups - <AUTHOR> http://www.free-dc.org/forum/showthread.php?52383-Server-down&p=181630&viewfull=1#post181630 <comment><AUTHOR> I used to check in on the project every couple of years but results seemed to have dried up, and participation seemed to have been falling, in line with projects such as RC5-72.

These projects were born in an era where there was such a thing as spare CPU cycles, before aggressively efficient power management became widespread, and before your compute cycles could generate cryptocurrency.

I am still very sad to hear of the data loss.</comment>


Ask HN: Equity splitting - <AUTHOR>

Hey HN,
My mentor and I started a company together, about 4 months ago.
Originally we had a 50/50 split.  We are both doing other jobs, I'm contracting full time for at least another month, but I'm putting in over 30 hours a week writing the software and creating all the sales material.  My mentor is currently running a few other companies and is giving support via contacts and making things happen.
In a month I plan on not renewing my contract, and going all out on this start-up.  To make things more complicated we also have a minor partner, who wants in on the equity.  This minor partner is also willing to quit his full time and do this all out.
I'm in a tricky situation, I think the split needs to be adjusted, but I'm afraid of damaging relations.
Yes we have paying customers already, so this needs to be solved before we hockey stick.
Any tips? <comment><USER2> You should check out this article. It may not be perfect for your situation but it should set you in the right direction.

[http://www.geekwire.com/2011/wrong- answer-5050-calculating-c...](http://www.geekwire.com/2011/wrong- answer-5050-calculating-cofounder-equity-split)

<comment><AUTHOR> Thanks jbhelms,

That article put a lot into prospective. Being the pig is something, but it isn't everything. The reputation my mentor brings is massive.

I'm just blinded by the amount of work that is ahead of us.</comment></comment>


COBOL bridge for Node.js - <AUTHOR> https://github.com/IonicaBizau/node-cobol <comment><USER2> (silent tears of joy)

</comment><comment><USER3> (Not a JS'er) You can pass a comment as a parameter?

<comment><USER4> not in the language itself, but you can obtain the full text of a function, detect the comment and parse it, and inject it where ever it needs to go.

<comment><USER5> Yep. "Passing a comment" is used by calling .toString() on the function. It fails when using minification for obvious reasons but of course you wouldn't on Node code.

It's a clever hack around JS's awful multiline string support. But with ES6 template strings it's not really needed anymore.

</comment></comment></comment><comment><USER6> Every time I was reading about old COBOL systems, I was wondering if we can compile COBOL to asm.js, this is slightly other direction but IMHO this topic requires more love.

</comment><comment><USER7> Wow, match made in heaven!

</comment><comment><USER8> But why?

<comment><USER9> It gives you a way to connect your enterprise system to your corporate intranet.

<comment><USER10> Seems like a pretty stupid way to do it. Why not just use the raw data from the data files or direct access to the DB/2 database? Does this even handle the ebcdic to ascii conversion? Or packed decimal numbers?

</comment></comment></comment><comment><USER11> Uh... Neat?</comment>


Pliant Un-Success Story - <AUTHOR> http://www.fullpliant.org/doc/intro/history

<comment><USER2> English is obviously not this guys first language. I wonder if that helped contribute to its "un-success". It would probably a huge help if someone helped translate his site and documentation to correct english.</comment>


Hackers exploit chink in Web's armor - <AUTHOR> http://news.cnet.com/8301-31921_3-20046588-281.html?tag=topStories1 A long-known but little-discussed vulnerability in the modern Internet's design was highlighted yesterday by a report that hackers traced to Iran spoofed the encryption procedures used to secure connections to Google, Yahoo, Microsoft, and other major Web sites. <comment><USER2> Previously on HN at <http://news.ycombinator.com/item?id=2358237>. Official disclosure at <http://www.comodo.com/Comodo-Fraud-Incident-2011-03-23.html>.</comment>


Yale Professor of Epidemiology claims HCQ "key to defeating COVID-19" - <AUTHOR> https://www.newsweek.com/key-defeating-covid-19-already-exists-we-need-start-using-it-opinion-1519535 <comment><USER2> I suggest changing the title to something like:

      Yale professor of epidemiology claims hydroxychloroquine "key to defeating COVID-19"

<comment><AUTHOR> Done. I usually try to avoid editorializing titles after repeated scoldings but I think this is appropriate.

</comment></comment><comment><USER3> Take a look at these plots: [https://c19study.com](https://c19study.com)

</comment><comment><USER4> Hydroxychloroquine is only controversial because Trump championed it. Otherwise it would be a detail of interest only to doctors treating COVID and researchers evaluating the success of these treatments.

Political hyper-polarization and social media amplification of divisive content to drive "engagement" is making us all collectively lose our damn minds.

If Trump says the sky is blue, his followers mindlessly believe it and everyone else will mindlessly decide the sky must instead be green. If Trump says the sky is green, his followers will mindlessly believe it and everyone else will mindlessly revert to thinking the sky is blue. The _effect_ of a personality like Trump and how people react to him is quite possibly worse than Trump himself.

Either HCQ works or it doesn't. Deciding that and deciding how best to use it if it does work is a job for scientists and doctors. If you are not a scientist, doctor, or otherwise guided by real data that you are qualified to evaluate, your opinion on this issue is not valid and you need to shut up. What Trump or some other media whoring ass clown does or does not believe is irrelevant and will probably change next week anyway. Neither Trump nor his detractors have a valid opinion on this issue (unless they are actual professionals).

/rant over

<comment><USER5> I disagree. I think the anti-Trump crowd would've happily been on board with HCQ if Trump had said it was helpful and then scientific studies then also concluded it was helpful and that was the end of it.

Instead, the FDA publicly retracted it's authorization for the use of HCQ and said it did more harm than good, and so public sentiment solidified behind the idea that it was stupid all along. If the FDA hadn't done that and the treatment continued to prove effective, I think we would all generally be on board with it.

There are a lot of ways in which it turns out anti-Trumpers are exactly the same as Trump supporters, but the anti-science bent isn't one of them.

<comment><AUTHOR> The treatment is continuing to prove effective when administered in the correct dosages at the appropriate times and in conjunction with Zinc and Azithromycin.

Unfortunately a lot of people were biased against it precisely because Trump supported it. The studies showing it didn't work or was dangerous were poorly designed but people happily accepted their results because they made Trump look like a fool.

It's time we put politics aside and reverse course on HCQ.

<comment><USER6> > Unfortunately a lot of people were biased against it precisely because Trump > supported it.

If someone says "you should take this", based on "[they] feel good about it. That's all it is, just a feeling, you know, smart guy. [They] feel good about it.", with no strong medical support, then rejecting the drug is the proper course of action.

The medical community can continue to perform tests, and if there later is support for the drug, then policies can change. But that doesn't alter the fact that rejecting the drug was the correct policy.

<comment><AUTHOR> Except that's not "all it is". Trump only said it should be taken based on research that had been done showing it may be effective, research which has been replicated in numerous studies in numerous countries.

Subsequent poorly designed studies got bad results precisely because they were poorly designed, yet they continue to influence attitudes on HCQ treatment.

</comment></comment></comment></comment></comment><comment><AUTHOR> For the record, this absolutely had the requisite level of engagement for the front page, but mysteriously languished under new.

<comment><USER7> The great thing about subscribing to HN via RSS is that you can see all the content that made it to the front page (as this post did), and was subsequently censored by leftist definitely-not-fascists

</comment></comment><comment><USER8> Does anyone know if there any reasonably effective medications, yet (with sources)? Plasma therapy is the only majorly effective therapy I am aware of, at present. Would be interesting to read more on any promising treatments (aside from the Oxford vaccine success story).

<comment><USER9> I've heard Remdesivir has some major positive effects... like cutting hospital stays by 20% or something like that, and mortality by a decent percent. But it probably needs some additional parts to a 'cocktail' to bring more deaths down closer to 0. I think we could probably get it closer to 10-20% of current death rates w/ the right treatments, but that takes time/studies/etc... I mean HIV while no vaccine is available they've pretty much cut back on death w/ azt/other combo's of drugs.

But it wasn't built in a day, I hope they do get treatments coming soon though, that also address long-term effects of covid and prevent some of those... cause that's my biggest worry, how this affects us all over time.</comment></comment>


Show HN: Gigster- Hire a contract developer in 5 minutes - <AUTHOR> http://www.trygigster.com

<comment><USER2> I really don't know how I feel about this but in a sense I think it may be good for the company and bad for others who weren't privileged enough to have rich parents to send them to a top CS school.

<comment><USER3> Liked the idea and saw the site got the same thought!

<comment><AUTHOR> Hey guys! This is the first draft of the site :) Please apply to become gigsters if you haven't we absolutely value ability over prestige. Sorry if we communicated otherwise! We just needed a quick way to demonstrate the strength of the initial gigsters. Once again look forward to seeing you guys signup and thanks for the comments...we are still learning! :)</comment></comment></comment>


See what Google knows about you - <AUTHOR> http://www.google.com/ads/preferences/

<comment><USER7> Google is really leading the pack when it comes to their transparency regarding user data. This plus the Google Dashboard means basically anything Google knows about me is shown at one glance and I can opt out at the click of a button.

They need to link to these preferences from the Dashboard (but I bet they're scared out of their minds that everyone will opt out...)

</comment><comment><USER8> "Your categories: You have opted out of Google's interest-based advertising. No interest categories are associated with your browser."

To opt-out just go here: <http://www.google.com/ads/preferences/html/intl/en/plugin/>

<comment><USER9> I'm curious. Why do you want ads shown to you NOT be targeted?

Unless you're using adblock, you should be seeing a whole bunch of crappy ads for fat-loss solutions, IQ tests, "Which way is this mannequin turning?", etc...

(Disclaimer: I co-founded a company now helping companies target ads. People opting out won't harm me economically, but I'm really trying to understand people's objections).

<comment><USER10> _I'm curious. Why do you want ads shown to you NOT be targeted?_

I want unsolicited ads to not be targeted for several reasons:

1) I don't want people to necessarily infer my interests/character based on ads they see when I'm just browsing the web. "Dude, why do you have porn ads all the time when you browse the web?"

2) I don't need to be sold to on a constant basis. Unless I'm in the market for something, I generally would prefer to not be sold to. Selling me something I'm sure to not care about, e.g., IQ tests, are almost the same as no ads. Showing me well-targeted ads are more likely to prove to be a distraction.

3) Privacy. I'd really prefer no one to have information that associates my account with specific information. It's hard to avoid today, but to the extent that I can reduce it, I will.

With that said, solicited ads are fine. If I do a search, x% of the time I'm looking for a product to purchase. I don't mind it then. Many of the websites I read, e.g., Engadget, are almost ad sites in that the content is generally about product for me to buy or use. And Android ads on Engadget are fine. They're not specifically targeted to me, but the demographic of people reading Engadget.

<comment><USER11> 1) Valid 2) You can't opt out of the ads. You're going to see them whether you want to or not. 3) You're opting out of the targeting, not the collection of your data. They will still have your data even if they don't use it for ad targeting.

Every now and then I see a perfectly targeted ad. like the other day I saw one for a chamber music concert a bus ride away. I saw an awesome concert and the venue got an extra sale. If that had been a random IQ test ad, I would have missed an awesome experience.

TL;DR targeting is better for everyone.

<comment><USER10> Regarding (2) my point was that non-targeted ads are almost the same as the ad not being there. My brain doesn't even process the "shoot the monkey" ad anymore.

Re (3), that sucks. If they're collecting and associating data with your account, but just not displaying the ads, I think that's a problem. Opting out should opt you out of associating data with your account.

</comment></comment></comment></comment></comment><comment><USER12> I have no problem with targeted ads excepting one. Many of the categories have no product! Lots of software related thingys, but nothing I can look at :( Many of the magazines that I still subscribe to at least have adds that allow me to fantasize about what I could do if I had but the funds...

</comment><comment><USER13> This is my full list, and none of it is surprising. I'm just glad they don't assume I'm older :-)

      Arts & Entertainment - Movies - Science Fiction & Fantasy Films
      Computers & Electronics
      Computers & Electronics - Hardware - ... - Chips & Processors
      Computers & Electronics - Hardware - ... - Sound & Video Cards
      Computers & Electronics - Hardware - Laptops
      Computers & Electronics - Programming
      Computers & Electronics - Software - Operating Systems - Linux & Unix
      Internet & Telecom - Web Services - Web Hosting & Domain Registration
      Jobs & Education - Education - Vocational & Continuing Education
      Online Communities - Social Networks
      Demographics - Age - 25-34
      Demographics - Gender - <USER6>

Honestly I don't know why this level is surprising. I think as the world gets more connected, the community is gonna get a little smaller (in feel, at least), and we're going to become less anonymous. If the bad guys get less anonymous too, and nobody pretends that this stuff is sufficient to definitely identify me, I don't see a problem. Yup, big "ifs."

<comment><USER14> I'm a 29 years old male, but according to Google I'm a 18-25 years old female.

Oops.

<comment><USER15> Maybe you should lay off the Victoria Secret searches ;-)

If you don't mind me asking, what were your categories? I am curious why they inferred female vs male.

<comment><USER14>
         Arts & Entertainment - TV & Video - Online Video
         Arts & Entertainment - TV & Video - TV Shows & Programs
         Arts & Entertainment - TV & Video - TV Shows & Programs - TV Comedies
         Computers & Electronics
         Computers & Electronics - <USER3>
         Computers & Electronics - Programming - C & C++
         Computers & Electronics - Programming - <USER4>
         Computers & Electronics - Software - Internet Software
         Internet & Telecom - Email & Messaging
         Reference - General Reference - Time & Calendars

Also, there was something about articles related to social stuff / basic rights, but I can't see it anymore (weird).

So yeah, maybe it is because I used to watch Friends, Desperate Housewives and Sex and the City :D

I know, I know, especially that last one; I got in the habit because of my wife and for some weird reason, I began liking that show.

<comment><USER15> I feel for you. My wife watches "Real Housewives" series and I now know way too much about those people. :-)

</comment></comment></comment></comment></comment><comment><USER16> You can also modify Yahoo!'s information on your account as well:

<http://info.yahoo.com/privacy/us/yahoo/opt_out/targeting/>

</comment><comment><USER17> "Computers & Electronics - Programming - Java"

Blasphemy!

Python for ever!

</comment><comment><USER18> I use Noscript and have marked doubleclick as "Untrusted". It just shows "You cannot view or edit interests when you do not have an 'id' cookie. Opt-in to get a cookie."

<comment><USER19> Yeah, the point is to have a specific cookie, in which it is written you do not want to be tracked.

</comment></comment><comment><USER20> This is pretty cool, but it thinks I've quite a bit older than I am. :)

I don't think there's anything wrong with targeted ads - I for one am not opting out!

<comment><USER21> Funny, they erred on my age the other way. Did it also peg you as "25 - 34"? I wonder if this is some sort of default.

Otherwise, it seems to have accurately tracked what I view in Chrome on this particular computer / boot partition at home. Would not expect it to track stuff at work or when booting to Windows to watch Netflix.

<comment><USER20> Yes it did. I don't know if that's default, or if it's because most of my relevant content surrounds tech, financials, and intellectual property though. I'll check Chrome when I get home - it might give a better view of who I am.

</comment></comment></comment><comment><USER22> Me: Male from 35 to 44, no other information:

That's not correct, I am a girl of 25.

<comment><USER23> Me: Male, 65+

I'm in my late 30s.

They have my interests as Business News & Finance (correct), but no Tech (incorrect), so perhaps the ad system is guessing age & gender from interests?

</comment></comment><comment><USER24> "No interest categories are associated with your ads preferences so far."

Google has nothing on me, apparently.

<comment><USER25> At the bottom they state "Your ads preferences only apply in this browser on this computer. They are reset if you delete your browser's cookies."

You probably cleared your cookies already or are using a browser you don't normally use. I'm glad this is cookie based and not tied into the actual logged in Google account.

</comment></comment><comment><USER26> On my original look at this, Google had one of my interests as hockey. I've never shown any interest in the sport, nor have any of my friends, so I was confused. Upon reloading the page, "Hockey" was gone, although I had taken a screenshot before, and noticed a number of other preference had been removed, leaving a much better fit of my activities.

Prior to my refresh I had video streamining, photo sharing, and online video as my "interests" despite the fact I don't tend to use my computer for these kinds of things. These are obviously things I _might_ be interested in (25-34 male demograph), but am not particularly. I wonder why they would appear and disappear like this? How often are the preferences updated (hourly? daily? monthly?)

<comment><USER9> Very strange. Do you share your computer with others?

The change is probably due to caching. If your computer isn't shared, I'd blame Google's classification which isn't always very accurate. Best example: a page of photos of pole dancers was classified as "winter sports" because the secondary navigation linked to relevant content...

<comment><USER26> Indeed - no, I'm the sole user of the computer, it just seems odd that so many disappeared, I'd almost not believe it if I hadn't taken a screenshot!

Considering Google's expertise with data you'd think they'd have enough NLP know-how to avoid errors like the one you describe - interesting though.

<comment><USER9> Probably a lack of motivation rather than ability. Also, their current algo is probably "good enough" for most cases.

<comment><USER26> Yeah - I guess when "good enough" gets you around $25 billion in revenue, it's probably good enough for now...

</comment></comment></comment></comment></comment><comment><USER27> Fascinating - it got my gender right and age right but I have no clue where it got the categories from - books and web development are probably the only two things that are even in the ballpark. "Online Goodies"? - no clue!

      Arts & Entertainment - Music & Audio - ... - Song Lyrics & Tabs
      Books & Literature
      Internet & Telecom - Web Services - Web Design & Development
      Jobs & Education - <USER5>
      Law & Government
      Online Communities - Online Goodies
      Online Communities - Online Goodies - Skins Themes & Wallpapers
      Demographics - Age - 25-34
      Demographics - Gender - <USER6>

</comment><comment><AUTHOR> If anyone is interested, I found this existed from a daily newsletter I subscribed to - <http://dlewis.net/nik/>

Sure the things on the list aren't that bad, but if google can get that much just from you browsing the web they could probably get a lot more. And yeah they are transparent by showing what they know about you and it's one click to opt-out but how would someone even find that page in the first place.

</comment><comment><USER28> Why use a cookie if you could finally make use of the Do-No-Track header (or however it was called)?

Granted, that's a feature only found in newer browsers, but it could help speed up the adoption of that header.

Anyways, I will continue to just block everything that remotely looks like Google (besides the API, that is. It's disconcerting to see how many websites rely on it to function properly).

</comment><comment><USER29> Interest are accurate, but they don't have my age, which is very weird knowing I have a public Google profile (Google+ profile now).

</comment><comment><USER30> With this information, I have to wonder how I ever get mis-appropriate ads on sites (using adsense) these days? There have been some far misses (feminine products) that should easily be eliminated with the information on this page.

Wonder if adverstisers don't use this option?

</comment><comment><USER31> Hopefully this will reduce the remarketing ads I keep seeing(doubtful). I click 1 link on HN and then usually it's a YC company fills up all the ad units on every page.

Ahh at least it's better then the get rich quick stuff or the 1-Secret Diet Trick ads on Facebook.

</comment><comment><USER32> very cool

I too have the default appearing 25-34 age but my interests are spot on.

</comment><comment><USER33> Ghostery + AdBlock, no information about me.

<comment><USER34> Modified host file, no need to install software and it's multi-browser. No information about me.

<comment><USER35> tell me more about your hosts file.

<comment><USER34> Here is the one I use:

<http://someonewhocares.org/hosts/>

I had to rename it to see the site the OP linked, and it had no preference nor any personal info. I'll try it on my work computer on which I don't have neither a hosts file or an adblock when I'll get there.

<comment><USER35> thank you too!

</comment></comment></comment></comment></comment><comment><USER36> There were some funny choices in mine. Apparently I'm twice my age, love race cars, sports, and reptiles. All wrong.

</comment><comment><USER37> Nice to see I at least view the ads of a much younger person as they are 35 years off on my demographics.

</comment><comment><USER38> This is refreshing to see in some ways. I hope Google becomes even better at targeting.

</comment><comment><USER39> "Firefox can't establish a connection to the server at googleads.g.doubleclick.net."

</comment><comment><USER40> Not sure if this is cool, or creepy. Nice that you can opt-out right there though.

<comment><USER19> I was wondering this morning why I had a facebook ad about a music band that I started listening a few weeks ago ONLY at work and ONLY on grooveshark. The band is not that famous to appear randomly in my facebook account so I wonder if this can be linked!

You can also find : <http://www.networkadvertising.org/managing/opt_out.asp>

<comment><USER41> Well if you check Facebook at work and go to Grooveshark, they can track you. I think they might even be able to gather some info if you logged out of Facebook but I'm only partially sure of that.

</comment></comment></comment><comment><USER42> hmm it does not work for me: <http://i.imgur.com/SDvIl.png>

And my browser's cookies are _not_ disabled.

<comment><USER9> Do you have AdBlock installed?

<comment><USER42> yes. Do you think it is because of adblock?

</comment></comment></comment><comment><USER43> This always results in a redirect loop for me..

</comment><comment><USER44> have to download a plugin to opt out wtf? they never hear of do-not-track?

</comment><comment><USER45> Keep in mind that it's based on your current browser's cookies...I checked it at work and it says things like "Fiscal Policy News" and "Colleges and Universities" are among my interests...on my laptop, which I brought to work today, it's "Social Networks", "Soccer" and "Clubs & Nightlife"

</comment><comment><USER46> My Glimmerblocker proxy tells me that Google's info about me can be summed up in a 1 by 1 pixel transparent image. This makes me happy.

</comment><comment><USER47> It's transparent but definitely not user friendly. When you opt out it uses a cookie so if your cookies get deleted you need to opt out again. Also, since opting out uses a cookie you must opt out on every browser on every machine you use. Definitely not convenient.

<comment><USER48> How else could it be done?

<comment><USER47> On the server side. Associated with your account.

<comment><USER49> With what account? Google serves on a ton of third party sites (and not just through AdSense, DoubleClick is _huge_ ). And that would require you to sign in to Google before you are opted-out, regardless if you were using Google or not. I use an plugin provided by Google to do the same thing, no worries about a cookie disappearing.

<http://www.google.com/ads/preferences/html/intl/en/plugin/></comment></comment></comment></comment>


InPulse Adds A Smartphone-Like Experience To Your Wrist Watch - <AUTHOR> http://ycombinator.posterous.com/inpulse-adds-a-smartphone-like-experience-to <comment><USER2> On a related note, if I had a choice, I think I would prefer a Dick Tracy style watch-phone to my current phone. Pockets are actually kind of annoying to deal with on a regular basis.</comment>


Show HN: Turn Jupyter Notebooks into Beautiful Reports - <AUTHOR> https://dolphyn.io/gallery <comment><AUTHOR> Hi HN,

Omkar and I have just released V1 of Dolphyn Reports. After doing a number of interviews with folks in data science and ML we learned that many resort to cut/paste and screenshotting to share notebook findings.

We built a click and drop builder to create clean, beautiful reports to share with consumers in minutes. There is a hard link between the cells in the report and the notebook, so re-running the notebook refreshes the report. Add text, re-size and re-position to create a visually appealing summary of your work.

The url has a few sample notebooks to play around with the report builder. Please let us know if you see this being useful in your workflow.

Thanks, Rohit

\--

This sits on top of our cloud-hosted jupyter notebooks for teams. dolphyn.io / rohit [at] to learn more.</comment>


Justin.tv is holding a hack day at Y Combinator - <AUTHOR> http://apiwiki.justin.tv/mediawiki/index.php/Hack_Day_2_-_9/5/09 <comment><USER2> I'll be there. Looking forward to helping people build some awesome apps using our api (I built <http://slumbervision.com> a couple of weeks back, using the api while it was under active development).

<comment><USER3> Is this what you meant? <http://slumbervision.com/>

<comment><USER2> Yes it was. Fixed, thanks.

</comment></comment></comment><comment><USER3> Does one need to actually need to attend to participate and qualify? Could we possibly host a version on the other coast and livecast it?

<comment><USER4> Dude, that would be awesome. Let us know what J.tv channel you're broadcasting from, and we'll setup a weebly page so that everyone can watch from everywhere, with a common chatbox.

</comment></comment><comment><USER5> The same day we are organizing the first ever HackDay in Russia! <http://hackday.ru></comment>


La Ruche qui dit Oui - <AUTHOR> http://avc.com/2015/06/la-ruche-qui-dit-oui/ <comment><USER2> Summary: this is something akin to a farmers market with pre-orders. Consumers order local produce, farmers and consumers all arrive at a pre-determined location and time for delivery, and farmers keep most of the money (with a small cut going to the location owners, and a cut going to the company that handles all the market-making/financial transactions.)

At present, this exists only in Europe, but it sounds like a US expansion might be possible.

<comment><USER3> No need. CSAs have existed throughout the US for a long time. Wrapping them under a single brand and adding in a middle man to handle the transactions doesn't really add value to the consumer.

<comment><USER2> I hadn't heard the term "CSA" before. Interesting.

[http://www.localharvest.org/csa/](http://www.localharvest.org/csa/)

</comment></comment></comment><comment><USER4> I just tried it, the whole process is a bit confusing. There's no store/location ("assembly") in my city (Germany), but my s/o lives in a somewhat more hip city which has a few.

To get any details for any individual assembly -- including finding out what's for sale! -- you need to register (full name, password and email). After registering, you still need to "join" each assembly individually before you see any goods, which feels a bit weird: I thought I was shopping for groceries, apparently I'm now in some sort of club. Or rather three clubs: the first two I tried had nothing for sale, which almost had me give up, but the third one does have some stuff:

A variety of vegetables, ranging from very to extremely expensive, think 2 to 4x of what you'd pay in a regular supermarket -- I guess they're artisinal or something. But the potatoes I bought earlier today were the same kind, also sourced from the region, and still cost half of what they're asking. They do have a huge variety of tomatoes, and I'd be happy to pay 3x the regular price for a tomato with an actual taste.

Apart from the veggies, that assembly also has wine and bread for prices that are average for good quality stuff, and overpriced chutneys and condiments, the kind you only buy as a gift.

This is not a terribly convincing display, to be honest, but I imagine the experience is very different in France, where they seem to have a much higher concentration of assemblies. Not completely different, though, since I can't imagine they have any chance of competing on price -- the regular food retail chain is bound to be ruthlessly efficient in that respect.

The whole concept has the huge downside that you have to pre-order AND be at the assembly location at a specific time, compared to the supermarket (no pre- order required, open all the time), the farmer's market (no pre-order required, open more often than any single assembly) or, I guess, web deliveries (though I don't intend to order a tomato from the web, ever).

<comment><USER5> There's one not far from me, so I may look into it. Well, 20 min... far enough that "drove 40 minutes to pick up local produce" starts to sound dumb, though. I'm in central France.

But in context -- it's not hard to find local produce, including plenty of local, organic produce, without relying on a specially-organized meetup point. The closest large town to where I live has about 8K people; that's big enough for them to have a (smallish) dedicated organic/specialty grocery store, and street markets every weekend, year-round, with a few organic farms selling their produce there.

If I drive into Limoges, there are several large grocery stores that sell only organic produce, and highlight local produce.

These are all noticeably more expensive than shopping at a regular Super-U or Casino/Geant (big chains), but the selection and quality is quite good.

I'll check into the Ruche near here to see what it's like; but if it's the same farmers we can buy from directly at the weekend market, I'm not sure I see the point.

Edit: "276 Membres"... Huh -- that's significant. Oddly, the producers include a "Safranier", i.e., a saffron farmer. I didn't think that could even grow here.

</comment></comment><comment><USER6> This is pretty common in the US, it generally goes under the name "community supported agriculture" (CSA) or "farm-shares". People usually pay a yearly fee or pay a monthly subscription and get a weekly box of produce and whatnot mostly from one or a few local farms.

<comment><USER7> No, it's not the same at all. Here you get to select online the product you want to buy, you are not "forced" to receive a box of produce. And there is no monthly fee at all, you just pay for what you buy.

<comment><USER6> Apologies if I elided mention of how they are different, I didn't mean to do so. This sort of thing is a pretty big innovation and offers the potential to increase the reach of direct to consumer local farm produce sales.

</comment></comment></comment><comment><USER8> I have been using this service for a year. It's nice. Definitely more expensive than going to the supermarket but the food is way better. We have to eat less and more healthy anyway.

</comment><comment><USER9> > How can we get back to a time when the food we eat is produced nearby, is > high quality, and is healthy?

That time never existed. Factory farms and food processing have historically represented huge improvements in safety as well as affordability and availability. Not that this isn't a great idea, just that it's not a return to any kind of wonderful world of plenty.

<comment><USER10> What?

[http://www.localharvest.org/csa/](http://www.localharvest.org/csa/)

<comment><USER11> He's not saying that variations of "a marketplace that connects farmers to people who want farm fresh food" doesn't exist. He's saying that this mythical utopia where everybody ate locally-produced, high-quality, healthy food didn't exist.

<comment><USER12> I don't know, I wouldn't say the downsides of the old ways were that the food was non-local, low quality, or unhealthy. A lot of the food regulations were necessary because when you try to do things on a large scale you run into quality and health problems. The downsides are more like people ate way less meat because it was too expensive, there was much less international variety, and there were a lot more farmers, like 25x more. It's really hard to be a farmer. That said, I think the typical person nowadays can afford to eat much better than your typical peasant in the past, at a lower total percentage of income. It's just that because there's so much to spend money on in life now, today's typical peasant chooses not to eat better and ends up romanticizing the past.

<comment><USER11> The main point you're missing is that people were _tied_ to local produce. Cold snap during summer? Potato blight? Sorry, you're going to starve. Even when the harvest came through, staying healthy through the winter and spring was a major problem, with all sorts of vitamin deficiency diseases like scurvy, beriberi, pellagra and rickets endemic.

<comment><USER12> There's definitely more food now. Most of it is lower quality than what was eaten before, when it was eaten of course. For survival reasons, I would choose availability over quality any day. However, we have more than enough food to survive, so much so that we throw it away. So maybe quality could go up a bit. Like say by banning the use of antibiotics and growth hormones in milk producing cows.

<comment><USER13> Antibiotics are banned in dairy cows (at least, in the US and EU). They can be used to treat illness, but the milk produced while they are used must be discarded.

Growth hormones are banned in the EU, not in the US, but many US dairy producers advertise the fact that they produce milk without using them.

<comment><USER12> Sorry, I thought there were antibiotics in US milk.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> We built [http://www.attmatr.com](http://www.attmatr.com) with a similar philosophy. The difference is we strive to actually be farm-to-table as we deliver to the customer's doorstep - and our platform caters to B2B too. We're only in Denmark at the moment but will soon expand abroad.

</comment><comment><USER15> In France there is the AMAP association ([http://www.reseau- amap.org/](http://www.reseau-amap.org/)) which shares some of the same goals, but for non-profit and with a focus on organic products.

<comment><USER16> The AMAPs are subscription based, and you get a box (panier) with whatever the farmer happens to have this particular week.

Here you can actually order things.

In the case of AMAPs, the nice thing about not knowing what you'll receive in advance is that it forces you to learn a certain number of recipes so you'll be able to cook whatever you get.

<comment><USER17> We are part of a similar subscription based system here in Belgium. Prices are somewhere between supermarket normal and organic. Mostly local, but some stuff is shipped in when the local crops really suck. Indeed forces you to learn to cook and enjoy whatever weird stuff happens to be growing well locally. This results in less effort deciding what to buy, but more effort figuring out what to do with whatever you received. I really don't think giving consumers ~more choice is going to help solve the problem of getting people to eat whatever is growing locally.

<comment><USER16> I used to live in Grenoble, and some local AMAPs offered some cooking classes. You could choose to take your basket to a kitchen and people helped you with cooking and canning your vegetables. It takes a little more involvement from the consumer but then they only have to reheat what they've cooked, and they don't have to consume their weekly basket immediately.

</comment></comment></comment></comment><comment><USER18> I'm happy to read a french startup has access to top talents outside Europe. I wish them the best.

Oh and it's here: [https://laruchequiditoui.fr/en](https://laruchequiditoui.fr/en)

</comment><comment><USER19> Who in the US is doing similar? I read an article about japanese fishermen doing this recently on wsj

[http://www.wsj.com/articles/startups-upend-japans-fish- marke...](http://www.wsj.com/articles/startups-upend-japans-fish- market-1431682201)

</comment><comment><USER20> Is the name a play on "La vache qui rit"?

<comment><USER5> I'd assume not -- because la vache qui rit is sort of the French version of American cheese (a factory-produced cheese-based product, not an actual cheese), so it's not really the sort of thing they'd want to be associated with.

The name is ringing a vague bell -- maybe there's a childrens' story about a talking hive? No idea, but a quick google didn't find the answer either, so I can't say for sure.

<comment><USER21> Most French people love La Vache qui Rit. They don't eat it as adults but it revives memories of their school trip lunches.

<comment><USER5> Sure; it's not considered an evil thing generally; it's just that the subculture of people who go out of their way and pay more to get organic/local/etc. generally aren't eating much of it: they're paying more for the AOC-certified, locally-produced real cheese.

They're also (in my experience) buying a ton of homeopathic remedies for just about everything, which I have trouble not rolling my eyes about, but that's another subject.</comment></comment></comment></comment>


Show HN: Stochastic Retirement Simulator Weekend Project - <AUTHOR> http://www.letscrunchit.com/retirement_calculator <comment><USER2> I did a little hack in this space a couple of years back, called it the 'Cat Food Calculator' -

[http://blog.streeteye.com/calculator/](http://blog.streeteye.com/calculator/)

The issue with OP's calculator is, one has to enter an assumption for the rate of return after taxes and fees.

Also you can average 7% return in retirement, but you have a big market drop early in your retirement, you run out of money even if the market makes it up 10 years down the road. You can't spend an average.

I was trying to deal with the question of a safe spending rate based on historical returns.

Enter a stock/bond allocation, spending rate, couple of other assumptions, will show you, if you had retired using that gameplan in each year, 1928 up to the present, how long would it take to run out of money. And based on an actuarial life table, how likely you were to run out of money.

That should give some idea of how big a portfolio you need to have to spend the amount you want without running out of money. And then next step would be to figure out how much you need to save to get there.

If you hit the 'Visualize' button after running an initial simulation, you can drag some sliders around and see what happens...used Google's visualization API. Maybe I'll take another crack at a proper design.

<comment><USER3> Well really, as soon as you hit retirement, your savings should NOT be in such a volatile place where you'll eventually go bankrupt. Sure, some of it still in stocks, but you should be moving over to less return/lower risk portfolio options even as you start nearing retirement age. (In fact, this should be a gradual change as you rebalance your portfolio every year. You are rebalancing, right?)

<comment><USER2> yes, assumes annual rebalancing, but static allocation eg. 60/40 stocks/bonds.

you're retiring for 30 years so you generally do better with a hefty allocation of stocks. try it, that's what the calculator is for :)

given an average return over your retirement, the order and volatility of returns has a significant impact on the amount it's safe to spend.

by choosing a less volatile portfolio you reduce risk allowing you to safely spend more, but you also reduce the return forcing you to spend less.

that's why I did the calculator, how to allocate and how much is safe to spend is not a question with an obvious answer.

there's a tradeoff between desire to spend as much as possible, on the one hand, and shortfall risk, on the other. interestingly, approaches that reduce equity allocation as you get older don't really improve the tradeoff much v. a static equity allocation.

</comment></comment></comment><comment><USER4> This says I'm totally screwed and will be out of money in 5 years after I retire, while my retirement planner says I'm golden.

Oh well. This calculator also fails to take into account the effects of the singularity which everyone says is coming certainly before my retirement date, so I'm not sure if I should care.

</comment><comment><USER5> Very nice. One small nitpick though, the retirement income should be adjusted for inflation I think. Because otherwise, the retirement income in 40 years would pay for much less than at the time of retirement.

<comment><AUTHOR> The retirement income is adjust for inflation. All contributions and withdrawals are specified in today's dollars.

Internally, I model this be decreasing the Savings each time step to compensate for inflation.

<comment><USER6> I think this is the wrong way to do it. I think you should probably increase spending. Decreasing savings reduces the income earned on compound interest, whereas spending has no effect.

Cool project though.

</comment></comment></comment><comment><USER7> This is actually very cool! It's interesting to play around with strategies for using your retirement income, e.g.

      0.02 * [Savings]

with the idea of making your overall income path as stable as possible.

<comment><AUTHOR> Yep, that's why I built it!

There are some great retirement calculators out there (e.g. firecalc), but I wanted a sandbox where I could explore different strategies and heuristics.

</comment></comment><comment><USER8> Very cool! I love it!

A couple small things:

* hitting the backspace key while editing any of the numbers seems to clear the entire box

* a cool expansion on this project would be to allow one input to be a variable - e.g. my current contribution rate, and draw some graphs showing how the value of that variable effects the the numbers in retirement - e.g. when I will run out of money.

* if you're looking for more audiences, /r/personalfinance and /r/financialindependence would love this.

<comment><USER9> Hopefully you've seen this:

[https://networthify.com/calculator/earlyretirement](https://networthify.com/calculator/earlyretirement)

OP's tool is great, but this tool might address your second bullet point.

</comment></comment><comment><USER10> Great work. Thank you for sharing it. You'd be surprised how hard it is for big companies to make a tool like this.

Ideas to play with: 1) Have one of the outputs be a box and whisker output showing the percentiles of ages the person will run out of money.

2) Have a way a person could easily code a transition from an S&P500 portfolio to a fixed income portfolio over 5 to 10 years.

3) Add a generational mortality table on the back end and include a probability of death.

edited to clarify (2)

<comment><USER11> >1) Have one of the outputs be a box and whisker output showing the percentiles of ages the person will run out of money.

This is essential, and I wish it hadn't been overlooked. The only power of stochastic modeling over deterministic modeling is in quantifying the likelihood of outcomes in the outcome space.

Unfortunately, this requires either crazy stochastic math, or multiple computations (monte carlo methods). I suspect the op is a great guy and just hasn't been exposed to these ideas yet. When he does, he's going have that head-slapping moment we all have when we first encounter it.

</comment></comment><comment><USER12> Thanks for sharing. You allow the user to set the expected return (default of 7%) but assume zero volatility, which is unrealistic. I suggest adding an annualized volatility input -- for stocks you could use a default of say 18%. Ideally the output should show a range of outcomes, since stock returns are stochastic.

There is a forum called Bogleheads for financial planning by individual investors. I suggest presenting your calculator there.

</comment><comment><USER13> There doesn't seem to be any place in the calculator for continuing income like pensions or Social Security payments. When I first ran the calculation I put what I'm drawing from my 401K plan and what I expect to get from pensions and Social Security into the retirement income field, and the calculator said my income will drop down to $0 by the time I am 70, which is incorrect.

<comment><USER14> Defined benefit plans like that largely are what they are. Pensions are based almost entirely on how long you worked for the place offering the pension. Social Security is a bit more complicated, but is still based on how long you worked and how much you made.

This calculator is about modelling the effects of your savings rate, inflation, and return rate on the portion of your retirement income that is based on your savings. The defined benefit payments are constants for the purposes of this model.

</comment></comment><comment><USER15> Very neat. What is interesting is how the market return affects the amount you have from retirement to 100. For the specifications I put in a 6% rate of return on the market would put me at about dead broke at 100, a 6.5% rate of return would put me at about even savings at 100, and at 7% I would gain savings from retirement until 100.

</comment><comment><USER16> Nice, great work! I liked the ability to use various random variables for a Monte Carlo simulation. I think this should be the default, like FIRECalc. [0]

0\. [http://www.firecalc.com/](http://www.firecalc.com/)

</comment><comment><USER17> Very nicely done. What kind of tools does one use to create this.

</comment><comment><USER18> Hi, great job. Would you be so kind as to discuss your stochastic modelling?

</comment><comment><USER19> Have you thought about a way to gather the data entered by users?

<comment><AUTHOR> The share button will embed your data in a url (Base64 Encoded JSON) that you can save or share with others. Your changes are also saved to local storage (use the Reset button to wipe that).

If you mean data harvesting for some sort of lead gen or analysis; absolutely not. I think this data is very private.

<comment><USER20> It is refreshing to see data not being collected for what is a free service. But as far as I know you are not collecting any personal information that may be used to identify a specific person. Can you clarify more on why you think data collection here is unethical?</comment></comment></comment>


Ruby on Rails 5 is imminent - <AUTHOR> https://github.com/rails/rails/issues?q=is%3Aopen+is%3Aissue+milestone%3A5.0.0 <comment><USER2> RC2 released 6 days ago [http://weblog.rubyonrails.org/releases/](http://weblog.rubyonrails.org/releases/)</comment>


Bill Atkinson: Birth of the Mac - <AUTHOR> https://www.youtube.com/watch?v=jOl-gIh-QCA <comment><AUTHOR> Members of the mac team used a mouse in 1971, already had mouse working before going to xerox PARC...

[https://youtu.be/jOl-gIh-QCA?t=7m47s](https://youtu.be/jOl-gIh-QCA?t=7m47s)</comment>


-2000 lines of code - <AUTHOR> http://www.folklore.org/StoryView.py?story=Negative_2000_Lines_Of_Code.txt <comment><USER2> My favorite anecdote on code removal comes from using Sonar, a static code analysis tool.

At a previous job, a pretty smart architect decided that Sonar was a pretty good tool to gauge code quality. He wasn't wrong. However, as a way to improve code quality, management decided to make the continuous integration server demand 90% test code coverage minimum, including branches, and no loss of code coverage over half a percent from maximum, as measured by Sonar.

So I inherited a large, rather terrible application, which included a whole lot of UI code using Swing. Swing has it's qualities, but being easy to write meaningful tests for isn't one of them. So my predecessors often left some chunks of frontend relatively untested, while making sure large amounts of business logic was well tested. So to keep the application in order, I started doing a bunch of refactoring. I cut the size of the backend in half, and all the tests kept passing. But my commits were rejected by the build.

So if you have 10K lines of untested code, and 90K lines of very ugly, badly factored, but tested code, you just couldn't remove 10K of the bad, well tested code, because that would sink coverage metrics.

After much arguing for relaxing the rules, as I didn't think that adding tests after the fact to bad UI code seemed like a good use of our time, I fixed it in the only sensible way I could: Added an extra ten thousand lines of well tested code that didn't actually run in production, but made the metrics happy. Only then I could get the build to pass again.

<comment><USER3> Terrible, but a necessary evil I guess. Sometimes you gotta just let sleeping dogs lie and start removing unused code as you go.

</comment></comment><comment><USER4> There's a saying that goes something like "Measuring the progress of developing software by lines of code is like measuring the progress of manufacturing an airplane by kilograms of mass."

<comment><USER5> Also reminiscent of this quote from Dijkstra [0]:

      My point today is that, if we wish to count lines of code,
      we should not regard them as "lines produced" but as
      "lines spent": the current conventional wisdom is so
      foolish as to book that count on the wrong side of the
      ledger.

[0] [http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EW...](http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html)

</comment></comment><comment><USER6> At my last job I wrote a script to walk over git-log and add up all the line number differences (skipping merges). By the time I left, my net code contribution was something like -290kloc. I was the only person with a net negative, though it was a smallish team.

With the sheer amount of bad code people write, I expect to do a lot of deleting, refactoring, and rewriting, and I'd hope managers/fellow team members would be able to see the value in that. But sadly, they usually don't.

<comment><USER7> People also leave dead code around instead of deleting it. That dead code is poison to the maintenance programmer because he's spend plenty of time trying to understand what role it plays in the system of tracing a complicated bug.

I'd say it is open season on commented-out code. If code has been commented- out since a few weeks it is good to delete it just as a matter of course.

<comment><USER8> You should never commit commented-out code. That's what version control is for. If you need that code back, just fetch it from the repo.

<comment><USER9> This is a bit of a tangent but I've been on teams that demanded you rebase everything so that there's a linear history.

Of course this leads to nasty conflict resolutions, so they solve that by squashing all of their commits before rebasing.

Now your code is no longer in the repo.

<comment><USER10> But if it never appeared in the main branch then it doesn't really matter, does it? You don't want to clutter up the history with experiments and false starts.

<comment><USER11> I'm not sure that you don't. Having a history of how you got to the current version could help future maintainers understand why you made the decisions you did, and prevent them from making similar mistakes.

<comment><USER12> I tend to work out of a private branch, and commit early and often. So I end up with a lot of commits that say "fixed foo to be 1", then "oops, I meant it to be 2", then "No, it should be -7", etc. I'll drop a tag, then rebase a group of commits to re-order them (so all the fix, to a fix, to a typo mistake that shouldn't have been there) are together. Then sometimes I'll drop another tag, then squash, then rebase onto the main branch. Those temporary tags then get pushed only to a separate repo that only I write to (the one that everyone else uses gets the cleaned-up presentable code).

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> Though I've never used an Apple product, I adore folklore.org. So many great tales of engineering. When I hear the word "hacker," these people come to mind. A shame they didn't play a larger role in the company's direction (see "Diagnostic Port"[1]).

[1]: [http://www.folklore.org/StoryView.py?project=Macintosh&story...](http://www.folklore.org/StoryView.py?project=Macintosh&story=Diagnostic_Port.txt)

<comment><USER14> Thinking about the modern Mac Pro, I'm shocked to see people haven't referenced this story more.

No internal slots, isn't this Steve Jobs' dream machine?

</comment></comment><comment><USER15> Sometimes, less is more.

Some said: "A piece of art is only finished, when there is nothing left, that can be taken away."

The art in computer programming is, to find ways to bring the problem to the point, to find out what is really necessary to solve the problem (and not more). This reduces (often, not always) the runtime, the amount of memory needed -- and (most importantly!) the amount of maintenance that is needed. The maintenance of a program is directly dependent on the number of code lines.

Many companies start fast with a superior product, but than comes the time of growth and growing demand, new employees are rushing in ... and the number of lines explode. That is the point of danger. The company is about to strangle itself. The number of errors are rising.

I remember an old, but once famous database product. The first 2 or 3 versions where great and the company grew out of 4 developers to a horde. The next version came out much much later than expected and was first a bug ridden chaos. The problem: The number of employees and the number of code lines grew faster than the company could manage them.

It is also said: "Adding new members to a late project, makes it later" That's because of the overhead of managing those peoples and the added code does not always add to project speed.

<comment><USER16> That first quote is from Antoine de Saint Exupéry. [http://en.wikiquote.org/wiki/Antoine_de_Saint_Exup%C3%A9ry](http://en.wikiquote.org/wiki/Antoine_de_Saint_Exup%C3%A9ry)

Then again, "A work of art is never finished, it is abandoned." ([http://www.quoteyard.com/art-is-never-finished-only- abandone...](http://www.quoteyard.com/art-is-never-finished-only-abandoned/) )

The database product sounds like dBase. If so, certainly management focus was also a factor. [http://en.wikipedia.org/wiki/Ashton- Tate#dBASE_IV:_Decline_a...](http://en.wikipedia.org/wiki/Ashton- Tate#dBASE_IV:_Decline_and_fall_.281988.E2.80.931990.29) attributes it to a push for Diamond. Its source material is unattributed. While [http://www.dbase.com/Knowledgebase/dbulletin/bu03_b.htm](http://www.dbase.com/Knowledgebase/dbulletin/bu03_b.htm) says it was a management push towards OS/2.

Your last quote is from "The Mythical Man-Month" by Fred Brooks(1975) and is called "Brooks's Law".

<comment><USER17> Both statements about art are true: you will never achieve perfect simplicity, but you should try to get as close as you can!

<comment><USER16> Minimalism is but one of many art styles, so I disagree with the goal of achieving perfect simplicity.

<comment><USER17> Sure, but in the context of code and complexity, minimalism is your best bet.

<comment><USER16> You are against Easter Eggs, I gather? ;)

More seriously, of these two implementation for Python's str.lower(), which is "minimal"?:

        for (i = 0; i < n; i++) {
            int c = Py_CHARMASK(s[i]);
            if (isupper(c))
                s[i] = _tolower(c);
        }

        for (i = 0; i < n; i++) {
            int c = Py_CHARMASK(s[i]);
            s[i] = _tolower(c);
        }

I suspect most would say the second is minimal, but the first is what Python uses, because it's measurably and distinctly faster than the second, and that extra performance is worth the extra maintenance overhead.

That's one reason I believe that programming-as-art metaphors don't really apply. Minimalism as an art form not the same as minimizing the cost function of different uncertain factors.

Anyway, this reminds me of a story from the Tao of Programming, [http://www.canonical.org/~kragen/tao-of- programming.html](http://www.canonical.org/~kragen/tao-of-programming.html) :

There was once a programmer who was attached to the court of the warlord of Wu. The warlord asked the programmer: ``Which is easier to design: an accounting package or an operating system?''

``An operating system,'' replied the programmer.

The warlord uttered an exclamation of disbelief. ``Surely an accounting package is trivial next to the complexity of an operating system,'' he said.

``Not so,'' said the programmer, ``when designing an accounting package, the programmer operates as a mediator between people having different ideas: how it must operate, how its reports must appear, and how it must conform to the tax laws. By contrast, an operating system is not limited by outside appearances. When designing an operating system, the programmer seeks the simplest harmony between machine and ideas. This is why an operating system is easier to design.''

The warlord of Wu nodded and smiled. ``That is all good and well, but which is easier to debug?''

The programmer made no reply.

<comment><USER17> Or, as Einstein put it, "It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience."

Rephrasing for the software world: "...without having to make appreciable sacrifices in user experience."

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> I love people who can leave a program functionally better with fewer lines of _clear_ code. That last bit is important, obfuscated code is clever, but not useful.

<comment><USER19> > That last bit is important

Recently I've been learning that from two angles. First I'm realizing that being a bit more verbose is often clear and safer. Second, I've been reading and learning a lot about compilers, and I'm realizing that my "efficient" (short) code and other trickery does diddly-squat, and the compiler will produce the same code either way.

</comment></comment><comment><USER20> My favorite optimization: replaced 10,000 lines of code that marshaled structures in a Broadcom driver for transmission to the embedded processor, with a single template of ~20 lines.

<comment><USER21> Awesome. I once replaced an intern's 540 lines of code with 12 lines of my own. Feels great.

<comment><USER22> An intern? Don't pat yourself on the back TOO hard... ;-)

I once sped up an intern's code by just deleting a 30-line function, and doing nothing else. Doofus didn't realize our language had a highly optimized built- in sort, and so he wrote his own inefficient sort (insertion) that overrode the existing one. Poor little guy was so proud of having chosen exactly the right sort, and then implementing it based on his recollection of college... I told him to spend the next few hours just reading the documentation of the core API for our language.

<comment><USER23> A quote I'm somewhat fond of: "A couple months in the laboratory can save a couple hours in the library."

Unfortunately, I forget who said it.

<comment><USER24> > A quote I'm somewhat fond of: "A couple months in the laboratory can save a > couple hours in the library."

Isn't that backwards?

<comment><USER25> No. It's correct.

I can say this having spent months in the laboratory to learn things which were already known. Who knew that precision quartz pressure gauges were called 'manometers' in the late eighteen-hundreds? I didn't, and thought I'd invented something new for a couple months in my first year of grad school.

The adage is a good one. Reading a lot and reading widely pays off.

<comment><USER26> That idea might imply that future Google's, using its old self definition are going to play an increasingly critical role in human progress.

</comment></comment></comment></comment></comment></comment></comment><comment><USER27> "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."

― Antoine de Saint-Exupéry, Airman's Odyssey

</comment><comment><USER28> One of the professors I had didn't like paperwork as much as we did, so he shared a little [paraphrased] advice-story:

"Hey, I know you don't like this paperwork. I don't either, but I get asked to do it all the time. My strategy? Give them as much paperwork as I can. These forms, those memos, CCs on emails... eventually, sometimes, they ask me to stop. 'You're giving us too much paperwork', they say. 'You don't want me to give you paperwork? Works for me.'. So fill these out, and I'll take care of the rest. Now, for today's class..."

</comment><comment><USER29> There's a quote I saw in a users' forum signature that's stuck with me; "My best code was written with the delete key."

</comment><comment><USER30> No one seems to have pointed out yet that code size as a predictor of error rates (and as a measure of complexity) is one of the few findings from software engineering research that has been replicated many times. It's not clear that the studies are very good, but at least they exist. We've discussed this on HN more than once.

I'm longing for the day when people realize how significant this finding potentially is.

<comment><USER31> Every functional programmer I've met has pointed things like this out to me. As well the ability to reason about smaller code-bases.

<comment><USER30> Oh, yes. Me too. But they/we are a tiny minority with little influence over industry practice. What I long for is the day that software organizations run dramatically differently because of this principle. I think it's one of the most profound things we know about software development, and it has huge implications, but they're ignored.

Like any other powerful ignored truth—if that's what this is—its path to acceptance will likely be through somebody doing something impressive with it that hasn't been done before.

<comment><USER31> I think Startups doing impressive things at scale will help with this. For example, Whatsapp serving 500M people with code written/maintained by <50 engineers is an impressive story. What did they do differently? The post-hoc stories about success rarely discuss the leverage achieved due to the technology choices.

</comment></comment></comment></comment><comment><USER32> Reminds me of this quote:

"One of my most productive days was throwing away 1000 lines of code." \- Ken Thompson

</comment><comment><USER33> In my opinion the best code is the shortest code/documentation that can be understood in one or two reads by someone that is new to the codebase. Less or more than that is bad.

exceptions are things like game programming, where certain hairy-looking tricks can be necessary and have a real benefit. can't say the same for your average web app.

</comment><comment><USER34> I came to a company last year where they were forecasting how they were progressing on a project by counting the number of objects that had been written. As in, the tech lead estimated the project would require like 200 object classes and some PM was crossing off objects as they were being written.

Anyone who has completed a complicated functional program would probably understand how that could be a misleading measure of progress and, worse, lead people to spend time writing poorly engineered untested code. I think the people who implemented this system understood that counting lines of code was a dumb idea, but somehow thought this was better.

</comment><comment><USER35> Couple years ago while still studying for CS, I did a telephone screen (with a recruiter, not an engineer) with Microsoft and they asked me "how many lines of code have you written in your career?" (at this point I didn't have a career in SE). That was followed up by "what is the most number lines of code you've written for a single project?". Other than scanning the diffs/commits or using some reporting/metric tool, why would you care to keep count? Seems like you are focusing on the wrong data points for recruitment and software quality.

<comment><USER36> The irony here is that when Microsoft was developing OS/2 for IBM, the latter started requiring updates (similar to the OP) showing KLOC's written in a week, and the then Microsoft engineers lamenting at how stupid that was.

Congratulations Microsoft. You've now become the bloated mid-80's IBM you used to hate.

</comment></comment><comment><USER37> Well, another way to look at it is that you've improved 2000 lines of code. That is, you have touched 2000 lines of code and modified them in a way that makes the software better. Yes, you did delete all of them, but as a professional expert you've discovered that these 2000 lines serve the project better when not existing. Then, you wrote another 1000 lines of fresh code. In the end, you've achieved a net betterment worth 3000 lines of code.

</comment><comment><USER38> I worked for Andy Hertzfeld once, it was awesome in many ways, but the anecdotes... so good.

</comment><comment><USER39> I'd like to get your opinions on this...

I think programmers nowadays are a bit overly obsessed on getting lines of code _down_

Its certainly possible to write something in one line when you could use 6 if you use the more obscure and "fancy" tools available in the language you are using. One thing that randomly springs to mind is linq in .net Reasons why more lines might be better.

1\. The longer more explicit code might end up shorter and more performant after it is compiled (like in the oldskool performance increasing trick of unrolling loops)

2.When you come back to your fancy code later you may have forgotten about that particular fancy trick and now you dont understand your code.

3\. Other people are less likely to understand your code.

4\. By using more specialised features in a langauge your code is now less transportable to other langauges.

Personally I think the obsession with fewer lines quickly becomes counter- productive and the main reason it is done is in order to show-off your knowledge of these fancy things.

Note: I'm not talking about the guy in the article btw. Just talking a about a general trend I've noticed in modern programming.

<comment><USER40> > 1\. The longer more explicit code might end up shorter and more performant > after it is compiled (like in the oldskool performance increasing trick of > unrolling loops)

Or it might be less performant. If you actually care about this, you should have an automated test running regularly that will tell you one way or the other. But most of the time it's not worth worrying about such things.

> 2.When you come back to your fancy code later you may have forgotten about > that particular fancy trick and now you dont understand your code. > 3\. > Other people are less likely to understand your code.

Or using fancy tricks more frequently can help you remember them. I think you should use every feature available in the language - developers need to be able to understand the language so that they can read third-party library code. Or else have an automated system that flags usage of particular features.

> 4\. By using more specialised features in a langauge your code is now less > transportable to other langauges.

Who cares? Seriously, how likely is this to actually come up? If you've chosen language X you presumably had a good reason for doing so; you should write language X, not try and write language Y in language X.

Fewest lines of code is not the perfect metric, but I think it hits the sweet spot: it's very simple to calculate, and captures a good proportion of the difference between good code and bad code.

</comment></comment><comment><USER41> What's funny about this is that the YCombinator application actually asks you how many lines of code your app is. I took the question as a chance to rant about the irony of a software accelerator geared on making you an "software expert" asking this question.

<comment><USER42> If you've written 0 LOC for your revolutionary artificial intelligence system, or 1,000,000 LOC for your "Instagram for Squirrels" app, I'm likely to be equally suspicious. Otherwise there's a wide range of acceptable answers for that question.

A rant probably isn't one of them.

<comment><USER43> Somehow I imagine that Instagram for Squirrels necessarily _includes_ a revolutionary AI system.

</comment></comment></comment><comment><USER44> folklore.org is amazing, but it's been around for 10 years now. I kinda want to amend to the title: "(2004) (1982)". Heh.

</comment><comment><USER45> Take a look at the contributor's stats for the Bitcoin project on GitHub: [https://github.com/bitcoin/bitcoin/graphs/contributors](https://github.com/bitcoin/bitcoin/graphs/contributors) Gavin Andresen, the lead developer for the project, has removed more lines than he has added.

</comment><comment><USER46> At my last job, I was usually the one that cleaned up old or unused code after we had gone through a design change or such. It was always very satisfying. Not so much, though, for the poor chap whose code was usually the target of deletion (through no fault of his own).

</comment><comment><USER47> What do people think of commits as a metric? It's becoming more popular for managers thanks to github's graphs.

<comment><USER48> I hypothesize that any numbers-based code metric management comes up with can also be gamed by adequately-motivated developers. In fact, if you come up with such a metric and have a developer who can't figure out a way to game it, perhaps you want to consider letting that developer go.

Were I to work in a place with a 'git commits' metric for productivity, I'd happily commit each line individually, to ensure that any potential data loss was as limited as possible, of course.

To paraphrase Wally from Dilbert: "I'm writing myself a mini-van."

<comment><USER49> [http://www.klocwork.com/blog/wp- content/uploads/2009/10/dilb...](http://www.klocwork.com/blog/wp- content/uploads/2009/10/dilbert-minivan-small.png)

>if you come up with such a metric and have a developer who can't figure out a way to game it, perhaps you want to consider letting that developer go.

Maybe that would be a good interview question (for a software manager): "How would you game metric X"?

<comment><USER50> probably not. Seems to me like you are forcing the candidate to either look stupid or dishonest.

<comment><USER49> Hm, how about, "How can metric X be gamed?", then?

</comment></comment></comment></comment></comment><comment><USER51> Does anyone feel that those days are over.

<comment><USER48> Nope, there's more bad code being written now than at any other point in history (I totally just made that fact up and I stand by it). If ever there was a time to be hero through code deletion, now is the time. Carpe diem!

<comment><USER52> If I didn't have so many bills to pay, I'd say that my current project would work better on 20% of the current size of the code base. And yes, lines of code is used as a team performance metric.

And since I was formally banned from using generics and lambdas and from refactoring old code without explicit permission, I am no longer hurting the team! Yay!

This is the worst job I have ever had.</comment></comment></comment>


It's raining shaders: hallelujah - <AUTHOR> https://www.alanzucconi.com/2018/08/10/shader-showcase-saturday-5/ <comment><USER2> you know you've been playing too much destiny 2 if you click on this just because it has the word 'shaders' in it.</comment>


500 error from Facebook - <AUTHOR> http://facebook.com/logout <comment><USER2> Interesting to see the 500 error message page being localized.

</comment><comment><USER3> For some time this triggered a Facebook 500. Now just a 400 and a blank page.

[https://www.instagram.com/%ed](https://www.instagram.com/%ed)

That "%ed" trick works with some pages, I wonder what it does to them.

[https://www.reddit.com/%ed](https://www.reddit.com/%ed) [https://outlook.com/%ed](https://outlook.com/%ed)</comment>


Xchg rax, rax – a x86_64 asm poetry book - <AUTHOR> http://www.xorpd.net/pages/xchg_rax/snip_00.html

<comment><AUTHOR> I was lucky enough to review a draft of this amazing book.

Two of my favorite poems:

      ; 0x1
      .loop:
          xadd     rax,rdx
          loop     .loop

      ; 0x13
          mov      rcx,0x40
      .loop:
          mov      rdx,rax
          xor      rax,rbx
          and      rbx,rdx
          shl      rbx,0x1
          loop     .loop

From the book's description on [https://www.createspace.com/5067642](https://www.createspace.com/5067642):

      xchg rax, rax
      Authored by xorpd

      About the author: "Performs a bitwise logical exclusive-OR
      of the two packed double-precision floating-point values
      from the source operand (second operand) and the
      destination operand (first operand), and stores the result
      in the destination operand. The source operand can be an
      XMM register or a 128-bit memory location. The destination
      operand is an XMM register."
      (Intel(r) 64 and IA-32 Architectures Software Developer's Manual)

      ; 0x40 assembly riddles
      "xchg rax,rax" is a collection of assembly gems and
      riddles I found over many years of reversing and writing
      assembly code. The book contains 0x40 short assembly
      snippets, each built to teach you one concept about
      assembly, math or life in general.

      Be warned - This book is not for beginners. It doesn't
      contain anything besides assembly code, and therefore some
      x86_64 assembly knowledge is required.</comment>