My name is Juri Strumpflohner and this is my technical blog. I'm a software architect, .Net, Android, Web and Java dev, TDD and best practices promoter and martial arts practitioner.

Recent Posts Subscribe

Dear reader of Juri's TechBlog,
I moved my blog to a new domain and a new hosting solution as well. I'm now blogging on juristr.com.

Cuzillion - High performance web pages testing

I don't want to write much (I'm too lazy today :) ), but I just flew over my GReader feeds and disovered the following interesting post. It describes an open source tool written by Steve Souders, member of the performance group at Google, which lets you create combinations of webpages in terms of their components (CSS, images, iframes, scripts, etc...) and test them for their performance (on different browsers).

Here's his blog post: http://www.stevesouders.com/blog/2008/04/25/cuzillion/
...and here the tool itself: http://stevesouders.com/cuzillion/

Extended view: full focus on readers

I recently took a critical look at my blog and started to plan some changes. Today I'm "releasing" the first one, let's say under the theme "full focus on blog readers". The outcome is "extended view" which allows my blog readers to get the full blog-page-width for concentrating on reading the post itself.
You can click on the link extended/normal view on the semi-transparent bar on the footer. This will start a JavaScript which lets the right and left sidebar disappear and extend the central post area. Another click on the same link restores the default view. For realizing this I used the prototype and scriptaculus JavaScript libraries.
It works on Firefox, IE and Safari. Safari for Windows doesn't render it so nicely, but at least it works :)

Fighting with cross-browser incompatibilities

If you ever have done some web programming stuff and if it may have been just to style a plain old static HTML page with some CSS I'm sure you already had to tackle with absurd cross-browser incompatibilities. Since I started with this blog about more than a year ago, I added a lot of javascript for enhancing its functionalities. Being able to provide a continuous looking throughout the most common browsers such as Internet Explorer, Firefox and Safari is quite a hard task. You create a script and make it work on Firefox and you can be sure the script or even others won't work on Internet Explorer.
Currently I'm for instance trying to integrate a small speech bubble on my blog profile (see link "What am I doing?" on the left) for displaying the last twitter entry. It already works more or less satisfiable on Firefox and Safari, but it doesn't on IE.
At least for Firefox there exists a nice "must-have" tool called Firebug. You have to check that out, it's great. However most of the problems usually lie on the IE side, where you don't have such powerful debugging tools in place. So since during the last months I just hacked in new changes such that they worked on Firefox, my site doesn't get rendered that nicely on IE (I'm sorry for that) :( . I'll see to fix that as soon as I'm able to.

Finally, I got Google Docs offline access

I don't whether you've heared already something about Google Gears? Summarizing shortly it is the possibility of letting modern web ajax applications work offline. Sounds strange to you, letting an "online" web application work offline :) Well initially you may thing "why build online apps to make them work offline?", but if you get more in contact with it, it is a great thing for enhancing your web-app. Gears is basically a framework (build by Google) which is installed as Firefox extension. When working offline, the data is stored inside an SQLite DB and later when the user goes back online, it again syncs this data with the main server's database. The best of all: there exists an API which lets developers integrate it also on their own sites. Here are a couple of links related to Gears:

Google Reader was the first Google service which integrated Gears successfully in order to allow you to read your RSS subscribed feeds also when you're offline. There is an explicit button for downloading all your feeds for local access:
If you click on it, the downloading process will start:

Then, about 3 weeks ago, Google announced to roll out offline access also for its office service Google Docs. GDocs already experienced a lot of cool and useful updates recently. For instance they redesigned the menu- and toolbar completely and made it more "office" like and they added Gadgets sharing, charts and edit notifications to Spreadsheets:
The announcement of the offline access is for sure one of the most valuable features as I think. I mean GDocs is quite nice, but what if I'm not connected to the web. I cannot use it, and neither access my saved documents. But now with offline access it will work! The rollout of the new feature proceeds quite slowly and therefore you may not yet have it on your GDocs. I was lucky however :D Today morning when I switched on my notebook for quickly checking my mails, I switched to GDocs and look there! The offline button appeared!! I immediately started to try it out since I had Gears already installed for Google Reader. It just worked great. When you sign in, you'll first see the change on the menu-bar on the top-right corner. When you click on the "offline" link the first time you'll see the following screenshot for enabling the feature:
Once you enable it, GDocs starts to synchronize your documents:
When it's finished, a green icon appears:
Now you can just disconnect from the internet and start working offline on your docs (for now you can just edit documents, no spreadsheets or presentations and you cannot create new docs, just edit).
When you're offline, the icon is replaced with the following one:Moreover inside the document there is an appropriate area which notifies you that you're currently working in offline mode:
When you go back online, everything is synched back up magically. That's also what's great. You don't have to explicitly say: I'm online or I'm offline. Everything is done automatically. Regardless whether you're connected to the internet or not. Just type http://docs.google.com into Firefox's address bar and start working on your documents.

What happened to me however initially was that after I activated offline access the first time, I was no more able (also being online) to open any document. There must have gone something wrong during the first synchronization. So what I did to resolve the problem was to click on the green icon and then on "settings".
On this dialog I clicked on "Reset my offline access" and then I activated it again. Now everything worked fine and without any problems.

The next nice thing which I would even prefer more than GDocs offline access is to integrate Gears into Google Calendar. That would be really useful! I already tried the newly added Synchronizer for Outlook, but it doesn't work very well, since it just allows you to synchronize your main calendar and not any secondary one you added and then there are nearly no options for personalizing the process. For instance there is no way for saying to just synchronize all the future events. When I activated it, it synchronized me down all my entries of the last 3 years! Therefore I would appreciate to have Gears integrated there. Would be a nice addition.

Twittering :)

Today I opened a new Twitter account. From time to time I got in touch with it and heared people being fascinated about the service. So today I registered for an account. Let's see for how long I'm going on to post to it. The idea of Twitter is quite cool as I think, especially if you have some friends who are using it continuously. In that way it is easy to stay in contact with them.
The simplicity is for sure Twitter's main success factor. The service itself from a technical perspective is really ridiculous and still people like it so much. One of the nicest things is for sure the integration with IM tools or your phone. So you're for instance able to directly "twitter" from your favorite instant messaging tool such as Google Talk or even from your phone. You can read my twitter entries directly from my blog here (see at the right) or at my Twitter page.
Go to Twitter's homepage if you want to read more.


Finally, a new GTalk version

I don't even remember for how long Gtalk hasn't experienced any update. While the Gmail Chat received the capability to be "invisible" and the GTalk Gadget version a "group chat", many new emotions etc., the desktop version of GTalk was not touched at all.

Now, finally a new GTalk desktop version appeared. It seems as if they decided to completely rewrite it. The new version can be found at the Google labs page since it is still a labs product.
Differences to the old desktop version are the following:
  • improved design regarding the application window and notifications
  • Calendar notifications with snooze function
  • Group chat
Still missing features which have been present in the old version:
  • File transfer
  • Voice calls / Voice mails
  • a lot of preferences such as styling the appearance of the chat-window
If you actually compare the new Gtalk labs edition with the Google Talk Gadget you'll notice no difference.
I suppose the new client is just a wrapper for the online GTalk Gadget version and it actually makes also sense. In this way Google would solve the problem of having to develop two different versions of the product (desktop client and Gadget). They could work on one product (regarding the part of the instant messaging) and updates would automatically reflect on both products. In this way the desktop client shouldn't be any effort to develop. Moreover I hope that in this way they're also able to provide an OS independent client.
Here are some further screenshots:



C# refresher

Recently I changed work and am now employed at the SIAG, a local informatics company which operates mainly for the public administration sector. Today was my 3rd working day and I'm currently getting some intensive training for being able to join the project team as fast as possible. Since today I started to do some C# experiments for refreshing my knowledge, I thought that the following exercise (I did) may be interesting for someone of you. I - as a Java developer - had some difficulties initially, but the exercise is very useful for understanding how the inheritance etc. works in C#. The exercise is the following:
You have the following classes which MUST NOT be modified. In the main method of the class AgentSmith, produce the output "Never send a human to do a machine's job." by instantiating or invoking the available methods of the given classes.
Available classes:

using System;

public interface IWord {
void Print();
}

public interface IWord2 : IWord {
new void Print();
}

public abstract class Base {
protected static string msg = "send ";

public Base() {
Console.Write(this.GetString());
}

static Base() {
Console.Write("Never ");
}

public virtual void Print() {
Console.Write("to ");
}

protected virtual string GetString() {
return "llama ";
}
}

public class Derived : Base, IWord {

static Derived() {
Console.Write(Derived.msg);
}

public new virtual void Print() {
Console.Write("do ");
}

protected override string GetString() {
return "a ";
}
}

public sealed class MoreDerived : Derived, IWord {
public override void Print() {
Console.Write("mach");
}

void IWord.Print() {
Console.Write("a ");
}

protected override string GetString() {
return "do ";
}
}

public sealed class MoreDerived2 : Derived, IWord2 {

static MoreDerived2() {
Console.Write("ine");
}

public new void Print() {
Console.Write("job. ");
}

void IWord2.Print() {
Console.Write("job.");
}

protected override string GetString() {
return "'s ";
}
}

public abstract class Unfinished : Base {
protected new void Print() {
Console.Write("camel ");
}

protected override string GetString() {
return "human ";
}
}

public class Finished: Unfinished {
}
Put your solution inside the main method of the following class:
using System;

public class AgentSmith {
//Never send a human to do a machine's job.
public static void Main() {

//put your code here

Console.ReadLine();

}

}
Try it out, it's funny :)

Building and hosting applications empowered by the Google infrastructure

Today I opened Google Reader and immediately a bunch of Google-related headlines jumped into my eyes: "Google Apps Engine". Having already some ideas in mind of what it could be I "flew" over the news articles and it was actually the thing I've been already waiting for a long time. I was not yet able to test the new Google service, but summarizing it in one sentence it allows you to develop your applications by making use of Google infrastructures such as GFS and Bigtable and to let it be hosted directly on Google's servers. Sounds great, doesn't it?? And by the way, since I've also a Google Apps account with a custom domain (www.js-development.com), it will be great because I've read something that you will be able to assign your custom Google Apps domain to your application hosted over Apps Engine.
At the moment Google Apps Engine is just open for about 10,000 developers for testing. I was lucky to register early enough so I already got an active account. Applications will have to be written in Python but more languages will be added over time (hopefully also support for Java, otherwise I have to dive into Python programming...which actually would be too bad :) ).
Here are some useful links since I don't want to repeat things:

Posts about Google Apps Engine

Apps Engine Links: