<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:black;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:498422150;
        mso-list-type:hybrid;
        mso-list-template-ids:125754674 1985137360 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:5;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:207.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:315.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1
        {mso-list-id:959532826;
        mso-list-type:hybrid;
        mso-list-template-ids:-633539580 2120804572 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
        {mso-level-start-at:5;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:22.5pt;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:58.5pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:94.5pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:130.5pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:166.5pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:202.5pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:238.5pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:274.5pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:310.5pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1062951415;
        mso-list-template-ids:882524826;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3
        {mso-list-id:1670134016;
        mso-list-type:hybrid;
        mso-list-template-ids:-927407930 1136297730 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
        {mso-level-start-at:5;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;}
@list l3:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l3:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l3:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:207.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l3:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l3:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:315.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l4
        {mso-list-id:1884556962;
        mso-list-template-ids:1016903020;}
@list l4:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l5
        {mso-list-id:1958023030;
        mso-list-type:hybrid;
        mso-list-template-ids:498482734 961466862 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l5:level1
        {mso-level-start-at:5;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;}
@list l5:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l5:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l5:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l5:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l5:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:207.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l5:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l5:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l5:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:315.0pt;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">To Adam Young’s points: as I noted, that was an off-the-cuff implementation option since you asked, but the subject of how future websocket-related features
 might or might not be implemented isn’t the subject at hand.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">In terms of the current discussion (Horizon’s use of node.js for the purpose of LESS and possible future options), it sounds like for the Folsom release cycle
 a reasonable compromise is to move forward with node.js and LESS for development and recommend it for production as long as we can work with downstream distros to make sure they have options in cases where they currently do not support node. These options
 would include things such as helping them to provide a compiled stylesheet that can be served statically as part of their distro package when they go to ship Folsom.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Any further leveraging of node.js in the Folsom cycle would then be treated similarly: make it customizable/make it configurable/provide a reasonable fallback
 behavior for distros who don’t yet support node.js.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">That’s the proposal on the table as far as I understand it.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-.25in;mso-list:l5 level1 lfo10">
<![if !supportLists]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman"">         
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Gabriel<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"> openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net
 [mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net] <b>On Behalf Of
</b>Adam Young<br>
<b>Sent:</b> Friday, May 25, 2012 5:34 PM<br>
<b>To:</b> openstack@lists.launchpad.net<br>
<b>Subject:</b> Re: [Openstack] Fwd: Nodejs in horizon<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">On 05/25/2012 07:15 PM, Gabriel Hurley wrote: <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I can’t speak for other use cases as I haven’t directly investigated them, but to those questions:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Apache was only an example. Any webserver that uses WSGI (whether mod_wsgi or otherwise) doesn’t support websockets. As for pushing to get it into the WSGI
 standard, there’s already work in that direction but amending the standard and *<b>then</b>* getting all the implementations to update, etc. is a LONG way off.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">If (disclaimer: these are not final details, I’m just blue-sky throwing out possibilities) we were implementing websockets for the dashboard via node.js, we would likely
 run node.js with socket.io and the “express” web framework so it acts as its own async server on its own port. This is a pretty common setup, very lightweight, and with minimal dependencies. It would run side-by-side with the traditional webserver (Apache/nginx)
 for wsgi/python. This is down the road for Horizon, though.</span><o:p></o:p></p>
<p class="MsoNormal"><br>
This is not a good idea.  We already have a proliferation of ports.  This is a SELinux Nightmare:  some of these are already owned by applications other than ours.<br>
<br>
<br>
Websockets does not and should not be run on a separate port.  All of our applications should be able to run on the standard ports of 80 for HTTP and 443 for HTTPS.  For websockets,  that is ws on 80 and 443 for wss.<br>
<br>
Node.js is a fine architecture,  but throwing another server side language into the pot once the application is already built on Python is not a sound decision. Now developers need to think in two languages for server side scripting, and that is not a good
 idea.<br>
<br>
Don't get me wrong,  I've done my share of Javascript:  prior to Openstack,  I spent over a year doing straight Javascript programming for the Web UI for FreeIPA.  But that was Client side Javascript, and I for one would like to limit Javascript's role to the
 web browser where we cannot avoid it.<br>
<br>
<br>
Like it or lump it,  the server side language for Openstack is Python.  We already have a framework for Event driven programming there, and we should stick with it.   Adding Server side Javascript into the picture needlessly complicates things.<br>
<br>
<br>
<br>
<br>
<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-.25in;mso-list:l3 level1 lfo2">
<![if !supportLists]><span style="font-family:"Calibri","sans-serif""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman"">         
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Gabriel</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">
<a href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">
openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a> [<a href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a>]
<b>On Behalf Of </b>Adam Young<br>
<b>Sent:</b> Friday, May 25, 2012 3:57 PM<br>
<b>To:</b> <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
<b>Subject:</b> Re: [Openstack] Fwd: Nodejs in horizon</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">We are using Eventlet as a Webserver,  not apache, and Eventlet does have websocket support.<br>
<br>
When using Node.js do we need to run an alternative Server than the Apache HTTPD for Dashboard?<br>
<br>
We are looking at Websockets issues for noVNC already.  One Potential approach is to use an Apache module for Websockets:  I am aware that mod_wsgi will not handle it.  Perhaps getting websocket support into mod_wsgi is a better way forward?<br>
<br>
<br>
<br>
<br>
On 05/25/2012 01:54 PM, Gabriel Hurley wrote: <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">To elucidate a few more points from people’s responses so far:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-.25in;mso-list:l1 level1 lfo4">
<![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">All the python socket.io backends are immature projects, and there’s a GAPING flaw with them all: WSGI (the interface between web servers and Python)
 doesn’t support the handshake features that websocket communication requires. The WSGI standard was drafted before websockets was a thing. There’s a gevent lib that supports it, but it’s also immature and doesn’t play nice with Apache, etc. Deployment will
 get *<b>really</b>* iteresting trying to use socket.io with Python. I’ve tried. ;-)</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-.25in;mso-list:l1 level1 lfo4">
<![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Pypy *<b>is</b>* fast (I know several of the main contributors) but it’s as big a decision to use Pypy as it is to use node, but that only affects
 performance. It doesn’t make Django any more suited to real-time communication. Pypy is also a major new dependency that’s not packaged and it changes a lot of things. It’s also used by several orders of magnitude fewer people than node.js currently, so security
 there is a whole different concern.</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-.25in;mso-list:l1 level1 lfo4">
<![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Tornado and Twisted are both non-blocking web servers in Python, but both projects have serious peculiarities which we could dive into separately.
 And ultimately they’re not tools any of the Horizon contributors I’ve talked to so far are interested in working with, which in an open source community is pretty much a death knell for that solution.</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-.25in;mso-list:l1 level1 lfo4">
<![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">John P’s point about Javascript already being a core language used in Horizon is well taken. I get the “server-side javascript is different” mindset,
 but language-bashing for the sake of “I don’t like javascript” is no more helpful than Python people bashing Ruby. The fact is that Javascript as a language is extremely similar to Python in its syntax and construction (I often write my JS to PEP8 standards),
 and though it’s not as readable as Python (what is?), there’s no reason JS code is inherently bad. Bad programmers write bad code. Bad frameworks encourage bad code. Node.js suffers from neither.</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-.25in;mso-list:l1 level1 lfo4">
<![if !supportLists]><span style="font-family:Symbol"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’m 100% in favor of code-bundling only being a short-term solution. When a reasonable number of distros package things like LESS, dropping our bundled
 version in favor of a properly-versioned package would be awesome. The fewer things to maintain the better.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">All the best,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-.25in;mso-list:l0 level1 lfo6">
<![if !supportLists]><span style="font-family:"Calibri","sans-serif""><span style="mso-list:Ignore">-<span style="font:7.0pt "Times New Roman"">         
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Gabriel</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">
openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a> [<a href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a>]
<b>On Behalf Of </b>John Postlethwait<br>
<b>Sent:</b> Friday, May 25, 2012 9:23 AM<br>
<b>To:</b> Simon G.; Jay Pipes<br>
<b>Cc:</b> <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
<b>Subject:</b> Re: [Openstack] Fwd: Nodejs in horizon</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Hi Everyone,
</span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Sorry if I've missed anything below, this thread has become rather fragmented and messy (at least in my email clients) but I will try to address the main points I have seen
 so far: </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> </span><o:p></o:p></p>
</div>
<div>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo9">
<span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">Just so that everyone is aware, the lessc parser that is bundled in Horizon, while executable, is NOT a binary. It is, in fact, just a 140 line JS file, you can see the code here: <a href="https://review.openstack.org/#/c/7367/4/bin/less/lessc" target="_blank">https://review.openstack.org/#/c/7367/4/bin/less/lessc</a></span><o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo9">
<span style="font-size:8.0pt;font-family:"Tahoma","sans-serif"">The reason I have bundled it within the Horizon code, as Gabriel mentioned, is to assuage any version mismatches or install issues with LESS itself that may arise from having yet another dependency
 on top of NodeJS that needs manual steps to install. Also, the LESS package that exists for Ubuntu is a year out of date, and other distributions do not even have packages for it. I would love if we could rely on the OS' packages to assuage this dependency,
 but we cannot, so this is the simplest and best-working solution I could think of. It will be no more difficult to maintain than jQuery, or Bootstrap, in the Horizon code-base...</span><o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo9">
<span style="font-size:8.0pt;font-family:"Tahoma","sans-serif"">As for distribution support, Node can be installed on just about anything, see here: <a href="https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager" target="_blank">https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager</a></span><o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo9">
<span style="font-size:8.0pt;font-family:"Tahoma","sans-serif"">As to the concerns about "it not being Python" or  "JavaScript has been abused." Well, all I can say to that is no, it is not Python, and yes, some developers write terrible and abusive code with
 JavaScript. I'm sure I could find horrid/abusive Python somewhere as well, but doing so would not preclude our reasons to use it in OpenStack. Misuse of a tool is not a reason to fear the tool itself, if that were so none of us would use any language, ever.
 Not to mention, we already use a ton of JS in Horizon... I'm not introducing JavaScript to Horizon for the first time or anything here.</span><o:p></o:p></li></ul>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">I'm sure I've missed some good points, but this thread is a mess and is difficult to sort through... :P
</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">-John Postlethwait</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> </span><o:p></o:p></p>
<div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="2" width="100%" align="center">
</div>
<div id="divRpF672788">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a href="mailto:openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net">
openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net</a> [<a href="mailto:openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net">openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net</a>] on behalf of Simon G. [<a href="mailto:semyazz@gmail.com">semyazz@gmail.com</a>]<br>
<b>Sent:</b> Friday, May 25, 2012 7:40 AM<br>
<b>To:</b> Jay Pipes<br>
<b>Cc:</b> <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><br>
<b>Subject:</b> Re: [Openstack] Fwd: Nodejs in horizon</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Maybe I've misuderstood something, but I've tried to give examples of other backends than node.js which can make use of mentioned before
<a href="http://socket.io" target="_blank">socket.io</a> and can be used to implement realtime communication. I just wanted to minimize use of node.js. Hmm... I'm still talking about realtime communication, but it was only mentioned as an example and it's not
 even listed as a feature anywhere. So maybe my part in this topic is pointless. I'll be silent from now :)<br>
<br>
Cheers,<o:p></o:p></p>
<div>
<p class="MsoNormal">On Fri, May 25, 2012 at 3:20 PM, Jay Pipes <<a href="mailto:jaypipes@gmail.com" target="_blank">jaypipes@gmail.com</a>> wrote:<o:p></o:p></p>
<div>
<p class="MsoNormal">On 05/25/2012 08:41 AM, Simon G. wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<p class="MsoNormal">Hello,<br>
<br>
I don't want to be rude, but fast research about point *3c* and sockets<br>
=> PyPi search<br>
<<a href="http://pypi.python.org/pypi?%3Aaction=search&term=socket.io&submit=search" target="_blank">http://pypi.python.org/pypi?%3Aaction=search&term=socket.io&submit=search</a>><br>
<br>
 * <a href="http://pypi.python.org/pypi/SocketTornad.IO/" target="_blank">http://pypi.python.org/pypi/SocketTornad.IO/</a><br>
 * <a href="http://pypi.python.org/pypi/TornadIO2/0.0.3" target="_blank">http://pypi.python.org/pypi/TornadIO2/0.0.3</a> ,<br>
   <a href="https://github.com/MrJoes/tornadio2" target="_blank">https://github.com/MrJoes/tornadio2</a><br>
 * <a href="http://pypi.python.org/pypi/django-socketio/0.3.3" target="_blank">http://pypi.python.org/pypi/django-socketio/0.3.3</a><br>
 * <a href="http://mrjoes.github.com/2011/12/15/sockjs-bench.html" target="_blank">
http://mrjoes.github.com/2011/12/15/sockjs-bench.html</a> <o:p></o:p></p>
<div>
<p class="MsoNormal"><br>
<br>
How mature are those projects? I don't know. I'm not an expert in<br>
python. I'm just trying to find alternatives to Node.js if almost<br>
everything is in python. I'm just testing Openstack and right now I'm<br>
trying to add something to nova, but I really like horizon and if it's<br>
possible, I'd like to avoid node.js. I'm not a fan of this technology<br>
even if it's popular and fast, because I just have some doubts about<br>
Javascript and its maintainability.<o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal"><br>
Hi Simon,<br>
<br>
<a href="http://socket.io" target="_blank">socket.io</a> is a Javascript library :) 3 of the 4 projects you reference above use
<a href="http://socket.io" target="_blank">socket.io</a>.<br>
<br>
Best,<br>
-jay <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
<br>
_______________________________________________<br>
Mailing list: <a href="https://launchpad.net/%7Eopenstack" target="_blank">https://launchpad.net/~openstack</a><br>
Post to     : <a href="mailto:openstack@lists.launchpad.net" target="_blank">openstack@lists.launchpad.net</a><br>
Unsubscribe : <a href="https://launchpad.net/%7Eopenstack" target="_blank">https://launchpad.net/~openstack</a><br>
More help   : <a href="https://help.launchpad.net/ListHelp" target="_blank">https://help.launchpad.net/ListHelp</a><o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<br>
-- <br>
<i><span style="color:#333333">Semy</span></i> <o:p></o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><br>
<br>
<br>
<br>
<o:p></o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>Mailing list: <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><o:p></o:p></pre>
<pre>Unsubscribe : <a href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><o:p></o:p></pre>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>Mailing list: <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>Post to     : <a href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><o:p></o:p></pre>
<pre>Unsubscribe : <a href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
<pre>More help   : <a href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a><o:p></o:p></pre>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>