Silverlight, Flash/AIR or HTML5?

update 1: data access and streaming details added with input from Ian in comments!

update 2: HTML 5 offline and local storage added with input from Simone in comments!

It’s often argued that on the web, you can either achieve high reach or richness, but not both. By reach, they mean the number of users who can access the content on your website. On the other hand, by richness, they mean the overall experience in the presentation of the content. This worldview presents a dichotomy where none actually exists. It’s very tempting theory but I believe that it’s a mis-application of the Reach vs Richness theory in the browser space.

Firstly, Flash has attained ubiquity on virtually all browsers (except mobile devices but Flash 10 is coming to Android, Symbian, Windows Mobile and WebOS). The claim that rich user experience is at odds with having to do everything with HTML and JavaScript is an uninformed one.

They argue that you have no choice but to rely on proprietary plug-ins that are inherently non-ubiquitous. Also Flash and Silverlight are both proprietary plug-ins. Modus ponens,  there is no way to deliver richness unless you require users to install Flash or Silverlight. Of course, we know this isn’t true. Flash has already been installed and Silverlight is just something new that’s trying to gain market share. There are some statistics referring to a 25% penetration rate.

That argument aside, the recent news about the emergence of HTML 5 and how it might obviate the need for browser plug-ins have got the developer world boiling. Despite the fact that it’s still a standard in the works, it aims to fill many gaps that are traditionally missing from HTML and JavaScript. In addition, being an industry standard means it has a much higher chance of reaching ubiquity, provided browser vendors do not intentionally create obstacles. In fact, Opera 10 already partially supports HTML5. So are Firefox 3.5, Chrome and Safari. The only guy late to the party is, of course, Internet Explorer.

Let’s explore the feature set to see how HTML5 stacks against Silverlight and Flash/AIR.

Silverlight Flash/AIR HTML 5
MP3, AAC, WMA, WMV, VC-1, H.264 with DRM support MP3, MP4, M4V, M4A, 3GP, MOV, VP6 , H.264, Speex, with DRM support Fragmented: Ogg theora and H.264
new
XAML MXML HTML/XHTML
C#/VB/IronPython/IronRuby ActionScript JavaScript
UI Controls UI Controls Rudimentary UI Controls with 3rd party tools like jQuery UI
GPU processing, pixel shader GPU processing, pixel shader No GPU processing, pixel shader
Offline mode AIR is the offline mode Offline HTTP Cache
Isolated local storage SQLite support for local storage in AIR Native web storage
Data access over WCF, POX and ADO.NET data services, TCP sockets Data access over web services, LiveCycle Data Services, BlazeDS and TCP sockets Data access over JSON
MMS, RTSP, RTSPT, HTTP Streaming RTMP, RTMFP, HTTP Streaming Open web socket but not real time streaming

SharePoint Variation Doesn’t Mix with ASP.NET Web Parts

Found this gem today, nowhere in the SDK document did Microsoft mention this. They have a comparison table in choosing between ASP.NET or SharePoint web part as the base class but not this!

Create a custom ASP.NET 2.0 Web Part Create a SharePoint-based Web Part
  • For most business needs.
  • To distribute your Web Part to sites that run ASP.NET 2.0 or SharePoint sites.
  • When you want to reuse one or more Web Parts created for ASP.NET 2.0 sites on SharePoint sites.
  • To use data or functionality provided by Windows SharePoint Services 3.0. For example, you are creating a a Web Part that works with site or list data.
  • When you want to migrate a set of Web Parts using the SharePoint-based Web Part infrastructure to Windows SharePoint Services 3.0.
  • To create cross page connections.
  • To create connections between Web Parts that are outside of a Web Part zone.
  • To work with client-side connections (Web Part Page Services Component).
  • To use a data-caching infrastructure that allows caching to the content database.

Why Isn’t There 13 Hive?

There is 60 Hive for SharePoint 2003/WSS 2.0. Then there is 12 Hive for SharePoint 2007/WSS 3.0. In the coming months, we will have 14 Hive for SharePoint 2010/WSS 4.0. So where is 13 Hive?

Apparently, the product team is sensitive enough so that there isn’t going to be a code name called Office 13 due to its unlucky nature. Therefore, Office 14 follows Office 12 and its corresponding server product, SharePoint 14 will have 14 Hive.


SharePoint Explorer View Error: “Your client does not support opening this list with Windows Explorer.”

Despite the advances in the browser space, a majority of the corporate computers are still on Internet Explorer 6. Viewed with the fact that the current version of IE from Microsoft is already 8, and further that SharePoint 2010 will not support IE6, this is indeed backward.

A colleague of mine encountered the problem of not being able to open Explorer View on her machine. Initial checks include the version of IE (running SP2), Trusted Sites Zone and ActiveX restrictions. There were nothing suspicious. Also, the WebClient service was running fine on the her machine.

explorer-view

I came across this KB article that says IE6 has problems opening Explorer View when the URL is more than 100 characters. This was indeed the case. Apparently, she could either upgrade to IE7 (or IE 8 I presume) or apply a hotfix. (Note that this hotfix requires you to contact Microsoft Premier Support) The new problem was that her machine was already on IE6 SP2. So the hotfix wouldn’t even install. To try my luck, I went ahead to tweak the registry settings as detailed in the same KB article anyway. Voila, it worked!


The Appalling State of Small Investors on the Barclays Trading Platform

entry2

It’s widely held that timely access to the market is not essential to making investment decisions. The general buy and hold strategy do not require an investor to monitor the stock price on an intra-day basis (not even on daily close, some would say)

However, when you only have a very small amount of cash to trade in stocks, every second counts. I don’t like the idea of buying into unit trusts o

error1

r mutual funds as they tend to do no better than the index and charge hefty fees. I’m skittish with ETFs as my understanding of that asset class is rather basic.

Barclays MarketMaster is a free trading account that imposes no inactivity fee if you make a transaction every quarter. Being free, I doubt if I can complain much about the appalling state of its service. Time and again, when I try to deal, it will time out or throw me to a more nasty error page like the one on the left.

They do have a non-free tier 2 service called BARX. Is this a problem with the so-called freemium model? There is very little incentive to keep improving the basic service as they get revenue when a customer switches to the paid service.

I do have another account with SelfTrade (ultimately owned by the Société Générale Group). Having used Barclays for the past 2-3 months, I really don’t want to switch yet. But if this keeps happening, there may be no choice.


To Tweet or to blog, That is the Question

There has been so much media coverage about Twitter recently. If Stephen Fry, Oprah Winfrey, Britney Spears and Shaquille O’Neal are on twittering, then Twitter has really gone mainstream. Some early adopters have shown emotions of disdain and disgust along the line like “I really liked this band xxx before it’s gone main stream”. By analogy, would we quit in disdain when Paris Hilton is spotted using Ubuntu 13.04?

Personally for me, I tried not once, but twice to really get Twitter. But I have 2 grudges against it.

  1. Indiscriminate broad-casting: there are people out there who tweets way too much. Every time you refresh, you end up seeing a full screen of updates from them.
  2. Lack of original content: a lot of tweets consist of links after links. So the experience is not unlike gaping at a massive link farm

The 140 character limit is a joke for people who don’t use SMS to tweet. Why should there be such a limit when the majority of the tweets are sent from desktop/mobile clients. Detractors may say I just don’t get it. But why should we trade thoughtful writings for timeliness? In fact, to say there is such a trade off is overestimating the quality of content on Twitter. The majority tweets are meaningless and useless updates. Even more sinister is the action of RT (re-tweet). When something interesting happens, people just RT one another and fill up the space with identical content. Had those tweets been eliminated, there may be some space left to expand the 140 character limit?

Blog, on the other hand, tends to focus on quality and originality. I’m sure there are blogs which merely re-posts. But more often than not, there are authors’ take and opinions.

However, tweets can also be thought of as a stream of status updates and not meant to be read tweet by tweet. Viewed in this light, maybe I should really be less harsh at it.


Windows SharePoint Services Web Application Stuck with Upgrading

As the Microsoft enterprise land explode into collective cheers with the release of SharePoint 2007 Service Pack 2, not everyone is happy. That is, if you encounter problems in upgrading your dutifully patched deployment to the latest iteration.

upgrading

So the web application service is stuck at upgrading. Rebooting the machine makes no difference and I suspect somewhere in the SharePoint_Config database, the value which indicates upgrading process is running is causing this to happen. Take a step back, this is a classic example of non-atomic operation. Two operations, writing the status to the database and upgrading the services happen in two steps and yet when upgrade fails, the value in the database is not rolled back. Anyway, someone showed how you can get rid of this by running the stsadm command.

stsadm -o provisionservice -action start -servicetype SPWebService

With this, the status is back to Started. Good, but when I tried to run SharePoint Products and Technologies Configuration Wizard, it complained about a difference error.

conflict

Apparently, you can solve this problem by another stsadm command but it didn’t work for me.

stsadm -o setproperty -pn command-line-upgrade-running -pv No

In the spirit of discover-yet-another-command-line-operation, I just tried to force an upgrade. With SharePoint, the force parameter appears to be a way to forcefully bust through any checks from the databases and just do it.

psconfig –cmd upgrade -force

Ta-da, this marks the end of another day in the SharePoint land. Not for much longer though, SharePoint 2010 is coming soon.

version


Book Review: The Girl with the Dragon Tattoo

The Girl with the Dragon Tattoo, or its Swedish name Män som hatar kvinnor (Men who hate women), is a page-turning mystery/crime novel that keep you going into the small hours day after day. At least that’s what happened to me last month.

I picked up this book from Borders due to pure coincidence as the book was on its half-price promotion. Every week, the local Borders store will feature 2 books on half price. I find it to be a god-send. I have a problem picking fiction books and this promotion lowers the risk of buying rubbish tremendously.

In any case, the book is about an investigation into the murder/disappearance of a young girl that happened 40 years in the past by a finance journalist. The story happened in Sweden; a country that brings the image of blondes, wealth, IKEA and Vikings. In early part of the book, the author quotes some grisly statistics about violence against women that’s rampant in Sweden. This story surrounds this theme and it keeps recurring in more than one female characters. As you might have guessed, our girl with the dragon tattoo is not spared. In fact, several scenes around her certainly require parental advisory.

As a reader, sometimes you might feel that very little progress is made in the sleepy and wintry town of fictitious town Hedestad, just a few hours north of Stockholm. And yet, it’s still a page-turner. How can that be? For me, part of the reason comes from imagining the weather conditions in winter in the far north. I’m particularly fascinated with reading stories that happened in extremely cold places. Also, just keep finding out what would happen to the lady with the dragon tattoo is incredibly gripping too. Then of course, who really killed the young girl and why?

All in all, I highly recommend this book to anyone who’s intrigued about mystery/crime novels.


Posted in Uncategorized. Tags: . No Comments »

Trading Stocks for Fun (and Potentially Profit)

Lately, the stocking market is having very irregular movements (financial geeks will call this as high volatility ) due to rapidly swinging investor sentiments. On 2008/10/15, Dow Jones Industrial Average (DJIA) lost 773 points (-7.87%), making it the 9th biggest percentage loss in index’s history. Two days before that, on 2008/10/13, it made the 5th largest one-day gain of 936 points (+11.08%). You can find the statistics here

The performance of different sectors vary widely but most of them have been down significantly since the credit crunch started in 2007. Interestingly, the banking sector, which takes most of the blame on coming up with incredibly complex mathematical formulae by outsourcing risks, is the also the one that appears to be recovering swiftly. Well, at least for banks which are better run than its peers.

So, for the past 2 months I’ve been playing with £1000 to try and understand a bit of the FTSE market through . Here are the trades so far.

Deal Date Type Stock/Fund Name Quantity Price Debit Credit Profit
13/03/2009 Buy BARCLAYS ORD GBP0.25 1246 78.77p £999.33 -£999.33
16/03/2009 Sell BARCLAYS ORD GBP0.25 1246 85.02p £1,046.45 £47.12
20/03/2009 Buy HSBC HLDGS ORD USD0.50(UK REG) 276 361.47p £1,015.60 -£968.48
23/03/2009 Sell HSBC HLDGS ORD USD0.50(UK REG) 276 402.03p £1,096.65 £128.17
20/04/2009 Buy BARCLAYS ORD GBP0.25 474 210.68p £1,016.57 -£888.40
24/04/2009 Sell BARCLAYS ORD GBP0.25 474 233.11p £1,092.00 £203.60

That’s a tidy profit of £203.60 over a period of 40 days. An interesting observation is that when the market is good, everyone can be a winner. I really don’t think the gains I made has anything to do with my stock picking skills but I don’t have any. However, as I remember from reading somewhere that most successful investors are those who see the upcoming sector instead of individual companies, I think the whole banking sector as a whole is really cheap at the moment. The same can perhaps be said about the automotive industry as well. But the story of Detroit automakers dominate the news and that doesn’t make it a particularly interesting sector to invest in.


Strange Syntax of Objective-C No. 2

On the heel of interface declaration syntax we looked at earlier, today I’m going to talk briefly about properties.

Officially, Apple calls properties as declared properties. Coming from a C# background, the first thing that springs to mind is declared properties are just like auto-implemented properties in C#. In a way, it’s similar but declared properties can have a lot of different behaviours beyond making them read-only. You can also specify the setter semantic and atomicity (critical in a multithreaded environment).

Creating a property is a two-step process. First you have to declare it in the class interface and then in the implementation.

@interface MyClass : NSObject
{
    CGImageRef myImage;
}

@property(retain, nonatomic) CGImageRef myImage;
@end

@implementation MyClass
@synthesize myImage;
@end

In the snippet, the property’s name is myImage and is of type CGImageRef. The words inside the brackets, retain and nonatomic, are its attributes. It indicates that when myImage is assigned to a new value, its own values should receive a release message while retain is invoked on the new value. nonatomic allows the getter to be interrupted by another thread. This is generally not a good idea unless you want to performance benefit and are sure there is no race condition.

In the implementation, @synthesize keyword is used to let he compiler generate the necessary getter and setter methods.

In this example, the property has the same name as the instance variable but you can specify a different name by specifying something like this.

@synthesize ThisImage = myImage;

In this way, the instance variable is myImage while the property name is now ThisImage.

One last note, in objective-C, you don’t get the dot (.) notation that’s the standard way of accessing instance(class) methods and variables. You have to rely on the notion of message passing syntax.

[theClass myImage];

Assuming theClass is the object of the type MyClass, with the introduction of declared properties, you GET dot notation and therefore, theClass.myImage works. Hooray!!! Except, come on guys, so much for bringing the language to the 90s (or even 80s).