A new site catering to the mobile community has been launched. It includes a web-front to a database of over 2000 mobile devices. You can also find information about how to Go Mobile in the Going Mobile 101 section. The site also includes an extensive list of device issues available for free. You also find industry links and news.
Visit компютриgomobile.tirawireless.com for more information and create an account for free.
Call me an idealist. Call me crazy. But I think technology is supposed to be used to change people’s lives for the better. I believe a good technology improves my life as a human being. Take the telephone for example. Imagine instead sending and receiving letters back and forth across the ocean. Of course every technology can be used for unethical purposes as well but what I am interested in this particular article is the initial motivation for building technology. Most particularly in the software industry.
So I went to the professionals. The ones who “did it” before. The successful ones. I read an article about a series of lectures given by established entrepreneurs in the software business, to young aspiring software entrepreneurs, all arranged by the now famous Y Combinator start-up school. I found
After reading carefully, I found some advice on motivation. I came across this piece of advice from Max Levchin, the co-founder of PayPal:
As a final word of product development advice, Levchin encouraged founders to think about the Bible’s seven deadly sins - especially greed, sloth, envy, pride and gluttony. These characteristics, he said, describe many of the primal motivations for users.
Hmmm… Stop right here for a moment. Mr. Levchin, I was looking more for something along the lines of “what sort of technology can we build to improve people’s lives”, not “people are destroying their lives anyway, so let’s build technology that helps them do it better”. That’s ridiculous and sad, but it’s real. And what’s even more sad, it’s that it looks like this advice, was received like some sort of super secret from the masters by the young aspiring entrepreneurs.In view of this, I truly wonder what else they teach at Y Combinator.
Money should not be everything. When it becomes everything for you, you will lose in life. You will bawl your eyes for the things you missed because all you saw is the bottom line.
I’d like to let everyone know that we at Tira Wireless are looking for mobile developers to participate in our first ever public beta program. We’re well known for solving the difficult porting problems but with this new release we’re adding some very cool new capabilities that will help developers overcome the obstacles to getting their favorite mobile app built AND delivered into the market place.
If Eclipse hangs when it tries to load your plug-in and if you see something like this in your error log: thread "Thread [main,6,main]" timed out waiting (5000ms) for thread
"Thread [Worker-3,5,main]" to finish
then you’re probably interested in this post.
This is a somewhat known Eclipse bug and you can find more information about it here.
The problem is best described by Thomas Watson in Comment #4 in the Eclipse bug report.
The bottom line is that you should avoid doing heavy work in your plug-in start() method and instead defer the execution of any plug-in initialization code until you’re sure that the plug-in has been successfully resolved. Why? As Thomas points out, this ensures that the plug-in does not need to load any classes before it is initialized, which seems to be to root cause of the thread deadlock problem (one thread tries to initialized the plug-in and another thread tries to load a need class - but they both wait for the other to finish).
So to essentially dig yourself out of such a situation you need to listen for bundle event. To make this clearer, let’s look at an example. Let’s say your plug-in start() method looks something like this:
public void start(BundleContext context) throws Exception {
super.start(context);
myPluginInitialization();
}
If you’re trying to load classes from within your plug-in in myPluginInitialization(), then what you need to do is have your plug-in implement org.osgi.framework.SynchronousBundleListener, replace the myPluginInitialization() call from start() with context.addBundleListener(this), and implement the bundleChanged(BundleEvent event) method from SynchronousBundleListener as follows:
Bundle bundle = event.getBundle();
if (!bundle.equals(getBundle()))
return;
int type = event.getType();
switch (type) {
case BundleEvent.RESOLVED:
myPluginInitialization();
break;
}
One of the most crucial entry-level barriers to mobile software development is the wide variety of platforms. To date there are thousands of Java-enabled handsets. Large companies attempt to purchase as many devices as possible and thus cover their bases but what about the small and medium-size players?
Is buying every single device on the market an option? Clearly not.
One idea being tossed back and forth in the mobile industry is the concept of an universal emulator. That is, an emulator which would be able to emulate every single device out there. At present, device vendors such as Nokia, Motorola, and Sony Ericsson have been very good at providing free SDKs and emulators. The problems are still manifold. First of all, not every single device is supported, and the ones that are supported differ in the level of emulation accuracy compared to the actual device. In addition there is no real standard in terms of emulation, other than the Unified Emulator Interface (UEI) which is starting to pick up pace (using UEI emulators). Even if this does become the standard, we’d still have to support non-UEI emulators. Furthermore, managing all emulators from every single vendor would be a nightmare.
Here’s a proposed idea: test every single MIDP and CLDC api call on every single device
This is an almost impossible task of course. But if we did have this kind of data, and if it were always fresh and up-to-date, then we could more easily reproduce API bugs. We would essentially be aware of all KVM discrepancies in the market. We could even build a UI tool to emulate a real KVM which would thus reproducing every API bug on every device.
That’s as close as I can think of getting to the Universal Emulator idea.
With all the hype about mobile gaming, carriers and publishers are taking all the spotlight. Developers are left somewhere behind, armed with nothing more than their creativity and skills at hand. While bottom-up moves to empower developers are starting to increase (j2mepolish, eclipseme, etc) the real needs of developers are still not up on the priority lists of the movers and shakers in the industry.
Is that a problem? I think so.
After all, without developers, there’s no content. With the right amount of guidance, tools and incentives, I tend to believe a new breed of mobile developers would arise - hence the quality of the content would inherently increase. Branding does not mean higher quality apps. If indie developers were given an equal chance at distribution, mobile applications might become more adopted.
There’s no easy way of getting a feel for a mobile game before actually buying it. Other than a crappy screenshot and a short description, it is the brand that sells a game, not the actual quality of it.
Idea:On-device mobile application bundle manager
Assuming the user would have the manager client installed on their device, then they could download sample 10-30 second game bundles which they would load into memory and use to get a feel of the actual game. Since in J2ME dynamic class loading is out of the question, one design choice would be to include a basic game skeleton in the client app which would act as a container for the game pack. The game bundle itself would of course have to be written according to some kind of custom language. In essence, the developer would write a short demo of their game in this custom language, add a few images (sprites, tiles, etc) then bundle everything up in some sort of binary, compressed format then publish it.
I don’t know about the killer app, but I’m more than certain that networked social apps are the way to go. The mobile device is by nature a tool for socializing. Time wasters (5-15 minute games) are surely in demand, as they represent the current ruling genre. But as far as mass distribution, I think it’s mobile networked social apps that will take the lead.
Are we ready for the jump yet?
Well yes and no. The biggest hurdle right now is networking: expensive data transfer rates, a wide variety of carrier-specific networking requirements and API’s and of course low latency. The next few years I expect to see more and more networked apps catering to wider audiences, aside from the regular under 25 male gamers.
How do you measure quality in the wireless software world?
While most of the traditional software measures still hold an significance importance (reliability, reusability, usability, etc). The quality of a wireless app tends to largely depend on the portability and usability aspects. A wireless app that runs on a limited amount of devices available on the market will have a much smaller chance of seeing the end of the distribution tunnel. Whereas a highly-portable application will definately gain faster acceptance on the publisher’s portfolio.
Furthermore, the limited user-input and display available on a mobile device represents a top measure for quality since the app usually has not more than a few minutes the impress the user and if he/she has a hard time figuring out what key or key sequence to press for a particular task, then all is lost.
While I haven’t even touched on performance and other crucial measures of a good app, I’m going to stick to my top 2 measures of quality:
Here’s an idea about an app that would relate to a wider audience than the typical mobile gamers.
Idea:Personal relationships manager
The user would create a list of his/her close friends and family members and once in a while, he/she would rate a particular friend or family member based on certain criteria - friendliness, compassion, caring, etc. - on a scale of 1 to 10, based on events that happened during that particular day or say last few days. If the friend in question has the application as well, then the rating could go both ways. The user would then be presented with graphs representing “ups and downs” in his/her relationships.