Tuesday, December 31, 2013

2013 In Review (In Short)

#2013 in review:- Work) Little change » Status quo. Life) Pursued » Achieved. I know #2014 will be very different.

Tuesday, December 24, 2013

Convert Any Files to PDF

One common question many asked is "How can I actually convert a document or even image to a PDF file?". In some of my earlier articles, I wrote about converting a webpage into a PDF without installing any tool [option 1, option 2] and also manipulating existing PDF file(s) like merging, splitting, etc with an absolutely free tool.

Today, I just chanced upon toPDF. toPDF provides the capability to convert text documents, presentations, spreadsheets and images to PDF format. Some of its attractiveness include free service and needless to install any tool onto your PC since it is web-based. This free service supports up to 5 files (25Mb max).

Monday, December 23, 2013

10 Tips For An Effective User Experience UX Debrief Meeting

How should one conduct an effective user experience (UX) debrief meeting such that all stakeholders in the team can benefit from and do better in the next round? Userfocus offers 10 practitioner tips for running an effective UX debrief meeting.

  1. Don’t wing it. Prepare thoroughly. Have a plan.
  2. Don’t think of the debrief as a wrap-up meeting — think of it as a springboard to the next step. And make sure UX is part of the next step.
  3. Co-chair the meeting with a lead member of the project team.
  4. Make sure the main decision-makers attend.
  5. Don't give a PowerPoint presentation, and don’t rehash the report. If you have 60 minutes talk for 20 minutes, then discuss for 40 minutes.
  6. Insist that attendees must read the report and prepare comments and questions.
  7. Before you summarize the study findings, ask the team to share what they learned from the study, what surprised them and what usability issues they feel are most important or most serious.
  8. Simplify your message. Focus on just the 5 most severe usability problems. Don’t overwhelm the team by trying to cover everything (they can check the report for those details).
  9. Get consensus on the problems rather than argue over solutions.
  10. Don’t expect or insist that everything must be fixed. Focus next steps on things that can realistically be changed within the budget and timeline.

» The UX debrief: A tale of two meetings | Userfocus

Sunday, December 15, 2013

Security Practices When Making Calls to Server From Client Side

With HTML5 getting more widely adopted and more application logic done on client side, better (a different type) security should be considered to mitigate risk. Nettuts+ discussed some of the measures that can be deployed for just that. The topics are:

  • Don’t Even Think About HTTP
  • Make XSS Less Harmful With Content Security Policy
  • Use Cross Origin Resource Sharing Instead of JSONP
  • Sandbox Potentially Harmful Iframes

» Client-Side Security Best Practices | Nettuts+

Saturday, December 14, 2013

Outlook.com launches automated tool to migrate from Gmail

Microsoft is continuing its attack on Google by launching an automated tool to migrate Gmail to its very own web-based Outlook.com (successor of hotmail.com).

The blog post claims emails, contacts, labels and even calendars can be imported. Immediately after the import is completed, Microsoft will send an email notification to your inbox.

Though I am not a fan of Outlook.com, I thought I should give the tool a try one day for curiosity sake.

Sunday, December 08, 2013

The Essentials of Writing High Quality JavaScript

Nettuts+ wrote an article on some of the essentials of writing high quality JavaScript. It is largely based on a book "JavaScript Patterns" written by Stoyan Stefanov. Though lengthy, I strongly recommend it.

Tuesday, October 29, 2013

HtmlEncode and HtmlDecode In JavaScript

In web development, we often need to encode a string especially input from user so data with potential malicious intention when displayed will be safe. On server side, we can use e.g. HtmlUtility.HtmlEncode (in ASP.NET for encode) and HtmlUtility.HtmlDecode (in ASP.NET for decode).

What if we need one in JavaScript? Here's how to do just that!

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script language="javascript" type="text/javascript">
    function htmlEncode(value) {
        return $('<div/>').text(value).html();

    function htmlDecode(value) {
        return $('<div/>').html(value).text();

    var s = "<b>hello's world</b>";
    var encoded = htmlEncode(s);
    var decoded = htmlDecode(encoded);


Sunday, October 27, 2013

How to give your Web apps a real speed boost?

Few tips published on the The Next Web on how to speed up your website and making sure user experience is not impacted especially on mobile.

  1. Check for unnecessary or oversized images
  2. Don't ignore Android
  3. Consistent measurement
  4. Multitask

The article also introduced a few tools to get you started.

Monday, October 14, 2013

Sunday, October 06, 2013

Use Google Analytics to Track Outgoing Gmail Messages

Very creative use of Google Analytics to track outgoing Gmail messages.

Generate VCard as QR Code Using Google Docs

Should you have lots of contacts to be imported into your phone, it can get pretty time consuming to input one at a time. One time saving tip is to have them entered into a spreadsheet and have them converted into VCard format. Google Docs does have a feature to generate VCard as QR Code which you may then use any QR Code reader to read them.

This article demonstrates exactly just how to do that.

A quick summary:
  1. Create a new Google Spreadsheet

  2. Setup 5 columns i.e. First Name, Last Name, Phone, Contacts, QR Code.

  3. First 4 columns should be self-explanatory. As for the last column, it shall be a formula to generate QR Code. Copy and paste below formula.

    =image("https://chart.googleapis.com/chart?chs=200x200&cht=qr&chl=BEGIN:VCARD%0AN:" & A2 & "%20" & B2 & "%0ATEL;CELL:" & C2 & "%0AEMAIL:" & D2 & "%0AEND:VCARD")

Hope it helps.

What is "Exit Rate" and "Bounce Rate"?

Exit rate

The number of times a visitor leaves your domain from a page, divided by that page’s total views. Generally expressed as a percentage.

Bounce rate

The number of times a visitor enters a domain on a page but leaves before viewing any other page in the domain, divided by the total number of views of that page. Also generally expressed as a percentage.

Friday, September 20, 2013

Understanding Various Image File Types for Web Site

HTML5 Rocks Tutorials published an interesting article on Image Compression for Web Developers, doing detailed explanation and comparison on the various popular image file types for website. It's worth the read.

» Image Compression for Web Developers | HTML5 Rocks

Sunday, August 25, 2013

Lengthy but awesome biography on Marissa Mayer

An unauthorised biography featuring former Googler and now CEO of Yahoo!, Marissa Mayer, published by Business Insider, is a MUST read! The write-up pretty much summarised Mayer's personality as well as her brilliance that make her who she is today.

Read the biography here.

Monday, August 19, 2013

10 Steve Jobs videos you should watch instead of Ashton Kutcher’s ‘Jobs’

Sorry to say this - I actually read several reviews that Ashton Kutcher's movie - ‘Jobs’ were rather poor and this made me changed my mind watching it. The Next Web published an article on 10 Steve Jobs videos you should watch instead of Ashton Kutcher’s ‘Jobs’ and I thought they were excellent to watch!


National Day Rally 2013

Friday, August 16, 2013

5 photo mobile apps to help you look more beautiful

The Next Web made a review on 5 photo mobile apps capable of making enhancements on your photo, making you look more beautiful.

The 5 photo mobile apps are:
  1. Beauty Camera (Android)
  2. Beauty Booth (Android | iOS)
  3. Photo Wonder (Android | iOS)
  4. Beauty Plus (Android | iOS)
  5. Meitu Xiu Xiu 美图秀秀 (Android | iOS)
Let us know how the above help you.

Thursday, August 15, 2013

JAVA: Get MD5 Hash On String

The following demonstrates how to perform MD5 hash on string. For it to run, you will need to import these 2 packages.
  • java.security.MessageDigest
  • javax.xml.bind.annotation.adapters.HexBinaryAdapter
public static void main(String[] args) {
    try {
        String hash1 = computeMD5Hash1("hello world");
        String hash2 = computeMD5Hash2("hello world");
    } catch (Exception e) {

//using HexBinaryAdapter to convert byte array to string
public static String computeMD5Hash1(String plainText) {
    String hash = "";
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        hash = (new HexBinaryAdapter()).marshal(md5.digest(plainText.getBytes()));
        hash = hash.toUpperCase();
    } catch (Exception e) {
        hash = "";

    return hash;

//no library to convert byte array to string
public static String computeMD5Hash2(String plainText) {
    String hash = "";
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] bb = md5.digest(plainText.getBytes());
        for (byte b : bb)
            hash += String.format("%02X", b & 0xff);
    } catch (Exception e) {
        hash = "";

    return hash;

Tuesday, August 13, 2013

VIDEO: How to Coil Cables

The following video demonstrates techniques on how to coil cables such that they can be neat and won't be twisted. Interesting tip.

Friday, August 09, 2013

National Day Parade (NDP) Theme Songs (Consolidated)

28 May 2015: Added theme song for NDP 2015.
20 June 2016: Added theme song for NDP 2016.

Just come of the video compilations used as themes songs for National Day.

NDP 1998: Kit Chan 陈洁仪 -- Home 家

NDP 2001: Tanya Chua - Where I Belong

NDP 2002: Stefanie Sun 孙燕姿 -- We Will Get There 一起走到

NDP 2003: Stefanie Sun 孙燕姿 -- One United People 全心全意

NDP 2008: Joi Chua 蔡淳佳 -- 晴空万里

NDP 2010: Corrine May -- Song for Singapore

NDP 2011: Sylvia Ratonel -- In A Heartbeat

NDP 2012: Olivia Ong, Natanya Tan -- Love at First Light

NDP 2013: Sing A Nation Choir -- One Singapore

NDP 2015: Dick Lee -- Our Singapore

NDP 2016: 53A -- Tomorrow's Here Today

Prime Minister Lee Hsien Loong's National Day Message 2013

Watch Prime Minister Lee Hsien Loong's National Day Message 2013 (English) below. For the transcript, click here.

Google Releases Seven Videos On Typical Manual Spam Actions Received On Webmaster Tools

Google released seven videos for the most common manual action notifications related to spam for websites in your free Google Webmaster Tools. The videos include user-generated spam, hidden text and/or keyword stuffing, pure spam, thin content with little or no added value video, unnatural Links to site video, unnatural links from your site and unnatural Links to site – impacts links.

User-generated spam

Hidden text and/or keyword stuffing

Pure spam

Thin content with little or no added value

Unnatural Links to site

Unnatural links from your site

Unnatural Links to site - impacts links

» Google Releases Seven Videos On Typical Manual Spam Actions | Search Engine Land

Saturday, August 03, 2013

How to Do a Partial YouTube Embed (Custom Start and End)?

Suppose you have a long YouTube video but would like to do an embed only from say first to second minute? It's actually possible with a simple tweak.

The following is the standard embed code (without changing anything) of the PSY - Gangnam Style YouTube from first to second minute.

<iframe width="560" height="315" src="//www.youtube.com/embed/9bZkp7q19f0" frameborder="0" allowfullscreen></iframe>

To do a partial embed from the first to second minute, you will first need to convert the periods into seconds. So it would be from the 1*60=60 seconds to the 2*60=120 seconds. We will then add the 2 new start and end parameters to the embed code. The following is the customised embed code.

<iframe width="560" height="315" src="//www.youtube.com/embed/9bZkp7q19f0?start=60&end=120" frameborder="0" allowfullscreen></iframe>

The video goes like this!

Monday, July 08, 2013

{ prologue } bookstore at ION Orchard closing down sale

{ prologue } bookstore at ION Orchard is currently having its closing down sale. Yes, you didn't hear me wrongly - CLOSING down sale. Looks like high-end bookstore globally is not doing well at all. It must be because of the rising popularity of eBooks.

Don't miss it!

Wednesday, June 26, 2013

Wednesday, June 19, 2013

NEA Singapore Tweets For PSI Updates

Monday, June 10, 2013

MSSQL: Get All Stored Procedures With References to a Table

AFAIK, there is no built-in feature to generate a list of stored procedures that made references to a specific database table. The following help me to do just that.

FROM syscomments sc INNER JOIN sysobjects so ON sc.id = so.id AND so.xtype = 'P'

Monday, May 27, 2013

How to Turn Off Thumbs.db From Appearing?

The auto creation of Thumbs.db files in folders with images can get annoying. Before burning photo albums into DVD-R, I often have to go around searching and deleting such files. This can also get annoying for web developers using version control software e.g. TortoiseGit and TortoiseSVN.

Eh .. Sometimes, deleting these files can get the "file is in use and cannot be deleted" prompt. Very annoying.

So what exactly is Thumbs.db? As quoted from Wikipedia,

On Microsoft Windows operating systems, starting with the IE4 Desktop Update for Win95/98, a thumbnail cache is used to store thumbnail images for Windows Explorer's thumbnail view. This speeds up the display of images as these smaller images do not need to be recalculated every time the user views the folder.

Yes we know the purpose of Thumbs.db but what if we still wish to turn off Thumbs.db from appearing? There is a way to do it by tweaking a setting on the Local Group Policy Editor.

  1. From the Start Menu, click Run option. Or, you can use Win+R keyboard shortcut.

  2. Type gpedit.msc and hit ENTER key. This will launch the Local Group Policy Editor.

  3. Navigate to User Configuration > Administrative Templates > Windows Components > then either Windows Explorer (Windows Vista/7) or File Explorer (Windows 8).

  4. Look for "Turn off the caching of thumbnails in hidden thumbs.db files" key and double click on it.

    Local Group Policy Editor
  5. Select Enabled and click OK.

» How to Switch Off the Thumbs.db Image Cache File in Windows | Sitepoint

Sunday, May 26, 2013

MSSQL: Generate Random String Using SQL

The following will generate a random fixed-length string using SQL. Simply pass in a string of accepted characters and the length of the random string to be generated.

IF ISNULL(object_id('cspRandomString'),0)<>0 DROP PROC cspRandomString
IF ISNULL(object_id('fnGenRandomInteger'),0)<>0 DROP FUNCTION fnGenRandomInteger
CREATE function fnGenRandomInteger(@MinValue int, @MaxValue int, @Seed float)
returns int
-- =============================================
-- Author:        Loh Hon Chun
-- =============================================
 return ((@MaxValue + 1) - @MinValue) * @Seed + @MinValue
CREATE procedure cspRandomString (
 @Result varchar(255) output,
 @AcceptedChars varchar(255),
 @Length int
-- =============================================
-- Author:        Loh Hon Chun
-- =============================================
 set nocount on

 declare @ret char(255)
 declare @i int, @pos int
 set @Result = ''
 set @i = 0

 if LEN(@AcceptedChars) > 0
  while @i < @Length
   set @pos = dbo.fnGenRandomInteger(1, LEN(@AcceptedChars), RAND(CONVERT(VARBINARY, NEWID())))
   set @Result = @Result + CAST(SUBSTRING(@AcceptedChars, @pos, 1) AS VARCHAR(1))
   set @i = @i + 1

declare @result varchar(255)
declare @acceptedChars varchar(255)
declare @length int

set @acceptedChars = '0123456789'
set @length = 7
exec cspRandomString @Result=@result output, @AcceptedChars=@acceptedChars, @Length=@length
print @result

11 tips for developing a mobile app that users will love

An article on The Next Web lists out 11 tips for developing a mobile app that users will love.

  1. Testing is key
  2. Go Deep With Your Users
  3. Plan for the Offline Experience
  4. Design With Ease of Use
  5. Make It Stupid Simple
  6. Tailor Your Design
  7. Use Grids
  8. Cover as Many Platforms as Possible
  9. Don't Forget the Importance of Convenience
  10. Emulate the Real World
  11. Pick One Thing and Nail It

Stop Windows from Restarting Your Computer After Windows Update

Almost always, Windows will always show the "your computer is going to restart in 15 minutes ..." prompt every time Windows Updates is performed. This can get annoying especially when the update setting is set to auto download and update. So I can we make the annoying prompt not to show?

The following fix should apply to both Windows 8 and 7.

  1. Open your registry editor by typing regedit from your Start Menu → Run box.
  2. Navigate to key HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU. Many may see up to \Windows level. In that case, you will need to create new keys for \WindowsUpdate and \WindowsUpdate\AU.
  3. Now, create a new DWORD (32-bit) value NoAutoRebootWithLoggedOnUsers under the AU key. Give it a value of 1.
  4. Reboot your machine and you are done.

NOTE: It is still your responsibility and is definitely recommended to reboot whenever you are ready to so the updates can be applied completely.

» Stop Windows from Restarting Your Computer After Updates | LifeHacker

Thursday, May 09, 2013

What to look out for for responsive adaptable web design?

An article on the Smashing Magazine website - How Much Has The Web Really Changed? discusses what has changed for the past one decade or so in web development. A lengthy but easy-to-read article.

Up until not so long ago, we used to base our designs on some rather general assumptions about screen size and input type. With the rise of devices with various screen sizes and alternative ways to interact, these assumptions have turned out to be unreliable. We need to upgrade the defaults that we use when we start designing our websites.

Sunday, May 05, 2013

Google Doodle for Malaysia On Polling Day 2013

Google doodle for Malaysia as the Malaysians go to the poll today.

GS1 Prefix List - How to Determine Origin of Food From Barcodes?

Do you know that it may be possible to determine the country where a food product is manufactured bought from a supermarket by reading the barcodes on the package itself? However, do note that the barcodes do not provide identification of country of origin for a given product though hopefully the manufacturer can put our mind at ease if certain countries are in our blacklist.

How to read the barcodes?
  1. Turn over the food product and look for the barcode.

  2. The first 3 digits of the barcode will reveal the GS1 Prefix.

  3. Tally with the list below to find out the country where the food product could have been manufactured at.

    GS1 Prefixes do not provide identification of country of origin for a given product. They simply provide number capacity to different countries for assignment from that location to companies who apply. Those companies in turn may manufacture products anywhere in the world.

    000 - 019GS1 US
    020 - 029Restricted distribution (MO defined)
    030 - 039GS1 US
    040 - 049Restricted distribution (MO defined)
    050 - 059Coupons
    060 - 139GS1 US
    200 - 299Restricted distribution (MO defined)
    300 - 379GS1 France
    380GS1 Bulgaria
    383GS1 Slovenija
    385GS1 Croatia
    387GS1 BIH (Bosnia-Herzegovina)
    389GS1 Montenegro
    400 - 440GS1 Germany
    450 - 459 & 490 - 499GS1 Japan
    460 - 469GS1 Russia
    470GS1 Kyrgyzstan
    471GS1 Taiwan
    474GS1 Estonia
    475GS1 Latvia
    476GS1 Azerbaijan
    477GS1 Lithuania
    478GS1 Uzbekistan
    479GS1 Sri Lanka
    480GS1 Philippines
    481GS1 Belarus
    482GS1 Ukraine
    484GS1 Moldova
    485GS1 Armenia
    486GS1 Georgia
    487GS1 Kazakstan
    488GS1 Tajikistan
    489GS1 Hong Kong
    500 - 509GS1 UK
    520 - 521GS1 Association Greece
    528GS1 Lebanon
    529GS1 Cyprus
    530GS1 Albania
    531GS1 MAC (FYR Macedonia)
    535GS1 Malta
    539GS1 Ireland
    540 - 549GS1 Belgium & Luxembourg
    560GS1 Portugal
    569GS1 Iceland
    570 - 579GS1 Denmark
    590GS1 Poland
    594GS1 Romania
    599GS1 Hungary
    600 - 601GS1 South Africa
    603GS1 Ghana
    604GS1 Senegal
    608GS1 Bahrain
    609GS1 Mauritius
    611GS1 Morocco
    613GS1 Algeria
    615GS1 Nigeria
    616GS1 Kenya
    618GS1 Ivory Coast
    619GS1 Tunisia
    620GS1 Tanzania
    621GS1 Syria
    622GS1 Egypt
    623GS1 Brunei
    624GS1 Libya
    625GS1 Jordan
    626GS1 Iran
    627GS1 Kuwait
    628GS1 Saudi Arabia
    629GS1 Emirates
    640 - 649GS1 Finland
    690 - 699GS1 China
    700 - 709GS1 Norway
    729GS1 Israel
    730 - 739GS1 Sweden
    740GS1 Guatemala
    741GS1 El Salvador
    742GS1 Honduras
    743GS1 Nicaragua
    744GS1 Costa Rica
    745GS1 Panama
    746GS1 Republica Dominicana
    750GS1 Mexico
    754 - 755GS1 Canada
    759GS1 Venezuela
    760 - 769GS1 Schweiz, Suisse, Svizzera
    770 - 771GS1 Colombia
    773GS1 Uruguay
    775GS1 Peru
    777GS1 Bolivia
    778 - 779GS1 Argentina
    780GS1 Chile
    784GS1 Paraguay
    786GS1 Ecuador
    789 - 790GS1 Brasil  
    800 - 839GS1 Italy  
    840 - 849GS1 Spain  
    850GS1 Cuba
    858GS1 Slovakia
    859GS1 Czech
    860 GS1 Serbia
    865GS1 Mongolia
    867GS1 North Korea
    868 - 869GS1 Turkey
    870 - 879GS1 Netherlands
    880GS1 South Korea
    884GS1 Cambodia
    885GS1 Thailand
    888GS1 Singapore
    890GS1 India
    893GS1 Vietnam
    896GS1 Pakistan
    899GS1 Indonesia
    900 - 919GS1 Austria
    930 - 939GS1 Australia
    940 - 949GS1 New Zealand
    950GS1 Global Office
    951GS1 Global Office (EPCglobal)
    955GS1 Malaysia
    958GS1 Macau
    960-969Global Office (GTIN-8s)
    977Serial publications (ISSN)
    978 - 979Bookland (ISBN)
    980Refund receipts
    981 - 983Common Currency Coupons
    990 - 999Coupons

Friday, May 03, 2013

Official Chrome Extension for Google Keep

Google has released an official Chrome Extension for Google Keep - a task keeping minimalistic app. The Chrome extension can only be installed from the link above i.e. you won't find the app from doing a search.

As quoted from the Google Drive blog post,
The Google Keep Chrome app launches in its own window, so you can create notes, cross out your to-do lists, and attach photos to tasks while you work on other things. And if you don’t have an internet connection, don't fret: the Chrome app works offline because we all know that ideas (big and small) can be sparked at any time.

Monday, April 29, 2013

The Re-Imagining of Microsoft

Bing, Skype, and Xbox rebranding plans revealed in Microsoft design presentation.

Saturday, April 27, 2013

Information on setting up two-step authentication for Outlook.com / Microsoft account

Read on for more information - Outlook.com gets two-step verification, sign-in by alias and new international domains.

ASP.NET fails to detect IE10 causing _doPostBack is undefined JavaScript error

Should you encounter _doPostBack is undefined JavaScript error on IE 10, it is because there is a bug in the browser definition files that shipped with .NET 2.0 and .NET 4.

Scott Hanselman published two ways to fix this: one is a machine-wide fix, the other is a way to fix individual sites. The replacement of the "fixed" ie.browser file will supposedly resolve the problem but it somehow didn't quite work for me. If that file didn't work for you, you may wish to use the below instead.


    <!-- Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325) -->
    <browser id="IE6Plus" parentID="IE">
            <capability name="majorversion" match="^[6-9]|\d{2,}$" />

            <capability name="ecmascriptversion"    value="3.0" />
            <capability name="jscriptversion"       value="5.6" />
            <capability name="javascript"           value="true" />
            <capability name="javascriptversion"    value="1.5" />
            <capability name="msdomversion"         value="${majorversion}.${minorversion}" />
            <capability name="w3cdomversion"        value="1.0" />
            <capability name="ExchangeOmaSupported" value="true" />
            <capability name="activexcontrols"      value="true" />
            <capability name="backgroundsounds"     value="true" />
            <capability name="cookies"              value="true" />
            <capability name="frames"               value="true" />
            <capability name="javaapplets"          value="true" />
            <capability name="supportsCallback"     value="true" />
            <capability name="supportsFileUpload"   value="true" />
            <capability name="supportsMultilineTextBoxDisplay" value="true" />
            <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
            <capability name="supportsVCard"        value="true" />
            <capability name="supportsXmlHttp"      value="true" />
            <capability name="tables"               value="true" />
            <capability name="supportsAccessKeyAttribute"    value="true" />
            <capability name="tagwriter"            value="System.Web.UI.HtmlTextWriter" />
            <capability name="vbscript"             value="true" />

    <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -->
    <browser id="IE6to9" parentID="IE6Plus">
        <capability name="majorversion" match="^[6-9]$" />

    <!-- Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;) -->
    <browser id="IE7" parentID="IE6to9">
            <capability name="majorversion" match="^7$" />
            <capability name="jscriptversion" value="5.7" />

    <!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) -->
    <browser id="IE8" parentID="IE6to9">
            <capability name="majorversion" match="^8$" />
            <capability name="jscriptversion" value="6.0" />

  <!-- Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) -->
  <browser id="IE9" parentID="IE6to9">
      <capability name="majorversion" match="^9$" />
      <capability name="jscriptversion" value="6.0" />

  <!-- Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) -->
  <browser id="IE10Plus" parentID="IE6Plus">
      <capability name="majorversion" match="\d{2,}" />
      <capability name="jscriptversion" value="6.0" />

  <gateway id="IEbeta" parentID="IE">
            <capability name="letters" match="^([bB]|ab)" />


            <capability name="beta"    value="true" />

Extend Your Microsoft Office Trial for Five More Months

Microsoft offers free 30-day trials of Office 365 and Office 2013. After your free month is over, you won't be able to use some major features of these office suites. There is an article on LifeHacker extending Microsoft Office trial for five more months.

I didn't try it though. Let me know if it works.

Thursday, April 25, 2013

Skype Facing Problems Signing In Using Microsoft Account

It's confirmed that signing into Skype using Microsoft Account is facing problem as indicated on Skype Heartbeat.

Skype Heartbeat Announcement

It seem to be affecting only Skype for Desktop.

Error message after attempting to login using Microsoft account

In case you do need to connect with your MSN friends urgently, you may explore the following options:

  1. Skype on mobile
  2. Third party IM e.g. imo.im or eBuddy.

[UPDATE Apr 25, 2013 18:15 GMT+8] The issue has been resolved - at least for myself.

Xiang Yun (向云) Euology On Huang Wenyong (黄文永)

Quoted from the Wikipedia,

Huang Wenyong (25 July 1952 – 20 April 2013) was a Malaysia-born Singaporean actor, musician, and former teacher of Chinese descent. He was an actor for MediaCorp from the early 1980s until his death. Appearing in more than 100 television programmes, he was among the first few batches of locally-trained actors to enter the local entertainment industry and considered to be one of the "pioneers in local Chinese drama". Huang died on 20 April 2013 of Lymphoma.

Soon after his death, several fans and fellow colleagues pour in their consolation and regret to have lost an invaluable asset to Singapore local film industry. Long-time working colleague of Huang Wenyong's (黄文永) - Xiang Yun (向云) penned an euology on the passing of her friend.

Xiang Yun (向云) penned an euology on Huang Wenyong (黄文永)



















Monday, April 22, 2013

Samsung Galaxy S4 (Corning Gorilla Glass) Scratch Test

Coming Samsung Galaxy S4, equipped with Corning Gorilla Glass, is put to scratches under knives, keys and coins, pass with flying colours.

See for yourself.

Saturday, April 20, 2013

Yahoo! Mail New Re-thought iOS and Android App

Ever since Marissa Mayer came on board as the CEO of Yahoo, its mobile strategy seem to have taken quite a bit of a lift. Once slow and sometimes buggy Yahoo! Mail mobile app has now been revamped and re-thought.

Quote from Yahoo! corporate blog post Unbox Your Mail with Yahoo! Mail For Tablets,

Today, we’re excited to introduce the Yahoo! Mail Apps for iPad and Android tablets - a full-screen experience that gets rid of the noise. There are no folders, no buttons, no tabs - just you and your mail - and you can easily flip through it like a magazine. We've designed Yahoo! Mail to take full advantage of the tablet making reading your email faster, easier and just a little bit more fun.

Download Yahoo! Mail for iPad and Android tablets now.

Flat Design Language Makes It to Facebook Too

Facebook redesigned its icons moving from a more 3D-like icons to flat icons. The changed icons which also include its logo are as below:

Thursday, April 18, 2013

Get Facebook Home on Any Android Phone

Facebook Home is live but is available only on selected phones for now. Lifehacker has a tip on how to Get Facebook Home on Any Android Phone.

A first look on Facebook Home.

Tuesday, April 16, 2013

Constant "Check Disk" After Windows Update 2823324

You may be encountering constant prompt to perform "Check Disk" on boot-up after performing the recent Windows Update. Microsoft Security team has confirmed a problem with security update 2823324 and has since pulled it off from the pipe.

Should you have unfortunately installed it, please read this Microsoft release on the steps required to uninstall 2823324. I personally experienced the problem and resolved it using the just-mentioned instruction.

All the best.

Control Postback Only On Second Attempt After Validation Error

Recently, I encountered a problem whereby my DropDownList in UpdatePanel didn't AutoPostBack after a validator control return failure. The PostBack only happen after I tried to change the SelectedIndex the second time.

Reading from a blog, I learnt that resetting Page_BlockSubmit back to False in client side will resolve the problem.

What is Page_BlockSubmit?

When the user clicks on a button causing a full post back, after running Page_ClientValidate ASP.NET runs another built in function ValidatorCommonOnSubmit. Within Page_ClientValidate, Page_BlockSubmit is set based on the validation. The postback is then blocked in ValidatorCommonOnSubmit if Page_BlockSubmit is true. No matter what, at the end of the function Page_BlockSubmit is always reset back to false.

If a page does a partial postback without running any validation and Page_BlockSubmit has not been reset to false, the partial postback will be blocked. In essence the above function, RunValidation, acts similar to ValidatorCommonOnSubmit. It runs the validation and then returns false to block the postback if needed. Since the built in postback is never run, we need to reset Page_BlockSubmit manually before returning the validation result.

Video: Accident Near Bugis Involving Mercedes Driver

On 15 April 2013 before 8:30pm, an accident involving up to 7 vehicles occurred near Bugis at the junction of Victoria Street and Middle Road. This accident is said to be the result of a drunken or fainted Mercedes driver.

Investigation is still on-going. Thank goodness, passengers in the taxi are unharmed.

Sunday, April 14, 2013

Facebook Home "Launch Day" Video Ad

What do you think of the Facebook Home "Launch Day" video ad? What message is Facebook trying to convey? Did you having a better understanding what Facebook Home is all about after watching this video? IMO, the video seems to suggest Facebook Home is a great potential for creating distractions.

Apollo 11 summarised in 100 seconds video

Presented here is the first manned mission to the Moon by the Americans, July 1969, in 100 one-second increments. Enjoy the voyage.

PSY - Gentleman

South Korean the Gangnam Style man has just released his new music video - Gentleman. Will this new Gentleman video break previous Gangnam Style record 1.5 billion YouTube views? Currently, the Gentleman video has recorded 6.9 million views so far.

What do you think of this new video? IMO, I find it rather clown and non-gentleman.

Friday, April 12, 2013

Tim Ho Wan (添好運) Opened in Plaza Singapura

Michelin Star dim sum (點心) restaurant from Hong Kong, Tim Ho Wan (添好運), is finally opened in Singapore, Plaza Singapura.

Address : Plaza Singapura, 68 Orchard Rd #01-29A
Tel. No.: 6251 2000

Boost Your Facebook Privacy

An interesting article from the LifeHacker How Facebook Uses Your Data to Target Ads, Even Offline will guide you how to boost your Facebook privacy.

Wednesday, April 10, 2013

How to Disable Chrome New Right Menu?

If you somehow or rather don't like the latest Chrome's right menu, there is a way to disable it.

  1. Look for the shortcut where you usually start Chrome e.g. on your Desktop.

  2. Right click on the shortcut and then Properties.

  3. Make sure the Shortcut tab is selected.

  4. In the Target field at the end of "C:\Program Files\Google\Chrome\Application\chrome.exe" after space add "–-disable-new-menu-style" without quotes. (note we have got two hyphens before disable).

  5. Click OK to apply changes.

Done! The next time you click on this shortcut, the good usual familiar right menu will be used.

» Don't like Chrome’s New Menus? Here is how to Disable Them | TechDows

Article On Responsive Design

Articles from the Smashing Magazine featuring on responsive web design catering for both desktop and mobile. Interesting.

Difference Between LCD, LED, Plasma, and OLED TV

20 Best Wireframing Tools for Web Designers and Developers

Just for reference - a list of the 20 Best Wireframing Tools for Web Designers and Developers.

Thursday, April 04, 2013

My trust in Citibank has gone down the drain

Please do share if you do have a bad experience with Citibank or any other banks too.

Dear Sir/Mdm,

Reference to a request from @AskCiti (Twitter handler) to send an email to the above email address for elaboration as to why I have decided to terminate my credit card and my relationship with Citibank, I am here - now writing this email.

Twitter correspondence here: https://twitter.com/AskCiti/status/319451681580519424

So, what actually happened?

  1. On Feb 2013, I received a credit card bill from Citibank showing an annual fee of S$150 + S$10.50 charged onto my card.

  2. I called in to +65 6225 5225, spoke to a customer service officer (CSO) and requested for a waiver. The guy I spoke to promised and reassured me a total of S$160.50 would be waived on the spot. I proceeded to make bill payment without the waived amount.

  3. On Mar 2013, I received a credit card bill from Citibank. What shocked me was not only the S$160.50 wasn't been waived, a further S$21.85 was incurred due to an unexpected debit balance carried forward from Feb 2013.

  4. I called in to +65 6225 5225 last week, spoke to a customer service officer (CSO), explained what happened, and demanded for a waiver of S$150 + S$10.50 + S$21.85 = S$182.35. The CSO reassured me the amount would be waived in 3 working days. Not trusting Citibank this time round and wouldn't want this "debt" to be carried forward to yet another billing cycle, I insisted Citibank contact me on any update. I proceeded to make bill payment without the S$182.35.

  5. 3 working days have passed - nothing is done, no one from Citibank contacted me.

  6. I called +65 6225 5225 yesterday on 3 Apr 2013, spoke to a customer service officer (CSO), explained the whole story again, and was told my request for waiver was not in the system.

  7. The CSO helpfully made a waiver on the spot, reassured me the waiver done and completed.

  8. Losing trust completely in Citibank, I requested for a complete closure of my card. I was then redirected to the closure department.

  9. Citing my lost in trust in Citibank and lack of follow up from Citibank as the reason for closure, the last CSO I spoke to proceeded to close my account.

  10. Almost immediately after the tele-conversation, the last CSO phoned. It's this very last conversation that really made me laughed till I almost dropped. This CSO suggested I should stay with Citibank for 1 more year since all charges were waived. She then revealed the real 2 reasons for me to continue - 1) she forgot to verify my identity, 2) there was a system error encountered and my first conversation with her was not logged.

  11. Do you expect me to repeat everything again after the recording system is turned on?

  12. How can I convince myself to believe and trust Citibank again if simple procedure like verification of identity and making sure the recording system is running (if need be) are not ensured?

FYI, a copy of this email is published here.

Tuesday, April 02, 2013

How to Determine Origin of Food From Bar Codes?

According to a Facebook post, it is possible to determine the origin of food bought from a supermarket by reading the barcodes on the package itself.

Disclaimer: I am not sure if it is 100% accurate.

HOW TO READ BAR CODES... (everyone must know)


With all the food and pet products now coming from China, it is best to make sure you read label at the supermarket and especially when buying food products. Many products no longer show where they were made, only give where the distributor is located. The whole world is concerned about China-made "black-hearted goods".

Can you differentiate which one is made in Taiwan or China ? The world is also concerned about GMO (Genetically Modified Organism) foods; steroid fed animals (ex: 45 days old broiler chicken).

It is important to read the bar code to track its origin. How to read Bar Codes....interesting !

If the first 3 digits of the bar code are 690, 691 or 692, the product is MADE IN CHINA.
471 is Made in Taiwan .
If the first 3 digits of the bar code are 00-09 then it's made or sourced in USA.

This is our right to know, but the government and related departments never educate the public, therefore we have to RESCUE ourselves. Nowadays, Chinese businessmen know that consumers do not prefer products "MADE IN CHINA", so they don't show from which country it is made. However, you may now refer to the barcode -

Remember if the first 3 digits are:
890......MADE IN INDIA
690, 691, 692 ... then it is MADE IN CHINA
00 - 09 ... USA and CANADA
30 - 37 ... FRANCE
40 - 44 ... GERMANY
471 ........ Taiwan
45 or 49 ........JAPAN
489...........HONG KONG
50 .......... UK
57 .........DENMARK
471......... is Made in TAIWAN (see sample)
628.........SAUDI ARABIA
740..........745 - CENTRAL AMERICA

All 480 Codes are Made in the PHILIPPINES.

Do let me know how true is this!

More information can be found at GS1 Prefix List - How to Determine Origin of Food From Barcodes?.

MSSQL: Run Large SQL Script

Having problems when running large SQL scripts using the SQL Management Studio (SSMS)? I would suggest you use sqlcmd instead. Save your script in a flat file (e.g. .sql or .txt) and pass the file as an input parameter to sqlcmd like below.

sqlcmd -S SERVER\INSTANCE -i mysqlscript.sql

In case you are having problems logging in, you may wish to try either one of them.

sqlcmd -S SERVER\INSTANCE,PORT -i mysqlscript.sql


sqlcmd -S np:\\\pipe\MSSQL$INSTANCE\sql\query -i mysqlscript.sql

NOTE: Replace SERVER, INSTANCE, PORT accordingly to suit your server configuration.

Hope it helps.

Monday, April 01, 2013

Google New April Fools' Day Features

As part of Google's tradition, a series of new features or initiatives were announced in this year's April Fools' Day.

We have announcement from YouTube at which they announced they are now ready to announce the best ever uploaded video in 10 years' time. The selection process will be by several technicians based on strict guidelines. And YouTube will be shut down for good.

Next, we have announcement featuring whole new service in beta - Google Nose - a whole new different experience in search using a sense.

We also have got Google Maps launching treasure mode.

Joining in the fun, Gmail is launching Gmail Blue, obviously in mockery on Windows Blue - making everything blue.

Google Fiber is bringing fiber close to you, as long as you are connected to a "pole".

For webmasters and marketers, Google Analytics participated in this joke day by including hits from the International Space Stations.

Last but not least, a Google Easter Egg for you just by doing a search.

Sunday, March 31, 2013

10 Must-Have Chrome Extensions for Developers

The Mashable published 10 Chrome extensions for web developers and I bet web developers like you yourself must be using some of them. Do you have your own favourite extensions? Do share with us.

  1. Firebug Lite
  2. Web Developer
  3. Session Manager
  4. Clear Cache
  5. Chrome Sniffer
  6. JSONView
  7. Resolution Test
  8. Edit This Cookie
  9. Page Speed Insights
  10. Postman - REST Client

Related Readings:

10 Firefox Add-Ons for Designers

The Mashable published 10 Firefox Add-Ons for Designers and I bet web designers and web developers like you yourself must be using some of them. Do you have your own favourite add-ons? Do share with us.

  1. ColorZilla
  2. Pencil
  3. MeasureIt
  4. Stylish
  5. View Source Chart
  6. Firesizer
  7. HTML Validator
  8. Font Finder
  9. CSS Usage
  10. Tab Mix Plus

Related Readings:

10 Firefox Add-Ons for Developers

The Mashable published 10 Firefox Add-Ons for Developers and I bet web developers like you yourself must be using some of them. Do you have your own favourite add-ons? Do share with us.

  1. Firebug
  2. Web Developer
  3. FireFTP
  4. YSlow
  5. Greasemonkey
  6. JSONView
  7. RESTClient
  8. Empty Cache
  9. JS Deminifier
  10. Fireshot

In my own opinion, HttpFox should be the other worthy mention add-on.

Related Readings:

How does it look like in major cities at night without lights?

Ever wonder how does it look like at night without lights? A New York City-based photographer who spent the last two years documenting glaciers around the world produced his impression in major cities - dark, star-lighted sky, and sometimes can be cold.

Notify Me! Android App

A FREE Android app that lets you create a list of apps that are allowed to light the screen up and show their notifications on it as a popup in front of your lock screen.

More information here:

Wednesday, March 27, 2013

Tuesday, March 26, 2013

18 Inspiring Examples of Websites Developed Using HTML5

Looking for HTML5 websites for inspiration? Webrevisions published an article recently introducing 18 such websites.

Friday, March 22, 2013

MSSQL: Update running sequence / number

Let's say we have a table with a column of numbers and for some reason, they are not in running sequence. Instead of editing the rows manually, we can actually do it using a SQL script.

Hopefully the following helps.

--Create some test data
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'tblTest') AND type in (N'U')) DROP TABLE tblTest
CREATE TABLE tblTest (Label VARCHAR(20), OriginalOrderNo INT, OrderNo INT)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('four', 4, 4)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('seven', 7, 7)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('one', 1, 1)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('two', 2, 2)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('five', 5, 5)
INSERT INTO tblTest (Label, OriginalOrderNo, OrderNo) VALUES ('nine', 9, 9)
UPDATE t1 SET t1.OrderNo = t2.Sequence
FROM tblTest t1 INNER JOIN (
 SELECT Label, OrderNo, ROW_NUMBER() OVER (ORDER BY OrderNo) AS 'Sequence'
 FROM tblTest) AS t2 ON t1.OrderNo = t2.OrderNo
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'tblTest') AND type in (N'U')) DROP TABLE tblTest

Wednesday, March 20, 2013

MSSQL: Get schema owner of database tables

To retrieve a list of schema owner of database tables, try the following code snippet. Hope it help.s

SELECT t.object_id AS 'TableID', t.name AS 'TableName', s.schema_id AS 'SchemaID', s.name AS 'SchemaOwner'
FROM sys.tables t inner join sys.schemas s ON t.schema_id = s.schema_id
ORDER by t.name

Saturday, March 16, 2013

Introducing Samsung GALAXY S 4

This is really looking like Samsung is building its own ecosystem. Looks like there is going to have more and more Samsung in-house apps and a growing personalisation going on in an Android phone.

Samsung S IV accessories announced

Samsung introduced together with the Samsung Galaxy S 4, 11 accessories for the Samsung Galaxy S 4. The accessories are: S Band, S View Cover, Game Pad, Wireless Charging Pad / Cover, Flip Cover, Pouch, Protective Cover+, Headset, Extra Battery Kit, HRM and Body Scale.

Most of the accessories can be used by Samsung’s S-Health 2.0 application.

» Accessories announced by Samsung for the Galaxy S 4 | SamMobile

McDonalds FREE 1,000 Egg McMuffin

McDonalds Singapore is participating its "National Breakfast Day" by giving away 1,000 Egg McMuffinTM absolutely FREE per participating stores, while stocks last, on 18 March 2013 (coming Monday).

How does it work?

McDonalds will give away Free Egg McMuffinTM Giveaway coupon at its participating stores on 18 March 2013. Recipients will then have to present the original coupon on the same day in the morning for redemption.

More information on the giveaway can be found at www.mcdonalds.com.sg/nbd/.

Friday, March 15, 2013

List of known domain names blocked by Kaspersky products

I am putting across a serious note on Kaspersky products blocking domains including Google, Facebook and Twitter. From my experiment, it seems this is true when I am using Google Chrome browser. Have tried to contact Kaspersky via Twitter but am ignored completely. A quick web search on the world wide web reaffirmed that this is not affecting just me, but possibly thousands others as well.

The Kaspersky product I am using is Kaspersky Endpoint Security 8 with the latest database definitions installed as of today. I am not too sure if other Kaspersky variant products are having similar restrictions too.

Some of the confirmed legitimate domains blocked are the following:

Last Updated: 25 March 2013, 3:00 PM (GMT+8)

VictimDomain Remark Added on
Facebook*.akamaihd.net/* Facebook photos 15 Mar 2013
Facebook*.facebook.com/* General website 15 Mar 2013
Get Satisfaction*.cloudfront.net/* Resources 19 Mar 2013
Google*.ggpht.com/* Resources 15 Mar 2013
Google*.google.com/* Several Google services 15 Mar 2013
Google*.googleapis.com/* Resources e.g. Analytics 15 Mar 2013
Google*.googleusercontent.com/* Resources 15 Mar 2013
Google*.gstatic.com/* Resources 15 Mar 2013
Google*.googlegroups.com/* Files hosted may have problems 23 Mar 2013
Microsoft*.ms/* Resources 25 Mar 2013
Microsoft*.wlxrs.com/* Resources 25 Mar 2013
Pinterest*.pinimg.com/* Resources 19 Mar 2013
Twitter*.twimg.com/* Twitter photos 15 Mar 2013
UserVoice*.uservoice.com/* General website 17 Mar 2013
YouTube*.youtube.com/* General website 15 Mar 2013
YouTube*.ytimg.com/* YouTube photos 15 Mar 2013

Right now, I have to add the above domain names (will be growing) as trusted urls to be able to consume content normally.

Please let me know any other domains blocked by Kaspersky so I can add them here too to benefit everyone.