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 07

Today, we have officially started the ticket sales for The Actionscript Conference.

The price for The Actionscript Conference is $60 until 1st October, which will include lunch, delegate bag and access to post-event party, and of course, many interesting sessions that the invited speakers will be talking about. 25 tickets has been sold in a day and that is very encouraging to us!

Whether you are in Singapore, or nearby countries like Malaysia , Thailand and Philippine, we welcome you to join us! Reserve your ticket today!

I will also be heading to SgDotNet Usergroup Meeting tomorrow to spread the event to the .NET users (in fact, the backend of the TAC registration runs on asp.net).

For those who wish to meet the organizers and the usergroup, learn about BlazeDS and Gaia Framework, feel free to join us at Yahoo! next week by RSVP here. There are just a few seats left at the time of this posting so do reserve one now.

Ciao~

Jul 26

Recently I tried to edit a long FLV file which I have recorded and stream at UStream for FUG Recorded Session but with no valid. A search for FLV editor usually takes to sites that sells overpriced editor or windows only editor. I settled with VisualHub, recommendation from my colleague Critter, but found that the output has no sound.

Today, Ted Patrick blog about RichFLV and it works! RichFLV is a FLV editor built on Adobe AIR. The simple interface (not to mention fast too) makes editing FLV a breeze. Kudos to RichFLV creator Benjamin Dobler!

Jul 10

Seesmic and Flowgram came useful yesterday when I use them to show Flash searchability and FUG.  The following photos are snapshot from videos, so they are blurry.

Video showing Ryan Stewart on Flash searchability, on Seesmic, which I embed onto my blog using Seesmic Threaded Player. The cool  thing about this is that the participants can actually come but to my blog and reply to him personally.



Flowgram on “introduction to FUG”. I promised Flowgram to showcase their application during FUG. Thanks flowgram for their invites!

The cool thing is that both of them are built with Flex, so I am basically using Flex to introduce Flex to a group of Flex/Flash developers. Talking about eating one’s own dog food ;)

Zemanta Pixie
Jul 04

This is so exciting !

Jun 30

Singapore Flex Usergroup - July Usergroup Meeting Special - FUG’ Out 01

FUG’ Out (pronounced as ‘fun-out’, or up anything in your own creativity) is a special usergroup event in which we held the usergroup meeting out of Adobe office, into the base of different companies, places. Accompanied with FUG’ Out is contest and free goodies.

For the very first FUG’Out, we will hold our usergroup meeting at the international award-winning company, Tequila\ (http://www.tequila.com). In this meeting, Andrii Olefirenko will speak about Papervision 3D. We also invited Nico, the founder of FDT, Germany, to give us a remote presentation on the FDT IDE and how it can improve your development workflow.

Venue
TBWA\Tequila
T\Junction Building, 5 Kadayanallur Street 069183
Seminar Room

Time
7pm to 9.30pm (Registration starts at 6.30pm)

Price: FREE

Jun 20

Well, I am definitely thrilled to say that Seesmic has released its new threaded player. There are quite a few reason why.

Firstly, The new threaded player allows you to embed any video post from Seesmic onto any website , and from there, you will be able to reply to the video within it without even going to Seesmic main website itself. This means you can now, 1. post something on seesmic, and then 2. embed the player anywhere you want, and 3. your website visitors can start replying to you. You will still get email notifications when someone has replied to your videos and all you need to do is to pop back to where you have embedded it, and reply to them. Essentially, conversations anywhere now and will be useful for people selling new products, etc.

A sample video by Seesmic CEO Loiclemeur:


 

This news comes right after the announcement that Twhirl supports viewing of seesmic videos. Essentially, now you can put a video conversation widget everywhere, start Twirl and start seeing video replies coming it. Pretty neat.

Secondly reason is because it is done in Flex, and as I have already mentioned many a time, I am very excited to see more and more websites shifting towards Flex, like Sproutbuilder, and of course, Seesmic. Alvin Zhang, an Actionscript Trainer in Singapore, started to looked into Flex recently to see it as an alternative platform for his future actionscript projects. He mentioned that “now I can do what I do in 1 week in 1 day”. I totally support what he said, and while Flex is not the main reason why companies like Seesmic (and Twhirl), as well as SproutBuilder can push out its feature faster, I will say it is definitely a contributing one.

The third and last reason is because with sleepless nights I had building the new player, I am glad to see it live now! Hopefully that gives me some time allowance to record my 7th episode of 5 mins Flex.

 

Â

Jun 14

During the Flex Singapore Usergroup June Meeting, I met Michael, the founder of Comiqs.com. Michael introduced to me his startup, which utilizes Flex and allow users to create their own comics strips using either a set of predefined images, upload one, or any image from the web.

Creating a ‘Comiq’ is simple enough. Register and click on Create and you are well on the way to create your first Comiq. The creation process is largely done by drag and dropping the images, text into the main Canvas. Everything you drag into the canvas can be rotate and scale, making the laying of your assets very foolproof

Once you are done, click on publish and your first Comiq is done.

You can view mine here http://comiqs.com/comics/OWqUDswAaVv

It is very nice to see more and more startups as well as MNC in Singapore using Flex. Good job guys!

Jun 13

In this episode, we talk about how you can create programmatic skinning in your Flex components

Video:

Related Files:
https://share.acrobat.com/adc/document.do?docid=539adfa2-738a-45d5-ac44-5e1b7201b200

Related Link:
Designing Flex 3 skins and styles using Creative Suite 3 and Flex Builder 3�

Jun 13

The Seesmic Wordpress Plugin is a plugin which allows you to do video commenting on your blogs. Ever since its launch, it has been integrated into Disqus as well as released its API for other developers to integrate into their system.

 

Today, the plugin make its way into the Wordpress Plugin directory, which you can download it at http://wordpress.org/extend/plugins/seesmic-wp/

I am very excited to have played a part in coding the plugin, and thus I am very happy at where it has actually being installed  and the good feedbacks of it. Definitely keep my coding flames burning!