Wednesday, May 20, 2009

From HTML to XHTML

XHTML, or eXtensible HTML, is considered to be the evolution of HTML. I believe that the biggest difference between these two is that XHTML is XML, while HTML is, well, HTML. Other noticeable differences are that XHTML can be extended to include new markup (i.e. elements for vector graphics are already available); XHTML is the language of choice for browsers on mobile devices; data written in XML can be easily transformed into XHTML. Do remember that XHTML is backwards compatible with HTML.

How to convert from HTML to XHTML:
- Change the DOCTYPE to (Strict) XHTML.  For example:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

would become

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

- The <html> opening tag needs new attributes: xmlns, lang,
and xml:lang. For example:

<html>

would become

<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
lang="en">

Why do we need both lang and xml:lang? Because depending on
how the XHTML is interpreted by the browser, either of them
might be needed, hence it is considered a best practice to
include both.

- There must be a matching closing tag for any opening tag.
This implies that if you have empty elements, the tag must
end with />. For example:

<br>

would become

<br />

Why do we need a space before the slash? Because older
browsers cannot recognize "/>" without that space.

- All elements must be in lowercase.
- Attribute values must be in between double quotes and have a
value.
- All special characters must be converted into entities.
For example:

& should be &amp;.

Wednesday, May 6, 2009

Parameterized types and bounded wildcards

We know that parameterized types (in Java) are invariant, which implies that, for example, even though Integer is a subtype (subclass) of Number, List is not a subtype of List. Let's see how this impacts you code. Assume we have a class named Bucket declared below:

public class Bucket {
   public void add(E e){...};
   public void addAll(List list){
      for(E e : list) {
         add(e);
      }
   }
}

If you would try to do the following:

Bucket numberBucket = new Bucket();
List integers = new ArrayList();
...
numberBucket.addAll(integers);

you get the error:

The method addAll(List) in the type Bucket is not applicable for the arguments (List).

How can we get out of this? Easy, by using a bounded wildcard type:

public void addAll(List list){
   for(E e : list) {
      add(e);
   }
}

Friday, May 1, 2009

Top 10 most popular U.S. handsets in December 2008

RCRWireless has published a while ago the top 10 most popular U.S. devices in December of 2008. Blackberry Bold and Blackberry Storm (which was released in November) came in at no. 6 and 3, while the iPhone still remains no. 2, but I assume these numbers are limited because of the single-carrier barrier. Topping the list was the Blackberry Curve.

Useful links for all mobile related

mobiThinking has posted a very useful webpage of resources related to the mobile industry, covering news, blogs, guidelines, forums, and many many more valuable information resources. You can read more here.

Friday, April 17, 2009

10 Rules for Writing Safety Critical Code

Gerard Holzmann's Ten Rules for Writing Safety Critical Code specifies rules for developing safety critical code in C, rules that improve software reliability and testability. More detailed descriptions can be found in the June 2006 Issue of IEEE Computer, which can be found here. For me, there are other programming languages out there who may be better suited for safety-critical (and real-time) systems, languages like Ada or Erlang. I believe that one important aspect of such systems is to make sure that the routines invoked will take a deterministic amount of time to complete.

Thursday, April 16, 2009

Android and Symbian on Netbooks

Corresponding to a report by In-Stat, HP is pushing Android into Netbooks. From the Information Alert:

"This solution bypasses the huge memory, storage, and graphics requirements associated with Windows and lowers hardware cost, as well as the software cost. It also addresses the changes in the market. Over the past decade, we've seen two megatrends in electronics – mobility and the Internet. As content and applications migrate to the Internet, these trends will change to mobile Internet and Internet ubiquity. Adopting Android or another open source OS with a custom UI and good browser technology addresses these changes in many specific applications and usage models."

I do agree with the article, and I believe that Android will have a bigger impact on non-smartphone devices (such as Netbooks) than it will have on smartphones.

Symbian is not behind on all this. According to this article, the S60 5th Edition runs on a "off the shelf Intel Atom based motherboard", which means directly on the x86 hardware. The difference is that Symbian runs on x86, while Android runs on ARM.

Visualizing Sorting Algorithms

Here is a website where you can view animations of different sorting algorithms that shows you how they operate, how the preconditions affect the performance of the algorithms, and which one performs better than the other under certain conditions and input sizes. You can also view the source code behind each algorithm. If you are looking for other 'animations', you can find them here, here, here, and here.