Archive for November, 2011

The FuBar Meeting Room !

I guess the FuBar room at Mozilla is for solving the really difficult problems :)

 


The Kindle Family Experience.

Myself, my Wife and my 8 and 9 year olds all have Kindles and reading together is an encouraged nightly activity.

From the very first clunky version I’ve thought that the Kindle would change content delivery. My kids are many times more likely to read a book if it’s in the Kindle than when I provide them with the same book on paper.

The Kindle Fire expands the content delivery experience to Video, Audio and Applications.

The more I talk to companies about building standards based apps the more I believe we’re on the verge of a huge surge in new software development.


Mozilla at the JFK Airport.

A coworker took this while walking through JFK.

I thought it was cool so I’m sharing it :)

How to Install Firefox Mobile on the Amazon Kindle Fire

I’m working on a review of the Kindle Fire. Though it’s taking some heat on the net right now, I love the device.

Of course, I wanted to run Firefox on it. On the Kindle Fire you install Apps from the Amazon App marketplace and not the Android Marketplace.

As of today Firefox Mobile is not in the Amazon marketplace (and yes, our team is working with Amazon to get it in there.)

Fortunately, it’s pretty easy to “side-load” apps onto the Fire.

First you need to get the Firefox Mobile Android App onto your Windows/Mac/Linux desktop.

There are a couple of ways to do this.

1.) Go to https://wiki.mozilla.org/Mobile/Platforms/Android and grab it.

2.) I wanted to be sure to test the version I’m running on my phone so I went the other way.

  1. On my Android phone I installed “Astro File Manager” from the App Store.
  2. It automatically configured itself to do backups to my MicroSD card.
  3. In Astro File manager I ran the “Application Backup” function and selected the Firefox Mobile App.
  4. When done, I pulled the SD card and inserted it into my laptop using my MicroSD / USB adapter.
  5. I copped Firefox-2011110417.apk from the MicroSD card to my desktop.
  6. I plugged in my Kindle Fire and copied the Firefox-2011110417.apk file from my desktop to the kindle.
  7. Then on the Kindle Fire I just ran “Easy Installer” to install Firefox Mobile
  8. Viola !

With Firefox running on my Amazon Kindle Fire I can start writing a full review.

60 Days as a Linux user by a recovering Windows Guy.

I wasn’t sure that I’d ever write this post, but many folks have asked my to blog about my Linux choices so here it is.

I’ve always been a bit of an OS junkie. I Loved CP/M, DOS, OS2, NeXT, etc. and I’ve been a Linux user for well over a decade, but I’ve never used it as my primary machine. If whatever I was using for fun didn’t live up to my needs I could always just switch over to my Windows machine.

In the decade that I spent at Microsoft, and even before, Microsoft got Desktop Windows right in very other release. Windows 98 was super, Windows ME was a dud. Windows XP was awesome, Windows Vista sucked. Windows 7 was really solid, Windows 8 looks….  well, I don’t think the trend is in any jeopardy.

When I joined Mozilla I quickly noticed that nearly everyone uses a Mac. Mozilla is a quintessential Open Source organization and you probably think that makes Mozilla anti-Microsoft. That was what I expected and it’s what Microsoft thinks and says about Open Soucers. On my first day at Mozilla the I.T. guys asked me “Do you want a Mac or a Win 7 Lenovo”?

I ended up with one of each. First I got an i7 Macbook Air. It’s a great piece of hardware and I love it’s feel and it’s battery life but I’m really not a OS/X lover. Since I’ll be building a good amount of guidance for ASP.NET developers I got a Lenovo W520 as well. When I received the machine it was running the Windows 8 Developer Preview but I upgraded to Windows 7

Still,  I really wanted to find out if I could be happy doing all my daily business on a Linux machine.

So, I backed up my office machine (a T61P that I purchased myself) and installed Ubuntu 11.10.

It’s been my primary machine since I started at Mozilla two months ago and I have to say that I’m surprised at how painless the transition has been. I have not HAD to use my Windows box for ANYTHING in that 60 days.

Here’s my desktop.

Ubuntu was very easy to install on my Thinkpad and I kept the default Gnome theme and found a dark wallpaper that I liked.

The big trick to learning to like Linux is to commit to stick with it. There are so many cool features in Linux itself and the applications, but learning them takes time. Many things are more “techie” than in Windows, which can mean they’re more powerful but can also mean there is a greater learning curve.

For example, my Dad could probably be happy using Ubuntu if he only had to install software from the Ubuntu marketplace or event the Synaptic Package Manager but if he needed to install something manually (as I’ll write about shortly) and have to open a shell or a Nautilus instance as super user, figure out permissions and run programs without clicking on them, well those things would probably be a show-stopper.

For me, I’m slowed down a bit as I’m doing certain things for the firs time, but I’m getting the hang of it. It’s certainly less frustrating to me than getting around in Windows 8 Metro.

But let’s talk tools.

All of the software that I’m going to talk aboiut below is available either in the Free Ubuntu Software Center or through the optional Synaptic Package manager. (Unless I specify otherwise.)

Office

LibreOffice, which is a fork of OpenOffice, comes installed by default on Ubuntu. I used Microsoft Office every day and frequently talked to folks about how Microsoft Office was better than OpenOffice. MS Office is more polished and the individual tools in the suite each have more features than their free and open alternatives but much to my surprise, I haven’t missed anything. I use Writer (Word) and Impress (PowerPoint)  every day. Writer’s formatting features took a little getting used to but I’ve made the transition with relative ease. I’ve used Calc (Excel) as well, but not for anything serious so I can’t relay speak to how it compares to Excel.

Mail

Life runs on email. Lots of folks at Mozilla use GMail but I like desktop clients. While there are many email clients on Linux to choose from, I quickly narrowed down my list to three choices and now use two programs daily.

Here are the three on my short list.

Evolution is probably the best known Linux email client and it is a fine one, though configuration is a but kludgey.

Mozilla Thunderbird is my favorite email client and I use it, along with the Lightening Calendar plug-in on Windows.

On Linux, however, manual installation is a pain and the release channel for Ubuntu lags behind a bit. As of this writing the Linux release version of Thunderbird (7.01) is incompatible with the latest version of the Lightening Calendar plug in. I’m still using Thunderbird on Linux though, but not with the Lightening plug-in.

I like the display better than any of the other options but have to switch back and forth to see my calendar.

The Zimbra Desktop is one I hadn’t heard of until I started at Mozilla. Zimbra is made by VMWare. The Zimbra Desktop is a free alternative to Microsoft Outlook and there are versions for Windows, Mac, and Linux. They also make an Open Source alternate to Microsoft Exchange Server. Since Mozilla uses the Zimbra Mail Server, the Zimbra Desktop client works very well.

Since the current version of Thunderbird and the Lightening Plugin aren’t in sync at the moment I’m using the standalone Mozilla Calendar Application “Sunbird”.

Dev Tools

Of course my browser is Firefox but one of Firefox’s comparative strengths has always been it’s developer features and available developer extensions. The Firebug and YSlow extensions to Firefox are standards in my Web Developer’s toolbox on any platform.

Now for the Editor / IDE argument.

If I coded 10 hours a day and didn’t build guidance for other developers I’d probably just use EMACS. But I don’t code 10 hours a day and I do build guidance for others so I’ve just never gotten good enough at EMACS to be really productive.

That has made me an IDE guy. What I use every day depends on what I’m doing. I’ve used all the greats.

  • Aptana Studio
  • Netbeans
  • Komodo
  • Eclipse
  • Zend Studio

They are all good and I continue to use them but right now I’m doing HTML5 / JavaScript work and experimenting with NODE.js

Though I like, and still often use, Aptana, my daily use HTML/JavaScript dashboard is JetBrains WebStorm. Right now it’s on sale for $35 and there is a 30 day trial. I paid $69 and find it well worth the money.

Here’s a snapshot of it fired up.

CSS editing was a worry point for me. I’m very partial to the TopStyle CSS Editor.

Just for fun I tried installing Topstyle, which is a Windows program, on Linux.

Ubuntu (Linux) has an optional component called Wine. With Wine you can install many native Windows programs and run them on Linux.

I was able to install and run TopStyle without any problems, but I did also find a good native CSS Editor For Linux – CSS Ed.

CSS Ed is free and installable via the Ubuntu Software Center.

Read the rest of this entry »

Installing NODE.js on Ubuntu Linux.

I sometimes describe dynamic web applications (PHP or ASP.NET) as 1 ½ tier applications.

Really all the application logic runs on one server (sometimes the database lives on a separate server with some logic in Stored Procedures) and the browser is the “client”. But in those applications the “client” is really not a client in the client server sense. It’s the TERMINAL.

The more we federate logic in our web applications to the user’s machine (inside or outside of the browser) the more we take load responsibility away from our server infrastructure.

I think NODE.js is a great potential alternative for the server side piece of a real web based client / server scenario.

However, in searching the web you find lots of posts about how to install NODE.js that are pretty intimidating.

I found it very easy to set up on Ubuntu so I thought I’d share the steps in case anyone would find them useful.

You can do the install on Ubuntu 11.10 using the Synaptic Package Manager.

On the Ubuntu Unity tool bar, click on the “Dash home” icon at the top of the bar.

Start typing “Synaptic” to search for the package manager and when it appears, click to fire up the Synaptic Package Manager.

In the Synaptic Package Manager enter node.js into the package search box.

As you see above, select NODE.js (I also selected the developer and debug packages) and then click on the “Apply” button.

When you’re done the Package Manager Dialog should look something like the one above.

Then open up text editor (in the image below, I’m using Geany)

Enter just the seven lines of code shown above which will serve as a test to confirm that NODE.js is installed correctly.



var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('NOTICE : Node.js is Running !!!\n');
}).listen(8100, "127.0.0.1");

console.log('Server running at http://127.0.0.1:8100/');


Now save the file where you want to execute it from.

I saved mine in the default directory for web content (/var/www/hello_node.js)

Once you have saved the file, open up a terminal window and go to the directory where you saved the file.

(Type “cd /var/www” and hit return.)

Then list the directory to make sure you newly created file is there.

(Type “ls” and then hit return.

Assuming all has gone well up to this point, type in the following command and hit return.

“node hello_node.js”

You should see the “Server Running” console trace message from our hello_node.js file as you see in the screenshot below.

Now open your browser (GetfireFox.com) and navigate to http://localhost:8100

8100 is the port we told our little app to listen on.

And there you go. We’re ready to start digging in to NODE.js

I’ll try to add instructions for Mac and Windows in the near future.


HTML5 App versus HTML5 Page – What’s the Difference ?

It’s happened several times this week.

I heard someone say “There no difference between an HTML5 App and a Web Page / Web Site”.

While a web page could be an App, I think it’s a gross over simplification to say that they are the same thing.

Fundamentally, an HTML5 App should be more that simply a saved web page.

Yes, the HTML5 Off-Line API lets you create an application manifest to specify assets to be downloaded so that you can access those assets when the host device is not connected to the internet.

I clever application will understand when no network connection is available (See navigator.OnLine) and will tailor it’s behavior based on the network state.

Supporting “sometimes connected” experiences will likely require slightly more complex architectural design too. For example, web “sites” that work with data simply don’t work if the browser connection to the internet goes away. A line of business App that supports both connected and disconnected scenarios could determine the network state and, if not connected, store application / transactional data locally and then sync when a network connection becomes available.

Though that work flow and the eventing mechanism to support it is non-trivial, it can be abstracted into a common data I/O layer.

As you think about Apps supporting different network states you will think of any number of scenarios where you would implement custom logic  for on-line and off-line conditions.

Consumer research constantly tells us that consumers have very distinct, and different, perceptions of what an “Application” is and what a Web Site / Web Page is.  Apps should have a host integrated presence. For example, on most hosts I should be able to launch the application from a shortcut or icon. A process manager (like on Windows of Linux) should know the App identity.

Another big part of the intended App experience is the idea that we can write an application one time and run it on any device that we choose. As an industry, we have been trying to accomplish this forever.

Using “Web Standards Technology” we will define our user interface structure with HTML and write our imperative client logic in JavaScript.

We can write different CSS styles to custom tailor the aesthetics to whatever devices we want without touching the logic.

The “App” can be served up from a server and run ion a browser or run on the desktop using a Web Run Time.

Applications that have a server interactions will speak HTTP and JSON or XML so you can implement that data access (and any additional server side logic) in pretty much whatever language on whatever platform you like. This model solves another problem that we are always trying to solve and that is turning the World Wide Web back into a real Client / Server Network by federating real logic to the clients computing device thereby taking as much load as possible off of our servers.

The cross platform nature of HTML5 / Standards Based Technology has become important in a way that it has never been in previous generations of computing.

A decade ago cross platform meant writing your application once and being able to run it on Windows and Unix. The “platform” we were talking about was really the Operating System. Sure the hardware was different, but to the application developer the underlying hardware didn’t matter. This is no longer true and the difference between hardware hosts is greater than ever before.

Good applications will sometimes need to offer different functionality on different devices and will sometimes need to implement some features in a device specific manner in order to offer the same experience no matter what device the application is running on. Since it is commonplace for users to own and use multiple different devices to access the World Wide Web it will be important for developers to make their applications experience as similar as possible across devices.

Take, for example, an application that helps the user find something close to them. If the App is running on a phone or other 3G/4G enabled device that device will have a GPS built in to the hardware. If the App is running on you Mac Book Pro (or other laptop) it’s not likely  that a GPS will be present so the developer will have to provide an alternate mechanism for any geolocation functionality.

To do this I could use the GPS is there is one available on the host device but us an IP based Web Service if the device has no GPS but is connected to the internet.

If you are wondering how you would get access to that GPS, or,  for that matter camera, mic, or any other device specific hardware, well I’m glad you asked.

THAT is what the Web Run Time (or WebRT) will do.

Today’s modern browsers create a “sandbox” to limit what code delivered from the Web is allowed to do on the host machine. This concept of restricting the functionality of “untrusted” application code is not unique to browsers. Adobe AIR & Flash, Sun /Oracle Java, Microsoft .NET and many other technologies do this sort of thing.

The “Web Run Time” will (eventually) have a collection of standard APIs that expose all of the common hardware types that applications developers will need access to in order to build rich applications using Standards Based (HTML5/CSS3/JavaScript) Technology.

And the Web Run Time will free the developer from the browser “chrome” so an App will look like (and be) it’s own thing – and not just something the user can use inside Firefox or Chrome or IE.

So, maybe it’s just me, but I believe that thinking about HTML5 based “Apps” as simple HTML pages (that may get cached off line) is a pretty narrow view of what the next generation of Web powered applications could look like.


Speaking at Conferences – a New Beginning !

On the right side you see badges from the conferences I was involved with at Microsoft.

On the left – my first badge as a Mozilla employee.

I’m leading a developer engagement initiative at Mozilla that is focusing on “App Building” using HTML5 and other standards based technologies.

Got a conference? Let me know !!