# Sunday, 07 August 2011

And so... another year, another attempt to get the ultimate meeting Tablet PC. The Asus T101MT generally worked well but with palm rejection mode on, writing on the screen had some irritating problems every now and then, but since I had no other choice at the time I lived with it. And of course, now I've find a replacement. The Fujitsu T580

DSC00824

Once again I've gone with the convertible form factor.

DSC00825

The Fujitsu T580 again falls under the portable notebook category with it's 10" screen, for general tech specs you can refer to the Fujitsu Product information site. So what made me decide to get the T580?

Hybrid Digtizer

DSC00817

The NUMBER ONE reason is that the T580 has a hybrid digitizer, so not only does it have a 4 point capacitive multi touch screen, it has a honest to god DIGITIZER, which means writing on the screen with the digitizer pen is FANTASTIC.... Except for 2 problems.

The first problem is that I can't figure out how the digitizer works, wheter it's magnetic reasonance (inference.. or whatever) like a Wacom pen or ultra sound like this pen I once had. Why am I even interested in how it works? Because sometimes the pen goes crazy (once so far) and acts like I never lifted it up from the screen, and this was exactly how crazy the old ultrasound pen would get when it had too much interference. Some people attribute it to N-Trig's (the OEM provider for the pen) QA problems with manufacturing the pens but I'm not too sure about that.

The second problem is that the pen is powered, while don't mind having a powered pen. The problem is that the power source that the pen uses is a AAAA battery, no I didn't spell it wrongly, I DID say A A A A. Here's how it looks sitting next to a AAA.

DSC00816

Yes, I also didn't know AAAA batteries existed till when the Tablet PC was first launched and the Compaq models used them. It seems like they decided to go with AAAA because of it's slimmer profile in order to be able to make it small enough to fit inside the pen silo

DSC00819

Having the pen kept inside the device is always a good thing no matter what Steve Jobs said. That said, I do have one worry about the T580's pen silo, it seems to hold the pen via friction instead of any lock mechanism so I do wonder how long would it last.

So where do you BUY AAAA batteries? Well, I've found ONE shop in Malaysia that actually stocks them... I should go buy a pack for emergencies even though they mentioned one battery last a year.

The other method of getting AAAA like batteries is to butcher a 9V battery.

WP_000299

A 9V battery consists of 6 1.5V cells that are slightly shorter than a AAAA battery, the polarity points are usually reversed, not ALL of them salvaged this way can be used in the pen but at least I have a way to get some in a pinch.

Power in a tiny package

Even though it has the tiny footprint of a 10" notebook, the T580 comes equipped with a Intel Core i5 1.3Ghz, which can turbo boost to 2.0Ghz under load. That's enough to do pretty much any work I have for it! While the powerful processor might turn out to be a power hog and shorten battery life, I created a special power profile which I use during meetings which puts the maximum processor performance at 45% and STILL it runs OneNote pretty well and have about 3.5 hours of battery life.

One interesting added advantage about all that power is that the integrated Intel HD graphics GPU is DirectX 10 compliant (compliant, doesn't mean it has great performance) And therefore the system is more than capable of running the Windows Phone 7 emulator, that coupled with the availability of a multitouch capable touchscreen means the T580 is an ideal Windows Phone 7 development machine, because with a multitouch device you can debug multitouch code on the Windows Phone 7 emulator itself without the need for an actual device!

The Extras

The T580 comes with a built in 3G modem, evident by the presence of a flat little antennae on the top of the screen.

DSC00826

Which means I could just turn off the normal Wi-Fi radios to save power.

DSC00841

At least I could IF turning of the wireless switch didn't turn off WiFi, Bluetooth AND the 3G modem as well. Luckily through the use of Fujitsu's own Power Saving Utility applet I am able to selectively turn off WiFi and Bluetooth radios only.

Another added surprise is that the T580's SATA hard disk slot is easily accesible.

DSC00840

I immediately splurged on a 64GB SSD to replace the 500GB Hard Disk that it came with so that I don't have to worry about any problems that moving around a spinning hard disk might cause.

Summary

The Fujitsu T580 was not my first choice as a replacement for my Asus T101MT, I was initially looking at the sleek Fujitsu Q550 Slate Tablet PC, but all the enterprise features which Fujitsu put in it pushed the price up to a level which I was not comfortable to get something just to work as my notepad, since that is what the Q550's main responsibility would have been cause its powered by an Intel Atom CPU. Where as with the Fujitsu T580, I have a complete ultra portable development machine to work with.

My usage of Tablet PCs are always compared to the iPad, and people have always mocked the weight and thickness of my convertibles. But it's ok, my Tablet PCs allow me to get actual work done so I don't care too much about that any more.


Sunday, 07 August 2011 00:17:07 (Malay Peninsula Standard Time, UTC+08:00)  #    Comments [0]  | 
# Wednesday, 03 August 2011

One thing which I just realized I missed out in my Windows Tablet PC optimization article is the little quirk of a feature which the Windows Tablet PC Soft Keyboard has, is that when you’re trying to enter a password in a text entry field that PROPERLY identifies itself as a password field to Windows, the soft keyboard WILL NOT show you what key you’ve pressed. This is obviously a security feature to stop people from trying to steal a peek at your passwords when you’re entering them.

It’s also one of those annoying security features more so with a touch screen because there’s literally ZERO FEEDBACK from the keyboard indicating you pressed a key.

Luckily its easy enough to fix. Just head on over to the Options menu on the Input Panel.

options

Then in the Options dialog which opens, select the Advanced tab, then drag the slider to the MEDIUM setting. (By default this should be at medium high)

passwordsetting

This will make the keys on the keyboard flash when you touch them, but still keep the mouse cursor hidden so there’s still some protection from prying eyes. Experiment with the various other settings on the slider to see if there’s any other setting you prefer.

Update : seems like this doesn’t work with the Windows lock screen’s keyboard. Pity..


Wednesday, 03 August 2011 22:17:37 (Malay Peninsula Standard Time, UTC+08:00)  #    Comments [0]  | 
# Saturday, 02 July 2011

So I just watched Michael Bay's 3rd and hopefully LAST Transformers movie in a while, and boy did it SUCK!

Consider this your spoiler warning, because once again there's this GIANT BIG HOLE in the plot!

** SPOILER BLOCK **

** SPOILER BLOCK **

** SPOILER BLOCK **

** SPOILER BLOCK **

So there I was trying to enjoy the movie by turning my brain off, until Mr Big Giant Transformer says "We used to be gods back on Cybertron, now we're just refered to as Machines!" I'm sorry? How is that possible? How is it that you can refer to yourself on your native planet as GODS? Who the heck refered to you as GODS???? That's just a wrong statement to make! If his main point was to point out that on Earth they're nothing but machines then he should just say that instead of making the god remark, cause that doesn't make sense.

And then by the end of the movie, the biggest plot hole was hit. Throughout the whole movie it was made a big deal about how Sentinel Prime was the only one who could control the Space Bridge, thus the elaborate plan to bring him back to life and what not. But in the final fight when the Space Bridge control pillar was knocked out all it took was the touch of a traitorous human to bring it back up, whatever happened to ONLY SENTINEL PRIME CAN ACTIVATE THE SPACE BRIDGE?!?!?! Don't tell me it's because that it's activated already then anyone can use it because if that was the case Megatron would have shot Sentinel in the back much earlier.

Other nit picky points when you think too much about it

So they first revealed that the space bridge would be used to steal Earth's resources back to Cybertron, ok, sounds like a good plan. Then it was, bring Cybertron to Earth. The fact that they were going to launch the space bridge pillars AROUND the world made me think they were going to just warp Cybertron in place to where Earth was which would have been more interesting than the actual plan... park Cybertron next to Earth, you can't park two objects with their own gravitational fields next to each other. The moon already affects the tide slightly, guess how big a problem another planet would cause?

The whole Let's enslaved the humans to do rebuild Cybertron premise is simply ridiculous! Because you don't get ants to build you a skyscraper would you? Also... note that the Transformers in the movies don't exactly have any sort of tactical advantage that gives them a one up against humans. The only advantage the Transformers have is their size, they seem vulnerable enough to heavy arms fire and explosives so trying to keep the humans under control would be a pain. Also... the Transformers have already demonstrated they're more than capable of creating mindless drones to help with tasks so why would they need humans as slaves?!?!?

Decepticons TAKING AUTOBOT PRISONERS!?!?!??! What madness!?!?! If it was shown earlier that these movie Transformers had ANY REGARD for life that would be fine, but at EVERY FIGHT, EVERY MOMENT, EVERY OPPORTUNITY they'll rip each others heads out, punch them till parts fly, etc. etc. So why the heck would the Decepticons take prisoners??!?!

They didn't even bother to give any reason to why Bumblebee STILL DOESN'T TALK PROPERLY!

Why the fark do transforming robots need TRANSFORMING fighters?!?!?!

Try and remember how many Autobots were pulling their weight during the final fight, as in before the final "Let's go get the pillar!" charge.

Try and remember how many Autobots were captured and grouped together, but how many Autobots were there when rescue came.

The whole movie was just filled with references to classic Transformers as nods to fans so that they can accept Mr Bay's genius. Here's what I caught

  • Optimus Prime gets his trailer.... and is promptly reminded how awkward it is to drive a full trailer offensively.
  • Optimus Prime gets his Axe now.
  • Transformers turn into dust when they die.... well at least one of them did.
  • The whole hidden joke that a giant robot voiced by Leonard Nimov makes Megatron his bitch, and then in end gets betrayed by Megatron leading to his defeat by the Autobots.

Saturday, 02 July 2011 00:56:30 (Malay Peninsula Standard Time, UTC+08:00)  #    Comments [0]  | 
# Tuesday, 28 June 2011

Here's a guide on the settings I use so that my Asus T101MT Netbook is a formidable video playback device capable of watching 720P video content.

First of all you're gonna need to download a few things

  • Media Player Classic Home Cinema Edition - This is the video player program which I use. NOT VLC.
  • FFDShow Video Codec - I don't trust any codec pack or what not, those just tend to mess up the DirectShow filters which you need to use to watch videos through the DirectShow architecture. Go to the link and then select the MOST RECENT generic build and you should be fine.
  • Real Alternative - If you need to watch RMVB video files, you need to install this or.. god forbid.. Real Player itself.
  • Latest DirectX Update - You'll need this for Media Player Classic
  • Latest Display Card Drivers - Ensure that your video card drivers are up to date.

Note that this is for playing local video files, and not YouTube, Hulu or what not. That said just remember this mantra before starting.

Software Decoding Of Video Data Is VERY Processor Intensive And I'm Trying To Do It On My Wee Little Netbook!

By taking note of this, remember that if you're going to watch 720P video on your netbook ensure that

  • No other programs are running - Web browsers especially, not because they hog memory when you have lots of tabs opened but more because we don't want any errant plugins *cough* Flash *cough* stealing precious CPU cycles. You want to multitask while watching a 720P video, get a better Notebook!
  • Always run at full performance - Some netbooks have a power throttling/battery life enhancement program running that slows down the processor when running in battery mode. So remember to always set it to FULL POWER if you're watching a movie while on battery power.

First off we'll deal with the settings in Media Player Classic, open the Options window (View->Options)

image

From the left item list, select Output, Under DirectShow Video, select EVR Custom Pres, if you want to you can select Nearest Neighbour as the resizer which gives a SLIGHT speed boost by sacrificing video quality.

Next select the Internal Filters item on the left.

image

Under Transform Filters find H264 and uncheck the options, this will get Media Player Classic to use the newer FFDShow codecs installed in the system instead of it's internal one.

Click on the OK button to close the Options dialog, and then RESTART Media Player Classic.

Open your H.264 content and then as it is playing check your tray icons.

image

You should see the FFV icon which indicates the FFDShow codec is in use, if not, double check on the Internal Filters and make sure you've disabled the built in H.264 codecs.

These settings work VERY well on my Asus T101MT, there are some problems that I haven't solved though

  • Weird inconsistencies when trying to pause the video stream, pause button doesn't work sometimes. Have to tap the space bar a few times, wait a while, then try it again to pause the video stream.
  • Trying to seek into a point on the video stream might be a bit slow and irresponsive.

That's my settings for my Netbook, and it might work for yours so try it out!


Tuesday, 28 June 2011 00:40:39 (Malay Peninsula Standard Time, UTC+08:00)  #    Comments [0]  | 
# Friday, 03 June 2011

A colleague showed me an interesting problem, the ASP:LinkButton controls in our ASP.Net 4.0 website wouldn't work when it was viewed from a browser control hosted inside an iOS app (ie. The viewer that pops up in the Facebook app when you click on a weblink) What made it weirder was that depending on the order you hit the webpage, either through the Facebook App first, then through Safari. The link button might or might not work.

We ran some test on an ASP.Net 2.0/3.5 site, and the LinkButtons on those sites worked fine. Baffled, I enabled trace.axd on the server to see if there were any differences between requesting for a page through the Facebook App, and through Safari. Immediately I noticed that the User Agent string was different.

When viewed through Safari the User Agent string was something like this.

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5

When the page was viewed through an app the User Agent looked like this.

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8H7

Notice that both the Version and Safari values are missing when viewed from the app.

In order to figure out what the difference was when these 2 values are missing, I fed the 2 UserAgent strings through IE9's developer toolbar and viewed the page on the desktop so I had more debugging ability. And to my surprise, when I used the UserAgent string without the Safari moniker, the following code was missing from the output page.

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

This happens to be the Javascript code which ASP.Net LinkButtons and various other auto postback controls will use to post the form through script on the page. So if the function was missing, then none of the controls would be able to post anything. So I begun my search on why the code was missing when the Safari moniker is missing. And I found the source of the problem, ASP.Net's feature for dynamically changing the way something is rendered based on the client's browser capability. Based on the sample shown on this page on how to see what browser capability was detected, I wrote a quick page which dumps the browser capabilities out with the code below.

        Dim ht As IDictionaryEnumerator = Request.Browser.Capabilities.GetEnumerator
        Response.Write(Request.Browser.Id)
        Response.Write("<br/>")
        Response.Write(Request.UserAgent)
        Response.Write("<br/>")
        Response.Write("----------------<br/>")
        While ht.MoveNext = True
           
            'If ht.MoveNext() = True Then
               
            Response.Write(String.Format("{0}:{1}", ht.Key, ht.Value))
            Response.Write("<br/>" & vbCrLf)
           ' End If
        End While

That's when I realized that WITHOUT the Safari moniker, the default browser capability DISABLES JAVASCRIPT that's why the clientside postback chunk was not delivered to the server.

Interestingly enough even without the Safari moniker, an ASP.Net 2.0 site will still flag the iPhone browser as Javascript capable.

Now that I knew what was missing, what was left was to make a new Browser Definition File which will enable Javascript for the ASP.Net 4.0 site even without the Safari moniker. I basically copied the definition for the Safari browser, but made it so it'll look for the AppleWebKit moniker in the UserAgent instead of the Safari moniker and flag it as Javascript capable.

<browsers>
  <browser id="safariiphone" parentID="mozilla">
    <identification>
      <userAgent match="AppleWebKit"/>   
    </identification>
    <capabilities>
            <capability name="version"                         value="${version}" />
            <capability name="majorversion"                    value="${major}" />
            <capability name="minorversion"                    value="${minor}" />
            <capability name="type"                            value="Safari${major}" />
            <capability name="ecmascriptversion"               value="3.0" />
            <capability name="javascript"                      value="true" />
            <capability name="javascriptversion"               value="1.6" />
            <capability name="w3cdomversion"                   value="1.0" />
            <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
            <capability name="cookies"                         value="true" />
            <capability name="frames"                          value="true" />
            <capability name="javaapplets"                     value="true" />
            <capability name="supportsAccesskeyAttribute"      value="true" />
            <capability name="supportsCallback"                value="true" />
            <capability name="supportsDivNoWrap"               value="false" />
            <capability name="supportsFileUpload"              value="true" />
            <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
            <capability name="supportsMultilineTextBoxDisplay" value="true" />
            <capability name="supportsXmlHttp"                 value="true" />
            <capability name="tables"                          value="true" />
        </capabilities>
  </browser>
</browsers>

This file is saved as whateveryouwant.browser then placed under the App_Browsers folder of the website so it can be processed by ASP.Net. This fixed my problem but I was still still curious as to why it worked in ASP.Net 2.0 but NOT 4.0, so I dug around the Browser Definition Files for ASP.Net 2.0 and found this element it used to identify the Safari browser in ASP.Net 2.0

        <identification>
            <userAgent match="AppleWebKit/(?'webversion'\d+)" />
        </identification>

Which means that in ASP.Net 2.0 it's looking for the AppleWebKit moniker to identify Safari browsers, where as in ASP.Net 4.0 the identification element reads this.

        <identification>
            <userAgent match="Safari" />
            <userAgent nonMatch="Chrome" />
        </identification>

Seems like it was trying to avoid clashing with Google Chrome's Useragent which also happens to contain the AppleWebKit moniker but they ended causing problems in certain scenarios.


Friday, 03 June 2011 18:03:28 (Malay Peninsula Standard Time, UTC+08:00)  #    Comments [2]  |