Tuesday, March 31, 2009

Skype for iPhone Mini-Review

Skype just released a native client for iPhone earlier this week and I downloaded it as soon as I saw the announcement.

I have been using Nimbuzz for Skype chatting for a little while but it has pretty high latency. I did a quick, non-scientific measurement and the latency can be as high as 2-3 seconds sometimes.

The iPhone Skype, on the other hand, have very low latency and better voice quality. I was a little bit disappointed to find out that I cannot make voice calls over 3G network. However, with the crappy slow Vodafone 3G network speed and monthly 250MB data cap, I don’t think I have missed out too much.

Friday, March 27, 2009

2 Minutes Guide to Twitter

I started using Twitter recently and I really like it. Twitter is basically a website that allows you to micro-blog.  I find the idea of micro-blogging fascinating because a blog takes a lot of time and effort to maintain, whereas writing a micro-blog entry (it’s called a tweet on Twitter) simply takes few seconds.

However, I was quite lost when I first start twittering. I saw many tweets contain strange symbols and I had no idea what they meant. Following are the three most widely used Twitter commands:

  1. @reply – Any tweet started with @<user name> (e.g. “@oscarkuo is a reply”) will be placed in the reply tab of the user’s Twitter home page.
  2. #tags – Tagging helps to organise tweets just like how you would tag your E-mails in your Gmail account or blog entries on your blog. The only difference is that #tags works across everyone’s tweet, not just your tweet. Basically the idea is you put the hash symbol (#) in front of a keyword in a tweet. For example the Twitter update “my #iphone rocks” essentially tagged this tweet with the category #iphone. You can then use Twitter’s search or other community websites such as Hashtags to track these tags.
  3. RT (ReTweet) – This is  basically a way of forwarding a tweet to your Twitter followers. This is not really an official Twitter feature but people place “RT” in front of the message followed by @<user name> to indicate that they are forwarding someone else’s tweet (e.g. “RT @oscarkuo iphone rocks”).

Many people said to me that they prefer Facebook status updates over Twitter. However, to me they serve two different groups of audience. I tweet about tasty foods, funny jokes or good podcasts on twitter. On the other hand, when I want to talk about more private stuff such as work and family I write them on Facebook status updates.

Thursday, March 26, 2009

ItemGroup Gotcha

At work, we have been deploying the latest build from the build server to the test server manually for a while. I know this is not smart but the fact is, it really doesn’t take that much time to copy and paste files from build server to the test server.

Nevertheless, one day I was finally sick of this dumb process and decided to roll up my sleeves to make the build server do this monkey job automatically.  I wrote a MsBuild script, which automatically copies files to the test server from build server after finishing a build and the script below is the simplified version of it:

<PropertyGroup> 
  <Root>$(MSBuildProjectDirectory)</Root> 
  <SourceFolder>$(Root)\Source</SourceFolder> 
  <OutputFolder>$(Root)\Output</OutputFolder> 
  <DeployFolder>$(Root)\Deploy</DeployFolder> 
</PropertyGroup> 

<ItemGroup> 
  <DllFiles Include="$(OutputFolder)\*.dll" /> 
</ItemGroup> 

<Target Name="BuildAll"> 
  <Csc 
    Sources="$(SourceFolder)\MyClass1.cs" 
    TargetType="library" 
    OutputAssembly="$(OutputFolder)\MyClass1.dll" 
    EmitDebugInformation="True" /> 
  <Csc 
    Sources="$(SourceFolder)\MyClass2.cs" 
    TargetType="library" 
    OutputAssembly="$(OutputFolder)\MyClass2.dll" 
    EmitDebugInformation="True" /> 
</Target> 

<Target Name="DeployDlls" DependsOnTargets="BuildAll"> 
  <Copy 
    SourceFiles="@(DllFiles)" 
    DestinationFolder="$(DeployFolder)" /> 
</Target>

When the target DeployDlls is invoked with following command:

msbuild /t:DeployDlls build.proj

It is supposed to call the target BuildAll first due to the dependency, which builds the .cs files and then the DeployDlls target will run the Copy task to copy output files to the deploy folder. This seems to be a pretty straight forward script but it has a major bug in it. It does not work with a clean build.

The problem is that the ItemGroup clause is actually evaluated before any target was invoked. Therefore, when this script is executed against a clean build (i.e. no DLL files in the Build folder yet), the DllFiles item group will get evaluated into an empty array and therefore nothing will be copied at all after the build finished.

To fix this problem, the DeployDlls target must be updated to:

<Target Name="DeployDlls" DependsOnTargets="BuildAll">
  <CreateItem Include="$(OutputFolder)\*.dll">
    <Output
      TaskParameter="Include"
      ItemName="DllFiles"/>
  </CreateItem>
  <Copy
    SourceFiles="@(DllFiles)"
    DestinationFolder="$(DeployFolder)" />
</Target>

This way, the CreateItem task will populate DllFiles item group after the build is finished and right before the Copy task is executed.

Saturday, March 21, 2009

Using Windows Live Writer with Blogger.com

I just happened to noticed today that Windows Live Writer (WLW) actually has built in support for Blogger.com. What’s even better is that upon entering the URL and the credential of your blog, WLW retrieves other details such as styling and labels from your blog.

image

Also, when you tries to publish a blog post with embedded images, WLW will automatically upload these images to your Picasa web albums. I never really liked Blogger.com’s web based blog editor because it is a bit too primitive in my opinion.

My Second First Blog Post

After spending few hours fighting with CSS and tweaking the layout, finally this blog is up. This is actually my second attempt of blogging, my last blog didn't last long and we'll see how long this one will last.

In case you wonder, I based my blog on the 3-column Minima template, which can be found here. As far as I can see it works fine in IE7, Firefox and Google Chrome.

I have to say I am very impressed with how flexible (read generous) blogger.com is when it comes to customising the look and feel of the blog.