Portfolio mean-variance optimisation in the browser

This is just to announce that I've written a small tool to visualise the risk/reward tradeoffs associated with investing in a diversified portfolio of risky assets.

Specifically, the tool shows the effects of applying classic mean-variance optimisation to maximise the Sharpe ratio of your portfolio.

Fixing Experts Exchange With Greasemonkey

Well, I'm a bit behind the curve here. I hadn't until now felt the need to install GreaseMonkey, but Experts Exchange (which frequently shows up in my Google search results) have started to blur the comments people make on the questions. You have to sign up to view them, and since I have a pathalogical aversion to such inconveniences as 30 seconds of registration I did what any good programmer would and spent 10 minutes writing a script to solve the program.

The script plugs into GreaseMonkey and first removes the blurring, which is just done by an overlay, and then replaces the answer text with its ROT13ed equivalent, since thats the "encryption" they have opted to use! Anyway, the whole thing is basically a mashup of the scripts here and here, but I include the full source below for your convenience: do with it as you will.

```// ==UserScript== // @name ExpertsExchangeFilter 2 // @namespace All // @description Remove Experts Exchange Stuff // @include http://experts-exchange.com/* // @include http://www.experts-exchange.com/* // ==/UserScript==```

``` function rot13(src) { var dst = new String(''); var b; var t = new String(''); var clear = 0; for (var ctr = 0; ctr < src.length; ctr++) { b = src.charCodeAt(ctr); if (60 == b || 91 == b) { clear = 1; } if (!clear) { if (((b>64) && (b<78)) || ((b>96) && (b<110))) { b = b + 13; } else { if (((b>77) && (b<91)) || ((b>109) && (b<123))) { b = b - 13; } } } t = String.fromCharCode(b); dst = dst.concat(t); if (b == 62 || b == 93) { clear = 0; } } return dst; }; ```

```a = document.getElementsByTagName('div') for (i = 0; i < a.length; i++) { if (a[i].className == 'infoBody') { a[i].removeChild(a[i].childNodes[1]); } else if (a[i].className == 'answerBody quoted') { a[i].innerHTML = rot13(a[i].innerHTML); } } ```