""

Archive for May, 2011

Chrome to phone

Well i have been using chrome to phone extension on my android 2.2.2, and its so magic and useful in my daily life. Anyway Chrome to Phone app is available on android market. But in some countries it is not available. In my country it wasn’t available in market so i found the apk file of google chrome to phone in some website forum that i don’t remember. So if u want to download and install this app on your android then scan this link:google chrome to phone

The App version is 2.2.0

I installed the extension plugin for my chrome browser from chrome web store. Here is the video on installing and using and what its all about:

Gracias.

Adobe Flash on Android ?


I have seen demos showing flash sites opening on high end android devices like HTC Desire HD or Nexus One. So i was looking through the posts about installing adobe flash player 10.1 on my lg optimus one p500 (android 2.2). The author of that particular blog explained a few steps to install flash 10.1 on android 2.2 phones (specifically mentioning my p500),

1) First The author provided a link to adobe flash player 10.1 as it is not available in android market right now(flash player 10.3 is available). So I downloaded it and installed it on my lg optimus p500. It got installed without having any trouble.
2) I restarted my android phone.
3) I opened my android browser and opened a flash web site.

And guess what?????? yay it worked………….not…………no it didn’t worked :P.
Browser just closed in between loading site. I tried with all browsers on my phone viz Opera, Skyfire, Dolphin HD, same result on all browser. All browser crashed.

So i guess flash player is not supported on my device. But i don’t care hehe 😛

Gracias.

Yesterday few of my juniors from school were asking me for some good fast prime number finder algorithm but simple. They used to find prime numbers by testing divisibility by all integers from 2 to number-1. This is very basic routine, i remember i also used to use it when i first started. So anyway they wanted to know some fast, efficient and also simple routine to find prime number. So i told them about Eratosthenes Sieve algorithm, its fast, efficient and simple also. So i quickly wrote a module in python and gave them 🙂

def findPrimeNumbers(max):
    nlist=range(2,max+1)
    maxM=math.ceil(Math.sqrt(max))
    index=0
    while nlist[index] < maxM:
        prime=nlist[index]
        index2=index+1
        while index2 < len(nlist):
            if nlist[index2] % prime==0:
                nlist.pop(index2)
            index2+=1
        index+=1
    print nlist

Gracias

DestroyBody de BOX2D Flash

Destroying box2d(Box2D Flash) objects is always not smooth, if you don’t manage the references properly. Well sometimes it doesn’t get destroyed also even after calling DestroyBody() method because there is still some reference to box2d objects that is active and u have to keep track of that. I had this problem more often. But yeah i again came up with my just stupid solution to tackle above problem and it works. I have tested this in my all Box2D Flash projects.

What i generally do is create a custom class which would represent particular box2d body, for example in pool game i would create a class called Ball. So now i would create a method called getDestructionStatus() which tells me if particular body is eligible for destruction. And second method i would define called destroy(), in destroy() method you can write your cleanup() implementation like if u have some movieclip associated then you can remove it from stage [Note: I didn’t call DestroyBody in destroy() because it didn’t work for me] Something like this :

public function destroy():void {
	//your custom cleanup code before making box2d body eligible for destruction
			
	destructionStatus = true;	//eligible for destruction	
}
public function getDestructionStatus():Boolean {
	return destructionStatus;
}

Now how would u implement ? Well lets say if my ball collides with wall then i want to destroy the ball, so code would look like this:

override public function BeginContact(contact:b2Contact):void 
{
	if ((contact.GetFixtureA().GetBody().GetUserData() is Wall && contact.GetFixtureB().GetBody().GetUserData() is Ball)) {
		contact.GetFixtureB().GetBody().SetAwake(false);
		contact.GetFixtureB().GetBody().GetUserData().destroy();
	}
}

Above i am using a custom class that extends b2ContactListener class and i am overriding BeginContact to determine the collision and provide my some custom implementation response. Here is a insight on b2ContactListener tutorial from Allan Bishop.

Now when my ball collides with wall then i call destroy method on it, which runs my custom cleanup and set the destructionState to true. Now i will check for this destructionState and call DestroyMethod, calling DestroyBody in correct context and block matters because as i said if some reference is still pointing to body then it won’t get detroyed. Here is the implementation code:

for (var worldBody:b2Body = world.GetBodyList(); worldBody; worldBody = worldBody.GetNext()) {
	if (worldBody.GetUserData() != null) {
                if (worldBody.GetUserData().getDestructionStatus()) {
			world.DestroyBody(worldBody);
		}

                //write a code to update the position, rotation whatever you want of bodies
        }
}

Now comes the main part:
I want to explicitly point out that i have put DestroyBody call inside the world body list iteration because it always worked for me without any issues, my bodies got destroyed and that was what i wanted. I hope it works for you also. I also want to try other techniques, so if you apply other way to destroy objects then please share with us. It would help me and others a lot xD

Gracias

LoaderMax befriends Firefox

For my portfolio flash site i am using LoaderMax from greensock. Why did i use LoaderMax ? Well first i just started using LoaderMax and i am new to it. I am using LoaderMax for two very basic reason:
1) Loading multiple images easily. Well i want to calculate whole progress of multiple assets loading and show it in loading progress which was difficult for me to do when doing it in traditional sequential manner (using loader class). It was tough to find bytes total of all images as i used to load images one by one in sequence.
2) Garbage collection/resource release: When i used to load images using typical loader class, i used to face a problem though i later solved it but still i don’t have to go extra step in case of LoaderMax. The problem was when loading was in progress and i closed my browser window then an error was thrown saying “loading never complete” as shown in my previous post. But with LoaderMax i don’t have to worry about it because it releases the memory if loading process gets paused or aborted.

But in this post i am not discussing the tutorial to use LoaderMax or its features. As always i faced a certain problem and i solved it xD. So i wrote a code module including LoaderMax which ran flawlessly on all web browsers (internet explorer, chrome, opera, and safari) but it didn’t run on Mozilla Firefox. When running on Firefox an exception error was getting thrown and i spent 1 hour to find the reason and couldn’t find it and got me pissed me off xD. First let me show you the code module that i wrote and was throwing exception on firefox:

var queue:LoaderMax = new LoaderMax({name:"mainQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler});

queue.append( new ImageLoader("img/photo1.jpg", {name:"photo1"}) );
//start loading
queue.load();
function completeHandler(event:LoaderEvent):void {
    var image:ContentDisplay = LoaderMax.getContent("photo1");
}

here is the screenshot of error:

In first statement of function completeHandler i am retrieving loaded image. I am sending it to my resize algorithm later to resize the original image to fit into my target area. But it throws error on firefox because it says invalid bitmapdata. My resize algorithm takes displayobject as parameter and ContentDisplay extends Sprite class. Note: LoaderMax can also resize your original image according to aspect ratio

I didn't understand why this error was coming in firefox but not in other browsers. At first i thought maybe my algorithm was having issues with type ContentDisplay so i re-wrote my completeHandler function as follows:

function completeHandler(event:LoaderEvent):void {
    var image:Bitmap = LoaderMax.getLoader("photo1").rawContent;
}

The above new statement gives me bitmap. Now i run my module and guess what ? yay yepee it didn't run on firefox but ran on other browsers xD and this time i got null exception, yeah above statement returned null, weird rite ?? I was frustrated and cussing firefox xD. But accidently while doing just trial and error i added few parameters and viola boom bang dang it got running on firefox and all browsers xD. here is the new change that i made :

queue.append( new ImageLoader("img/photo1.jpg", {name:"photo1", estimatedBytes:2400}) );

well if u have noticed, i have added new parameter called "estimatedBytes". Yes, just this parameter solved above problem and again i was left scratching my head heheheh xD.

Gracias.