Sep 28

It is a week of software and web goodness as I got involved in a lot of activities this week. First off, I managed to hold the FUG CS4 launch party at Adobe where we have sessions on CS4, and give aways of tshirts, stickers and book. I also managed to meet up with Grant Straker of Shadow CMS who is very kind to come to our usergroup and present on Cairngorm Extensions. Ryan, the web master of Flashmove and manager of the Flash Usergroup Group also dropped by on the event.

On Friday, I meet up with Ben Metcalfe and his wife Sofia for lunch, together with many of the FUG regulars include @satish, @flashmech, @kennethteo, @mrsteel at Clark Quay. It is a great meetup where we discuss on web 2.0, social networking, and share our experience in Singapore. We also distribute seesmic stickers and I managed to get myself a new cap and many tshirts.

Next up in October, I will be heading for Open Web Asia at Seoul and of course, involve in the execution of  The Actionscript Conference. Will be busy times to come and glad that things are falling in place!

Sep 11

I have been using Amiando to host events for the Singapore Flex Usergroup for the month of August and September and it works great. No registration for end users, reminder services, simple non-cluttered interface. However, what impressed me most is their service. And here is why:

At Amiando, you can upload banner for your events, change the CSS, to meet your event styles. I uploaded an image yesterday and coincidentally, it is covered by the tabs below:

I dismissed the issue, as I believe most users will actually saw my email newsletter first before heading to the page. However, when I woke up today, I revisited the website and see this:

What is the difference? Basically it is being FIXED! And I got a personal email from Amiando stating:

I have seen you set up a new fug meeting http://www.amiando.com/fugsg-sept.html which looks great. We can do some adjustments via CSS so that the text in the left corner can be seen as well as the Yahoo logo. I will talk to our frontend developer Patrick and will let you know.

Best,
Boris

What does that mean? That means that Boris Barreck from Amiando, actually takes the time to go through every single event hosted on Amiando, checked whether there is any problem. Even a small CSS issue as above, is identified and fixed within a few hours. Note that Amiando host major events like LeWeb and I deeply appreciate them to actually notice issues I am having on their website and help me within a day.

Web 2.0 Customer Service

Web 2.0 has cause significant changes to customer service and support. On top of Get Satisfaction, we see companies tracking Twitter for keywords to bash their competitors or to provide support, as well as in my own case, tracking blog post for relevant questions on your product (see the comments in the link)

With high competition and low barrier to entries to the Web 2.0 world, it is not difficult to understand how good customer service like Amiando will play a big part in the success of a company.

Aug 31

Introduction
For many Flex/Flash developers developing Facebook applications, development maybe daunting at first without a very detailed documentations, sample codes and blogs posting around to help. Most of time, many cannot grasp the general architecture of creating a Facebook application. While I am no expert in Facebook application development, I have picked up some useful tips and tricks along the way and I hope to share it around. Do take note the date of this posting. Facebook platform changes from time to time so 6 months down the road, this post might be obsolete.

Note that when I speak about Facebook development, it means having your Flash/Flex content inside Facebook profile and its canvas page. I do not mean connecting to Facebook using Actionscript. If you are looking to communicate with Facebook using Actionscript, please refer to this AS3 Facebook Library:
http://code.google.com/p/facebook-actionscript-api/

The Basic
Before you get started, I will suggest reading this blog posting by padraenl, titled 10 Things That Would Have Been Nice to Know When Starting My Facebook Application. Facebook Platform native documentation is good for referencing, but there isn’t instructions to teach new developers the “standard way” of approaching problems. This blog post answers to many common questions a developer will have.

How it works:
To understand how Facebook Applications work is very simple. Facebook does not provide you with any hosting service. You host your own application on your own server, and tell Facebook where to retrieve it. You churn out your own HTML / FBML / Javascript codes and Facebook parse it on its server, as simple as that. Essentially, you can develop in any language you like, as long as your codes render out the proper HTML / FBML / Javascript.

Things to note is that some of the examples you found on Facebook currently might be obsolete as Facebook now has a New Profile Design. To understand the new profile, you can read it’s documentation, or just scroll down to check the few screen shots I placed below:

New Profile

Instead of a one page profile now, there is now “Wall”, “Boxes”, and Application Tab. Therefore, you will need to plan at least 3 screens for your application.

Main Profile - Wall:


This is mostly visited page from the user’s friends. You have the real estate of a small column on the left hand side of the page. If you are using a Flash movie, it will only play after the user has clicked on a preview image due to Facebook restriction. This part is cached by Facebook and will refresh by using setFBML or the more scalable method fb:ref tag and fbml_refreshRefUrl method. I strongly recommend fbml_refreshRelUrl method. You can learn more about fb:ref here and view the code example here: http://wiki.developers.facebook.com/index.php/FBML_Dynamic_Setup.

Boxes

Boxes is the part where your application will be. Note that your application can EITHER be inside WALL or BOXES tab, and this is controlled by the user. (See the next Screenshot, where under the Video application, the user can choose to “Move to Wall Tab” or “Remove Box”). Also note that you can choose the left column (wide) or the right column (narrow) under your application settings.

Under Boxes tab, your Flash file will NOT show until the user clicks on a preview image.

All the Boxes content are cached and is refreshed by setFMBL or the more scalable method fb:ref tag and fbml_refreshRefUrl method.


Application Tab

This is the best privilege your application can have. A user loves your application so much that he/ she adds it to an application tab. In this case, your application has all the real estate of the entire page, and you can have a very customized UI / information like the below screenshot (Animoto application)

Note that this page is NOT cached by Facebook. So any content is taken directly from a URL you specified in the application settings. For example, you can set Facebook to take from http://expertria.com/myapp/profiletab.php. Facebook will load the page and display any HTML it loads from your server inside the Application Tab.

This also means you need to prepare your server for the load as this is no longer cached by Facebook. Also, if your server is slow is responding, Facebook will consider it as a timeout.

The Main Application.

This is the main application, outside the profile page. This is the part where user who have granted the application permission will see. Typically, it is under a url like http://apps.facebook.com/yourappname/yourapppageurl.

For example, if you set the base url of your application as http://expertria.com/myapp/. A page on Facebook “http://apps.facebook.com/appname/viewallmyfriends.php will be retreivng information from http://expertria.com/myapp/viewallmyfriends.php

You can have as many pages in your application as you want, as well as useful features like URL-rewriting for neater URL address, etc. Facebook does not care as long as they get a http 200 response for the page it request and the response contain valid HTML / FMBL, and that the response is not empty.


PHP development

You can develop Facebook application in any language on your server, but PHP has more code samples and examples around. I will chose PHP as the development language just for the reason of support. Note that as of the writing of this article, if you download the PHP library from Facebook developers site, you will get the old library (which does not has the full feature set for the New Profile Design).

To get the latest one, please download from their SVN:
http://svn.facebook.com/svnroot/platform/clients/php/branches/redesign-changes/

Where to keep my data
As mentioned, Facebook does not care what you do on your server, as long as your server response with valid HTML / FBML. Therefore, you can have data persistence in your own mySQL, or any database you want.

However, I will recommend using Facebook Datastore for a few reason. Firstly, you will not need to maintain another database. Secondly, you can do FQL to achieve something like  “Get those users who had installed this application,w ho are also the current user’s friends, who also are tagged in my application” , in a very direct  manner. Thirdly, there is a test console to help you test your FQL (Facebook Query Language).

Essentially, Facebook Datastore consist of Objects (like Tables) and Associations (like Foreign Key). I strongly suggestion anyone who is new to Facebook Datastore to check out this blog here [
Introduction to the Facebook Data Store API ->http://www.dereksantos.ca/?p=23]. It has far better explanation than Facebook documentation, and anyone with RDBMS knowledge will strike a chore instantly by reading the article.

Using FMBL and Javascripts
Learn FBML and Facebook’s Javascript FBJS before building your application! While many HTML tags are supported in Facebook, you cannot use an Object tag to render your swf directly in Facebook. You will need to use <fb:swf> tag. Using FBML will also gives you a consistent look to your application, so that it will looks like Facebook native application. For example, there is no need to build a custom tab as there is fb:tab. There is also no need to create a blue button that imitate facebook buttons as you can always use Facebook’s css class=”inputbutton” to change the style of your button to match Facebook’s.

As for Javascript , there are also restriction to Javascript. For example, there is no innerHTML to get the content of your HTML. Thus, you will need to learn how FBJS works on Facebook. You will also need FBJS to communicate between your SWF and the main Facebook page.

Flash FBML
Refer to this page to see how to embed Flash in Facebook page. The documentation is complete
http://wiki.developers.facebook.com/index.php/Fb:swf

Essential you need to use Fb:swf to render your swf file.

Flash - JS Bridge
The <fb:fbjs-bridge/>  is essential for your SWF to communicate with the Javascript on your HTML page. It works like External Inteface basically. How it works is that it creates another SWF on Facebook page and your SWF communicates to it via LocalConnection. The bridge will then use External Interface to communicate to the Facebook page on your behalf.

Refer to this documenation for code samples: http://wiki.developers.facebook.com/index.php/Fb:fbjs_bridge

Also, check out this library to call / receive functions in AS3

Creating Flash in Javascript
There are two ways to create a SWF dynamically using Javascript. One way is to use a fb:js-string, which is a pre-setted FBML, initially invisible, and then use document.getElementById(’name of div to insert’).setInnerFBML(myjstringname) to show it on the page.

An fb:js-string example:
<fb:js-string var=”myjsstringname”>
<fb:fbjs-bridge/>
<fb:swf swfbgcolor=”333333″ imgstyle=”border-width:3px; border-color:white;” swfsrc=”http://expertria.com/swf/fb.swf”   width=”300″ height=”280″   />
</fb:js-string>
Another way is to use document.createElement(”fb:swf”), which will dynamically create a new SWF object. You can then set its swfsrc , width and height using the below code:

var swf = document.createElement(’fb:swf’);
swf.setId(’my_swf_id’);
swf.setWidth(’100′);
swf.setHeight(’100′);
swf.setSWFSrc(’FULL_URL_TO_MY_SWF’);
document.getElementById(’swfContainer’).appendChild(swf);

Summary
I hope the above article helps developers with Flex/Flash background in having a better understanding on Facebook Application. Feel free to drop any tips you have under the comments. There are a few things like Mock AJAX and AJAX javascript which I did not cover, but the above should be sufficient to get someone started.

Keep coding!

Aug 12


I know everyone is crazy over IPhone (or driven crazy by it) , but there is absolutely no reason to put it everywhere. In the above advertisement I received this morning, is about a Bakery shop (yes they sell cakes, not phones) and has absolutely nothing related to IPhone. So then, why is there an IPhone on the top left hand corner? Will be glad if someone can enlighten me on this.

I wonder if do the guy in charge even ask the designer what is the IPhone doing there before approving the advertisement?

Weird!

Aug 07

I just bought my ticket yesterday and will be going to MAX 2008 in San Francisco. I have been wanting to go MAX since it cease to exist in Singapore from 2006.

I will be sleeping in Seesmic office which is 40 minutes walk away from the main conference area. I am planning to stay there from 12th November to 23th November, meet up some friends over there as well as hoping to attend any Web 2.0 or Actionscript-related events that might happen during that period. I am very excited over this trip as I will be able to meet many people face-to-face that has helped me for the first time. Weee…!

Aug 06

And they say its GSOD . Grey Screen of Death.

Jul 30

Its weird nowadays how people are reacting to disaster like earthquake nowadays:

When someone saw a disaster / heard about it happening , will they…?

1. Think that global warming is causing all this

2. Start to save energy for a greener environment

3. Go to an make a donation for the victims if needed.

But I think for most people now, they will..

.

.

4. Tweet about it, then check if they are the first one that do so.

.

.

Duh!

Jul 29

Great news which I have been waiting for!

Article Quoted from creative commons

San Francisco, CA, USA and Singapore City, Singapore — July 27, 2008

Today Creative Commons Singapore announces the completion of the locally ported Creative Commons licensing suite. In close collaboration with Centre for Asia Pacific Technology Law & Policy (CAPTEL), the Creative Commons team in Singapore, led by Associate Professor Samtani Anil and Assistant Professor Giorgos Cheliotis, adapted the licenses both linguistically and legally to Singaporean national law. The Creative Commons licenses, now ported to 47 jurisdictions, enable authors, artists, scientists, and educators the choice of a flexible range of protections and freedoms in efforts to promote a voluntary “some rights reserved” approach to copyright.

[More at http://creativecommons.org/press-releases/entry/8517]

Jul 25

Reminds me of the times when my college friend say I should make my handwriting into a Font Face.

Oh ya, nobody understand my handwriting by the way even until today.

Jul 19

Me and my team is going for the 24 hours coding marathon competition tomorrow, hosted by ITSC Singapore. The competition will start at 9pm PST Friday to 9pm PST Saturday. I will be checking in live report of what we are doing via Seesmic. So keep coming back this space if you are interested.

Couple of Photos

Lionel Low and Alvin Zhang


Thats me. Yes fat me.


Some seesmic videos above.

A quick video of the application. I will do a better one, but thats what we have for submission.
We managed to get shortlisted and will be going for the final round of presentation on this wednesday. Wee!