<commit_before><!doctype html>
<html lang="en">

	<head>
		<meta charset="utf-8">

		<title>Windows Web Deployment: Everything you wanted to know, but were to horrified to ask!</title>

		<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
		<meta name="author" content="<NAME>">

		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

		<link rel="stylesheet" href="css/reveal.css">
		<link rel="stylesheet" href="css/theme/default.css" id="theme">

		<!-- For syntax highlighting -->
		<link rel="stylesheet" href="lib/css/zenburn.css">

		<!-- If the query includes 'print-pdf', use the PDF print sheet -->
		<script>
			document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
		</script>

		<!--[if lt IE 9]>
		<script src="lib/js/html5shiv.js"></script>
		<![endif]-->
	</head>

	<body>

		<div class="reveal">

			<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
    <section>
        <h1>Windows Web Deployment:</h1>
<h2>Everything you wanted to know,<br>but were to horrified to ask!</h2>
<p>
<a href="http://whatschrisdoing.com"><NAME></a>
<br>
<a href="http://kclsoftware.com">KCL Custom Software</a>
<br>
<a href="http://twitter.com/lambacck">@lambacck</a>
</p>
<aside class="notes">
    Hi, I'm <NAME> and I deploy Python based web sites to windows
    servers. We have 31 python based web applications running on 1 windows
    server 2003 web server and 2 SQL server database boxes. In October we had
    648,000 unique visitors and 3.5 million page views. It's not the largest
    sites on the web, but not the smallest either.
</aside>
</section>
        <section>
            <section>
                <h2>Why would you subject yourself to this torture?</h2>
                <aside class="notes">
                    Many people wonder why we are using Windows and there are a
                    bunch of possible answers.
                </aside>
            </section>
            <section>
                <h2>You like pain!</h2>
                <img src="img/tough-cat-eats.jpg">

                <aside class="notes">
                    Most Unix devs look at you like you were about to do this
                    when you tell them you deploy to Windows.
                </aside>
            </section>
            <section>
                <h2>You want to be different than the cool Python kids?</h2>
                <img src="img/one-of-these-things.jpg">
                <aside class="notes">
                    ... and sometimes if feels like you are the only one who
                    uses or deploys to Windows. Though the windows version
                    download numbers from python.org and the number of requests
                    for deployment info on IRC say differently.
                </aside>
            </section>
            <section>
                <h2>your IT department tells you that this is a MICROSOFT shop?</h2>
                <img src="img/microsoft_store.jpg">
                <aside class="notes">
                    Maybe your IT department won't let you deploy to Linux,
                    even though you *know* they have a couple of Red-Hat boxes
                    stashed in the back.
                </aside>
            </section>
            <section>
                <h2>you have 200,000 lines of Classic ASP that you need to port but can't do it over night!</h2>
                <img src="img/teach_old_dog_new_tricks.PNG">
                <aside class="notes">
                    In my case I have a large legacy application that is slowly
                    being ported. We share Python code between the pure python
                    part of the application and the Classic ASP paet and call
                    into it from VBScript. Catch me in the halls if you want to
                    talk about that.
                </aside>
            </section>
        </section>
        <section>
            <h2>First Rule Of Deployment Club<br>
            </h2>
            <p>Make your app work first,&nbsp;</p>
            <img src="img/i_dont_always_deploy.jpg">
            <p>then work on deployment!</p>
            <aside class="notes">
                Before you start on deployment you need an application. I can't
                believe the number of people who come into IRC and ask about
                deployment specifics before writing one line of code for their
                app.  But I agree, deployment is much more interesting than
                whatever they are supposed to be getting done.
            </aside>
        </section>
        <section>
        <section>
            <h2>Web Servers</h2>
            <ul>
                <li>Front End</li>
                <li>WSGI</li>
            </ul>
            <aside class="notes">
                There are two kinds of web servers for us to discuss, front end
                and WSGI. Depending on your deployment strategy you may not
                need a separate WSGI server because you will use WSGI embedded
                in your front end server.
            </aside>
        </section>
        <section>
            <h3>Front End</h3>
            <ul>
                <li>IIS</li>
                <li>Apache</li>
                <li class="fragment" style="text-decoration: line-through;">NGINX</li>
            </ul>
            <aside class="notes">
                Apache and IIS are the big fish for front end web servers on
                Windows.<br><br>NGINX is big on Posix systems and there is some
                kind of port in progress, but it is not ready for prime time.
                You may have constraints that dictate which one of these you
                can pick. I used to recommend Apache, but in IIS 7 and later things
                significantly better. We're running Windows server 2003 so only
                have IIS 6, we run Apache up front and Reverse Proxy back to
                IIS and Python apps.
            </aside>
        </section>
        <section>
            <h3>WSGI</h3>
            <ul>
                <li><a href="http://pythonpaste.org/">Paste</a> (no Python 3)</li>
                <li><a href="http://pypi.python.org/pypi/waitress">Waitress</a></li>
                <li><a href="http://www.cherrypy.org/">CherryPy</a></li>
                <li><a href="http://http://twistedmatrix.com">Twisted</a> (no Python 3 &emdash; yet)</li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://uwsgi-docs.readthedocs.org/en/latest/">uWSGI</a></li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://gunicorn.org/">Gunicorn</a></li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://pypi.python.org/pypi/Spawning">Spawning</a></li>
                <li class="fragment">etc...</li>
            <ul>
            <aside class="notes">
                If your font end server reverse proxies, that is generates a
                new http request, back to your python application for your
                dynamic content, then you'll want one of these guys. I supposed
                Django has a development server too, I just don't know anything about Django.
                Paste was the default server Pylons/Pyraimd/Turbogears 2 frameworks,
                but it does not have Python 3 support and I don't think anyone is going to
                step up to provide it. Waitress is the development server that comes with Pyramid 
                since Pyramid grew Python 3 support. Though we used Pyramid, we still use the Paste server.
                CherryPy has a well regarded WSGI server. Twisted also has a good
                WSGI server that can push tasks back to a thread pool so it looks like any of these other servers.
                <br>
                <br>
                Then there are the non-Windows compatible very popular servers.
                These things use fork and signals to do the nice things the do.
                It's a pitty I can't use them, they look nifty.
            </aside>
        </section>
        </section>
        <section>
                <section>
                    <h2>Reverse proxy</h2>
                    <ul>
                        <li>Load balancing with multiple processes</li>
                        <li>No fighting permissions</li>
                        <li>With multiple applications can restart just one</li><commit_msg>fix typo<commit_after><!doctype html>
<html lang="en">

	<head>
		<meta charset="utf-8">

		<title>Windows Web Deployment: Everything you wanted to know, but were to horrified to ask!</title>

		<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
		<meta name="author" content="<NAME>">

		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

		<link rel="stylesheet" href="css/reveal.css">
		<link rel="stylesheet" href="css/theme/default.css" id="theme">

		<!-- For syntax highlighting -->
		<link rel="stylesheet" href="lib/css/zenburn.css">

		<!-- If the query includes 'print-pdf', use the PDF print sheet -->
		<script>
			document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
		</script>

		<!--[if lt IE 9]>
		<script src="lib/js/html5shiv.js"></script>
		<![endif]-->
	</head>

	<body>

		<div class="reveal">

			<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
    <section>
        <h1>Windows Web Deployment:</h1>
<h2>Everything you wanted to know,<br>but were to horrified to ask!</h2>
<p>
<a href="http://whatschrisdoing.com"><NAME></a>
<br>
<a href="http://kclsoftware.com">KCL Custom Software</a>
<br>
<a href="http://twitter.com/lambacck">@lambacck</a>
</p>
<aside class="notes">
    Hi, I'm <NAME> and I deploy Python based web sites to windows
    servers. We have 31 python based web applications running on 1 windows
    server 2003 web server and 2 SQL server database boxes. In October we had
    648,000 unique visitors and 3.5 million page views. It's not the largest
    sites on the web, but not the smallest either.
</aside>
</section>
        <section>
            <section>
                <h2>Why would you subject yourself to this torture?</h2>
                <aside class="notes">
                    Many people wonder why we are using Windows and there are a
                    bunch of possible answers.
                </aside>
            </section>
            <section>
                <h2>You like pain!</h2>
                <img src="img/tough-cat-eats.jpg">

                <aside class="notes">
                    Most Unix devs look at you like you were about to do this
                    when you tell them you deploy to Windows.
                </aside>
            </section>
            <section>
                <h2>You want to be different than the cool Python kids?</h2>
                <img src="img/one-of-these-things.jpg">
                <aside class="notes">
                    ... and sometimes if feels like you are the only one who
                    uses or deploys to Windows. Though the windows version
                    download numbers from python.org and the number of requests
                    for deployment info on IRC say differently.
                </aside>
            </section>
            <section>
                <h2>your IT department tells you that this is a MICROSOFT shop?</h2>
                <img src="img/microsoft_store.jpg">
                <aside class="notes">
                    Maybe your IT department won't let you deploy to Linux,
                    even though you *know* they have a couple of Red-Hat boxes
                    stashed in the back.
                </aside>
            </section>
            <section>
                <h2>you have 200,000 lines of Classic ASP that you need to port but can't do it over night!</h2>
                <img src="img/teach_old_dog_new_tricks.PNG">
                <aside class="notes">
                    In my case I have a large legacy application that is slowly
                    being ported. We share Python code between the pure python
                    part of the application and the Classic ASP paet and call
                    into it from VBScript. Catch me in the halls if you want to
                    talk about that.
                </aside>
            </section>
        </section>
        <section>
            <h2>First Rule Of Deployment Club<br>
            </h2>
            <p>Make your app work first,&nbsp;</p>
            <img src="img/i_dont_always_deploy.jpg">
            <p>then work on deployment!</p>
            <aside class="notes">
                Before you start on deployment you need an application. I can't
                believe the number of people who come into IRC and ask about
                deployment specifics before writing one line of code for their
                app.  But I agree, deployment is much more interesting than
                whatever they are supposed to be getting done.
            </aside>
        </section>
        <section>
        <section>
            <h2>Web Servers</h2>
            <ul>
                <li>Front End</li>
                <li>WSGI</li>
            </ul>
            <aside class="notes">
                There are two kinds of web servers for us to discuss, front end
                and WSGI. Depending on your deployment strategy you may not
                need a separate WSGI server because you will use WSGI embedded
                in your front end server.
            </aside>
        </section>
        <section>
            <h3>Front End</h3>
            <ul>
                <li>IIS</li>
                <li>Apache</li>
                <li class="fragment" style="text-decoration: line-through;">NGINX</li>
            </ul>
            <aside class="notes">
                Apache and IIS are the big fish for front end web servers on
                Windows.<br><br>NGINX is big on Posix systems and there is some
                kind of port in progress, but it is not ready for prime time.
                You may have constraints that dictate which one of these you
                can pick. I used to recommend Apache, but in IIS 7 and later things
                significantly better. We're running Windows server 2003 so only
                have IIS 6, we run Apache up front and Reverse Proxy back to
                IIS and Python apps.
            </aside>
        </section>
        <section>
            <h3>WSGI</h3>
            <ul>
                <li><a href="http://pythonpaste.org/">Paste</a> (no Python 3)</li>
                <li><a href="http://pypi.python.org/pypi/waitress">Waitress</a></li>
                <li><a href="http://www.cherrypy.org/">CherryPy</a></li>
                <li><a href="http://http://twistedmatrix.com">Twisted</a> (no Python 3 &emdash; yet)</li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://uwsgi-docs.readthedocs.org/en/latest/">uWSGI</a></li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://gunicorn.org/">Gunicorn</a></li>
                <li class="fragment" style="text-decoration: line-through;"><a href="http://pypi.python.org/pypi/Spawning">Spawning</a></li>
                <li class="fragment">etc...</li>
            <ul>
            <aside class="notes">
                If your font end server reverse proxies, that is generates a
                new http request, back to your python application for your
                dynamic content, then you'll want one of these guys. I supposed
                Django has a development server too, I just don't know anything about Django.
                Paste was the default server Pylons/Pyramid/Turbogears 2 frameworks,
                but it does not have Python 3 support and I don't think anyone is going to
                step up to provide it. Waitress is the development server that comes with Pyramid 
                since Pyramid grew Python 3 support. Though we used Pyramid, we still use the Paste server.
                CherryPy has a well regarded WSGI server. Twisted also has a good
                WSGI server that can push tasks back to a thread pool so it looks like any of these other servers.
                <br>
                <br>
                Then there are the non-Windows compatible very popular servers.
                These things use fork and signals to do the nice things the do.
                It's a pitty I can't use them, they look nifty.
            </aside>
        </section>
        </section>
        <section>
                <section>
                    <h2>Reverse proxy</h2>
                    <ul>
                        <li>Load balancing with multiple processes</li>
                        <li>No fighting permissions</li>
                        <li>With multiple applications can restart just one</li>
{'fraction_non_alphanumeric': 0.09977713012172124, 'fraction_numerical': 0.006857534716269501, 'mean_word_length': 1.751572327044025, 'pattern_counts': {'":': 0, '<': 359, '<?xml version=': 0, '>': 359, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1909232', 'n_tokens_mistral': 4961, 'n_tokens_neox': 4476, 'n_words': 1754}