Save the Developers!

logo.gif

I know sometimes it seems far fetched, but I want to tell you that developers are also humans. Flesh and bones, real humans. YEAH! I mean… Who would have thought, right?!

Anyway, every web developer out there has an ache, and that ache is called Internet Explorer. To you, the user, IE might not be such a big deal. At most, it’s an easy way for viruses and spyware to infest your computer and steal and destroy all your personal data. But for the developers IE, especially IE6, is the most prominent source of frustration.

Why is that, you ask? That is a very good and relevant question. You see, web pages as you see them are built using a conundrum of technologies at their core: HTML, CSS, Javascript. They are all backed by standards issued by official bodies which specify how these technologies work and what are they capable of. Standards are important because they guarantee that webpages will look and behave exactly the same on different browsers.

So what is the problem then? The problem is that since the early years Microsoft implemented these standards into their browsers in a very loose form and added proprietary extensions to them. Because of the huge market share Microsoft has (and had) on the OS market they pushed Internet Explorer onto customers and acquired a considerable share on the browser market as well.

Companies started developing websites using the crippled implementation of the standards for a number of years because of IE’s 96% market share with complete and utter disregard for the actual standards. Years later, many other alternatives surfaced, alternatives that supported the original standards to a higher degree, but websites developed for the old and grumpy IE6 were incompatible in some parts with the standards supporting browsers: layout would be all wrong, behavior handled by Javascript would be erroneous and accessibility would be reduced to a minimum.

When IE6 started losing market share like a sieve Microsoft developed Internet Explorer 7, which allowed for better standards support, but is still inferior to the latest generation browsers (debatable, some might say, but I will hold my ground with this one: IE7 is the worst in terms of performance, usability, extensibility and standards support next to Firefox, Opera and Safari).

So why didn’t we, the developers, shun IE6 altogether? Because people still use it. We can’t just ignore those people because lots of us do contract work for other companies which ask us to support this legacy browser along with its modern successor because of their market share. Companies cannot just ignore 20-30 percent of their visitors so they ask the developers to tweak their websites to work on the old and crippled IE6 as well as on the modern browsers and that, my friend is the exact problem that’s killing us: you sometimes end up spending up to 30% of the development time making the site compatible with IE6 by using nonstandard, proprietary, incorrect or just plain wrong methods, attributes, hacks or properties.

Can you imagine how that feels? Spending 30% of the time only to get the damn site to work on a 7 year old browser which continues to surprise you with its stupidity every half-second you work with it? It feels like you would want to be locked in a windowless room armed with a chainsaw together with the IE6 team which is cuffed on the floor. That is how bad it feels, without much exaggeration.

If you’re still using IE6, please, try a newer browser. It helps you, because you won’t be getting a spyware or virus colony every time you visit a questionable website and it helps us, because we can focus on making the web a better, more beautiful place.

Wouldn’t it be nice if we could spend our creativity on improving the web instead of pulling our brains out to achieve backward compatibility with a horrendous browser?

You know it would. So please, if you’re using IE6, visit the SaveTheDevelopers website and upgrade to whatever your heart wants.

Ubuntu Feisty Fawn soon to be available on ShipIt

Yup, Ubuntu Feisty Fawn is expected to be available on ShipIt soon. Three cheers from that, and let’s hope there will be no more “no root filesystem” bugs around.

Ubuntu Feisty Fawn soon to be available on ShipIt

In case you didn’t know, through the ShipIt service you can order for free Ubuntu CDs, which in turn you can share them with friends, coworkers and the homeless. And some others more.

RealVNC: No configured security type is supported by 3.3 viewer

I`ve been messing around with the idea of writing a mobile VNC client in J2ME lately, and I came across J2ME VNC which is exactly what I’m trying to do. Unfortunately the source is downright ugly, I might add. Anyway, I was trying to make it connect to RealVNC Server 4.2.x, Personal Edition and I was greeted with the aforementioned error:

No configured security type is supported by 3.3 viewer

This is caused by the fact that you have check encryption to be “always on” on the security tab of the VNC Server. Unchecking it will make J2ME VNC connect to the server. I’m pretty disappointed with what it offers. Anyway, happy development.

Yahoo Pipes (or Tubes, for you tech savvy senators)

I came across Yahoo Pipes today, and it’s a very fun to use service. It has been previously covered on Slashdot a couple of days back, but it was inaccessible at that time. The error message was quite a pun:

Our Pipes are clogged! We’ve called the plumbers!

What is Yahoo Pipes?

“Pipes is a hosted service that lets you remix feeds and create new data mashups in a visual programming environment. The name of the service pays tribute to Unix pipes, which let programmers do astonishingly clever things by making it easy to chain simple utilities together on the command line.”

I think that what best describes Pipes is “a service that allows you to waste hours in front of the computer, not getting bored a single second”. From my point of view, Yahoo’s services always blew. The sucked so much with their intrusive ads, unnecessary bling-bling and sluggishness, but with Pipes they earned their respect in front of me.

What can you do with Yahoo Pipes?
Lots! The principle of pipes back in the Unix days, for those of you sinners who did not take the time to read The Art of Unix Programming, was that each program’s output is to become another program’s input. If you ever used Linux you most probably used the pipe character |. Take for example the command

cat log | grep error

The output of cat (the contents of the “log” file) is sent to grep (grep helps you filter input data for specific conditions) which outputs all lines from the input which contain the string “error”.

This very principle is applied to XML files (most often RSS feeds): it takes the input from one place, processes it, and it sends it to the next element in the mashup. Here’s an example: you can take the RSS feed from this blog or Digg, send it to a “For each: Replace” component which also contains a component of Flickr. The result would be a feed with images from Flickr which are related to the initial feed items.

Additionally, Pipes provides a content analysis component which extracts the most relevant words from its input. For example, for this post the most relevant words would probably be Yahoo, Pipes and Unix.

Bugs?
You’re joking, right? Lots of them, mainly with the For each: Annotate. This component should allow you to add content to your each of your initial items. Unfortunately I could not get this to work properly, and neither did others it seems. Other bugs surfaced during the last hour I’ve played with Pipes but, of course, I forgot all about them :)

This sounds so cool but I have no cool ideas
I came across Frantic Industries’ 5 cool ways to use Yahoo! Pipes post. Check it out, it mentions among others how to create a Figg, Freddit or Flast.fm mashup.

Happy mashups everyone!

Removing the serialVersionUID warning in Eclipse

Looks familiar?

The serializable class RTFDocument does not declare a static final serialVersionUID field warning

By default Eclipse warns you about not declaring a serialVersionUID for any serializable class you write. But what is the serialVersionUID and what’s the use of it?

http://www.javapractices.com/Topic45.cjp:

The serialVersionUID is a universal version identifier for a Serializable class. Deserialization uses this number to ensure that a loaded class corresponds exactly to a serialized object.

http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html:

The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization.

If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender’s class, then deserialization will result in an InvalidClassException.

A serializable class can declare its own serialVersionUID explicitly by declaring a field named “serialVersionUID” that must be static, final, and of type long:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification.

However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization.

Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class — serialVersionUID fields are not useful as inherited members.

But how do you remove the Eclipse warning regarding the serialVersionUID not being declared for your serializable class?

Go to “Window” > “Preferences”. Type in the upper left search box “errors”. This should filter the options displayed. Browse the tree to “Java” > “Compiler” > “Errors Warnings”. Choose the “Potential programming problems” block and set the first option to “Ignore”. Hit the “Apply” button with sufficient thrust to cause it to succumb to you, the Eclipse master of them all n00bs.

Voila. You want a picture with that?

ignore_serialversionuid_warning.PNG

Random words, numbers and characters with Javascript

I needed a fast and easy way to generate a couple (5000) of strings containing random characters and I came with the following:

function randStrings(howMany, howLong) {
// define a string with valid characters
var characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"+
"abcdefghiklmnopqrstuvwxyz";
for (var i=0;i<howMany;i++)
{
var word="";
for (var j=0;j<howLong;j++)
{
var rand = Math.floor(Math.random() * characters.length);
word += characters.substring(rand,rand+1);
}
document.writeln(word);
}
}

Install Flash Player 9 (beta2) in Ubuntu Linux

I remembered that I read a news item a couple of weeks ago about Adobe issuing a beta version of their Flash Plugin for Linux and I decided to give it a go. The main reason was that I could not view my Google Analytics stats and graphs otherwise.

To download the Linux Flash plugin head to http://labs.adobe.com/downloads/flashplayer9.html and download the archive (to your desktop, home folder, doesn’t matter). Unzip it, either with the default archive manager (File Roller), or by issuing the following command in a terminal after cd`ing to the folder where you downloaded the plugin:

tar -zxvf FP9_plugin_beta_112006.tar.gz

Replace “FP9_plugin_beta_112006.tar.gz” with the appropriate filename.

You can install the plugin as root or just for yourself. To install as root copy libflashplayer.so to the main Firefox plugin directory:

sudo cp libflashplayer.so /usr/lib/firefox/plugins/

To install just for your own user copy the plugin file to your ~/.mozilla/plugins/ directory:

cp libflashplayer.so ~/.mozilla/plugins/

If you used Automatix to install a Flash Player plugin you can safely overwrite that file.

You should not have any instances of Firefox open during these operations. To remove the plugin simply erase the libflashplayer.so file:

sudo rm -f /usr/lib/firefox/plugins/libflashplayer.so

if you installed it as root, or

sudo rm -f ~/.mozilla/plugins/libflashplayer.so

if you installed it in your home directory.

Ow, Flash sucks.

Ubuntu 6.10 installation - No root filesystem error

Okay, somebody made a boo boo. I tried to install Edgy Eft today and after I manually partitioned the disk the installer kept his own side and insisted that I had chosen no root filesystem. Ow, really?

No root filesystem

I quickly scoured through Ubuntu Forums and found the following solution:
Before you start the installer, hit Alt+F2 and type in

sudo gedit /usr/lib/ubiquity/ubiquity/validation.py

Gedit should start with that file open. Scroll all the way down to the bottom, and look for the next to last if statement there:

if not root:
result.add(MOUNTPOINT_NOROOT)

Change it into:
if not root:
pass

Be careful now, what you’re editing is a python file and in case you didn’t know python is strict about spaces, so make sure to leave the indentation as it originally was.

If you start again the installer that bug should go away, but be careful to select a root partition because no validation checks will be made any more so unpredictable results may be yielded.

Here’s the original post in the forums: Kubuntu 6.10rc Installation - “No root filesystem”

This bug is in the Known Issues list in the Edgy Eft Release Notes. It’s a really sad thing it slipped in. Here’s what it says: The advanced partitioning mode of the installer on the Desktop CD has trouble re-using an existing root file system, and will incorrectly claim “No root file system”. Since you must reformat the root file system for use by the installer in any case, you can easily work around this problem by deleting and re-creating the partition in question in the advanced partitioner. https://launchpad.net/bugs/67130.

Obviously, that’s crap.

TIOBE Programming Community Index for November 2006

I was scouring Digg this morning and I came over this one. I’ve been tracking it on and off for a while now and I can see two very interesting new-comers, Ruby and D. For those of you who don’t know what D is check out the wiki.

The TIOBE Programming Community index gives an indication of the popularity of programming languages. The index is updated once a month. The ratings are based on the world-wide availability of skilled engineers, courses and third party vendors. The popular search engines Google, MSN, and Yahoo! are used to calculate the ratings.
Read the rest of this entry »

iriver u10

Ladies and gents, meet u10:
324_1.jpg 73.jpg iriver-u10.jpg iriver u10

What’s it got:

  • color LCD with dynamic GUI (2.22 inch 260,000 color QVGA TFT-LCD)
  • MP3, WMA, ASF and OGG Q10
  • FM radio
  • voice recording (and FM recording)
  • flash games
  • USB 2.0
  • MPEG4 movies
  • 2GB
  • plays up to 28 hours

After a week of using it here’s the pros and cons on this one:
+ long battery life
+ plenty of space for music
+ quality headphones
+ small and light
+ looks cool

- cannot attach it to a string or something to wear it around your neck
- hard to manipulate it if it`s in a pocket
- way too tender
- video eats up a lot of battery
- the software it comes with does not allow you to convert movies

To convert movies I came across iriverter and BADAK both of which are actually frontends to Best Thing Ever(tm), mencoder.