Friday, May 2, 2008

C programming tutorial course: Setting up hardware and software.

C Programming Tutorial: Programming software : ICPROG (Free!)Download and install ICPROG which is PC software that generates the correct serial ICSP signals to program your PIC chip. You can use it either on a parallel port, serial port or USB port with a USB to serial adapter - ( USB <-> Serial untested).Note: Look in left frame for download button.
C Programming Tutorial: Setting the path to ICPROG You should setup the environment variable to icprog.exe so that it can be called from anywhere but if you don't you can still start icprog by double clicking icprog.exe in its installation directory.The installation location is up to you but you should put it into a directory that is in the current path so that windows can find it or add the directory (where you put ICPROG) to the system path environment variable.Unfortunately setting up the windows path is different for every windows installation from Windows 95 to XP so you will need to find the exact details for your operating system. Windows 95 uses autoexec.bat and config.sys. For XP you can set the path from Start --> Control panel --> System --> Advanced (tab) --> Environment variables. You can set the path for a user or the system. I usually set the system path but see below:Note : Do not delete the path variables and only add to the end of them. If unsure select the system path value and copy and paste it to a local editor. There edit it keeping all the original - make sure it is exactly the same with only your additions on the end. e.g. if you want to put icprog.exe in a directory c:\icprog-path add the text 'c:\icprog-path;' to the end. Note save the text editor text and check everything works as before - if it does not go back and set the path to what you started with.

C Programming Tutorial: ICPROG for Windows 2000/XP users Windows 2000 and XP stop you using the parallel port directly by adding a layer of software between your program and the parallel port. It's probably there so that no more than one process (e.g. printer) or user can access it at the same time - but a 'PC' is a personal computer usually used by one person this "feature" just gets in the way.What this means is it is a pain if you want to use the parallel port for hardware. To get round this you have to install another piece or software which *will* allow you access to the parallel port. For ICPROG this program is a system driver and you can also download it from the ICPROG page it is icprog.sysFor a parallel port programmer you need to install icprog.sys to allow the software to have parallel port access:Note: A Serial or USB port programmer does not have this restriction.Open an explorer window and navigate to the icprog install directory,Download the icprog.sys file to your icprog install directory i.e. in the same directory as icprog.exe.
C Programming Tutorial: Windows XP and ICPROGUsing explorer select icprog.exe, right click. Then select the Properties menu then the Compatibility tab. Make sure compatibility mode is disabled - icprog will set this for you as you follow the next instructions.Start ICPROG - a privileged instruction error occurs - ignore this - icprog starts.Now in icprog choose Menu --> Settings --> Options --> Misc (tab) and set Enable NT/2000/XP Driver - icprog will now re-start with the driver installed.
First circuit for the C Programming Tutorial Course: Next you need to construct the following circuit:Note D7 should be placed at the top right of your development board as this will form part of the dice circuit later on.
BOM for the C programming tutorial course.For this page - see below for BOM for the 1st complete circuit.Here is the list of parts for the above circuit (or Bill Of Materials):
C programming tutorial BOM
R14End of C Programming Tutorial BOM.The last 3 components are for the curve tracer which also uses 10k resistors for gain setting.
(Click here for the parts list and circuit for c programming course 1st project)
You also need a circuit board to work on or a solderless breadboard and wire for connecting up the circuit.
Preparing the 16F88 for the C Programming Tutorial:R1 stops the part entering the wrong programming mode (LVP mode). LVP mode is the default mode (Low Volt Programming) and is always enabled for new parts but it makes the pin unusable for anything else. Since there are not many pins in this particular part the first task is to disable LVP mode. You can do this by programming the part with the first program which has turned off the LVP fuse and at the same time it flashes the LED so once the part is programmed you can see that it's working.At this point you don't need to do any compilation or C coding so lets just go through the programming process.Note: Later diagrams may not show R1 as it is only important when1st programming the part (if you ensure that the LVP control is always set to off in the compiler project edit control panel - see videos for more information on that).
C Programming tutorial directory preparation.Create a working directory:
c:\pic-c-course
Download hex file for setting up the C programming tutorialDownload the following zip file:
Download file:
Download here.Download the file c-course-Intro.zip to that directory. Note: I use 7zip - just do a google search for '7zip' if you don't have an unzip program which is free and integrates into the windows shell - meaning you can right click in explorer and directly zip/unzip files.Unzip the file 'prog00-16F88-intro.zip' in the pic-c-course directory. It will create a directory c:\pic-c-course\prog00-16F88-intro\ in which will be a hex file.
C programming tutorial: Program the 16F88 using ICPROGFor this C programming tutorial you should have installed ICPROG so start that program up now. Setup the hardware interfaces for your programmer using the options menu.
Note see module 1 of the course for a video tutorial on ICPROG.
Load hex fileNow open the file (in ICPROG)
c:\pic-c-course\prog00-16F88-intro\prog00-16F88-intro.hexNow program the file into the PIC Microcontroller.Note: You can find detailed instructions on using ICPROG for this C programming tutorial here.
C programming tutorial: ResultYou should now have a circuit with a flashing LED - this is the equivalent of the "hello World" program you usually find in the start of C courses but because the microcontroller is only concerned with I/O ports there is no way of displaying a message yet ...... later on we'll look at RS232 where you can make a hello world program. Congratulations......you have programmed the microcontroller correctly and are now ready to start the C programming tutorial course. This proves that all the software and hardware is operating correctly.
C programming tutorial: Notes Things to note about the circuit for the C programming tutorial course:
it uses the internal oscillator.
it has an internal reset circuit. The internal oscillator is running at 4MHz and saves you using an external crystal or RC network. Similarly the reset circuit is also internal. Both these features save pins as what was once a dedicated reset pin can now be used as an I/O pin. Again using the internal oscillator saves two pins for use as I/O pins.End of C programming tutorial Setup page.

Wednesday, April 30, 2008

What is Forex Trading

Overview
Forex, FX, or Foreign Exchange, is the simultaneous exchange of one country's currency for that of another. FOREXYARD offers leading online trading platforms for individuals that wish to speculate on the exchange rate between two currencies. In doing so, speculators purchase or sell one currency for another with the hope of making a profit when the value of the currencies changes in favor of the speculator as a result of events that takes place across the globe. This market of exchange has more daily volume - both buyers and sellers - than any other market in the world. The FX market is available 24-hours a day, five days a week. Furthermore, the Forex Market is the largest financial market in the world with daily reported volume of over $1.4 trillion changing hands between buyers and sellers across the globe, making it one of the most exciting markets for trading. Although currency trading is inherently governmental (central banks) and institutional (commercial and investment banks), technological innovations, like the internet, have made it easy for individuals to take part in the currency trading markets and to trade via intermediaries online.

How an FX Trade Works
In the FX market you can buy or sell one currency for another. When you buy a currency, you are said to be "long" in that currency and when you sell a currency, you are said to be "short" in that currency. As the value of one currency rises or falls relative to another, traders decide to buy or sell currencies in order to make profits - since the objective is to earn a profit from their position. Placing a trade in the foreign exchange market is simple and the mechanics of a trade are virtually identical to those found in other markets. Because of the symmetry of currency transactions, you are always simultaneously long in one currency and short in another. An open position is one that is live and ongoing. As long as the position is open, its value will fluctuate in accordance with the exchange rate in the market. To close out your position, you conduct an equal and opposite trade in the same currency pair. For example, if you have gone long in one lot of EUR/USD you can close out that position by subsequently going short in one EUR/USD lot (at the prevailing bid price).
Quoting Currency Pairs
Currencies are quoted in pairs, such as EUR/USD or USD/JPY. The first listed currency is known as the base currency, while the second is called the counter or quote currency. The base currency is the "basis" for the buy or the sell. For example, if you BUY EUR/USD you have bought Euros (simultaneously sold dollars). You would do so in expectation that the Euro will appreciate (go up) relative to the US dollar.
Currency Abbreviations
Symbol Definition Symbol Definition
EUR Euro NZD New Zealand dollar
GBP Great British pound AUD Australian dollar
USD US dollar CAD Canadian dollar
CHF Swiss franc JPY Japanese Yen
EUR/USD
In this example Euro is the base currency and thus the "basis" for the buy/sell. If you believe that the US economy will continue to weaken and this will hurt the US dollar, you would execute a BUY EUR/USD order. By doing so you have bought Euros in the expectation that they will appreciate versus the US dollar. If you believe that the US economy is strong and the Euro will weaken against the US dollar you would execute a SELL EUR/USD order. By doing so you have sold Euros in the expectation that they will depreciate versus the US dollar.
USD/JPY
In this example the US dollar is the base currency and thus the "basis" for the buy/sell. If you think that the Japanese government is going to weaken the yen in order to help its export industry, you would execute a BUY USD/JPY order. By doing so you have bought U.S dollars in the expectation that they will appreciate versus the Japanese yen. If you believe that Japanese investors are pulling money out of U.S. financial markets and repatriating funds back to Japan, and this will hurt the US dollar, you would execute a SELL USD/JPY order. By doing so you have sold U.S dollars in the expectation that they will depreciate against the Japanese yen.
GBP/USD
In this example the GBP is the base currency and thus the "basis" for the buy/sell. If you think the British economy will continue to be the leading economy among the G8nations in terms of growth, thus buying the pound, you would execute a BUY GBP/USD order. By doing so you have bought pounds in the expectation that they will appreciate versus the US dollar. If you believe the British are going to adopt the Euro and this will weaken pounds as they devalue their currency in anticipation of the merge, you would execute a SELL GBP/USD order. By doing so you have sold pounds in the expectation that they will depreciate against the US dollar.
USD/CHF
In this example the USD is the base currency and thus the "basis" for the buy/sell. If you think the US dollar is undervalued, you would execute a BUY USD/CHF order. By doing so you have bought US dollars in the expectation that they will appreciate versus the Swiss Franc. If you believe that due to instability in the Middle East and in U.S. financial markets the dollar will continue to weaken, you would execute a SELL USD/CHF order. By doing so you have sold US dollars in the expectation that they will depreciate against the Swiss franc.
Buying / Selling
First, the traders should determine whether they want to buy or sell. If they want to enter a short order - whereby they will profit if the exchange rate falls - they simply need to click on the SELL rate. The opposite holds true for traders who enter buy orders: they can simply click on the BUY rate, and thus will profit if the exchange rate goes up.
Example of How Buying / Selling Works
As with all markets, there are two prices for every currency pair. The difference between these two prices is the spread, or the cost of the trade. In this example, the spread is three pips. On the 10k position, a pip on the EUR/USD currency pair is worth $1.
Margin / Leverage
FX accounts are margined: a trader can hold a market position much larger than the value of the trader's account value. The online trading platform which FOREXYARD offers has margin management capabilities, which allow lenient margin requirement of up to 1/2%. However, we do not recommend using leverage of more than 10 times your account value. Using leverage exaggerates both gains and losses. Even when market conditions are relatively calm, using leverage can generate large gains or losses. In the case where a trader surpasses the maximum leverage allowed (which can happen when account equity shrinks as a result of trading losses), the trading system will close all open positions in the account. This prevents client's accounts from falling into a negative balance, even in a highly volatile, fast moving market.
Example of How Margin Works
Since the trader opened 1 lot of 10k EUR/USD, his margin requirement or Used Margin is $50. Usable Margin is the funds available to open new positions or sustain trading losses. If the equity (the value of his account) falls below 20% of his Used Margin due to trading losses, his position will automatically be closed. As a result, the trader can never lose more than he/she deposits.
Account Balance Equity Day P/L Usd Mr Usbl Mr Usbl Mr% Gross P/L MC
008771 50.01000 50.01000 10.00 1000.00 50,010.00 98.00 0.00 N
50.01000 50.01000 10.00 1000.00 50,010.00 98.00 0.00 N
Rollover
In the spot forex market, trades must be settled in two business days. If a trader sells 100,000 Euros on Tuesday, the trader must deliver 100,000 Euros on Thursday, unless the position is rolled over. As a service to our traders, FOREXYARD automatically rolls over all open positions to the next settlement date at 5:00 pm New York time. Rollover involves exchanging the position being held for a position expiring the following settlement date. The positions being exchanged are usually not valued at the same price. The difference in amount varies greatly based on the currency pair, the interest rate differential between the two currencies, and fluctuates day to day with the movement of prices.
For positions open at 5.00 pm EST there is a daily rollover (interest payment) you pay for an open position depending on your established margin level and position in the market. If you do not want to earn or pay interest on your positions, simply make sure they are closed by 5.00 pm EST, the established end of the market day.

C++ Language Tutorial : Classes (I)

A class is an expanded concept of a data structure: instead of holding only data, it can hold both data and functions. An object is an instantiation of a class. In terms of variables, a class would be the type, and an object would be the variable.
Classes are generally declared using the keyword class, with the following format:
class class_name {
access_specifier_1:
member1;
access_specifier_2:
member2;
...
} object_names;
Where class_name is a valid identifier for the class, object_names is an optional list of names for objects of this class. The body of the declaration can contain members, that can be either data or function declarations, and optionally access specifiers. All is very similar to the declaration on data structures, except that we can now include also functions and members, but also this new thing called access specifier. An access specifier is one of the following three keywords: private, public or protected. These specifiers modify the access rights that the members following them acquire:
private members of a class are accessible only from within other members of the same class or from their friends. protected members are accessible from members of their same class and from their friends, but also from members of their derived classes.
Finally, public members are accessible from anywhere where the object is visible.
By default, all members of a class declared with the class keyword have private access for all its members. Therefore, any member that is declared before one other class specifier automatically has private access. For example:

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area (void);
} rect;
Declares a class (i.e., a type) called CRectangle and an object (i.e., a variable) of this class called rect. This class contains four members: two data members of type int (member x and member y) with private access (because private is the default access level) and two member functions with public access: set_values() and area(), of which for now we have only included their declaration, not their definition.
Notice the difference between the class name and the object name: In the previous example, CRectangle was the class name (i.e., the type), whereas rect was an object of type CRectangle. It is the same relationship int and a have in the following declaration:
int a;
where int is the type name (the class) and a is the variable name (the object).
After the previous declarations of CRectangle and rect, we can refer within the body of the program to any of the public members of the object rect as if they were normal functions or normal variables, just by putting the object's name followed by a dot (.) and then the name of the member. All very similar to what we did with plain data structures before. For example:
rect.set_values (3,4);
myarea = rect.area();
The only members of rect that we cannot access from the body of our program outside the class are x and y, since they have private access and they can only be referred from within other members of that same class.
Here is the complete example of class CRectangle:
// classes example
#include
using namespace std;

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}

int main () {
CRectangle rect;
rect.set_values (3,4);
cout << "area: " << rect.area();
return 0;
}
The most important new thing in this code is the operator of scope (::, two colons) included in the definition of set_values(). It is used to define a member of a class from outside the class definition itself.
You may notice that the definition of the member function area() has been included directly within the definition of the CRectangle class given its extreme simplicity, whereas set_values() has only its prototype declared within the class, but its definition is outside it. In this outside declaration, we must use the operator of scope (::) to specify that we are defining a function that is a member of the class CRectangle and not a regular global function.

The scope operator (::) specifies the class to which the member being declared belongs, granting exactly the same scope properties as if this function definition was directly included within the class definition. For example, in the function set_values() of the previous code, we have been able to use the variables x and y, which are private members of class CRectangle, which means they are only accessible from other members of their class.
The only difference between defining a class member function completely within its class or to include only the prototype and later its definition, is that in the first case the function will automatically be considered an inline member function by the compiler, while in the second it will be a normal (not-inline) class member function, which in fact supposes no difference in behavior.
Members x and y have private access (remember that if nothing else is said, all members of a class defined with keyword class have private access). By declaring them private we deny access to them from anywhere outside the class. This makes sense, since we have already defined a member function to set values for those members within the object: the member function set_values(). Therefore, the rest of the program does not need to have direct access to them. Perhaps in a so simple example as this, it is difficult to see an utility in protecting those two variables, but in greater projects it may be very important that values cannot be modified in an unexpected way (unexpected from the point of view of the object).
One of the greater advantages of a class is that, as any other type, we can declare several objects of it. For example, following with the previous example of class CRectangle, we could have declared the object rectb in addition to the object rect:
// example: one class, two objects
#include
using namespace std;

class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}

int main () {
CRectangle rect, rectb;
rect.set_values (3,4);
rectb.set_values (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
rect area: 12
rectb area: 30
In this concrete case, the class (type of the objects) to which we are talking about is CRectangle, of which there are two instances or objects: rect and rectb. Each one of them has its own member variables and member functions.
Notice that the call to rect.area() does not give the same result as the call to rectb.area(). This is because each object of class CRectangle has its own variables x and y, as they, in some way, have also their own function members set_value() and area() that each uses its object's own variables to operate.
That is the basic concept of object-oriented programming: Data and functions are both members of the object. We no longer use sets of global variables that we pass from one function to another as parameters, but instead we handle objects that have their own data and functions embedded as members. Notice that we have not had to give any parameters in any of the calls to rect.area or rectb.area. Those member functions directly used the data members of their respective objects rect and rectb.
Constructors and destructors
Objects generally need to initialize variables or assign dynamic memory during their process of creation to become operative and to avoid returning unexpected values during their execution. For example, what would happen if in the previous example we called the member function area() before having called function set_values()? Probably we would have gotten an undetermined result since the members x and y would have never been assigned a value.
In order to avoid that, a class can include a special function called constructor, which is automatically called whenever a new object of this class is created. This constructor function must have the same name as the class, and cannot have any return type; not even void.

We are going to implement CRectangle including a constructor:

// example: class constructor
#include
using namespace std;

class CRectangle {
int width, height;
public:
CRectangle (int,int);
int area () {return (width*height);}
};

CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}

int main () {
CRectangle rect (3,4);
CRectangle rectb (5,6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
return 0;
}
As you can see, the result of this example is identical to the previous one. But now we have removed the member function set_values(), and have included instead a constructor that performs a similar action: it initializes the values of x and y with the parameters that are passed to it.
Notice how these arguments are passed to the constructor at the moment at which the objects of this class are created:
CRectangle rect (3,4);
CRectangle rectb (5,6);
Constructors cannot be called explicitly as if they were regular member functions. They are only executed when a new object of that class is created.
You can also see how neither the constructor prototype declaration (within the class) nor the latter constructor definition include a return value; not even void.
The destructor fulfills the opposite functionality. It is automatically called when an object is destroyed, either because its scope of existence has finished (for example, if it was defined as a local object within a function and the function ends) or because it is an object dynamically assigned and it is released using the operator delete.
The destructor must have the same name as the class, but preceded with a tilde sign (~) and it must also return no value.
The use of destructors is especially suitable when an object assigns dynamic memory during its lifetime and at the moment of being destroyed we want to release the memory that the object was allocated.
Default constructor
If you do not declare any constructors in a class definition, the compiler assumes the class to have a default constructor with no arguments. Therefore, after declaring a class like this one:
class CExample {
public:
int a,b,c;
void multiply (int n, int m) { a=n; b=m; c=a*b; };
};
The compiler assumes that CExample has a default constructor, so you can declare objects of this class by simply declaring them without any arguments:
CExample ex;
But as soon as you declare your own constructor for a class, the compiler no longer provides an implicit default constructor. So you have to declare all objects of that class according to the constructor prototypes you defined for the class:
class CExample {
public:
int a,b,c;
CExample (int n, int m) { a=n; b=m; };
void multiply () { c=a*b; };
};
Here we have declared a constructor that takes two parameters of type int. Therefore the following object declaration would be correct:
CExample ex (2,3);
But,
CExample ex;
Would not be correct, since we have declared the class to have an explicit constructor, thus replacing the default constructor.
But the compiler not only creates a default constructor for you if you do not specify your own. It provides three special member functions in total that are implicitly declared if you do not declare your own. These are the copy constructor, the copy assignment operator, and the default destructor.
The copy constructor and the copy assignment operator copy all the data contained in another object to the data members of the current object. For CExample, the copy constructor implicitly declared by the compiler would be something similar to:
CExample::CExample (const CExample& rv) {
a=rv.a; b=rv.b; c=rv.c;
}
Therefore, the two following object declarations would be correct:
CExample ex (2,3);
CExample ex2 (ex); // copy constructor (data copied from ex)

Sunday, April 27, 2008

Wireless Virtual Pets for Mobile Phones

Introduction
Bandai's Tamapichi was the first mobile phone / cell phone based virtual pet way back in June of 1997. Since then many have produced cell/mobile phone virtual pets and other games.
The emerging mobile phone game and virtual pet market is being driven by the increasing availability on tens of thousands of potential subscribers, especially in Japan and Europe.
Many animated characters were offered on Japanese phones. Hitachi currently sells a color WAP phone (model C309H) that has a "hamster mode" (a hamster endlessly dances on the screen). Mobile virtual pets appear to have developed from a combination of those characters and the success of keychain virtual pets (Tamagotchi).
The beginnings

Japanese vendors rapidly produced games that could be played on phones for a small monthly fee. Among the early ones was a virtual fishing game called Turibaka Kibun from Dwango (Dialup Wide Area Network Gaming Operation). Partially due to the fascination of the Japanese people with fishing, it was a great success.
Doom was an incredibly popular PC game. Dwango stationed high speed DWANGO servers (feed mobile phones) in Europe beginning about 1999. Dwango's main web site is in Japanese, but you can click on the Dwango USA button for English. Their recent efforts include a phone Samurai game and a collection of board games.
Japanese and European phones have many more features and capabilities that those used in the U.S. Europeans can purchase pop from pop machines, add time to parking meters, check their bank balance, book a flight, order theater tickets, view restaurant guides and weather reports, listen to music and find an open apartment to rent using their phone. Phones using these technologies are slowly coming to the U.S. They are sometimes referred to as 3-G (3rd generation) phones.
Several foreign phones have nice graphic capabilities and internet access. A few even have joy sticks and infrared ports that can be used to interface with other units.
The phone technologies
A wide range of formats are capable of supporting virtual pets. Currently most virtual pets use i-mode or WAP and SMS.
i-mode phones (nobody really knows what the "i" stands for)
these phones transmit data in wireless packets, similar to the method used by the internet. It is a proprietary protocol. i-mode was introduced by DoCoMo in early 1999 in Japan. The desire for open standards has limited its use outside Japan. That appears to be changing now. DoCoMo has a chart illustrating the explosive growth rate of this technology. Thousands of tamagotchi run on i-mode phones in Japan.
WAP phones (Wireless Application Protocol)
WAP is an open standard widely used in Europe. It allows mobile phones and PDAs to access special services on the Internet. WAP phones cannot view normal web sites. They only view sites written in WML (WAP Markup Language) which are in very limited number, but easily adapted to housing virtual pets. In Japan, i-mode is "always on" (sort of like a DSL line), but in Europe WAP is circuit switched (dialup).
Sprint PCS Wireless
Sprint's PCS service is a WAP phone (see above)
PHS (Personal Handy Phone system)
PHS has been around Japan since 1995. It was thought to be dying off, but has recently staged a comeback. It sends digital data at higher rates than early cell phones and routs data to low-power base stations placed 300-500 meters apart in cities. PHS phones were very economical and big hit with Japanese teens. They even operate in underground Japanese shopping malls. DDI Pocket Inc. plans to launch a higher speed version of PHS in the spring of 2002.
SMS (Short Message Service)
This technology allows sending short text messages to mobile phones. It can also be used to support virtual pets.
MMS (Multimedia Messaging Service)
Ericsson, Logica, CMG and Comverse are major providers of this messaging format.
BREW (Binary Runtime Environment for Wireless)
Qualcomm's wireless internet solution
Mobile phone game standards
Motorola, Siemens, Ericsson and others are working toward a mobile phone game standards that may allow intercontinental game play, or at least improve "interoperability" among the many technology formats. The group is called the Mobile Games Interoperability Forum (MGIF)
Mobile phone virtual pet programming
i-mode uses compact HTML, or cHTML, which is supposed to allow users to view HTML sites, but they look much better in cHTML. cHTML is well described on Anywhereyougo's i-mode Development page.
WAP phones view web sites written in WML (WAP Markup Language). Wireless Developer Network hosts a WML tutorial.
Per a Nov 2001 report on Singapore Cnet, "i-mode finally gets a shot of Java" some new i-mode phones will run java based programs (java was used to write many online virtual pets. The article reports NTT Docomo released the final draft of i-mode Java specifications on Christmas day 2000. The Java language for i-mode terminals is based on CLDC (Connected Limited Device Configuration) of J2ME (Java2 platform, Micro Edition). DoCoMo Java also supports i-melody (sound file) and i-anime (animation GIF) playback function.
DoCoMo is expected to release the new Java i-mode terminal--the 503i series--sometime in Nov. 2001.
There are concerns java may slow down the network, but others point out a new possibility. Sony has found a way to display information from the handset onto a TV via its games consoles. One Asian business wire was quoted by The Register theregister.co.uk as saying:
"For example, users might want to raise virtual pets or other animated characters using their phones, and then later use a TV to show their friends what they've done, or else to let the characters fight each other."
Virtual Pet PATENTS
Extensive coverage of virtual pet patents is provided on our Virtual Pet Patents page. The collection provides a extensive information about virtual pet design, including many of the elements used in Wireless pets.
Similarities between wireless pets and keychain pets
The mobile virtual pet explosion is mirroring many elements of the keychain pet industry.
Early pets were dogs and dinosaurs
They were followed by a proliferation in the number of species / varieties available
The Tamagotchi name is passed on in several variants (Wapagotchi)
A similar list of activities (feed, water, discipline, play, dance) is developing
Some have mythical tales of where they originated and their purpose (Cocomonster)
Fighting pets are coming on the scene (Cocomonster)
The one day equals one year mentality is surfacing (Kiepo)
The ability to interact with other pets (keychains did it via physical links or infrared)
Some have babies or procreate
Some are growing through different life stages (puppy to adult dog, etc)
Some can grow up to be different versions of the same species (life charts)
The use of cheat codes is surfacing
The market is growing very rapidly and few pets have advanced features
Larger screens with higher resolutions and more buttons for interaction
Use of color screens (in very few keychain pets)
Dropped the gen1 Tamagotchi problem of death and dying
Numerous firms claim to be the first to introduce a mobile virtual pet (similar claims were made for keychain pets)
Use of the term "generation" in reference to the phones (keychain virtual pets were always claiming to be the next generation)
I have not noticed any mentioning the "clean" feature. It was common on the keychain pets to clean up your pet's poop.
Very extensive coverage of keychain pets trends is provided in our 1997 article, Recent Developments and Trends in Keychain Pets.
Wireless virtual pet articles
Mobile virtual pets have received little attention in printed media. Most of the coverage has occurred in online sources.
"Toon in Your Phone" Mbusiness. March 2001. Pg. 14. talks about a startup effort called FunMail by CEO Adam Lavine. It targets women aged 25-45 who will use FunMail as a fancy emotion to stay in touch. It basically sends happy characters with brief text messages. FunMail is now deployed in the U.S. and Japan (Nov 2001) per the FunMail web site.
Opinion: Wireless Gaming Will Succeed in the U.S. Mbusiness online site. 22 Aug 2001. Digital Bridges announces "Wireless Pets" is now available to U.S. Sprint PCS wireless customers. Over 120,000 pets were adopted the first month in Europe. In June, pet owners generated approximately 95,000 hours of game play. The pets live in Petville and owners adopt, feed, play and take care of them.
i-mode and WAP emulators
Emulators allow you to trick your PC into thinking it is an i-mode or WAP phone. They can be used to viewing of existing WAP and i-mode vp. Several vp sites are subscription based.
English i-mode emulators are very rare as most users are Japanese. Wapprofit has one with a 30 day free test and a license for about $20.
WAP-shareware has a long list of WAP emulators.
Market entry costs
In addition to programming, overhead and marketing costs:
Keychain pets cost several hundred thousand dollars to get up and running in high volumes
CD rom based pets for PC's incur CD disk, burn and distribution costs
Web based virtual pets only incur web site operational costs
Online downloadable virtual pets run locally and only briefly incur web site operation costs, but do not automatically provide ongoing customer contact
Wireless pets only incur wireless web site operational costs
The major difference between web based pets and wireless web based pets is wireless pets must be coded specifically for each wireless access technology (i-mode, WAP, etc) and are not accessible by normal PC browsers.
Future directions in mobile pets
We anticipate some similarities with the keychain pet explosion.
Some chronic diseases (diabetes, asthma), health groups (dentists), museums and causes (animal rights, save the whales, pet care) have come forward with virtual pet designs. The virtual fishtank at the Museum of Science in Boston is an example. We expect similar efforts to move to mobile virtual pets.
As keychain pet prices drastically dropped, they began to be used for movie tie-ins in Japan and later in the U.S. (not always with the blessings of the copyright owners). Examples included Mulder & Skully, MIB (Men in Black), Star Wars, Toy Story, and Godzilla.
Fast food tie-ins are possible, KFC branded Giga Pets. An International airline produced a pet for giveaway on long trips to keep people busy.
The strong popularity of the 8-in-1 type keychain pets indicates their might be a market for multiple-in-1 mobile pets.
The use of codes and cheats finally came on at the end of keychain vp movement. It was very popular with the youth. They are very easily incorporated into mobile vp games and we expect to see more of them.
Most keychain vp little or no web site support (fun places to talk and play about a specific virtual pet as well as to find the instructions that were inevitably lost). Since mobile vp are already online, we would expect this to be incorporated to a greater degree.
Virtual pet breeding has been carried to the n'th degree by the Norn PC based pets (Creatures Labs in the U.K). Some version of breeding vp games will undoubtedly come across to mobile pets.
Its probably only a matter of time till we begin to see evil (drink, smoke, drugs, sex) mobil phone pets. Several surfaced in the keychain and online pet movements (Tamahonam Gangster Pet, JunkyPuff), virtual slave girl.
The ease of tie-ins to ISP's and phone services would indicate the possibility of major ISP's having their own pets as a value added service and phone companies using them as a tool for differentiation.
Hopefully at least a few of mobile virtual pets will be used as an educational tool. The same platform can be used for a wide variety of applications beyond games. It's going to be an interesting future!
Closing comments - Virtual fish
It was interesting that a mobile fishing game come to the forefront early on. Virtual mechanical aquariums have been available for a several years (NEC company used 3d projectors to make them in 1995), Aquaroid had robotic fish, Dali has virtual fish that actually swim between PCs on the internet, Fin-Fin was Fujitsu's effort at artificial intelligence in a "dolphin-bird" creature, El-Fish was a very hot PC pet from Russia in 1996 by Anima-Tek and Maxis, Aquazone by 9003 is a great PC virtual aquarium and who can forget the success of the handheld bass fishing games. Wal-mart even has Pro Guide Bass Fishin' unit with simulated GPS! The U.S. does not seem incredibly hot on the fish market, but much of the rest of the world loves fish games. One of the new mobile phone fish games (Alien Fish Exchange) even lets you cook your fish!