Monday, November 23, 2009

PicoSocial

New addition to the Pico family. I am proud to present the PicoSocial Facebook application.
As its brother, PicoWave, it enables online voice conversations between online users, the friends of the user who installed the PicoSocial application and as PicoWave its also built on the WebLynx solution which VoIP enables everything it touches.
The application is right now a alpha stage but already can be used by anyone who likes to experience.

Facebook applications is a more richer ground for application features then the Google Wave one, because of Facebook of course. It allows interaction not only with online friends but with friends who never installed PicoSocial application. One of the models for application usage can be placing outgoing calls (like SkypeOut) to the friends who shared their phone numbers (or mobile phone numbers). Incoming calls to the online users is also an option.

If you want to try the application use this link:

http://apps.facebook.com/picosocial

You comments and thoughts you can leave here or email to picosocial@mailvision.com.

Follow the application on @picosocial for twitter updates.

Saturday, November 14, 2009

Google Wave extensions (gadget) development with Adobe Flex

Recently I've developed a Google Wave extension (gadget) using Flex and in the following post I will try to help people that are thinking of doing the same, to save some time and headache by not repeating the pitfalls I've encountered.

1. If you are developing an Extension with Flex you are most likely will want to communicate with the wave framework. This is done using Javascript.

Google included an API to embed Flash objects in the wave but the API is non sufficient for the extension development. It does not let you pass the required parameters to the SWF. The workaround is using javascript (not Google Wave APIs) ones like you would do normal regular flex SWF in HTML. My suggestion is to look on the HTML wrapper files generated by Flex Builder and use the Javascript functions from there. For example to embed SWF file named "test.swf" you will have to do the following:


AC_FL_RunContent(
"src", "http://hosted.somewhere/test.swf",
"width", "350",
"height", "400",
"align", "middle",
"id", "flexId",
"quality", "high",
"bgcolor", "#869ca7",
"name", "flextId",
"allowScriptAccess","always",
"enablejs", "true",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);

Please note the "allowScriptAccess" directive. Using this you will be able to call javascript from Flex and Flex from javascript.

Next step is too allow javascript access from the HTML to SWF. You have to allow it in the Flex code by including the following code somewhere in the application initialization:

Security.allowDomain("*");

This is required since the SWF is being executed from a different domain its hosted on.
After following the above you will be able to use javascript and to embed the SWF object.

2. How do you call Flex from Javascript and Javascript from Flex ?

From Flex to Javascript:

Lets assume you have a function fooJs() defined in your Javascript in the HTML wrapper.
To call it from Flex you will have to:


if (ExternalInterface.available)
{
try {
ExternalInterface.call("fooJs", null);
}
catch(error:Error) {
}
}


The other way around, lets assume once again that you have a method called fooFlex() in your Flex code. To call it from Javascript you first have to register a callback to the method in your Flex application:


if (ExternalInterface.available) {
try {
ExternalInterface.addCallback("fooFlex", fooFlexImpl);
}
catch(error:Error) {
}
}

public function fooFlexImpl(params:String):void {
     // Actual Flex impl.
}


Then you can call it from javascript:


document['flexId'].fooFlex(someParam);


Ok, following this will save you at least few hours, I hope. Now you can use Google Wave API to pass status  and participants updates to your Flex application and do status updates from your Flex application.

If anything is unclear or you need additional info, do ask.

Thursday, November 12, 2009

Why Flex and not Ajax

Some time ago, my CTO asked me a question: "Why do we develop GUI using Adobe Flex and not some Ajax toolkit ?".


Following is list of reasons I compiled, maybe someone will find it helpful when being asked the same question:



1. Its a technology we have more than 3 years of development and design expierence with.
2. Established community and plenty of forums are available.
3. Cross browser, cross OS.
4. Eye candy with almost no effort.
5. Can be executed as a desktop application (AIR).
6. Very good client-server interaction . (Blaze DS, Granite DS)
7. Solid development tools - Flex Builder, Intellij.
8. Good object oriented development language. (actionscript)
9. Very good debuging and profiling tools which is very important in GUI development.
10. Flex's graphs and reports framework.
11. Very good webservices toolkit.
12. Media streaming capabilities (Red5).

PicoWave

Everybody are excited about Google Wave, so am I.

Today I've released a Google Gadget that VoIP enables the waves so that all the wave participants can speak (voice, words, vocal) between each other.

The Gadget is based on MailVision product that is called WebLynx. Its partially server and partially client based product. On the client side its a flash SWF file (built with Adobe Flex) that communicates with our server using proprietary API and Flash audio codecs (NellyMoser and Speex). From there its SIP/RTP to the nearest SoftSwitch and on the world.

The PicoWave gadget variation enables calls between wave participants and no outside world calls although we are planning to extend its functionality and add incoming calls to Waves and outgoing calls to PSTN from within the wave, all depends on the interest to the gadget.

Its a first gadget of this kind in the market and we are very excited to release it and to see the feedbacks it will produce.

You can follow the gadget news on Twitter as well. The Twitter name as you might have already guessed is "picowave".

On a later posts I will write down my experience developing this gadget.

Now, to use the gadget you should do the following:

1. Add the gadget to the wave by URL:
http://picowave.mailvision.com/picowave.html

2. Add Google Wave extension using the following manifest:
http://picowave.mailvision.com/manifest.xml




Some quick HOWTO:

1. Take a seat
2. See all online participants
3. Click participant to call him.

If you are alone in the wave and still want to try the gadget you can call our echo service that is always in a seat waiting there just for you :-)


Your comments please leave here, send my mail or Wave it in our public testing wave which you can find by searching for  "tag: PicoWave with:public".

Follow the application twitter @picowave.

Starter

Its my first post so let me tell something about myself.

My name is Dima Gutzeit and I work for a company called MailVision. We are making VoIP related products including servers and clients, the whole range, you name it.

My job is the Team Leader of the Server side products @ MailVision R&D.

In this blog I will post interesting developments and problems I came across and solved as well as other things I am passionate about (like the products we make for example).

Thats it for now.

P.S. - My twitter name is "@dgutzeit".