
See this doc: go/chromium-coil-change for more info BUG=1210385 Change-Id: I2ae7dae2f9fbfba55bb31299ef7601051624c78f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2902909 Auto-Submit: John Palmer <jopalmer@chromium.org> Reviewed-by: Derek Schuff <dschuff@chromium.org> Reviewed-by: Sam Clegg <sbc@chromium.org> Commit-Queue: John Palmer <jopalmer@chromium.org> Cr-Commit-Position: refs/heads/master@{#887622}
251 lines
11 KiB
HTML
251 lines
11 KiB
HTML
{{+bindTo:partials.standard_nacl_article}}
|
|
|
|
<b><font color="#cc0000">
|
|
NOTE:
|
|
Deprecation of the technologies described here has been announced
|
|
for platforms other than ChromeOS.<br/>
|
|
Please visit our
|
|
<a href="/native-client/migration">migration guide</a>
|
|
for details.
|
|
</font></b>
|
|
<hr/><section id="what-a-difference-python-makes-codelab">
|
|
<h1 id="what-a-difference-python-makes-codelab">What a Difference Python Makes - Codelab</h1>
|
|
<h2 id="introduction">Introduction</h2>
|
|
<p>Learn how you can use client-side Python on your webpage.
|
|
Use the python <a href="https://docs.python.org/2/library/difflib.html"
|
|
target="_blank">difflib</a> module to generate attractive online
|
|
textual diffs.
|
|
Develop inside Google Chrome, using a hot off the presses version
|
|
of our NaCl Dev Environment, running on a webpage,
|
|
powered by Portable Native Client.
|
|
The techniques in this codelab also apply to other interpreted languages
|
|
we’ve ported to PNaCl, including: Python, Lua, Ruby, Tcl, Bash, and Forth.</p>
|
|
<dl class="docutils">
|
|
<dt>Requirements:</dt>
|
|
<dd><ul class="first last small-gap">
|
|
<li>A Desktop / Laptop Windows, Mac, Linux, or ChromeOS browser
|
|
<br/><span id="python_compat" style="color: #cccc00"
|
|
>Checking browser compatibility...</span><br/>
|
|
<i id="python_compat2"></i>
|
|
<script>
|
|
var tag = document.getElementById('python_compat');
|
|
var tag2 = document.getElementById('python_compat2');
|
|
if (!('application/x-pnacl' in navigator.mimeTypes)) {
|
|
tag.innerHTML =
|
|
'This codelab does not appear to be supported by your browser.';
|
|
tag.style.color = '#cc0000';
|
|
tag2.innerHTML =
|
|
'You do not appear to be running a browser such as ' +
|
|
'Google Chrome which supports Portable Native Client ' +
|
|
'or you have disabled Portable Native Client.';
|
|
} else {
|
|
tag.innerHTML = 'This codelab appears to be supported by your browser.';
|
|
tag.style.color = '#00cc00';
|
|
}
|
|
</script></li>
|
|
<li>A fast broadband connection (500MB download)</li>
|
|
<li>Can read and write Python</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
<h2 id="setup">Setup</h2>
|
|
<p>For this codelab, you will need to point your web browser at
|
|
the Beta preview of our in-browser NaCl Dev Environment.</p>
|
|
<a href="https://naclports.storage.googleapis.com/builds/pepper_41/trunk-176-g9b9e342/publish/devenv/pnacl/app/bash.html"
|
|
target="_blank">Click here to open the environment.</a><p>While no installation is needed, the first load of the page will
|
|
require you to agree to allow the page unlimited storage
|
|
(Click “Ok” in the bar at the top of your browser window.)</p>
|
|
<p>The first run requires a large download. Please be patient.
|
|
Also, as PNaCl translates executables to native code on demand,
|
|
each program will also have a noticeable load delay on first run.
|
|
We’re actively working to improve this.</p>
|
|
<p>NOTE: This environment will leave a substantial (800MB) payload in your
|
|
browser. See the cleanup section below to learn how to recover this space.</p>
|
|
<p>Once the download is complete, you should see a bash prompt (ignore
|
|
the gcc warning, our web C compiler is coming soon!):</p>
|
|
<pre class="prettyprint">
|
|
WARNING: gcc not yet available for your platform (coming soon).
|
|
bash.nmf-4.3$
|
|
</pre>
|
|
<h3 id="our-web-based-tools">Our Web-based Tools</h3>
|
|
<p>These development tools are a <a class="reference external" href="nacldev">work in progress</a>.
|
|
At this point, they are a learning tool and demonstration of NaCl’s
|
|
flexibility, but are not the recommended tools for a production application.
|
|
In the future, that may change, but for the moment,
|
|
to develop a substantial application for Native Client /
|
|
Portable Native Client,
|
|
we recommend you use the
|
|
<a class="reference external" href="/native-client/sdk/download">Native Client SDK</a>.</p>
|
|
<b><font color="#880000">
|
|
NOTE: The NaCl Development Environment is not yet stable.
|
|
Ideally, user data is preserved, but currently it can be lost during updates
|
|
or sporadically. We're working to resolve this.
|
|
</font></b><h3 id="navigating-in-the-dev-environment">Navigating in the Dev Environment</h3>
|
|
<p>The NaCl Dev Environment behaves like a mini-UNIX system.
|
|
You start-up in bash command prompt.
|
|
Standard UNIX commands like cd, ls, mkdir, rm, rmdir, etc.
|
|
can be used to navigate and modify the Dev Environment’s
|
|
virtual filesystem.</p>
|
|
<p>There are 3 locations mounted by the environment:</p>
|
|
<blockquote>
|
|
<div><ul class="small-gap">
|
|
<li>/tmp mounts the HTML5 Filesystem temporary storage area.</li>
|
|
<li>/mnt/html5 mounts the HTML5 Filesystem persistent storage area.</li>
|
|
<li>Your home directory ~/, located in /home/user,
|
|
mounts a portion of the HTML5 Filsystem persistent storage area
|
|
that corresponds to the /mnt/html5/home directory.</li>
|
|
</ul>
|
|
</div></blockquote>
|
|
<h3 id="clipboard">Clipboard</h3>
|
|
<p>Many of the steps in this tutorial will be easier to copy and paste
|
|
into the Dev Environment.
|
|
To copy and paste in the Dev Environment web page,
|
|
you can use the keyboard or the menu options (top right corner ☰ → Edit).</p>
|
|
<p>On your platform use:</p>
|
|
<blockquote>
|
|
<div><ul class="small-gap">
|
|
<li><span id="copy_key">Loading...</span>
|
|
<script>
|
|
var tag = document.getElementById('copy_key');
|
|
if (navigator.appVersion.indexOf('Mac') >= 0) {
|
|
tag.innerHTML = '⌘-C';
|
|
} else {
|
|
tag.innerHTML = 'Ctrl-C';
|
|
}
|
|
</script> to Copy</li>
|
|
<li><span id="paste_key">Loading...</span>
|
|
<script>
|
|
var tag = document.getElementById('paste_key');
|
|
if (navigator.appVersion.indexOf('Mac') >= 0) {
|
|
tag.innerHTML = '⌘-V';
|
|
} else {
|
|
tag.innerHTML = 'Ctrl-V';
|
|
}
|
|
</script> to Paste</li>
|
|
</ul>
|
|
</div></blockquote>
|
|
<h4 id="editing">Editing</h4>
|
|
<p>To follow along in this codelab, you’ll need to use a text editor to modify
|
|
various files in our development environment.
|
|
There are currently two editor options, nano or vim.
|
|
We have an Emacs port, but it is not yet available in the Dev Environment
|
|
(coming soon).
|
|
If you’re unsure what to pick, nano is simpler to start with and has on-screen
|
|
help.</p>
|
|
<ul class="small-gap">
|
|
<li><p class="first">You can open <strong>nano</strong> like this:</p>
|
|
<pre class="prettyprint">
|
|
$ nano <filename>
|
|
</pre>
|
|
<p>Here’s an online <a class="reference external" href="http://mintaka.sdsu.edu/reu/nano.html">nano tutorial</a>.</p>
|
|
</li>
|
|
<li><p class="first">You can open <strong>vim</strong> like this:</p>
|
|
<pre class="prettyprint">
|
|
$ vim <filename>
|
|
</pre>
|
|
<p>Here’s an online <a class="reference external" href="http://www.openvim.com/tutorial.html">vim tutorial</a>.</p>
|
|
</li>
|
|
</ul>
|
|
<h3 id="git-setup">Git Setup</h3>
|
|
<p>This tutorial also uses a revision control program called
|
|
<a class="reference external" href="http://en.wikipedia.org/wiki/Git_(software)">git</a>.
|
|
In order to commit to a git repository,
|
|
you need to set up your identity.</p>
|
|
<p>Run these commands (with your info) to setup your <cite>~/.gitconfig</cite>
|
|
for use:</p>
|
|
<pre class="prettyprint">
|
|
git config --global user.name "John Doe"
|
|
git config --global user.email johndoe@example.com
|
|
</pre>
|
|
<h2 id="get-the-code">Get the Code!</h2>
|
|
<p>Rather than start from nothing, for this codelab we’ve provided
|
|
you with a zip file containing a starting point.</p>
|
|
<p>Download the codelab:</p>
|
|
<pre class="prettyprint">
|
|
geturl https://nacltools.storage.googleapis.com/cds2014/cds2014_python.zip cds2014_python.zip
|
|
</pre>
|
|
<p>Unzip it:</p>
|
|
<pre class="prettyprint">
|
|
unzip cds2014_python.zip
|
|
</pre>
|
|
<p>Go into the codelab directory:</p>
|
|
<pre class="prettyprint">
|
|
cd cds2014_python
|
|
</pre>
|
|
<p>Create a new local git repo:</p>
|
|
<pre class="prettyprint">
|
|
git init
|
|
</pre>
|
|
<p>Add everything:</p>
|
|
<pre class="prettyprint">
|
|
git add .
|
|
</pre>
|
|
<p>Commit it:</p>
|
|
<pre class="prettyprint">
|
|
git commit -am "initial"
|
|
</pre>
|
|
<p>While working, you can see what you’ve changed by running:</p>
|
|
<pre class="prettyprint">
|
|
git diff
|
|
</pre>
|
|
<h2 id="your-challenge-should-you-choose-to-accept-it">Your challenge, should you choose to accept it...</h2>
|
|
<p>Javascript has many wonderful features out of the box.
|
|
Unfortunately, generating textual diffs is not one of them.
|
|
Python on the other hand has the <a href="https://docs.python.org/2/library/difflib.html"
|
|
target="_blank">difflib</a> module in its standard library.</p>
|
|
<p>The starting point you’ve just extracted contains the shell
|
|
of a web app using Portable Native Client Python to generate a diff.
|
|
Just one thing is missing, that whole diffing thing...</p>
|
|
<p>To see where things stand, deploy the sample like this:</p>
|
|
<pre class="prettyprint">
|
|
make
|
|
</pre>
|
|
<p>This will attempt to open the sample, but will be blocked by
|
|
a popup blocker the first time. Click on the URL to accept the popup.
|
|
It also clobbers /tmp/differ for good measure.</p>
|
|
<p>As you can see, this isn’t quite what we’re going for.</p>
|
|
<p>You’ll want to modify diff.py, using the editor you selected earlier.
|
|
You’ll probably want to consult the <a href="https://docs.python.org/2/library/difflib.html"
|
|
target="_blank">difflib</a> documentation.
|
|
I would suggest you check out the HtmlDiff class and make use of
|
|
the make_file member function. Note our goal is to create a
|
|
full HTML diff, so the make_table function is insufficient.
|
|
The splitlines function may also come in handy.</p>
|
|
<p>You can test diff.py manually as you would in a normal UNIX environment.
|
|
It can be run like this:</p>
|
|
<pre class="prettyprint">
|
|
./diff.py before.txt after.txt out.html
|
|
</pre>
|
|
<p>Once everything is working, diff.html will contain an html diff.
|
|
After the initial <cite>make</cite> you can hit “Run” to test your changes.</p>
|
|
<p>Now get to it, and good luck!</p>
|
|
<h2 id="what-you-ve-learned">What you’ve learned</h2>
|
|
<p>While the details of building and packaging Python have been
|
|
insulated from you for the purpose of this exercise, the key take-home lesson
|
|
is how easy it is to leverage Python using PNaCl.
|
|
As you’ve likely experienced, the initial start time is non-trivial.
|
|
We’re working on improving this, both by improving PNaCl,
|
|
and our Python port.</p>
|
|
<p>The same approach to deploying Python apps can be used for the other
|
|
interpreted languages that have been ported to PNaCl.</p>
|
|
<p>Check out the range of interpreters, libraries, and tools
|
|
<a class="reference external" href="https://chromium.googlesource.com/webports/+/main/docs/port_list.md">already ported to PNaCl and ready to be integrated with your Web App</a>.</p>
|
|
<p>While our in-browser environment is rapidly evolving
|
|
to become a complete development solution,
|
|
for the broadest range of development options, check out the
|
|
<a class="reference external" href="https://developer.chrome.com/native-client/sdk/download">NaCl SDK</a>.</p>
|
|
<p>Send us comments and feedback on the <a class="reference external" href="https://groups.google.com/forum/#!forum/native-client-discuss">native-client-discuss</a> mailing list,
|
|
or ask questions using Stack Overflow’s <a class="reference external" href="https://stackoverflow.com/questions/tagged/google-nativeclient">google-nativeclient</a> tag.</p>
|
|
<p>Bring your interpreted app to PNaCl today!</p>
|
|
<h2 id="cleanup">Cleanup</h2>
|
|
<p>The Web-based version of the Chrome Dev Environment installs
|
|
package data (>800MB) into the HTML5 Filesystem storage associated
|
|
with naclports.storage.googleapis.com .
|
|
To recover this storage (i.e. uninstall),
|
|
enter <strong>chrome://settings/cookies</strong> in the Chrome URL bar.
|
|
In the cookies UI, search for “naclports”.
|
|
Then click the “x” next to the naclports entry.</p>
|
|
</section>
|
|
|
|
{{/partials.standard_nacl_article}}
|