Along with the Native Client support that came in 4.0.220.1, little attention was paid to another addition in the dev branch: extensions are here (or soon will be).
The initial support is good – but it needs some polish. The existence of sites like Chrome Extensions will surely help. And the good news is that some must-have Firefox extensions are now available in Chrome – including AdBlock+. I can’t wait for NoScript and FoxyProxy (or would it be ChromoProxy?) to arrive.
In the meantime, I really do like having things like Bubble Translate. I can highlight text I want to translate and simply click a button. Bam! I see the comments I need to understand. I couldn’t compare this to other extension-based translators. But it is really handy to have this – especially as there is a growing international support community for Chrome.
-Roo
Month: October 2009
Going Native (Client) – For Today
It’s been a while since I’ve taken the time to actually post anything substantial on this site. I have been swamped at work. And I have focused more of my personal time on family matters and on micro-blogging. And today was going to be no exception to that rule.
I got up first thing this morning. My intentions were to spend time on yard work and to enjoy time away from the computer. After two months of heads-down work, I wanted the break.
But I decided that I would spend a few minutes on Google Reader. That was my first mistake. It didn’t take long for me to notice lots of kerfuffle about Google Chrome and built-in support for Native Client. I remembered the Native Client buzz from Google I/O but I hadn’t really dug into the subject. That changed this morning.
Native Client was a Google Code initiative that has developed into something far more transformative. Stated simply, Native Client is a way that web applications can access/run native instructions on an x86 system.
That’s nothing new, per se. Indeed, the idea of interpreting code to make it portable has been around for a long time. When I built my first computer (a Heathkit H89 system), I decided to run UCSD’s Pascal p-system as an OS. For those too young to know what I’m talking about, this was a PC operating system that ran completely on interpreted pseudo-code (i.e., interpreted byte-code). Since then, the more obvious examples of this are Java and .Net applications.
And Google is now building their own instance of portable code. I think this is all preparatory for Chrome OS and the cloud-based services that they are soon to unleash upon the computing world. But that is a subject for a different post. Today’s post is about getting started in Native Client.
So after sharing a few articles in Google Reader and tweeting a little bit about it, I decided to launch down the path of understanding it by installing the new platform. But that was easier said than done. Now that I am done, it doesn’t seem all that hard. But it took me quite a few fits and starts.
Before launching into the list of tasks, let me note that I did all of this work on my Windows 7 system. So I spent a lot of time figuring out which issues were part of the Native Client experience and which were part of the Windows 7 experience. But I’ve been through the tunnel and it isn’t nearly as hard as it seemed while stumbling in the dark.
Here’s what I did: [I’ll update this post with links after I finish my dinner.]
- I downloaded the latest version of Chrome (4.0.220.1). Actually, this happened automatically.
- I enabled the browser to run the Native Client. [You must add a run-time option to your Chrome invocation. In my case, I used the following: chrome.exe –enable-nacl
- I downloaded the Getting Started guide and I realized that there was far more to Native Client than just the browser additions. Indeed, I needed to download and install the Native Client interpreter.
- Before I could launch into that installation, I needed to install Python. I hadn’t installed that onto the Windows 7 system yet. So off I went to http://www.python.org.
- Of course, Python wasn’t enough. I had to also install the PyWin extensions.
- Once I had Python installed, I ran the installation and configuration steps in the Getting Started document. Of course, things failed. At first, I saw errors indicating that Visual Studio was not properly installed. Huh? So I had to actually go into the installation scripts. Once there, it was obvious what the problem was: I didn’t have a working C compiler or development environment on this system.
- The next step took way too much time. I had to decide which C compiler I should install. I don’t have a licese for VS 2008 at home. So I had to decide whether to use Cygwin, MinGW or gcw. I had read that there were problems with Cygwin so I tried gcw. No joy. I then tried MinGW. Also, less joy than anticipated. Since I had great success with Cygwin on other systems, I decided to try it after all. Well, I had no troubles at all installing and using Cygwin with Native Client. [Note: The only problem with Cygwin was apparently a problem with the zip functionality in Cygwin. I avoided this and had no issues whatsoever.]
- Now that I had a compiler and a scripting engine, I could actually run the installer as delivered from Google. Lo and behold, things began to work. But I still needed to have a local web server for testing. Since I didn’t want to use any of my other web servers lying around the bat cave, I decided to try the hpptd instance that comes with the Native Client code itself. [BTW, I still don’t know if I like a Python-based web server, but it works fine. So why not.]
- I ran the Mandelbrot and Life examples from the command line. And they worked flawlessly. So it was time to move on to the browser tests.
- I tried the samples in Chrome and ended up getting 404 errors thrown by the web server. I was not feeling happy. But I wanted to get this done. So I pushed ahead and installed the Firefox extension. And once I used the Firefox extension that ships with Native Client, everything worked. All the sample apps worked like a charm. At some point (probably tomorrow) I’ll try to get Chrome to use the Native Client environment. But that is for tomorrow.
Now that I can sit down and think about what I’ve done, I realize that this is still a developer preview. But the only reason that it is in such a state is because no one has packaged everything up properly. The code works. And it has immense promise. It just needs someone to put a pretty wrapper around it.
And that person won’t be me – at least, not tonight.
-Roo
*Update: The solution to the Chrome issue was simple. I mispelled the execution parm. Once corrected, Native Client goodness is available within my Chrome browser. w00t!
**Update: Curious…Native Client works with an invalid parameter (–enable-nacl) but doesn’t work with the valid one (–internal-nacl). And it also works w/o any parameter. I wonder if Chrome is using the NPAPI plugin.