<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    On 05/25/2012 07:15 PM, Gabriel Hurley wrote:
    <blockquote
cite="mid:BD35DBE010D5B64589500D43F775F2360AA9827D@BY2PRD0510MB376.namprd05.prod.outlook.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <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.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle23
        {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:658190764;
        mso-list-type:hybrid;
        mso-list-template-ids:-1426551244 -1284635696 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:959532826;
        mso-list-type:hybrid;
        mso-list-template-ids:-633539580 2120804572 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2: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 l2: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 l2: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 l2: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 l2: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 l2: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 l2: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 l2: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 l2: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 l3
        {mso-list-id:1062951415;
        mso-list-template-ids:882524826;}
@list l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l4
        {mso-list-id:1670134016;
        mso-list-type:hybrid;
        mso-list-template-ids:-927407930 1136297730 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l4: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 l4: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 l4: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 l4: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 l4: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 l4: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 l4: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 l4: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 l4: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 l5
        {mso-list-id:1736514118;
        mso-list-template-ids:1335667594;}
@list l5: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 l5: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 l5: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 l5: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 l5: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 l5: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 l5: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 l5: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 l5: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;}
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]-->
      <div class="WordSection1">
        <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:<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">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.<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: 11pt; font-family:
            "Calibri","sans-serif"; color: rgb(31,
            73, 125);">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></p>
      </div>
    </blockquote>
    <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>
    <blockquote
cite="mid:BD35DBE010D5B64589500D43F775F2360AA9827D@BY2PRD0510MB376.namprd05.prod.outlook.com"
      type="cite">
      <div class="WordSection1">
        <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"><o:p> </o:p></span></p>
        <p class="MsoListParagraph"
          style="margin-left:27.0pt;text-indent:-.25in;mso-list:l4
          level1 lfo9">
          <!--[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">
                  <a class="moz-txt-link-abbreviated" href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a>

                  [<a class="moz-txt-link-freetext" 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 class="moz-txt-link-abbreviated" href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><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">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:l2
            level1 lfo2">
            <!--[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:l2
            level1 lfo2">
            <!--[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:l2
            level1 lfo2">
            <!--[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:l2
            level1 lfo2">
            <!--[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:l2
            level1 lfo2">
            <!--[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 lfo4">
            <!--[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 moz-do-not-send="true"
href="mailto:openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net">openstack-bounces+gabriel.hurley=nebula.com@lists.launchpad.net</a>
                    [<a moz-do-not-send="true"
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 moz-do-not-send="true"
                      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:l3
                        level1 lfo7">
                        <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
                            moz-do-not-send="true"
                            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:l3
                        level1 lfo7">
                        <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:l3
                        level1 lfo7">
                        <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
                            moz-do-not-send="true"
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:l3
                        level1 lfo7">
                        <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" style="text-align:center"
                        align="center">
                        <hr align="center" size="2" width="100%">
                      </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 moz-do-not-send="true"
href="mailto:openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net">openstack-bounces+john.postlethwait=nebula.com@lists.launchpad.net</a>
                            [<a moz-do-not-send="true"
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
                              moz-do-not-send="true"
                              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 moz-do-not-send="true"
                              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 moz-do-not-send="true"
                            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
                              moz-do-not-send="true"
                              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 moz-do-not-send="true"
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 moz-do-not-send="true"
                                href="http://pypi.python.org/pypi/SocketTornad.IO/"
                                target="_blank">http://pypi.python.org/pypi/SocketTornad.IO/</a><br>
                               * <a moz-do-not-send="true"
                                href="http://pypi.python.org/pypi/TornadIO2/0.0.3"
                                target="_blank">http://pypi.python.org/pypi/TornadIO2/0.0.3</a>
                              ,<br>
                                 <a moz-do-not-send="true"
                                href="https://github.com/MrJoes/tornadio2"
                                target="_blank">https://github.com/MrJoes/tornadio2</a><br>
                               * <a moz-do-not-send="true"
                                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 moz-do-not-send="true"
                                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 moz-do-not-send="true"
                              href="http://socket.io" target="_blank">socket.io</a>
                            is a Javascript library :) 3 of the 4
                            projects you reference above use
                            <a moz-do-not-send="true"
                              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 moz-do-not-send="true"
href="https://launchpad.net/%7Eopenstack" target="_blank">https://launchpad.net/~openstack</a><br>
                                Post to     : <a moz-do-not-send="true"
href="mailto:openstack@lists.launchpad.net" target="_blank">openstack@lists.launchpad.net</a><br>
                                Unsubscribe : <a moz-do-not-send="true"
href="https://launchpad.net/%7Eopenstack" target="_blank">https://launchpad.net/~openstack</a><br>
                                More help   : <a moz-do-not-send="true"
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>
            <o:p></o:p></p>
          <pre>_______________________________________________<o:p></o:p></pre>
          <pre>Mailing list: <a moz-do-not-send="true" href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
          <pre>Post to     : <a moz-do-not-send="true" href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a><o:p></o:p></pre>
          <pre>Unsubscribe : <a moz-do-not-send="true" href="https://launchpad.net/%7Eopenstack">https://launchpad.net/~openstack</a><o:p></o:p></pre>
          <pre>More help   : <a moz-do-not-send="true" 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>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Mailing list: <a class="moz-txt-link-freetext" href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a>
Post to     : <a class="moz-txt-link-abbreviated" href="mailto:openstack@lists.launchpad.net">openstack@lists.launchpad.net</a>
Unsubscribe : <a class="moz-txt-link-freetext" href="https://launchpad.net/~openstack">https://launchpad.net/~openstack</a>
More help   : <a class="moz-txt-link-freetext" href="https://help.launchpad.net/ListHelp">https://help.launchpad.net/ListHelp</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>