Thursday, December 25, 2008

Top 10 Semantic Web Products of 2008

ReadWriteWeb has posted an article on the 10 best Semantic Web products of 2008. The top two spots are taken by Yahoo and Microsoft. Yahoo! SearchMonkey is a search platform aiming at making the search better by leveraging web annotations. Microsoft acquired Powerset, a natural language processing search engine. Who has not made the list and maybe they should have: Twine by Radar Networks, which provides a new way of tracking, finding, and sharing content, all in one place.

Mobile Web Best Practices

W3C has posted earlier this year some guidelines regarding mobile web best practices.

Monday, December 15, 2008

Most Popular Android Applications for November 2008

FastCompany has published a post regarding the most popular Android Applications for November 2008:

SOURCE: fastcompany.com

Saturday, December 6, 2008

OpenID into Browsers, Browsers repllace OSs

A great post on O'Reilly Radar about getting OpenID into the browser. I find the idea fascinating: when you open your browser, it will ask you to unlock it by usign your OpenID information:

SOURCE: David Recordon on radar.oreilly.com

As you start surfing the web, the browser will take care of automatically logging you into any website. Furthermore, it will help you with the registration process. Why is this not yet implemented?

Another (future) innovation is described in an article from DesktopLinux entitled "Browser swallows OS": when you boot your computer, instead of an OS-based environment, you would get a browser-based environment, like shown below:

SOURCE: DesktopLinux.com

Fascinating, isn't it? The company that provides the browser operating system (called Cloud) is gOS. As Enrique Ortiz has also mentioned in his post, similar ideas have been tried in the past, but they all failed. Maybe this time it will be different.

Mapping open source to mobile

VisionMobile published a report on the different open source technologies used in the mobile space, describing who is using open source, where they are using it, and how they are using it, a must read.

Tuesday, December 2, 2008

Semantic Web - Technology Maturity

I recently read an article about the golden age of software architecture written by Mary Shaw and Paul Clements. They have a section on how technologies mature, therefore I thought about where the Semantic Web is on that six-phase scale. I believe that the Semantic Web lies at the end of stage four, moving towards stage five. Here is why:

- Basic Research: Basic ideas and concepts have been investigated. The structure of the Semantic Web has been defined, and the different layers have been identified and described into details.
- Concept formulation: There is a wide research community available, which has refined the concepts available in the Semantic Web, converging on a set of ideas and continuously refining the structure of it.
- Development and Extension: Preliminary applications of the Semantic Web have been spotted since a couple of years. One of the first such applications has been Dublin Core, a vocabulary for distributed Digital Libraries.
- Internal enhancement and exploration: Semantic Web has been extended to other domains, such as biology, and has been used for real problems such as a better way to integrate and combine data. In addition, specific companies offer training. The problem is that the tools are not yet quite there in terms of usability, in terms of making it easy for the user.
- External enhancement and exploration: The problem here is that a broader community of people who are not developers is not involved. There are not a lot of companies that use Semantic Web technologies. There is yet to be shown a substantial evidence of value and applicability. In my opinion, better known companies need to use Semantic Web. If you look at Ajax, the technologies behind it were known for a long time; but before Google Maps used it, it was not adopted in a broad manner.
- Popularization: There are commercial products that use Semantic Web; hence, the technology has been marketed.

In conclusion, even though part of phase five and six are available, there are incomplete. Without broader support, without better tools, without making it easier for the user to understand and use the technology, it will never become popular. Furthermore, even if we were to teach Semantic Web in Universities, it would make little difference because the industry needs also to adopt it more openly and frequently.

I would love to hear from somebody who has more experience with the Semantic Web and maybe a different view on where it lies in the six-phase system.

Wednesday, November 19, 2008

(Software) Agents and the Semantic Web

I thought about why the concept of Agent has not taken off, why people/companies do not use them as widely as they use other technologies. Two reasons came in mind.

First, there is the security issue. How does one know that the software agent has not been tampered with, or that the information it caries is secure enough, or that other agents it meets are "good" agents, not "bad" ones. Since the concept of agent has to include the property of being autonomous, how can we restrict the agent in its actions and decisions without greatly reducing his autonomy?

Second, the job of an (software) agent is to talk to other systems, interpret and gather data, make decisions on that data, and present it back to the user in a readable and useful way.

While the first reason might have been already overcome, the second has not. In my opinion, to overcome this, one has to use the Semantic Web. If you add meaning to data, agents can interpret it and make proper decisions, without having to ask the user for guidance at every step (thus loosing its effectiveness, and some of the main properties it's supposed to posses, like being autonomous) . I am sure this is not an novel idea, and that people have already thought about it, but for me it makes sense. I envision an "Agent Store", or "Agent Market", where people would go and "rent" or "buy" agents to fulfill their immediate or long time needs, such as paying all utilities (power, phone, internet, cable, credit cards, etc), or scheduling a doctor appointment, etc.
Wouldn't this be nice?

Tuesday, November 18, 2008

Frequently Forgotten Fundamental Facts about Software Engineering

Interesting article by Robert L. Glass, initially printed in 2001, vol. 18 of IEEE Software. The author writes about "forgotten fundamentals" facts regarding software engineering.

Wednesday, November 12, 2008

Self-Healing Hulls

In the 2008 November issue of IEEE Spectrum, there is an article that talks about self-healing hulls. The carbon-fiber composition of a yacht can considerably heal itself after a collision. You can improve the healing process by inducing a little electric current. The work is being done by Eva Kirkby, a graduate student from EPFL. The main idea is that carbon-fiber is composed of carbon fibers and epoxy; the problem is that in case of impacts, these materials tend to separate internally causing cracks parallel to the surface of the material. In order to counter this problem, the material is infused with hundreds of very small bubbles filled with liquid-monomer molecules plus some small particles of catalyst. The outcome would be a hardening of the material. In order to keep the concentration and size of the bubbles to a minimum, Kirkby incorporated into the composition wires of a smart alloy, an alloy that can return to its initial shape after being deformed by applying heat (electricity) through it. Great idea!

Dilbert's self-aware comic strip

In my recent posts I kept mentioning biologically-inspired concepts such as self-aware, self-healing etc. Here is a comic view of self-awareness:


I love it!

Monday, November 10, 2008

Do agile teams model or write documentation?

To be honest, I had the misconception that agility and modeling are at the opposite poles, that agile teams right little or no documentation. That all changed once I read an article from Dr. Dobb's Journal. Some of the reasons agile teams do up-front modeling is "to answer questions around the scope that they're addressing, the relative cost and schedule, and what their technical strategy is." Another reason is to better grasp and manage the complexity of system architecture.

Some agile modeling an documentation best practices are mentioned as doing "some initial requirements and architecture envisioning early in the project to write executable specifications via a Test-Driven Development (TDD) approach, to single source information whenever possible, to write documentation later in the lifecycle, to promote active stakeholder participation, to implement requirements in priority order, to include modeling in iteration/sprint planning activities, to create models and documents that are just barely good enough for the situation at hand, to model storm the details on a just-in-time (JIT) basis, to sometimes model a bit ahead to explore complex requirements, and to take a multiview approach via multiple models".

One of the complaints that exist with using agile methodologies is that they cannot be applied on large-scale projects and in large development teams. For those kind of projects, plan-driven, model-based solutions are better suited. To achieve this kind of scalability, there is an agile version of Model Driven Development (where MDA is one example of it), called AMDD or Agile Model Driven Development. The difference is that instead of creating extensive models, you create instead agile models. Furthermore, with AMDD, you do just a little of modeling, followed by a lot of coding.

Tuesday, November 4, 2008

Controlled Chaos

In the 2007 December issue of IEEE Spectrum entitled Controlled Chaos, the authors describe a new generation of algorithms based on concepts related to the thermodynamic concept of entropy, which is a measure of how disordered a system is. By the fact that malicious code changes the flow of data in the network, the entropy of the network is thus altered. The new malicious threat, called Storm, uses different ways to be installed on the host machine, mostly through email attachments. Hot do we protect the networks? First step is to know how the network traffic moves around the network. Such collections of data from nodes in the network are possible because routers or servers are configured in such a way as to provide information about the network traffic in form of source and destination IPs, source and destination port numbers, the size of the packet transmitted, and the time elapsed between packets. Information regarding the routers themselves is also collected. Such information is used by the proposed algorithms to build a profile of the network’s normal behavior. It is stressed that the entire network is monitored, not just one single link in the network.

The principle behind the entropy-based algorithms is the fact that "Malicious network anomalies are created by humans, so they must affect the natural "randomness" or entropy that normal traffic has when left to its own devices. Detecting these shifts in entropy in turn detects anomalous traffic." When the network has established patterns, any outcome that is different from the normal states of the network can be easily detected. Even if the malicious code manifests by downloading pictures from the internet, the fingerprint of the network would look unusual, different from what is expected, from how the network was used. The authors make an interesting point, namely that Internet traffic has both uniformity and randomness. A worm will alter both, making the traffic either more random, or more structured. In case of the 2004 Sasser attack, the information entropy associated with the destination IP addresses rises suddenly, indicating an increase in randomness in traffic destinations due to the scanning initiated by the infected machines, as it looks for new victims. At the same time, the entropy associated with the source IP addresses suddenly drops, indicating a decrease in randomness as the already infected computers initiate a higher than normal number of connections. The conclusion is that the network goes into a new internal state unknown before, hence easily detectable.

The Storm worm I mentioned at the beginning works in some perspective similar to other worms, namely new code is placed on the computer (because the user clicks on some attachment), which will make it to join a botnet. However, there are distinct differences between old warms and Storm. One of them is the way it makes the user click the attachment, like using a clever subject line for the email, or attachment name, related to hot topics that are currently on the news, such as elections, hurricanes, major storms, etc. Most importantly, Storm hides its network activity. It first looks what ports and protocols a user is using. If it finds a P2P program, such as eMule, Kazaa, BitComet etc, it will use that program’s port and protocol to do its network scanning. Storm will also look at what IP addresses the P2P program communicated with, and will communicate with them, instead of new IP addresses, which would trigger its detection. Furthermore, Storm will not spread as fast as it can, because it has a dormant and a walking mode. It will gather information for a short period, then it will go quit. Very interesting that Storm actually tailors its behavior based on the pattern of the network usage. How to detect Storm? The worm will still alter the network entropy. For example, during its active period, the host computer will send many emails, which is unusually for normal use. In addition, the port used is not 25. All these are hints that something is wrong inside the network.

A great article! Nothing short of what I am used to expect from IEEE Spectrum.

Monday, October 27, 2008

On System Design

In an essay entitled "On System Design", Jim Waldo, a distinguished engineer with Sun Microsystems, expresses his ideas and opinions on system design, including factors that hinder the effort necessary to do system design.

Some of the techniques that aid in the process of good system design are Six Sigma, or UML. The latter helps in the development of good design, but it is you (as an individual or a team) that has to come up with the design. UML helps you in expressing that design better. Many approaches have been found to work, but there is no general approach that works on all projects. Depending on the project, you have to decide which approach better suites your needs. The only exception to this is given by Brooks, namely that good designs have one thing in common, that is they are produced by good designers. Jim Waldo explained this in terms of probability/statistics: those who have been able to produce a good design in the past are far more likely to produce a good design in the future. Furthermore, designers have to be bale to deal with ambiguity while creating the design, and to know that the question that cannot be answered right away, will be eventually answered at the appropriate time. The author mentions that instead of learning a process of design, it is better to learn how to best design. An indicative to the best way to learn how to design includes two factors:

1. Trying, failing, and then trying again.
2. Being under the guidance of someone who is an expert at the task.

It si the way of thinking that matters most in system design, rather than the subject that can be thought in a particular course. Interesting enough, the author mentions that System Design cannot be learned in one course, but should rather be though in a much larger process, similar to an apprenticeship. The relationship needed between a master and its apprentice is found at the graduate level, where each student has an adviser with whom he is involved in academic research. One other place is at work (in industry) where you get hands-on insight on system design. I would argue that at work, you are more constrained in terms of time; hence, there is less opportunity in learning system design.

Diversity in the sense of academic backgrounds (physics, philosophy, anthropology, computer science, music, etc), and how such a diversity creates different views on a given problem, is described as being beneficial. I would particularize this to software development in the sense of not trying to think of a solution for a problem in terms of a particular programming language, but instead design the solution independent of the software platform and only afterward think of what language can help me express this design the best (similar to the MDA concepts).

The problem with doing design up front is the fact that no immediate code is produced. The pressure to produce something that can be seen, or the measure of productivity by means of the number of lines of code written, still exists. What is needed is "an act of faith by management". He continues by saying that "if you find a manager who is actually willing to give you time to do the design task, stick with him or her. He or she is a treasure much rarer than gold."

The paper also mentions intellectual property (as a note on why system design is not shared among peers anymore), and how any patent has the same value as any other patent. For me this is unbelievable; it is equivalent to saying that ideas that are behind the pattern are the same, namely have the same value. The quality of an idea is not taken into consideration at all by the patent system. Furthermore, in case of a patent litigation, the jury is made up of ordinary (non-technical) people, not technical peers. Hence, "it is very hard to learn about good system design unless you can see and study other system designs, both good and bad. The intellectual property atmosphere in industry has limited the number of designs that are actually talked about, and has convinced many system designers that they should not even look at the designs that are available."

Ways of solving the lack of system design from academia and industry are given in forms of agile methodologies and open source projects, because they enhance the discussion of a system's design in several ways: the communication between two (or a small group) of programmers can help in clarifying and better understanding the design of a system; furthermore, communicating the design to other members of an open source project will help clarify the design of a system. It is interesting to note that the author provides a different view to both agile methodologies and open source projects, namely them being a reaction to the impossibility of doing system design in academia and in the industry. Overall, the paper makes for an inspiring reading. You find yourself nodding and agreeing with the statements made while reading the essay.

Tuesday, October 14, 2008

Why is self-healing in computer systems important?

Reading about the malfunction that rendered the Hubble Space Telescope silent, I realized indeed how important is for systems to have the property of self-healing that our human body has, and in the broader sense, be autonomic. This would imply for the system to know itself in such a way as to poses detail knowledge of its components, status, and internal and external connections. If a system does not have information about a specific component, it cannot control it, hence the importance of knowing itself.

Furthermore, reconfiguring itself based on the environment is also a desired property. Most importantly, such a system would need to heal itself without the interference of human experts. Why do we need such a self-healing characteristic in computer systems? The Hubble Space Telescope mentioned above is one example. The failure in the telescope came from a unit that collects data and transmits it to earth. Solving this problem means to remotely send commands to the telescope to switch its operations to a backup unit. Why hasn't this been achieved automatically? Because Hubble was not designed with self-healing in mind. Would have been that complicated to discover the problem on its own and find an alternative resource that it could use to continue its normal operation? Self-healing really means just making use of redundant or underutilized components to take over the task of the malfunctioned element. This is similar to how the brain works when parts of it are damaged. The problem is that because Hubble is not 'aware' of its backup unit, that specific unit has not been utilized since 1990, making it subject to "harmful rays of the sun, extreme temperature changes during orbits and 18 years of cosmic debris".

If you are interested in Autonomic Computing, IBM has a whole research project devoted to this subject. You can find out more about this here.

Monday, October 6, 2008

Linearity and Nonlinearity in Biology, Computer Science and the Financial Market

One of the questions that I have, inspired by one of the graduate classes taught by Dr. Ravi Shankar at FAU, is can we exploit the biological architectures to come up with improved computer architecture, both software and hardware. One aspect that rose my interest was the nonlinearity of different biological systems, and if we have such examples of nonlinearity in computer science. In ecological systems, we have Robert May's bifurcation diagram shown below:




If the population growth factor equals to 4, the population jumps around in a chaotic, nonlinear manner. The main idea of the bifurcation diagram is to be able to see the successive period doubling which take us into chaos. We have such bifurcation, such branching, in the blood vessels, as well as in the air vessels. Now for the blood vessels, they can expand to adapt the blood flow. Let us denote the internal pressure, the pressure across the walls, with P, and the volume inside with V. Plotting this system we get the figure below:

What we get is a deterministic nonlinear system. The upper part of the slope is around 100 times the lower part. In case of a disease, like arteriosclerosis where you loose elasticity and you get a higher blood pressure, or in the case where you have more elasticity hence you have a higher pressure, you get a more linear system:

The blood vessels system functions properly only in the nonlinear case. Both linear cases have a negative impact. Do we have such linearity in system development? In software development process, the Waterfall model is the only model that has this linearity property:

The waterfall model is argued to be considered a bad practice mainly because it is impossible to 100% complete one phase before moving to another. When using such a model, it is implied that there are no changes in the requirements, problems can be fully predicted, and the design is correct before the implementation phase starts. Any other development process models do not exhibit the linearity property, but are rather nonlinear. Let us take the spiral model for example, shown below:

Spiral model (Boehm, 1988)

The diagram above can be viewed as a fractal, which is an example of a nonlinear system. Another model that expresses nonlinearity is the iterative and incremental one that is an essential or general part of other models such as RUP, Extreme Programming, Agile Software Development:



The iterative and incremental approach has been developed in response to the linear waterfall model. The nonlinearity characteristic is necessary in order for these models to display the property of adaptability to change, redesign, and learning from other iterations.

If we look at the DOW Jones Industrial Average for 2008, we can see some characteristics of chaos (another manifestation of nonlinearity) depicted in the shaded blue rectangle, that would predict the continuous fall starting with the beginning of October:

SOURCE: Yahoo! Finance

Nonlinearity is present throughout this graph, but chaos really sets in when the rate of the index goes up and down by a much higher rate than it did in the past. The high change in the DJI over a small period of time is a characteristic of chaos behavior. This is also seen if we look at the volume indicator below that plots the number of shares traded during that period of time:

SOURCE: Yahoo! Finance

From September 12 to September 19, there is an almost 50% increase in the number of shares traded. Between September 19 and September 25, there is around 50% decrease in the number of shares traded. Such a high increase and decrease in a two week period is chaotic and uncontrolled, and it is not seen anywhere in the graph for the past year. Having said that, we could certainly look for such chaotic manifestation in the future to better predict the market.

As a conclusion, we have seen several examples where nonlinearity in the form of fractals and chaos is useful and beneficial. Thinking in such terms will have a positive impact in domains ranging form computer science to financial systems.

Friday, October 3, 2008

Nokia unveils "Comes With Music"

From Nokia's Press Release:

"The company announced Nokia Comes With Music, a revolutionary program that enables people to buy a Nokia device with a year of unlimited access to millions of tracks from a range of great artists - past, present and future. Once the year is complete, customers can keep all their music without having to worry about it disappearing when their subscription is over."

The CEO of UMG International was with Nokia to launch the program. "It's fantastic to work with Nokia on Comes With Music," said Grainge. "We feel it's an innovative way for people to discover and enjoy new artists, while at the same time having access to the amazing depth of the Universal catalog. Comes With Music allows our artists to reach new audiences in a very easy and affordable way.""

Wednesday, September 24, 2008

Google's Project 10 to the 100th

Project 10 to the 100th is a call for ideas that have an impact on the entire world, affecting as many people as possible. You have until October 20th, 2008 to submit your idea. From the top 100 ideas, you have a chance to choose the 20 semi-finalists. In the end, up to 5 ideas will be selected, and Google is committing $10 million to implement those ideas.

It is important to understand that you will not receive the money, but rather a Request for Proposal process will begin "to identify the organization(s) and proposals that are in the best position to help implement the selected ideas". Hence if you wanted to participate in this project for the money, then you are misunderstanding the scope of it. In terms of Google, you "get good karma and the satisfaction of knowing that your idea might truly help a lot of people".

Friday, September 19, 2008

JNI Example

JNI stands for Java Native Interface, which allows you to use, inside your Java application, code written in other programming languages. I will walk you through an example (developed under Windows) of using JNI.

Here are the main steps we need to follow:
- Create a java application that declares the native method.
- Compile the program.
- Generate the header file using javah.
- Implement the native code inside a C application.
- Compile the C code and generate the native library (dll).
- Run the java program.

Let us go through each of these steps:

1. Create a java application that declares the native method.

/**
* Shows a simple example of using JNI
*/
public class JNIExample {
//Declare native method
private native void displayMessage();

public static void main(String[] args) {
//Load native library
System.loadLibrary("JNIExample");
//Call the native method
new JNIExample().displayMessage();
}
}


2. Compile the program.
javac JNIExample.java

3. Generate the header file using javah.
javah -jni JNIExample

4. Implement the native code inside a C application.

#include
#include
#include "JNIExample.h"

JNIEXPORT void JNICALL Java_JNIExample_displayMessage
(JNIEnv *lEnv, jobject lObj) {
printf("This is a JNI Example!\n");
return;
}

The method signature matches exactly the one from the JNIExample.h header file.

5. Compile the C code and generate the native library (dll).
Open a Visual Studio (or similar) command prompt. In my case, it was located under "start->Programs->Visual C++ 2005 Express Edition->Visual Studio Tools->Visual Studio 2005 Command Prompt".
Run the command from the directory where you have the JNIExample.c file:
"cl -I"c:\Program Files\Java\jdk1.5.0_08\include" -I"c:\Program Files\Java\jdk1.5.0_08\include\win32" -MD -LD JNIExample.c -FeJNIExample.dll". Your path to the include directory might be different, so make sure you adjust that according to your settings. The -LD option makes sure that the compiler generates a DLL file. The -MD option makes sure that the DLL generated is linked with the win32 multithreaded C library.

6. Run the Java program.
java JNIExample

Some problems I ran into it while testing the code:
- I was missing the msvcr80.dll file, so I downloaded from here and copied it to c:\windows\system32 directory.
- Even though a manifest file was created, I hade to embedd it inside the dll. I have used the following link to solve the problem: http://msdn.microsoft.com/en-us/library/ms235591(VS.80).aspx. Here is the command: "mt.exe -manifest JNIExample.dll.manifest -outputresource:JNIExample.dll;2"

Saturday, September 13, 2008

Microsoft joins OMG

On September 10th, Microsoft announced its membership in the standards body of OMG (Object Management Group). This does not imply that Microsoft is moving away from its DSL (Domain Specific Language) strategy, where the DSL Toolkit ships with the Visual Studio SDK. What Microsoft is doing is actually supporting both DSL and UML, providing you with the chance to choose the right approach for the right job.

From the press release:

“We’re building modeling in as a core part of the platform,” said Bob Muglia, senior vice president, Server and Tools Business at Microsoft. “This enables IT pros to specify their business needs and build applications that work directly from those specifications. It also brings together the different stages of the IT life cycle — connecting business analysts, who specify requirements, with system architects, who design the solution, with developers, who build the applications, and with operations experts, who deploy and maintain the applications. Ultimately, this means IT pros can innovate and respond faster to the needs of their business.”

Thursday, September 11, 2008

"Accept cookies from sites" remains unchecked in Forefox

In Firefox, something strange started to happen today. Trying to access iGoogle and Yahoo! Mail, they kept telling me that my browser does not accept cookies. How is that possible? I checked my Privacy settings, and there it was, my "Accept cookies from sites" option was not checked. How did that happen? I don't remember unchecking it. No problem, I checked it and started reading my Technology news from iGoogle and checking my email. Some time afterward, guess what? Same problem! Now, I am concerned. I'm thinking my browser is being exploited somehow. But something does not make sense here. By not accepting cookies, I'm actually restricting access, not giving access, I'm increasing my privacy, not decreasing it. OK, so I'm not being exploited, I'm not revealing any private information through my browser, but at the same time, the cookies option somehow gets unchecked. Without keeping you into suspense for much too long, the problem was with one of my browser extensions, Stealther, namely it was being used. To be honest, I do not remember starting it (checking it under Tools -> Stealther), but that my friends, is another story.

BlackBerry Flip and IBM's Spoken Web

RIM introduced the first BlackBerry Perl Flip 8220 smartphone. The official website for the phone can be found here. Taken from the RIM press release:

"The quad-band EDGE based BlackBerry Pearl Flip smartphone presents a sophisticated look with a sleek design and a chrome-finished frame surrounding its smooth, luminescent face. Packed with an abundance of powerful features, it weighs only 3.6 ounces and measures approximately 3.9” x 1.9” x 0.7”. Featuring two high-resolution, light-sensing color displays, the external LCD makes it easy to preview incoming emails, text messages and phone calls without opening the handset, while the large, 240 x 320 internal LCD displays messages, videos and web pages with impressive detail and contrast.

“The popularity of BlackBerry smartphones has grown tremendously around the world and the introduction of this exciting new flip phone will help extend the reach of the BlackBerry platform even further,” said Mike Lazaridis, President and Co-CEO, Research In Motion. “The BlackBerry Pearl Flip is a full-featured smartphone with a unique and friendly design and it is a natural choice for flip phone users who want to start doing more with their phone than just talk.”"

Voice quality is assured through the use of Speaker Independent Voice Recognition (SIVR) for Voice Activated Dialing (VAD). It includes "support for mp3 ring tones, smart dialing, conference calling, speed dialing, call forwarding, voicemail attachment playback and enhanced background noise cancellation. It also features a speakerphone and Bluetooth® 2.0 for use with hands-free headsets, stereo headsets, car kits and other Bluetooth peripherals such as a GPS receiver. The removable/rechargeable 900 mAhr battery provides four hours of talk time and over 14 days of standby time".

IBM is testing a voice-based web browser, developed under the "Spoken Web" project of IBM's India Research Laboratory. Some of the technologies used are Voice eXtensible Markup Language (VoiceXML) and HyperSpeech Transfer Protocol (HSTP). You can read more about it here.


Wednesday, August 27, 2008

12 Sly Web Tricks That Put You in Control

Great article on PC World about 12 Sly Web Tricks That Put You in Control. You find out how you can Turn Wi-Fi Thieves' Worlds Upside Down (literally), Make a Laptop Thief Regret It, Finding out if the email you sent was read or not, Send a Self-Destructing Email, and other similar (and sometimes very useful) information.

Tuesday, August 26, 2008

Basic Set operations in Java

How do we work with Sets in Java when it comes to performing the basic operations: Union, Intersection, Subset, Complement, Cartesian Product (for which there is no standard Java method in the Set Interface)? Do we have some kind of a collection that maps this mathematical concept into Java? Yes we do.

The Set Interface models the mathematical concept of a set and it is a Collection that contains no duplicate objects. Before talking about the specific methods that we will use, you must be aware of the three most used Set implementations: HashSet (uses a hash table to store its elements), LinkedHashSet (HashSet that also maintains a doubly-linked list running through all of its entries), and TreeSet (a sorted set).

Assume we have two sets s1 and s2. Going back to the basic set operations, we have:
- Union: the union of sets s1 and s2 is a set whose elements are contained in either set s1 or s2.

Java: s1.addAll(s2) - adds all elements from s2
in s1 if they are not already present.

- Intersection: the intersection of two sets s1 and s2 is a set whose elements are in both s1 and s2.
 
Java: s1.retainAll(s2) - s1 becomes the intersection of
s1 and s2.

- Subset: s2 is a subset of s1 if all elements of s2 are also elements of s1.

Java: s1.containsAll(s2) - returns true if s1 contains
all of the elements of s2.

- Complement: the complement of s2 in s1, denoted s1 - s2, is a set of all elements that are members of s1 but not of s2.

Java: s1.removeAll(s2) - removes from s1 all the
elements that are also contained in s2.

- Cartesian Products: the Cartesian product of two sets s1 and s2 is the set of all ordered pairs (x, y), where x is an element in s1, and y is an element in s2.

Java: public static Set computeCartesianProduct(Set s1,
Set s2) {
Set
result = null;
if (s1 == null || s2 == null) {
throw new IllegalArgumentException();
}
if (s1.isEmpty()) {
return s2;
}
if (s2.isEmpty()) {
return s1;
}

result = new HashSet
();
for (Object obj1 : s1) {
for (Object obj2 : s2) {
result.add("(" + obj1 + "," + obj2 + ")");
}
}

return result;
}


UPDATE (04/30/09): For the Cartesian Product operation above, I have used a raw type for unknown set element type. As of Java 1.5, you should consider using generics. For example, you should use an unbounded wildcard type for the input parameters of the computeCartesianProduct method, making the above code type safe and more flexible. This implies that instead of using the declaration Set s1, you should actually have Set<?> s1.

Friday, August 22, 2008

Sun Certified Java Programmer (SCJP) Exam

Today, I passed the Sun Certified Java Programmer (SCJP 1.5) exam. Throughout this post, I will share my experience preparing for it.

Before I get started, a little bit of background. I started developing in Java in 2001 (second year of college). Most of the software I have written was using the standard and mobile editions of the Java Platform. I have some knowledge of the enterprise world of Java, but mostly through Servlets and JSPs than anything else. In addition, I took a 6-months Java tutorial back in 2005 that covered OO Topics and Java Core (everything up to concurrency), Java Advanced (concurrency, networking, RMI, JDBC, XML) and Java Enterprise (Servlets, JSP, Custom Tags, JMS, EJB). Hence, I was not knew to this technology when I first started preparing for the SCJP exam in mid June (I also became a SCJA in January this year).

First step was to find a study book. This was not hard since I already knew about the SCJP for Java 5 Study Guide from Sierra and Bates (I already had the 1.4 version of the book). This is an excellent material, no doubt about it. It has a complete coverage of the exam objectives, examples, exercises, exam watches, basically anything you would possibly want from a certification book. Highly recommend it. I only went through this book once, done most of the exercises, and took the free practice exam that comes with the CD (you also get a bonus MasterExam practice test). Once I indentified my weaknesses, I went over again through the specific chapters in the book. At the end, I took the MasterExam practice test and did a little better. How many times you read the book really depends on you, on how familiar you are with Java, on how fast you graps the topics detailed there. I read about people who read the books as many as five times. If you think it helps, and you have time, it is up to you!
Now I have to mention that the two practice tests were the hardest from all the test that I have done afterwards, harder than the exam, hence if you nail these tests, the real exam will feel much easier. It might be harder also because, like other practice tests I took, when you get a multiple-choice question, they don't specify how many correct answers you have, while the real exam, and some of the other test, does. I understood the reason why it is not specified, but I would have wanted an option from where to choose if I should be given, or not, the number of correct answers.

Next step, a combination of taking many mock exams, and reading online SCJP notes. The best place to go for this is to the Java Ranch SCJP Forum webpage. How much it helped me? Enormous! Beside the benefit of having a forum specifically dedicated for SCJP, you get links to basically anything that you might want (and need) for this exam, such as faq, notes, mock exams, etc. Such a pool of resources gathered under one roof is almost impossible to find. Two thumbs up for everybody involved there!

If you want commercial practice tests, I would suggest Whizlabs, uCertify, Sun's own ePractice Certification Exam. From what I read, and from my own experience, I would say that Whizlabs is harder than any practice exams I know (except the one from the book). It contains tips, study notes, and 4 practice exams - best overall preparation kit. uCertify is a bit easier than the real exam, and it contained minor software errors, but was a good resource in the end. Bundled in it come 7 tests, tips, notes, etc . Sun's web-based practice exam came the closest to how the real exam was (which kind of makes sense, I know). This is the main reason I bough it. The score that I got form the third (and last) practice test was the one I got in the real exam.

Going through many mock exams and practice tests, I started writing my own SCJP Notes document. It contains everything that I thought was essential for the exam (inspired from the book and many existing online notes), together with things I have missed at tests (my own weaknesses if you like). You can read the document here.

As for the exam itself, you get 210 minutes (I was done in around 130 minutes). Honestly, I thought I would do worse than I did. I was unsure on some of the answers I had given, but when you take so many mock and practice exams, when you read from the many resources available out there, you have to start trusting your guts. And this is mostly true on API related questions, i.e. does the reverse method exist in both String and StringBuffer classes? What about replace? Java 1.5 specific questions (topics not present on older versions of Java) were on the exam quite often (such as generics, autoboxing, varags, etc). The Thread-related questions were harder than I expected, and I did the worse on that section than I did on any other (only 75%). In the practice exams, threads were one of my strongest suites. If you aks me, Concurrency, Generics and Collections are the hardest topics around.

What can I say more? Good luck to any of you who want to take this exam, and if you have any questions, drop me a comment.

Tuesday, August 19, 2008

Cell Phones - Top 3 best sellers

I remember reading about it a while ago. Digging a little through the Internet, I found the source in engadget. Here are the facts:

  1. Nokia 1100 - around 200 million units sold.
  2. Motorola RAZR V3 - around 50 million units sold (although I believe that the Motorola StarTac sold more units).
  3. LG Chocolate - around 10 million units sold.
Now, Apple's iPhone has a big chance of overrunning the third spot by the end of 2008 (with the new improved and cheaper 3G model). We'll just have to wait and see. Of course, searching the internet will reveal a different top for the most selling cell phones.

On a similar note, CNET has published a review on the best 5 cell phones. Why haven't I owned any of them yet?

Saturday, August 9, 2008

DimDim 4.0 Released

DimDim, a free web conferencing service, has launched version 4.0. Some of the key features added were:
  • Recording: You can now record your meetings and share playback URLs or embed the recording directly onto your own website just like YouTube videos.
  • Multiple Presenters: With a single click you can allow any attendee to share their presentation, whiteboard, webcam - even their desktop.
  • Mac Desktop Sharing: Mac users can share their desktop with anyone using just a browser.
  • Free Teleconferencing: With the improved free VoIP microphone sharing everyone now gets their own unlimited free conference call account.
  • Private Meetings: Simply assign a meeting key and only those who know both your meeting room name and your meeting key will be able to join.
  • No Install: Now you don't need to install anything to join or even host a meeting. You'll only need to install our screen casting plug-in if you choose to share your desktop.
Sign up and give it a spin.

Thursday, August 7, 2008

Web Design - Scalability and Speed

Greg Linden reported that every 500ms of latency costs Google 20% of its traffic. Similarly, every 100ms of latency costs Amazon 1% of their sales. The presentation concludes that speed matters (big time), but it is hard to achieve high speeds when you are manipulating large data. Here is where a scalable design matters. My experience with web design is minimal. Maybe you have some good feedback/tutorials/articles on how to achieve scalability when large amounts of data is involved.

Tuesday, July 29, 2008

Open Web Foundation

Several days ago, the Open Web Foundation has been created. From the official announcement:

"The Open Web Foundation is an attempt to create a home for community-driven specifications. Following the open source model similar to the Apache Software Foundation, the foundation is aimed at building a lightweight framework to help communities deal with the legal requirements necessary to create successful and widely adopted specification."

You can also find a brief presentation on the announcement web page mentioned above. Some of the companies that support the efforts of the foundation are Facebook, Google, O'Reilly, Sourceforge, Yahoo, and many other.

Monday, July 28, 2008

Google Trends and Job Trends

Have you ever heard of Google Trends or Job Trends? I haven't, till today. You can find out interesting and useful data about a variety of today's trends. For example, I searched on Google Trends for "Java, C#, C++", which yielded the following graph:

The result is based on the average traffic for the term searched. You can filter your results based on rank, or a specific region/subregion and/or year to get more focused results. For example, in California, there is only one single city that 'uses' C# more than Java, and that city is Simi Valley (never heard of it? me neither, but probably that's my fault).

Searching on Job Trends for the same input yielded the following graph:


The company that provides this job trends is Indeed, which states that they "index over 50 million jobs a year from thousands of websites". You can also find specific jobs based on the search criteria you entered. Unfortunately, filtering options are almost non-existent.

I must confess that I played around with both websites for quite a while. Have fun with them too!

Oracle Application Diagnostics for Java

Oracle Application Diagnostics for Java is a solution for diagnosing applications in production environments and was implemented by enhancing the native diagnostic capabilities of the Java Virtual Machine (JVM). Here are some of the key features taken from here:

  • Low overhead - there is no impact on the application on which the monitoring is done. Examples of application resource consumption include requests waiting on database, I/O, network, etc.
  • Real-time transaction tracing - used to view the application activity (such as threads and their execution stack, waiting time due to locks, etc).
  • Cross-tier correlation with Database - thus showing the state in which the database is (i.e. locks, tables, SQL statements that cause problems).
  • Memory leak detection and analysis - abnormalities in memory consumption are detected; heap dumps can be taken without impacting the application running.
  • Multiple platforms supported - runs on all major application servers.

Wednesday, July 9, 2008

pbwiki

pbwiki is a (collaborative) wiki service that offers a reliable communication of private information. Creating your own wiki page is straightforward. You first enter some personal information such as name and email address, choose a password and a name for your wiki, and that's it. Once you receive the confirmation/activation email, you start configuring you page. You can make your wiki public or private, depending if you want it to be accessible by anyone or not. Next you choose the wiki's features, but not before you get a chance of upgrading your free account with more access controls, storage (you only have 10 MB on your free account), customizations, site monitoring, or enhanced security. If you choose to go with the free version, you find that the offered features include
  • creating a new page where you can choose from a variety of templates (such as Course, Logins, Meeting, Project, To Do List, Team Member Page, etc), or you can go with no template
  • upload or view files
  • add tags
  • customize your sidebar
  • create folders and put pages into folders
  • leave comments on pages
  • share your wiki with others
Below is a screen shot of the front page pf my newly created wiki:

Tuesday, July 1, 2008

Java Developer’s Journal June 2008 Issue

Two articles of the June Edition of JDJ I enjoyed. The first one talks about (Enterprise) Comet, an event-driven application architecture where the server pushes data asynchronously to a client, without the need of pulling, and by means of a always-on HTTP connection between the client and the server. Therefor, the client does not need to explicitly request any data from the server; any application that requires real-time updates could benefit. Such examples are mentioned in the article: "chat applications to exchange messages on social networks; online games; stock prices from online trading platforms; tools for online collaboration; betting odds for gambling sites; news feeds; and results from sporting events."
The article describes how Comet works, which are the supported technologies, the benefits and drawbacks of this architecture, and many more. If you are looking for articles on Comet, they can be found on the Comet Daily website.

The second article describes how Java can be used in real-time systems. Here you can read about Sun's Java Real-Time System (Java RTS), which implements the Real-Time Specification for Java (RTSJ) and its Real-Time Garbage Collector (RTGC). The article describes key concepts from the real-time realm, such as jitter, determinism, predictability, throughput. Furthermore, the main sources of jitter are explained, for instance class loading, synchronization, compilation, and garbage collection, together with how the Java RTS alleviates each of them.

Other articles could also trigger your interest, so go ahead and give the JDJ a try.

Thursday, June 26, 2008

The Value of Design

"The Value of Design Factfinder report"is a research report done by the UK company Design Council, proving the importance of design to businesses. The research was carried out among 1,500 businesses with more than ten employees across the UK. Below are some key findings taken from the report:

"Every £100 a design alert business spends on design increases turnover by £225."

"In businesses where design is integral to operations, over three quarters say they’ve increased their competitiveness and turnover through design."

"Shares in design-led businesses outperform key stock market indices by 200%."

"On average, design alert businesses increase their market share by 6.3% through using design."

"Two thirds of UK businesses believe that design is integral to future economic performance."

"Over two thirds of manufacturers believe it’s worth investing in design in their sector."

More findings can be read directly form the article.

Monday, June 23, 2008

Wrapper Objects, Autoboxing, ==

Let us look at the following Java code:

Integer lInt1 = 5000;
Integer lInt2 = 5000;
if (lInt1 != lInt2) {
System.out.println("Different Objects");
}

Integer lInt3 = 100;
Integer lInt4 = 100;
if (lInt3 == lInt4) {
System.out.println("Same Object");
}

When compiled and run, the output will be:

Different Objects
Same Object

Apparently, in order to save memory, when using autoboxing to create two instances of the Integer (and Short) wrapper objects, they will be always == if the primitive values that they hold are from -128 to 127. Why on earth would the Java gods only allow this to happen for values from that interval, and not make it for any (legal) value possible?

Wednesday, June 18, 2008

A List of RIA Platforms & Web Development Frameworks

In the Wireless Developer's Journal, Jeremy Geelan wrote an article that lists an A-Z of application development tools and frameworks available, including names such as Adobe AIR, Appcelerator, Flex, GWT, JavaFX, Silverlight, and many other. He provides a short description of each of them, together with a link to their main websites.

Sunday, June 15, 2008

International Internet Security Report

A report entitled Malicious Software (Malware): A Security Threat to the Internet Economy was released by the Organization for Economic Co-Operation and Development (OECD).

"After hearing descriptions of "spyware" and "adware", 43% of internet users, or about 59 million American adults, say they have had one of these programs on their home computer."

"A recent study by Google that examined several billion URLs and included an in-depth analysis of 4.5 million found that, of that sample, 700 000 seemed malicious and that 450 000 were capable of launching malicious downloads."

"in 2006, the Chinese National Computer Network Emergency Response Technical Team Coordination Center (CNCERT/CC) reported that 12 million IP addresses in China were controlled by botnets" where a "botnet is a group of malware infected computers also called “zombies” or bots that can be used remotely to carry out attacks against other computer systems."

"Microsoft reported an increase in the number of machines disinfected by its Malicious Software Removal Tool from less than 4 million at the beginning of 2005 to more than 10 million at the end of 2006".

"One association of banks in the United Kingdom estimated the direct losses caused by malware to its member organizations at GBP 12.2 M in 2004, GBP 23.2 M in 2005, and GBP 33.5 M in 2006, an increase of 90% from 2004 and 44% from 2005".

Because of malware, a survey estimated that "the annual loss to United States businesses at USD 67.2 billion".

Many other interesting and useful findings are presented in the report. This is a must read report for anybody concerned with internet security.

Friday, June 6, 2008

IEEE Spectrum June 2008 Issue

Some interesting articles in the June edition of IEEE Spectrum. One mentions transistors that could be built of graphene instead of silicon (or more recently carbon nanotubes). Some gains mentioned there are faster operation (100 times faster than the silicon-based one) and smaller in size (one atom thick by 10 to 50 atom wide).

Another article talks about Radiation Sensors that can monitor a tumor from within to detect for example how much radiation that tumor is getting. The challenging part in making the sensor was not the detector itself, which consist of a modified capacitor attached to an inductor, but making it small enough to fit inside a hypodermic needle (2 centimeters long).

Furthermore, you can learn new means of securing your laptop, using Yoggie Gatekeeper Pico, a USB stick to be used as a replacement for all the security software we have on our computer and which run under Windows. The Pico device runs Linux on an Intel processor, and all wired or wireless network traffic will first go through Pico. The author went one step further than me and actually tested the small device.

The central theme for this issue (encompassing several articles), and what I found to be truly interesting, is the human brain, how it creates the mind, about the singularity, a term I have heard of for the first time, about consciousness, the future of machine intelligence, efforts in mapping the human brain so that in the end we could re-create it. Remarkable information in each of these articles.

Tuesday, June 3, 2008

Reports of "UML's descent into darkness"

In an article entitled "13 reasons for UML's descent into darkness", Daniel Pietraru states that "UML lost the programmers". He gives 13 reasons why this is the case, Oh my! Below is my response to the article:

"I regard UML as an important part of the whole software/system development process. It was not (initially) created to replace or to generate code, but rather to work at a higher abstraction level. When you are part of the programming team at work, seeing the benefits of UML is hard. Capturing and analyzing requirements, building the architecture of the system, showing how components/objects interact, executing the model to verify its correctness (see Executable UML), these are some of the utilities of UML. It improves the software/system development process. And for projects that contain more than just software components, like hardware, electrical, mechanical elements, you have SysML."

Wednesday, May 28, 2008

How does Google manage Android's code

In a recent article, I read that Google currently uses Perforce as its source code management tool for Android. The reason why they chose this particular tool can be found in a comparison of other SCM systems (also Wikipedia offers more information if needed). In addition, it is worth mentioning that Android consists of around 8 million lines of Linux code, and about 11 million lines of Java/C++ and maybe some Python code. Since they want to open source around 8.6 million lines of code, Google will move away from Perforce when it comes to managing Android code, and use Git instead, an "open source version control system designed to handle very large projects with speed and efficiency".

As a side note, one particular difference between Git and other SCMs is how Git handles data corruption. Most of SCMs have no checksums, and if they have, it's not really strong (CRC usually). Git goes further, and, beside using CRC and Adler32, it also utilizes cryptographic hashes. If you are interested in a book on Git, you have to wait a bit more.

Tuesday, May 27, 2008

Wall Climbing Robots

We are used to see robots on the ground. I have never seen robots climbing walls until I read the IEEE Spectrum article on wall climbing robots. Here are a few images:

Photo: Mark Cutkosky/Stanford University

The above Stanford's wall climbing robot uses gecko-inspired directional adhesives on its feet. Why being inspired by a gecko you ask? Because, in concordance with the wiki description of the gecko, "the toes of the gecko have attracted a lot of attention,as they adhere to a wide variety of surfaces, without the use of liquids or surface tension. Recent studies of the spatula tipped setae on gecko footpads demonstrate that the attractive forces that hold geckos to surfaces are van der Waals interactions between the finely divided setae and the surfaces themselves."

Photo: Harsha Prahlad/SRI International

The above robot is the static clinger that uses electrostatic forces to clamp to a vertical surface.

Read the IEEE Spectrum article for more details on each of these robots and watch the videos mentioned in there.

Ericsson's Mobile Front Controller

Mobile Front Controller developed by Ericsson is a web application framework that allows you to develop applications that have the same UI logic for both the web and the mobile browser. When the Mobile Front Controller receives a HTTP Request, it detects whether is a wap- or a web- specific request and loads the underlying user interface using the correct HTML, WML, or XHTML-MP markup language. The framework runs directly in a Java EE web container.

Tuesday, May 13, 2008

Sony Ericsson's Project Capuchin

Sony Ericsson has announced Project Capuchin, a Java ME API that lets you run Flash Lite content files on the mobile phone's display, thus having Flash Lite as the front end, and Java ME as the back end of your application.

From the press release:

"Project Capuchin will provide developers with an intuitive tool to create applications with a cleaner user interface (UI) without sacrificing the strong, feature rich and widely deployed Java ME infrastructure, including secure, well-developed content distribution. Project Capuchin’s bridging software will empower two distinct developer communities to leverage their respective expertises to create the next generation of highly engaging and immersive mobile content."

The need for such a solution comes from the limited capability of the Mobile Information Device Profile's LCDUI API used on embedded devices to write (graphical) user interfaces for your mobile application. This technology will be made available in the second half of 2008.

Sunday, May 11, 2008

AndroMed and Google's Android Developer Challenge

I have briefly mentioned Google's Android Developer Challenge in one of my previous posts. The idea behind this challenge is to have developers work on mobile applications that run on the Android platform with the chance of winning a fair amount of money. Together with my soon-to-be-wife Mirela (which wrote the application server side), we have developed AndroMed, a mashup application that combines data, from the Unified Medical Language System Knowledge Source Server (UMLSKS) and Google Maps, together with the services described below, into a single integrated application. Here are the main features of our system:
  • Search and display descriptions for medical terms or drugs.
  • Provide location information in form of maps and addresses of hospitals/pharmacies using user’s current location and the medical term/drug searched for.
  • Display driving directions from user’s current location to the chosen hospital or pharmacy.
  • Open web site for found hospitals/pharmacies
  • Make a call to found hospitals/pharmacies
  • Send email with description of medical terms or drugs using your own GMail account.
  • Upload your own comments/notes regarding the term you have searched for.
  • View comments/notes written by other users regarding the term you have searched for.
The area of focus was divided between:
  • Humanitarian benefits. In Africa for example, where access to medical information, such as term descriptions, drugs, treatments and treatment facilities, is scarce, AndroMed will have an impact. Diseases like Malaria, Ebola Virus, AIDS are well spread in third world countries, but people there have little, if any, information about them. They could benefit either directly (although this is a little of a stretch considering that there are specific medical words used that have almost no meaning for an untrained person) from using the application, or indirectly from others using it (i.e. Non Government Organizations like “Doctors without Borders” that usually work in such places of the world). The “Future work” section of this document also mentions ways to improve the application for people with disabilities.
  • Use of mash-up functionality. AndroMed aggregates data from different sources (such as UMLS Knowledge Source Server and Google Maps) into one integrated application. For medical organizations that do not stay stationary for long (like the one mentioned above), we could get a schedule of were and when they will be, either directly or through their website.
  • Use of location-based services. Based on the user’s locality, we provide hospitals/pharmacies location information and directions.
Here are some screenshots of the application together with some positive and negative comments:

The reason why I provided a login screen is because we had to identify somehow each user if they wanted to write some comments/notes regarding the medical term or drug they were interested in; in addition, when reading the comments, we would use the name of the user to separate each one (as you will see in a screenshot shortly below). This login step might be discouraging for first time users because they would need to create a new account, thus going through an additional hurdle to get to the core functionality of our application. Of course for the challenge, we have created a test user so that the judges can skip the registration part. At this moment I wonder if we could have omitted the login process altogether are rethink the comments part.


Searching for a medical term or drug is simple and straight forward: just type in the term and click a button.


First of all, reading through this medical term description, you can notice that for a non-medical person, it is hard to understand. Terms such as "carcinoma", "epithelium", "bronchogenic carcinomas", "adenocarcinomas", etc, have (almost) no meaning for an individual that has no medical background. This is where the field of use for our application has narrowed considerably. For the Android challenge, your application should have a much (much much) wider audience.
Second of all, text buttons should have been replaced with icons. This is true for our entire application, not only for this particular screen. It has been noticed that people have responded better to images than to text (I'm sorry I don't have any references for this).


The concept of the comments screen is similar to a list example that comes bundled with the android sdk. Each user's comment is identified by the user's name. One user can have more than one comment, and his name will appear as many times as the number of comments he has. To be honest, I don't quite know how I could have designed this differently. I wanted to be able to highlight links, email addresses, phone numbers (make them 'actionable' - if this is a word), but even though I succeeded, there were some (focus) bugs when moving from one comment to another, so removed the highlighting part. More work would have been necessary, but in the time frame we had, I decided to add more features to the application instead of improving existing ones (bad decision on my part).


Based on the specific term searched for, the user has the option to find hospitals (or pharmacies) near to his own current location. We have used the default location provider that comes with the sdk. The blue ovals represent the hospitals, while the single red oval represents user's location. I was not happy with the way I designed this; if you take a look at how similar features are implemented by Google, you can conclude that our map screen falls behind.


Displaying the addresses and phone numbers of each hospital in a separate screen was a decision made after we had switched to the m5 sdk version, where I could not find a way to display the name of the location.


After choosing a hospital, one can either make a call to that hospital, open its website (both done through the phone's menu option), or find direction starting from the user's current location.

When implementing the map screen, location addresses and directions, I always new that they would fail in comparison with the current map solution offered by Google. I should have invested more time in making it better.

Below is some future work for our AndroMed application:
  • Add other languages to the application.
  • Add, when available, text-to-voice translations and voice recognition for people with disabilities.
  • Add icons instead of text buttons where possible since people tend to respond better and find applications that use icons easier to use and understand (people who cannot read).
  • Add a “Help” options menu to each screen of the application.
  • Find specific treatments for the medical term searched for.
  • Find clinical trials for the medical term searched for.
  • Replace Google Maps search with a more specific search from a medical database.
  • Cache on the Application Server results for frequently searched terms.
We do believe that our idea is unique in the sense that there is no current mobile solution that offers what we have implemented. There are dedicated websites (such as WebMD) but the browser experience on a mobile phone has still a long way to go; in addition, such websites are not optimized for the mobile experience, which makes them harder to navigate through.

Overall, working with Android has been a great experience. Without any doubt, it will have a big impact on the mobile platform front.

UPDATE: The quartile score results were emailed today. AndroMed is ranked in the top 25 to 50 percentile of all applications submitted. As expected, the effective use of the Android platform and the overall polish of the application lagged behind. The indispensability and originality were the features that closed the gap a little.


Saturday, April 26, 2008

Mobile Advocacy Do's and Don'ts

Mobile Advocacy Do's and Don'ts, a great article on mobile advocacy that encompasses what to do and what to avoid in the mobile space. It goes through topics such as the current hype in mobile marketing such as mobile fundraising, ROI for mobile marketers, followed by what to do and what to avoid.

TIOBE Software on Dr. Dobb's Portal

In one of my previous blog entry I was talking about the popularity of programming languages as measured by TIOBE Software. Here is an interview with Paul Jansen, managing director of TIOBE Software, that appeared on Dr. Dobb's Portal this week, entitled "Programming Languages: Everyone Has a Favorite One".

Friday, April 25, 2008

Testing Mobile Applications

Mobile developers will tell you that probably the hardest part of the entire mobile application development process is testing. You would need access to hundreds of mobile devices, test on each and every one, and make sure that the features you implemented in your application work properly on each and every test device. Sure we have emulator, but all they provide is an emulated environment of the phone. Sure you should start with an emulator when testing the application, but eventually, to see how it works on a real device, you need to push further. The question that unfolds is what can you do if your company does not have access to hundreds and hundreds of devices. Here are a few possibilities:

Motorola offers a Handset Loaner Program through which you can test your mobile application on Motorola handsets. The kit that you will receive will consist of the Handset, Charger, Battery, and a USB Cable. The cost of the kit for a 30 day loan varies between $35 and $70. There are not a lot of devices available as far as I can tell. If you loose or damage the device, the fee is $1000 for most of the devices. A lot isn't it? Make sure you do not damage or loose the device.

Nokia offers the Remote Device Access program free of charge for all Nokia Forum members. It is a service that allows you to remotely test your mobile application on Symbian OS-based Nokia devices. "The main features of the service are remote controlling a device, installing and running applications, transferring files, and analyzing log files in real-time."

Sony Ericsson Virtual Lab service allows for remote testing of your mobile applications on selected 2007 Sony Ericsson mobile phones that are connected to a network 24/7. The cost varies between $18 to $20 an hour. The platforms supported are Java ME and UIQ 3.

Probably the most well known service is DeviceAnywhere, and this is because of the high number of devices/manufacturers/operators supported. It offers remote access to almost one thousand mobile devices from more than 25 manufacturers that run on more than 20 networks from places like Japan, UK, US, France, etc. Individual device packages are $100 a month each (and you can choose from over 20 packages); the hourly rate various between $13 and $16 and the hours can be used across all device packages. The unused hours do not roll over to the next month, since unused hours expire at the end of each month. You do get 3 hours of free trial to try the service.

DotMobi Virtual Developer Lab, powered by DeviceAnywhere, offers you 5 free hours to test your mobile application.

PACA Mobile Center offers access to more than 850 handsets. As far as I understood, you need to go to one of their centers (located in France) to get access to the pool of devices. The daily access cost is 500 euros, with the possibility of a 10 day plan starting from 3000 euros, and a yearly plan of 12000 euros. For start up companies, the fees are usually half off the regular price mentioned.

Mob4Fire implements the concept of crowed sourced mobile application testing. How it works is easy and straightforward: "The developer chooses a mix of handsets, network and OS's to test the software on, gets it tested by the crowed, gets feedback and pays the tester." There is an online rating system where testers are rated based on the quality and timeliness of the response. Developers are also tested based on how clearly they outlined the job testers need to do.

I will keep adding to this blog if I find new information. If you want to participate, you are very welcome, so please leave comments.

Thursday, April 24, 2008

Popularity of programming languages

TIOBE Software Community Index provides us with an indication of the popularity of programming languages. How the rating works is by calculating the hits on search engines such as Yahoo!, Google, MSN, and even YouTube. The number of hits determines the ratings of each language. The search query used is +" programming". You can read more about the index definition on their website.

I have been checking the website for a while now, and Java and C are the most popular (searched) languages. From the top 20, there were some languages that I did not even hear about, such as SAS, and only a few of them I ever used, like Java, C, C++, C#, a little of JavaScript, PL/SQL, and Lisp. From that list, my top 3 languages that I have never used and I would like to learn are Visual Basic, Ruby (on Rails), and ColdFusion (and more from Adobe if I were to have time). I remember reading something Martin Fowler agreed with once, namely that we should learn a new language each year. There are more functional and logical programming languages in the top 50 than in top 20. Will this change in the future? I doubt that. But I do expect some of those top 50 languages (between 21 and 50) will reach top 20 soon (especially the ones that deal with concurrency like Erlang since multi-processor programming will be the "next big thing" - pardon the cliche). Ralph Johnson wrote a great article about "Erlang, the next Java", how he entitles it: "Erlang is going to be a very important language. It could be the next Java".