Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / native_client_sdk / src / doc / cds2014 / python.rst
blobbe988da68cac488796dc0ae1c6190df71b7e96fd
1 .. _cds2014_python:
3 ########################################
4 What a Difference Python Makes - Codelab
5 ########################################
7 Introduction
8 ------------
10 .. include:: python_summary.inc
12 .. include:: ../nacldev/setup_web.inc
15 Get the Code!
16 -------------
18 Rather than start from nothing, for this codelab we've provided
19 you with a zip file containing a starting point.
21 Download the codelab::
23   geturl https://nacltools.storage.googleapis.com/cds2014/cds2014_python.zip cds2014_python.zip
25 Unzip it::
27   unzip cds2014_python.zip
29 Go into the codelab directory::
31   cd cds2014_python
33 Create a new local git repo::
35   git init
37 Add everything::
39   git add .
41 Commit it::
43   git commit -am "initial"
45 While working, you can see what you've changed by running::
47   git diff
50 Your challenge, should you choose to accept it...
51 -------------------------------------------------
53 Javascript has many wonderful features out of the box.
54 Unfortunately, generating textual diffs is not one of them.
55 Python on the other hand has the |difflib| module in its standard library.
57 The starting point you've just extracted contains the shell
58 of a web app using Portable Native Client Python to generate a diff.
59 Just one thing is missing, that whole diffing thing...
61 To see where things stand, deploy the sample like this::
63   make
65 This will attempt to open the sample, but will be blocked by
66 a popup blocker the first time. Click on the URL to accept the popup.
67 It also clobbers /tmp/differ for good measure.
69 As you can see, this isn't quite what we're going for.
71 You'll want to modify diff.py, using the editor you selected earlier.
72 You'll probably want to consult the |difflib| documentation.
73 I would suggest you check out the HtmlDiff class and make use of
74 the make_file member function. Note our goal is to create a
75 full HTML diff, so the make_table function is insufficient.
76 The splitlines function may also come in handy.
78 You can test diff.py manually as you would in a normal UNIX environment.
79 It can be run like this::
81   ./diff.py before.txt after.txt out.html
83 Once everything is working, diff.html will contain an html diff.
84 After the initial `make` you can hit "Run" to test your changes.
86 Now get to it, and good luck!
89 What you've learned
90 -------------------
92 While the details of building and packaging Python have been
93 insulated from you for the purpose of this exercise, the key take-home lesson
94 is how easy it is to leverage Python using PNaCl.
95 As you've likely experienced, the initial start time is non-trivial.
96 We're working on improving this, both by improving PNaCl,
97 and our Python port.
99 The same approach to deploying Python apps can be used for the other
100 interpreted languages that have been ported to PNaCl.
102 Check out the range of interpreters, libraries, and tools
103 `already ported to PNaCl and ready to be integrated with your Web App
104 <https://code.google.com/p/naclports/wiki/PortList>`_.
106 While our in-browser environment is rapidly evolving
107 to become a complete development solution,
108 for the broadest range of development options, check out the
109 `NaCl SDK
110 <https://developer.chrome.com/native-client/sdk/download>`_.
112 Send us comments and feedback on the `native-client-discuss
113 <https://groups.google.com/forum/#!forum/native-client-discuss>`_ mailing list,
114 or ask questions using Stack Overflow's `google-nativeclient
115 <https://stackoverflow.com/questions/tagged/google-nativeclient>`_ tag.
117 Bring your interpreted app to PNaCl today!
119 .. include:: ../nacldev/cleanup_web.inc