RSS2.0

How to unlock your smily face in iPhone

Saturday, September 12, 2009

Wonder why there isn't any smiley face icons in your iPhone? Actually there is!

iPhone Emoji

Don't know why iPhone in US lock the smiley face input (a.k.a. Emoji, in Japan); if you follow the instruction in this post, you'll easily get your smiley face icons!

spell number

But remember, these icons are only supported by iPhone, which means if you send a text message using smiley faces(Emoji) to someone's blackberry, it won't work! They only see a bunch of weird symbols.

Cell phone as a game controller

Wednesday, September 9, 2009

We've seen people using their cell phone as a remote to their iTunes, Laptop, and PowerPoint slide show, but have you seen this? This guy created an app to make his HTC Hero cell phone as a Nintendo game controller!



This cell phone application was developed under Android platform. More information here

MagneBall

Friday, December 14, 2007

This is a hardcore cellphone game!



Use arrow key to control the moving ball, hit the target and you'll win!
In later stage, watch out the land mine, don't go out of the boundary,
or you'll directly lose!

This game is skill required, and Flash player mobile phone required.
In the game development, the next step would be combined with tilt sensor(accelerometer, such as NOKIA N95)phone, to control the ball using tilting gesture.

Click to Play

have fun!

Idea Review

Tuesday, October 2, 2007

Review the concept of our classmates' mobile application project

Revision of Nokia Snake: (Eric Chiu)

It's good to be retro sometimes, and especially to appreciate those classics. Nokia Snake is one of the cell phone games that you'll never forget. By revising Nokia Snake is not only good to practice J2ME sytax but also get a better idea of game design. Another point I wanna mention that is, to wisely manipulate color in the revision could be a plus factor that enhance the playing experience; And don't forget the sound !!!


Hello Stranger-Mobile Karaoke(Shin-Yi HUANG)

Since we can talk together, why not sing together? Karaoke is a good thing to be added in mobile application since it's another kind of communication which might involve more emotional information within. Moreover, we can't talk at exact same time because otherwise we cannot clearly hear what other people are saying. But singing is different, we can sing together at the same time to create wonderful harmony!

It would be a good trial if it's combined with lyrics on the screen, background music in your ear phone, and your friend's singing from somewhere far far away...!

EasyMap-Google Map Hack

How to make Google Map more useful on your phone if you don't have GPS function? Here are something I found hard to use Google Map on your phone:


1. Zoom In/Out
2.

Source Code:

import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.Canvas.*;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;



public class ImageMonkey extends MIDlet implements CommandListener, Runnable {

/*
* A reference to the MIDlet's Display object
*/
private Display mDisplay;

/*
* A form for displaying an image
*/
private Form mForm;
String url= "http://itp.nyu.edu/~htt213/Mobile/MapITP_01.png";

/*
* Constructor
*/
public ImageMonkey() {

mForm = new Form("Connecting...");
mForm.addCommand(new Command("Exit", Command.EXIT, 0));
mForm.setCommandListener(this);



}



public void startApp() {
if (mDisplay == null)
mDisplay = Display.getDisplay(this);
mDisplay.setCurrent(mForm);
// Run network operations in a separate thread.
Thread t = new Thread(this);
t.start();
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT)
notifyDestroyed();
}

class KeyFinderCanvas extends Canvas {
int lastKeyCode = 0;
protected void keyPressed(int keyCode) {
lastKeyCode = keyCode;
System.out.println("Key Pressed");

}

protected void paint(Graphics g) {

if (lastKeyCode == 38){
url = "http://itp.nyu.edu/~htt213/Mobile/MapITP_01.png";
g.drawString("Zoom Out", getWidth()/2, getHeight()/2,
Graphics.BASELINE|Graphics.HCENTER);
System.out.println("Zoom Out!");


}

if (lastKeyCode == 40){
url = "http://itp.nyu.edu/~htt213/Mobile/MapITP_02.png";
g.drawString("Zoom in", getWidth()/2, getHeight()/2,
Graphics.BASELINE|Graphics.HCENTER);
System.out.println("Zoom In!");

}
}
}
public void run() {
HttpConnection hc = null;
DataInputStream in = null;





try {
/*
* We're going to read in a URL from the JAD file
* We could just as easily do something like this:
* String url = "http://website.com/mynewurl";
*/
//String url = getAppProperty("ImageMonkey-URL");
//String url = "http://itp.nyu.edu/~htt213/Mobile/MapITP_01.png";
System.out.println("Getting Map!");
hc = (HttpConnection) Connector.open(url);
int length = (int) hc.getLength();
byte[] data = null;
if (length != -1) {
System.out.println("Content Length is " + length);
data = new byte[length];
in = new DataInputStream(hc.openInputStream());
in.readFully(data);
}

else {
// If content length is not given, read in chunks.
int chunkSize = 512;
int index = 0;
int readLength = 0;
in = new DataInputStream(hc.openInputStream());
data = new byte[chunkSize];
do {
if (data.length < index + chunkSize) {
byte[] newData = new byte[index + chunkSize];
System.arraycopy(data, 0, newData, 0, data.length);
data = newData;
}
System.out.println(".");
readLength = in.read(data, index, chunkSize);
index += readLength;
} while (readLength == chunkSize);

length = index;
}

Image image = Image.createImage(data, 0, length);
ImageItem imageItem = new ImageItem(null, image, 0, null);
mForm.append(imageItem);
mForm.setTitle("Try using arrow key to zoom in");
}

catch (IOException ioe) {
StringItem stringItem = new StringItem(null, ioe.toString());
mForm.append(stringItem);
mForm.setTitle("Done.");
}

finally {
try {
if (in != null)
in.close();
if (hc != null)
hc.close();
} catch (IOException ioe) {
}
}
}
}

CodeTest

Tuesday, September 25, 2007

See the code below:


import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDlet;

public class KeyAnimation extends MIDlet implements CommandListener{

private Display display;
protected boolean started;
private Command exitCommand;

protected void startApp() {

//for debugging
System.out.println("I'm starting!!! - " + started);

if (!started) {
display = Display.getDisplay(this);
Canvas canvas = new KeyFinderCanvas();
exitCommand = new Command("Exit", Command.EXIT, 0);
canvas.addCommand(exitCommand);
canvas.setCommandListener(this);
display.setCurrent(canvas);

started = true;

System.out.println("Application Started! Yay! - " + started);
}
}

protected void pauseApp() {
}

protected void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
// Exit. No need to call destroyApp
// because it is empty.
notifyDestroyed();
}
}
}

//KeyFinderCanvas is a separate canvas which displays keys and codes
class KeyFinderCanvas extends Canvas {

static int[] keyCodes = {KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4,
KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9,
KEY_POUND, KEY_STAR};
static String[] keyNames = {"KEY_NUM0", "KEY_NUM1", "KEY_NUM2", "KEY_NUM3", "KEY_NUM4",
"KEY_NUM5", "KEY_NUM6", "KEY_NUM7", "KEY_NUM8", "KEY_NUM9",
"KEY_POUND", "KEY_STAR"};

static int[] gameActions = {
UP, DOWN, LEFT, RIGHT, FIRE,
GAME_A, GAME_B, GAME_C, GAME_D};
static String[] gameNames = {
"UP", "DOWN", "LEFT", "RIGHT", "FIRE",
"GAME_A", "GAME_B", "GAME_C", "GAME_D" };


int lastKeyCode = 0;

int lastX;

int lastY;

boolean pointer;

protected void keyPressed(int keyCode) {
lastKeyCode = keyCode;
repaint();
}

protected void keyRepeated(int keyCode) {
lastKeyCode = keyCode;
repaint();
}

protected void keyReleased(int keyCode) {
lastKeyCode = 0;
//repaint();
}

protected void pointerPressed(int x, int y) {
lastX = x;
lastY = y;
pointer = true;
repaint();
}

protected void pointerDragged(int x, int y) {
lastX = x;
lastY = y;
pointer = true;
repaint();
}

protected void pointerReleased(int x, int y) {
pointer = false;
repaint();
}

protected void paint(Graphics g) {
g.setColor(0xffffff);

//this is not smart, instead of doing this - what would you do?
g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(0);




if (lastKeyCode != 0) {
String keyText = "keyCode " + lastKeyCode;
String keyName = null;



// See if it is a standard key
for (int i = 0; i < keyCodes.length; i++) {
if (lastKeyCode == keyCodes[i]) {
keyName = keyNames[i];
break;
}
}

if (keyName == null) {
// See if it is a game action
for (int i = 0; i < gameActions.length; i++) {
if (lastKeyCode == getKeyCode(gameActions[i])) {
keyName = gameNames[i];
break;
}
}
}



// g.drawString(keyText, getWidth()/2, getHeight()/2,
// Graphics.BASELINE|Graphics.HCENTER);

// if (keyName != null) {
// g.drawString(keyName, getWidth()/2, getHeight()/2 + g.getFont().getHeight(),
// Graphics.BASELINE|Graphics.HCENTER);
// }
else if (pointer) {
g.drawString("(" + lastX + ", " + lastY + ")", getWidth()/2, getHeight()/2,
Graphics.BASELINE|Graphics.HCENTER);
}

// int x1 = 0;
// int y1 = 0;
if(lastKeyCode == 49) {

g.setColor(30, 150,150);
for(int moveX = 0; moveX< getWidth(); moveX+=20){
g.fillRect(moveX,20,10,getHeight());
if(moveX == getWidth() ){
//moveX = 0;
System.out.println("moveX = " + moveX);
repaint();
break;
}
}
System.out.println("drawing No.1 ");


}

else if(lastKeyCode == 50) {

g.setColor(30, 150,150);
for(int moveX = 0; moveX< 300; moveX+=20){
g.fillArc(20,10,90,100,270, moveX);
repaint();
if(moveX == 300 ){
//moveX = 0;
System.out.println("moveX = " + moveX);
break;
}
}
System.out.println("drawing No.1 ");
//System.out.println("this is testing");
}

}


}
}

Mankind Radar

Thursday, September 20, 2007


Searching for people? Waiting for friends? Looking for kid? Now you have a great tool to target your Mr. or Ms. Right, don't have to worried about missing important people.



Mankind Radar is a mobile application that allows you to exactly locate your familiar people. By using Java mobile technology, you can have a great visual interface to tell you where he is, how far is the distance, and which direction. With the help of embedded GPS in your phone, you can easily dynamically find the people you're looking for.

API
With the help of GPS and positioning technique, "Mankind Radar", this brand new mobile application is gonna refer to certain existing API(mobile application):

1. GPS connecting and data transferring protocol
2. Mobile Processing (for the Radar animation)
3. Reading contact information (to show their picture)