CSC/ECE 517 Fall 2009/wiki3 21 MobileDesignPattern: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Design Pattern for Mobile Applications ==
== Design Pattern for Mobile Applications ==


The popularity of mobile applications is rising.  Design patterns are useful in almost any coding tasks.  While almost any design pattern could be used within mobile applications, certain patterns are well suited for the unique environment of mobile applications.  This wiki explains the mobile application environment, then focuses on design patterns that work well within this new emerging environment.
The popularity and number of mobile applications rising quickly.  Design patterns can help make the development process more efficient.  While almost any design pattern could be used within mobile applications, certain patterns are well suited for the unique environment of mobile applications.  This wiki explains the mobile application environment, then focuses on design patterns that work well within this new emerging environment.


__TOC__
__TOC__
Line 7: Line 7:
== The Mobile Application Environment ==
== The Mobile Application Environment ==


The mobile application environment is new and presents many unique opportunities and challenges for developers.  It seems almost everyone now has a cellphone, blackberry, or other small portable device.  These devices are "getting smarter" in that many people are developing new applications for them.  Cell phones no longer are just used to call people, they often have features like text messaging, cameras, video games, web browsers and more.  There is much opportunity for developers to write new applications for mobile devices.
The emerging mobile application environment presents many unique opportunities and challenges for developers.  It seems almost everyone has a cellphone, blackberry, or other small portable device.  These devices are "getting smarter" in that many people are developing new applications for them.  Cell phones are no longer only used to call people, they often have features like text messaging, cameras, video games, web browsers and more.  There is much opportunity for developers to write new applications for mobile devices.


While opportunity abounds, there are also quite a few challenges.  Mobile applications have less resources than are typically found in other development environments.  The screen on mobile devices is typically smaller, there is usually not a keyboard and mouse (user inputs are reduced) [5].  CPU resources are generally less than those found in the typical environment [7].  Power usage is also limited because a battery is typically used, so reducing power use by the application is an important goal [7].  Connections are typically expensive and are often prone to loss of signals [6].
While opportunity abounds, there are also quite a few challenges.  Mobile applications have fewer resources than are typically found in other development environments.  The screen on mobile devices is typically smaller and there is usually not a keyboard and mouse (user inputs are reduced) [5].  CPU resources are generally lower than those found in the typical environment [7].  Power usage is also limited because batteries are usually the power source, so reducing power use by the application is an important goal [7].  Connections are typically expensive and are often prone to loss of signals [6].


Another problem is that there is a high demand for applications to be developed quickly [7].  The mobile environment is changing rapidly [2].  Some of the lower level programming languages were useful because they produced fast applications, but they took too long to develop with[22 http://www.umsl.edu/~subramaniana/concepts1.html].  Now, with the increased demand for applications quickly, Object Oriented Programming (OOP) is used more.  While this causes a greater usage of resources, this is outweighed by the much quicker development cycle and the re-use of code.  In particular, good solutions may be re-used in OOP [7].
Another problem is that there is a high demand for applications to be developed quickly [7].  The mobile environment is changing rapidly [2].  Some of the lower level programming languages were useful because they produced fast applications, but they took too long to develop with[http://www.umsl.edu/~subramaniana/concepts1.html 12].  Now, with the increased demand for applications quickly, Object Oriented Programming (OOP) is used more often.  While this causes a greater usage of resources, this is outweighed by the benefits of much quicker development cycle and the re-use of code.  In particular, good solutions may be re-used in Object Oriented Programming (OOP) [7].


In the mobile environment, applications are often written on different operating systems [http://en.wikipedia.org/wiki/Mobile_operating_system] on different mobile systems.  There is increased interaction between mobile systems, especially for cell phones.  The Service Oriented Architecture design pattern is especially well suited for this situation.  This is a fairly new field, and methods are currently being developed to aid developers.
In the mobile environment, applications are often written on different operating systems [http://en.wikipedia.org/wiki/Mobile_operating_system] on different mobile systems.  There is increased interaction between mobile systems, especially for cell phones.  The Service Oriented Architecture design pattern is especially well suited for this situation.  This is a fairly new field, and methods are currently being developed to aid developers.
Line 17: Line 17:
== Ways to Adapt Using Design Patterns ==
== Ways to Adapt Using Design Patterns ==


Several principles and patterns have been understood and developed in developing for mobile applications.  Many of these methods are still undergoing change and experimentation.  There are new methods being developed and others left behind.  A design pattern can be defined as a repeatable solution to a common problem in software.  It is a template for how to solve the problem, not actual code [7].
Several principles and patterns have been recognized and further developed in coding for mobile applications.  Many of these methods are still undergoing change and experimentation.  There are new methods being developed and others left behind.  A design pattern can be defined as a repeatable solution to a common problem in software.  It is a template for how to solve the problem, not actual code [7].


Ease of navigation is a particularly important principle, because of the reduced number of user inputs (for example, buttons from 0 to 9 instead of a mouse and keyboard).  Everything in an application should be no more than three clicks away.  If a program is too "deep", requiring many clicks, this will be a problem because it takes longer to navigate on a mobile device.  If the application is to "broad" as in too many links on one page, the data may not all fit on the screen.  One way to mitigate this problem is to reduce functionality, to keep the application as simple as possible [5].
Ease of navigation is a particularly important principle, because of the reduced number of user inputs (for example, buttons from 0 to 9 instead of a mouse and keyboard).  Everything in an application should be no more than three clicks away.  If a program is too "deep", requiring many clicks, this will be a problem because it takes longer to navigate on a mobile device.  If the application is to "broad" as in too many links on one page, the data may not all fit on the screen.  One way to mitigate this problem is to reduce functionality, to keep the application as simple as possible [5].




The [http://www.javaworld.com/javaworld/jw-10-2005/jw-1003-mvc.html Model View Controller] pattern [1] fits the mobile environment well.  Models may be set up so that optimum data structures are used, as was discussed for the EC Factory pattern [7].  Effecient designs may be built into the controllers.  Views may be standardized for the application to handle the small screens.
The [http://www.javaworld.com/javaworld/jw-10-2005/jw-1003-mvc.html Model View Controller] pattern [1] fits the mobile environment well.  Models may be set up so that optimum data structures are used, as was discussed for the EC Factory pattern [7].  Efficient designs may be built into the controllers.  Views may be standardized for the application to handle the small screens.


We will now discuss few important ones.<br>
We will now discuss few important ones.<br>




Two major design patterns that have come up to help in mobile softwares and to address the above discussed issues in a mobile device are : Energy Conscious design pattern and Mobile agent design pattern
Two major design patterns that have come up to help in mobile software and to address the above discussed issues in a mobile device are : Energy Conscious design pattern and Mobile agent design pattern


=== Energy Conscious Factory Design ===  
=== Energy Conscious Factory Design ===  
According to the research published in ''[10]''
According to the research published in ''[10]''


Power consumption has not been much of a concern to developers in the past, but this is important in the mobile environment.  Battery power on cell phones is limited.  [7]
Power consumption has not been much of a concern to developers in the past, but this is important in the mobile environment.  Battery power on cell phones is limited.  [7] To cope with this:
- Use registers instead of memory whenever possible (registers use less energy)
- Use registers instead of memory whenever possible (registers use less energy)
- Use structs instead of classes
- Use structs instead of classes
Line 41: Line 41:


'''''Factory Method pattern''''' is a pattern that returns an object from one of various possible classes.  Which class is chosen to be an object generator  is  depended  on  data  provided  to  it.   
'''''Factory Method pattern''''' is a pattern that returns an object from one of various possible classes.  Which class is chosen to be an object generator  is  depended  on  data  provided  to  it.   
Factory Method Pattern is a good pattern to build upon for energy conscious pattern.<br>
The Factory Method Pattern is a good pattern to build upon for the energy conscious pattern.<br>
Lets look at both versions.<br>
Lets look at both versions.<br>
Class Diagram of sample Factory Method pattern::
Class Diagram of sample Factory Method pattern:
 
[[Image:ECFactory_Fig1.jpg|Class Diagram of sample Factory Method pattern ]]
[[Image:ECFactory_Fig1.jpg|Class Diagram of sample Factory Method pattern ]]


Sequence Diagram (with Activations) of sample Factory Method pattern ::
Sequence Diagram (with Activations) of sample Factory Method pattern:  
 
[[Image:ECFactory_Fig2.jpg|Sequence Diagram (with Activations) of sample Factory Method pattern ]]
[[Image:ECFactory_Fig2.jpg|Sequence Diagram (with Activations) of sample Factory Method pattern ]]


Line 53: Line 55:
As regular Factory Method pattern was not designed for being energy concerned, so, it is slightly modified. Some of the critical tweaks are:
As regular Factory Method pattern was not designed for being energy concerned, so, it is slightly modified. Some of the critical tweaks are:
*Factory Method Pattern that mixes usage of struct and class in several manners.  
*Factory Method Pattern that mixes usage of struct and class in several manners.  
*Factory Method Pattern that uses static factory method in Factory struct  
*Factory Method Pattern that uses a static factory method in the Factory struct.
*Factory Method Pattern that applies generics principle which is parametered type  
*Factory Method Pattern that applies generics principle which is parametered type.
*Factory Method Pattern That Uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod()
*Factory Method Pattern That Uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod().
 
The Modified Factory Method Pattern applies both struct and class recommendations.


Modified  Factory Method pattern applies both struct  and  class recommendations.
''The Factory Method Pattern that uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod():''


''Factory Method Pattern That Uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod()::''
[[Image:ECFactory_Fig3.jpg|Class Diagram of Factory Method pattern]]
[[Image:ECFactory_Fig3.jpg|Class Diagram of Factory Method pattern]]


In this case, we use VehicleChooser which is a ConcreteCreator as  struct while Car, Plane and Ship which are ConcreteProduct as  class.   Method ChooseVehicle(...) which is as FactoryMethod() is non-static.  
In this case, we use VehicleChooser which is a ConcreteCreator, which is a struct, while Car, Plane and Ship (which are ConcreteProduct as  is a class). Method ChooseVehicle(...) which is a FactoryMethod() is non-static.  
 
''The Factory Method Pattern that uses ConcreteProduct Struct, ConcreteCreator Struct with Static FactoryMethod():''


''Factory Method Pattern That Uses ConcreteProduct Struct, ConcreteCreator Struct with Static FactoryMethod()::''
[[Image:ECFactory_Fig4.jpg|Class Diagram of Factory Method pattern]]<br>
[[Image:ECFactory_Fig4.jpg|Class Diagram of Factory Method pattern]]<br>
If we use static method appropriately, CPU workload will be reduced.  This affects directly in lessening power consumption as a whole.
If we use the static method appropriately, CPU workload will be reduced.  This affects directly in lessening power consumption as a whole.


'''''Experimental Result:'''''
'''''Experimental Result:'''''
<br>For various combination shown in figure, the tests were run, and the result obtained are shown in the graph below.
<br>For various combination shown in figure, the tests were run, and the result obtained are shown in the graph below.
<br><br>''Characteristic of components in each combination::''
<br><br>''Characteristic of components in each combination:''
[[Image:ECFactory_Fig5.jpg|Characteristic of components in each combination ]]<br>
[[Image:ECFactory_Fig5.jpg|Characteristic of components in each combination ]]<br>


''CPU Usage Comparison ::''
''CPU Usage Comparison:''
 
[[Image:ECFactory_Fig6.jpg|CPU Usage Comparison ]]<br>
[[Image:ECFactory_Fig6.jpg|CPU Usage Comparison ]]<br>
UPT is utilized processor time and TPT is total processor time
UPT is utilized processor time and TPT is total processor time


<br><br>''Energy Usage Comparison::''
<br><br>''Energy Usage Comparison:''


[[Image:ECFactory_Fig7.jpg|Energy Usage Comparison]]<br>
[[Image:ECFactory_Fig7.jpg|Energy Usage Comparison]]<br>


It is observed that   Energy Concerned Factory Method Pattern can be obtained from the combination of     ConcreteProduct     classes     and ConcreteCreator   struct   with   static   FactoryMethod(). The ECFactory Method Pattern consumes less CPU time than regular Factory Method  Pattern around  11% while  it  is better than the worst case around 80%.  The bigger the ConcreteProduct type size is, the more range between the best and the worst case in term of energy consumption will be.
It is observed that the optimum Energy Concerned Factory Method Pattern can be obtained from the combination of ConcreteProduct classes and the ConcreteCreator struct with the static FactoryMethod(). The ECFactory Method Pattern consumes less CPU time than the regular Factory Method  Pattern (around  11%), which is is better than the worst case around 80%.  The bigger the ConcreteProduct type size is, the more range between the best and the worst case in terms of energy consumption will be. This pattern saves energy.
So it is clearly proven how this pattern can save energy.


===Service Oriented Architecture ===
===Service Oriented Architecture ===
Service Oriented Architectures are well suited for the mobile environment [3].  Within this architecture, applications can make use of various services by sending messages to them via a protocol.  Applications may interact with services on operating systems and written in different languages, as long as the protocol is followed.  Services may be located on different mobile devices.  This protocol is a good fit, allowing applications to reach out to services on other mobile devices, even though they may be on very different devices.
Service Oriented Architectures are well suited for the mobile environment [3].  Within this architecture, applications can make use of various services by sending messages to them via a protocol.  Applications may interact with services on operating systems and written in different languages, as long as the protocol is followed.  Services may be located on different mobile devices.  This protocol is a good fit, allowing applications to reach out to services on other mobile devices, even though they may be on very different devices.


''Example of an SOA::''
''Example of a SOA:''
 
[[Image:SOA_Example.jpg]]
[[Image:SOA_Example.jpg]]


===Meeting pattern Example===
===Meeting pattern Example===
According to the research published in [6].<br>
According to the research published in [6]. <br>
The meeting pattern is especially useful in mobile environments.  One device or application serves as the meeting manager.  The meeting manager coordinates and tracks the other agents (programs or applications).  These agents communicate with the oversight of the meeting manager.  Agents may be located on different devices, even on computers with more resources.  This is especially well suited for the mobile environment because it is a good way to manage the communications and relatively small applications.  A further benefit of the meeting pattern is that mobile applications may be combined (somewhat in the fashion of parallel computing) to do more and provide more resources [6].
The meeting pattern is especially useful in mobile environments.  One device or application serves as the meeting manager.  The meeting manager coordinates and tracks the other agents (programs or applications).  These agents communicate with the oversight of the meeting manager.  Agents may be located on different devices, even on computers with more resources.  This is especially well suited for the mobile environment because it is a good way to manage the communications and relatively small applications.  A further benefit of the meeting pattern is that mobile applications may be combined (somewhat in the fashion of parallel computing) to do more and provide more resources [6].


''Meeting pattern Example::''
''Meeting pattern Example:''


[[Image:MCFigure3.jpg]]
[[Image:MCFigure3.jpg]]


The master slave pattern is simmilar to the meeting pattern.  Instead of a meeting manager and agents, there is a master that creates, uses, and destroys slave objects.  The master assigns the slaves tasks to complete.  Like agents in the meeting pattern, slaves may be located on different mobile devices, or even on computers that have more resources.  The master / slave pattern is very useful for performing actions in parallel on different mobile devices [6].
The master slave pattern is similar to the meeting pattern.  Instead of a meeting manager and agents, there is a master that creates, uses, and destroys slave objects.  The master assigns the slaves tasks to complete.  Like agents in the meeting pattern, slaves may be located on different mobile devices, or even on computers that have more resources.  The master / slave pattern is very useful for performing actions in parallel on different mobile devices [6].


== Conclusion ==
== Conclusion ==
Line 127: Line 131:


11. http://www.codeproject.com/csharp/structs_in_csharp.asp
11. http://www.codeproject.com/csharp/structs_in_csharp.asp
12. http://www.umsl.edu/~subramaniana/concepts1.html

Latest revision as of 03:44, 23 November 2009

Design Pattern for Mobile Applications

The popularity and number of mobile applications rising quickly. Design patterns can help make the development process more efficient. While almost any design pattern could be used within mobile applications, certain patterns are well suited for the unique environment of mobile applications. This wiki explains the mobile application environment, then focuses on design patterns that work well within this new emerging environment.

The Mobile Application Environment

The emerging mobile application environment presents many unique opportunities and challenges for developers. It seems almost everyone has a cellphone, blackberry, or other small portable device. These devices are "getting smarter" in that many people are developing new applications for them. Cell phones are no longer only used to call people, they often have features like text messaging, cameras, video games, web browsers and more. There is much opportunity for developers to write new applications for mobile devices.

While opportunity abounds, there are also quite a few challenges. Mobile applications have fewer resources than are typically found in other development environments. The screen on mobile devices is typically smaller and there is usually not a keyboard and mouse (user inputs are reduced) [5]. CPU resources are generally lower than those found in the typical environment [7]. Power usage is also limited because batteries are usually the power source, so reducing power use by the application is an important goal [7]. Connections are typically expensive and are often prone to loss of signals [6].

Another problem is that there is a high demand for applications to be developed quickly [7]. The mobile environment is changing rapidly [2]. Some of the lower level programming languages were useful because they produced fast applications, but they took too long to develop with12. Now, with the increased demand for applications quickly, Object Oriented Programming (OOP) is used more often. While this causes a greater usage of resources, this is outweighed by the benefits of much quicker development cycle and the re-use of code. In particular, good solutions may be re-used in Object Oriented Programming (OOP) [7].

In the mobile environment, applications are often written on different operating systems [1] on different mobile systems. There is increased interaction between mobile systems, especially for cell phones. The Service Oriented Architecture design pattern is especially well suited for this situation. This is a fairly new field, and methods are currently being developed to aid developers.

Ways to Adapt Using Design Patterns

Several principles and patterns have been recognized and further developed in coding for mobile applications. Many of these methods are still undergoing change and experimentation. There are new methods being developed and others left behind. A design pattern can be defined as a repeatable solution to a common problem in software. It is a template for how to solve the problem, not actual code [7].

Ease of navigation is a particularly important principle, because of the reduced number of user inputs (for example, buttons from 0 to 9 instead of a mouse and keyboard). Everything in an application should be no more than three clicks away. If a program is too "deep", requiring many clicks, this will be a problem because it takes longer to navigate on a mobile device. If the application is to "broad" as in too many links on one page, the data may not all fit on the screen. One way to mitigate this problem is to reduce functionality, to keep the application as simple as possible [5].


The Model View Controller pattern [1] fits the mobile environment well. Models may be set up so that optimum data structures are used, as was discussed for the EC Factory pattern [7]. Efficient designs may be built into the controllers. Views may be standardized for the application to handle the small screens.

We will now discuss few important ones.


Two major design patterns that have come up to help in mobile software and to address the above discussed issues in a mobile device are : Energy Conscious design pattern and Mobile agent design pattern

Energy Conscious Factory Design

According to the research published in [10]

Power consumption has not been much of a concern to developers in the past, but this is important in the mobile environment. Battery power on cell phones is limited. [7] To cope with this: - Use registers instead of memory whenever possible (registers use less energy) - Use structs instead of classes - Use static instead of dynamic

Some strategies and their experimental results are discussed in [10]:
General Strategies

Factory Method pattern is a pattern that returns an object from one of various possible classes. Which class is chosen to be an object generator is depended on data provided to it. The Factory Method Pattern is a good pattern to build upon for the energy conscious pattern.
Lets look at both versions.
Class Diagram of sample Factory Method pattern:

Class Diagram of sample Factory Method pattern

Sequence Diagram (with Activations) of sample Factory Method pattern:

Sequence Diagram (with Activations) of sample Factory Method pattern


Modified Factory Method pattern As regular Factory Method pattern was not designed for being energy concerned, so, it is slightly modified. Some of the critical tweaks are:

  • Factory Method Pattern that mixes usage of struct and class in several manners.
  • Factory Method Pattern that uses a static factory method in the Factory struct.
  • Factory Method Pattern that applies generics principle which is parametered type.
  • Factory Method Pattern That Uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod().

The Modified Factory Method Pattern applies both struct and class recommendations.

The Factory Method Pattern that uses ConcreteProduct Class, ConcreteCreator Struct with Non-Static FactoryMethod():

Class Diagram of Factory Method pattern

In this case, we use VehicleChooser which is a ConcreteCreator, which is a struct, while Car, Plane and Ship (which are ConcreteProduct as is a class). Method ChooseVehicle(...) which is a FactoryMethod() is non-static.

The Factory Method Pattern that uses ConcreteProduct Struct, ConcreteCreator Struct with Static FactoryMethod():

Class Diagram of Factory Method pattern
If we use the static method appropriately, CPU workload will be reduced. This affects directly in lessening power consumption as a whole.

Experimental Result:
For various combination shown in figure, the tests were run, and the result obtained are shown in the graph below.

Characteristic of components in each combination: Characteristic of components in each combination

CPU Usage Comparison:

CPU Usage Comparison
UPT is utilized processor time and TPT is total processor time



Energy Usage Comparison:

Energy Usage Comparison

It is observed that the optimum Energy Concerned Factory Method Pattern can be obtained from the combination of ConcreteProduct classes and the ConcreteCreator struct with the static FactoryMethod(). The ECFactory Method Pattern consumes less CPU time than the regular Factory Method Pattern (around 11%), which is is better than the worst case around 80%. The bigger the ConcreteProduct type size is, the more range between the best and the worst case in terms of energy consumption will be. This pattern saves energy.

Service Oriented Architecture

Service Oriented Architectures are well suited for the mobile environment [3]. Within this architecture, applications can make use of various services by sending messages to them via a protocol. Applications may interact with services on operating systems and written in different languages, as long as the protocol is followed. Services may be located on different mobile devices. This protocol is a good fit, allowing applications to reach out to services on other mobile devices, even though they may be on very different devices.

Example of a SOA:

Meeting pattern Example

According to the research published in [6].
The meeting pattern is especially useful in mobile environments. One device or application serves as the meeting manager. The meeting manager coordinates and tracks the other agents (programs or applications). These agents communicate with the oversight of the meeting manager. Agents may be located on different devices, even on computers with more resources. This is especially well suited for the mobile environment because it is a good way to manage the communications and relatively small applications. A further benefit of the meeting pattern is that mobile applications may be combined (somewhat in the fashion of parallel computing) to do more and provide more resources [6].

Meeting pattern Example:

The master slave pattern is similar to the meeting pattern. Instead of a meeting manager and agents, there is a master that creates, uses, and destroys slave objects. The master assigns the slaves tasks to complete. Like agents in the meeting pattern, slaves may be located on different mobile devices, or even on computers that have more resources. The master / slave pattern is very useful for performing actions in parallel on different mobile devices [6].

Conclusion

In conclusion, certain design patterns are especially useful in the mobile design environment. These patterns help developers to produce applications quickly and applications which make efficient use of the limited resources in the mobile environment. Most design patterns can be of benefit to mobile applications, but certain patterns have features that are especially well suited. The EC factory pattern was designed for the mobile environment to reduce energy use [7]. A few other patterns show much promise with mobile devices, including the meeting pattern, master / slave pattern, and service oriented architectures.

References

1. http://www.javaworld.com/javaworld/jw-10-2005/jw-1003-mvc.html - Model View Controller Architecture

2. http://patterns.littlespringsdesign.com/index.php/The_mobile_challenge - Challenges of the Mobile Environment

3. http://pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE_517_Fall_2009/wiki2_17_va - Service Oriented Architecture

4. http://wiki.forum.nokia.com/index.php/Understading_Desing_Patterns - Understanding Design Patterns

5. http://dev.opera.com/articles/view/designing-and-developing-mobile-web-site/ - Designing and Developing mobile web sites in the real world

6. Emerson F.A Lima, Patrícia D. L. Machado, Fláavio R. Sampaio, and Jorge C. A. Figueiredo. ACM SIGSOFT Software Engineering Notes. Volume 29, issue 3 ISSN: 0163-5948 http://portal.acm.org/citation.cfm?id=986710.986726 Universidade Federal de Campina Grande, Paraíba, Brazil, May, 2004.

7. Kayun Chantarasathaporn, Chonawat Srisa-an. ACM International Conference Proceeding Series; Vol. 270 Proceedings of the 3rd international conference on Mobile technology, applications & systems SESSION: Mobile applications, article 29. ISBN:1-59593-519-3 http://portal.acm.org/citation.cfm?id=1292331.1292364 Bangkok, Thailand, 2006

8. WIM Workshop,Uppsala, 17.9.2004

9. Mobile Application Development, Sam Nasr , www.CleavelandDotNet.info

10. Energy Conscious Factory Method Design Pattern for Mobile Devices with C# and Intermediate Language, by Kayun Chantarasathaporn and Chonawat Srisa-an, Ph.D. at Faculty of Information Technology, Rangsit University, Thailand.

11. http://www.codeproject.com/csharp/structs_in_csharp.asp

12. http://www.umsl.edu/~subramaniana/concepts1.html