Opera to become free?

Opera recently became 10 and they’re having a party next Tuesday. Opera is even older than Windows 95 which turns 10 today.

After 10 years in the market, Opera is still very much a minority browser. It’s the only one of the big browsers which display adverts and then tries to charge you to get rid of them. Oh, and they display Google targeted contextual adverts so I presume they send the URL of every site you visit to Google. Newcomer Mozilla Firefox has been a huge success and currently has a market share of somewhere around 7-8%. Firefox forced Opera to go through quite a UI overhaul in Opera 8.

There is now much speculation that Opera may become free (i.e. full program without adverts for free). This would certainly be a very good move for Opera especially if they’re going to compete with the likes of Firefox and Internet Explorer.

Google Messenger almost dead cert?

Yesterday I posted on the rumours that Google Messenger would launch on Wednesday. A lot more news sites have now been covering this story. Since then, users have discovered the talk.google.com server which seems to be a Jabber/XMPP server. Neowin also claims that some users have managed to connect to the server using their Google Account details. Google executives have also apparently confirmed that Google Talk will be launching tommorow.

It now seems that Google Talk may include VoIP as an attack on services such as Skype and Project Gizmo. And suddenly everything fits into place. Skype is no where near a mainstream service at the moment. Google has huge marketing power and could sell VoIP to the masses. And there’s no doubt they could take on Skype. On the messaging front, Jabber interoperates with other IM networks. I believe AOL have agreed to let Jabber work with AIM/ICQ and there is support for Yahoo and MSN Messenger but one would presume these transports aren’t authorized by Yahoo and Microsoft.

Google Talk could maybe launch with support only for Jabber, AIM and ICQ. In America I believe AIM is a lot more popular than other IM services so users won’t notice missing MSN Messenger and Yahoo! To them, it’ll just feel like a upgrade to AOL’s IM software. In Europe, it may be harder to get a foothold as there is a large base of MSN Messenger users but good marketing could allow Google to erode into the market share. If Google Talk does indeed launch tommorow based on Jabber and continues to be an open protocol, Google may indeed be liberating instant messaging from the dark days of proprietary systems.

By the way, MSN Messenger 7.5 was just released. According to Mess with MSN Messenger, MSN Messenger 7.5 has better voice quality and there is better echo cancelling. Pre-emptive strike on Google Talk, anyone?

Google Maps in Flash

This site has an implementation of Google Maps in Flash. There’s also a Virtual Earth mode. I have to say that I found it much more impressive than the Javascript Google Map interface. Zooming in feels a lot nicer. You can use your mouse wheel to zoom in and out. You can rotate the map by rotating the compass wheel. You can navigate using keyboard arrow keys, the compass points or by dragging the map with the mouse.

When you zoom in, you don’t get a flash of gray – previously downloaded lower resolution images are shown whilst the higher resolution images are loading. The zoom animation is nice.

This is a lot more impressive than the Javascript version. I showed Google Maps to some people who were not web developers. They really weren’t particularly impressed with Google Maps. World Wind and Google Earth however were much more impressive. Flash can allow this. A lot of people who have been praising Google Maps because they use some cool Javascript technologies. The thing is, end users don’t care how it was built – just how well it works.

Sometimes it’s just easier to make an application in Flash than to write huge complex Javascript scripts and then spend a whole day trying to work out why it doesn’t work in Internet Explorer. I do think that there are good uses of Javascript and XmlHttpRequest but developers need to ensure that they aren’t using the technology simply for the sake of it.

New GMail Feature: "Send mail as"

I just got a new feature on my GMail account called ‘Send mail as’.

GMail Options

You can add new addresses from which you can send email from. Google does this simply by changing the From: header send with the email. It’s useful for example for sending emails from work or school addresses or even a spamproofed GMail account address.

Unlike some programs however, GMail does require you to verify that you own the address.

The process of adding a new address to send from:

Step 1 Step 2 Step 3

You’ll have to confirm you own the e-mail address:

Confirmation at Hotmail

You can then send emails from another address using a drop down box.

Dropdown Box

A nice new feature 🙂

Google Messenger this Wednesday?

I feel a strange disturbance. Like a million voices crying out. The collective seems to be regenerating; MSN Messenger seems to be down at the moment. Can anyone get on?:)

Back on topic, the New York Times reports that Google is launching a new communications tool which is “a clear step beyond the company’s search-related business focus”.

Google executives say they plan to unveil on Wednesday a “communications tool” that is potentially a clear step beyond the company’s search-related business focus.

While executives would not disclose what the new software tool might be, Google has long been expected to introduce an instant messaging service to compete with services offered by America Online, Yahoo and MSN from Microsoft.

There’s been speculation about Google IM for a long long time and it makes a lot of sense since they have Blogger, Gmail, and Orkut. I also can’t think of many communication tools which can be seen a clear step beyond the search focus. Remember that Google already own an IM client called ‘Hello’. It would make sense to upgrade this into more of a mainstream messaging service. MSN Messenger certainly has done a lot of good for Microsoft – there is cross promotion for the MSN Portal, MSN Search, MSN Music, etc. As Google rapidly expands into new areas, a IM would be a perfect soapbox to promote these new services.

Software Updates

I’ve done quite a bit more on the software today. I do plan on releasing a technology preview sometime but I think we’re still quite a bit away. The blog is going to be the initial focus of the software with a discussion board possibly after that so components are being designed to be generic. In some ways, a basic forum can be seen as just a blog where anyone can start an entry and the main page doesn’t display the whole first post.

Anyway 🙂

Comment Count

The number of comments in a blog entry is displayed next to the entry title on the right hand side. I spent quite a bit of time trying to get this to look right – trying to fit it beneath the date box, getting it to look obvious that the link was clickable, etc. I’m still not quite sure about the hover effect so any thoughts and suggestions would be great.

Paging

Take a look at the bottom of the main blog page. I tried to make the page links as large as was sensible to improve usability (Fitt’s law) without affecting the aesthetics too much. I think it’s quite a nice balance. There also seems to be “something missing” without a bar above or below the page list so it’s currently showing some information such as “page 1 of 3”.

The pager looks better on Gecko browsers than Internet Explorer and Opera so we might want to invest in some rounded corners with images. Again, I’d love your thoughts on the usability and aesthetics of it. Perhaps we could change the status message beneath the page numbers when they are rolled over although I’m not sure if this has a practical use.

Date Boxes

I can’t remember exactly when I added these but they’re there 🙂

Commenting

The interface now displays the last editing time of comments. Previous revision data is also available to the comment author (I plan on making this public soon).

Unobtrusive JavaScript

Unobtrusive Javascript is a new way of writing Javascript event handlers. Well, it’s not exactly new, but it’s cool. It’s the separation of logic and content. Instead of adding event handlers into the code itself, they are placed in a external JavaScript file. That file then does some magic such as document.getElementById(‘example’).onclick = function(). We’re moving towards full usage of unobtrusive JavaScript. We’ll probably make Javascript dynamically add the URL and image buttons at the bottom of input boxes so users without JavaScript turned on won’t see any buttons instead of seeing non-functional ones.

Google Desktop 2

I’m not sure if the first version of Google Desktop even came out of beta, but there’s now a new version of Google Desktop. It’s a bit more like the sidebar seen in earlier versions of Windows Vista and similar to Konfabulator. There’s the pane on the right hand side of the screen offering you features such as news, web clips, a note pad, weather, stocks, photos, what’s hot and stuff.

I think it’s kinda cool. One thing I didn’t like about the original Google Desktop is having to open a web browser to search my computer (not exactly logical) and this version seems to change that and allow a search without opening the browser. Also seems to index MSN Messenger conversations now.

Screenshot

Apparently the sidebar might also be self personalizing. When you click a news item, it’ll influence the type of news items displayed in the future.

PHP: Determining if a server/domain/IP is internal

This application supports FOAF profile import. This was one of the earlier features. It works although I’m not sure how useful it is at the moment. As part of the system, users are asked to enter the URL for a profile in XML format. We take this URL and request it. Before doing that however, we have to check that the URL is on a non-internal publicly accessible server. Without a check, a user could enter a domain on the LAN which could expose data.

Web applications implementing RSS checking, OpenID and other similar technologies should perform these checks. First, a bit of background information.

IP Addresses and Long Addresses

Every IP address has an equivalent long address. IP addresses are in the form of 0-255.0-255.0-255.0-255 giving a total of 4,294,967,296 possible combinations. A long IP address is a number between 0 and 4,294,967,295. Some of you may notice that this is also the 32-bit unsigned integer limit. In other words, any IP address can also be represented as an 32-bit integer. An address such as 127.0.0.1 is much easier to remember than something like 2130706433 so we tend to use them.

It is actually possible to use the long IP address format. If you don’t believe me, try it. If you’ve got a web server installed on your local machine and it’s turned on, try going to http://2130706433/. If you don’t, try Google (1113983336). This doesn’t work with all ISPs although the long IP address for localhost should always work. Try pinging 2130706433 from the command line.

Internal IP Address Ranges

There are several blocks reserved for internal IP addressing. These are 10.0.0.0 to 10.255.255.255, 172.16.0.0 to 172.31.255.255 and 192.168.0.0 to 192.168.255.255. In addition the block 169.254.0.0 to 169.254.255.255 is reserved for automatic private IP addressing and 127.0.0.0 to 127.255.255.255 is only really ever used for loopback so it makes sense to block access to these IPs.

In order to detect whether an IP is internal or publicly accessible, we need to check if the IP address is in this range. It’s possible to use regexps or other string matching techniques but this is more difficult. Instead, we convert the IP address from the dotted format to the long format. Luckily PHP provides us with a built in function to do this.

We need to generate a long format IP for the beginning and end IP for each range and then check whether the IP address are in those ranges by using greater than/lesser than comparison operators.

Here’s some code I cooked up earlier:


<?php

function urlIsPublic($url) {

        
/* Check URL is not private */

        
$parsedurl = parse_url($url);

        
$ip = gethostbyname($parsedurl['host']);

        $long = ip2long($ip);

        if ((
$long >= 167772160 AND $long <= 184549375) OR ($long >= -1408237568 AND $long <= -1407188993) OR ($long >= -1062731776 AND $long <= -1062666241) OR ($long >= 2130706432 AND $long <= 2147483647) OR $long == -1) {

            return false;

        }

        return true;

        // 167772160 - 10.0.0.0

        // 184549375 - 10.255.255.255

        //

        // -1408237568 - 172.16.0.0

        // -1407188993 - 172.31.255.255

        //

        // -1062731776 - 192.168.0.0

        // -1062666241 - 192.168.255.255

        //

        // -1442971648 - 169.254.0.0

        // -1442906113 - 169.254.255.255

        //

        // 2130706432 - 127.0.0.0

        // 2147483647 - 127.255.255.255 (32 bit integer limit!!!)

        //

        // -1 is also b0rked

}

?>

Notice in the code I’ve also checked for ip2long() responding with a -1. This indicates an invalid IP address.

The first few lines take a URL and extracts the domain from it. It then converts the domain name into an IP address for use with the checker.

Registration Page Changes

I have just rewritten some of the registration code and interface. It was one of the older parts of the code and needed a bit of work and I improved the interface to hopefully make it more user friendly.

This image shows the old and new interfaces side by side:

Old and New Registration Forms

This image shows the old registration page in detail.

I indentified several main problems:

  • The page looked “too busy”
  • The eye had to move in two directions – both down and across.
  • The right aligned text was not that easy to read
  • Not clearly separated into separate steps
  • Not very accessible

With the required information, it was modified to make them look more important than the optional information. It is now instantly clear what each field is and what it does – there are explanations for username, etc. Eye movement is primarily downwards. HTML label tags were added to improve the accessibility of the form.

I made a slight compromise by keeping the optional information in the old table format to decrease the amount of vertical space required and because most users will probably want to skip over this part.

Finally, the submit button was modified to look like the submit buttons found in other parts of the site.

Check out the new registration page here

Steve Jobs is not happy!

It seems that Steve Jobs isn’t too happy with the Internet Explorer team for “copying their stuff”. Or maybe he was still fuming at Microsoft holding patents for various iPod features.

Scobleizer:

Anyway, a couple guys walk by our table and Dean says “hey, was that Steve Jobs?”

I check and say “yes.” The trademark black turtleneck and jeans gave him away.

Then I follow him outside and introduce myself. “Hi I’m Robert Scoble and I work at Microsoft and it’s an honor meeting you.” By then Dave and Dean walk up. “I’d like to introduce you to Dean Hachamovitch, he runs the Internet Explorer team and this is Dave Winer.”

He then said something like “cool, nice to meet you. It’s nice to see that you’re copying our stuff.” Ouch.

Also mentioned by Dave Winer