http://openmoko.org/api.php?action=feedcontributions&user=Sin&feedformat=atomOpenmoko - User contributions [en]2024-03-29T09:21:21ZUser contributionsMediaWiki 1.19.24http://openmoko.org/wiki/Talk:Openmoko_supported_devicesTalk:Openmoko supported devices2008-08-30T14:24:09Z<p>Sin: /* How about the iPhone ? */</p>
<hr />
<div>== Other supported hardware (Sony Ericsson) ==<br />
<br />
Hello,<br />
<br />
I have an old sony ericsson that I would be willing to try OpenMoko on. How do I get started? I am a C++ programmer so technical stuff does not bother me. What do I read, where do look?<br />
<br />
Thanks</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-21T08:30:36Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme as a high level service to each of Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw).<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: It [https://bugs.freedesktop.org/show_bug.cgi?id=15711 doesn't use kdelibs] and has a proper dbus API (altough dbus names may change, the api is considered stable). There is even a GSoC project to create a [http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2008/Ideas#Akonadi_2 GLib/GObject library].<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.<br />
<br />
== Highlevel: Network ==<br />
<br />
It should be able for a program to determine if network access is free or not (Wifi/USB against GPRS), so a program could have an option like this: Yes/no Only download podcasts when on a free network. Yes/no Check for new episodes even when on paid network. Etc. [[User:EsbenDamgaard|Ebbe]] 10:18, 19 May 2008 (UTC)</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-12T09:31:29Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to each of Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw).<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: It [https://bugs.freedesktop.org/show_bug.cgi?id=15711 doesn't use kdelibs] and has a proper dbus API (altough dbus names may change, the api is considered stable). There is even a GSoC project to create a [http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2008/Ideas#Akonadi_2 GLib/GObject library].<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-11T11:43:31Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to each of Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw).<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: It [https://bugs.freedesktop.org/show_bug.cgi?id=15711 doesn't use kdelibs] and has a proper dbus API (altough dbus names may change, the api is considered mostly stable). There is even a GSoC project to create a [http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2008/Ideas#Akonadi_2 GLib/GObject library].<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-10T19:21:47Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to each of Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw). As for the browser thing, it seems in a similar situation to telephony or PIM. An ncurses UI could simply choose not to use this service.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: [https://bugs.freedesktop.org/show_bug.cgi?id=15711 Doesn't use kdelibs] and has a proper dbus API. Completely independent of KDE :D<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-10T18:05:14Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to each of Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw). As for the browser thing, the high level browser service could map to (e)links in ncurses and webkit in graphical interfaces. Seems in a similar situation to telephony or PIM.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: [https://bugs.freedesktop.org/show_bug.cgi?id=15711 Doesn't use kdelibs] and has a proper dbus API. Completely independent of KDE :D<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-10T18:04:11Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw). As for the browser thing, the high level browser element could map to (e)links in ncurses and webkit in graphical interfaces. Seems in a similar situation to telephony or PIM.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: [https://bugs.freedesktop.org/show_bug.cgi?id=15711 Doesn't use kdelibs] and has a proper dbus API. Completely independent of KDE :D<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-10T18:02:24Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw). As for the browser thing, it seems quite similar to the situation of telephony or PIM to me.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.<br />
**[[User:Sin|Sin]]: [https://bugs.freedesktop.org/show_bug.cgi?id=15711 Doesn't use kdelibs] and has a proper dbus API. Completely independent of KDE :D<br />
<br />
==== Using PolicyKit for the usage daemon ====<br />
<br />
PolicyKit concerns authorisation of priviledged actions requested by an unprivileged user. This is independant of the actual functionality and APIs. Using PolicyKit may make sense later, when the functionality has been finished.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-06T19:51:28Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provide a native theme to Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can and will be used (which is great btw). As for the browser thing, it seems quite similar to the situation of telephony or PIM to me.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-06T11:59:28Z<p>Sin: </p>
<hr />
<div>[[User:Sin|Sin]]: Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application?<br />
<br />
*[[User:Mickey|Mickey]]: Unified theming is an application level thing, the framework has no idea about UI. To put it to the extreme, the framework services should allow you to write a feature phone UI in ncurses, if you want :) Same goes for web browsing, while being super important nowadays, this is clearly application level framework, not services level.<br />
**[[User:Sin|Sin]]: So the framework will be used to make a user environment that could provice a native theme to Qt, GTK and EWL/ETK? I'm a bit worried about consistency of the UI since any toolkit can be used (which is great btw). As for the browser thing, it seems quite similar to the situation of telephony or PIM to me.<br />
<br />
[[User:Elektrolott|Elektrolott]]: How about using [http://pim.kde.org/akonadi/ Akonadi]?<br />
Akonadi - The PIM Storage Service<br />
Mission Statement<br />
We intend to design an extensible cross-desktop storage service for PIM data and meta data<br />
providing concurrent read, write, and query access.<br />
It will provide unique desktop wide object identification and retrieval.<br />
<br />
*[[User:Mickey|Mickey]]: Akonadi seems '''huge'''. It uses kdelibs, tries to integrate a lot (much more than we need) and I don't see any sign of a dbus API.</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-04T15:13:18Z<p>Sin: </p>
<hr />
<div>Would unified theming (something like qtcurve) belong here?<br />
How about another high-level service, a web browser element (webkit) that can be used from any application? --[[User:Sin|Sin]] 17:13, 4 May 2008 (CEST)</div>Sinhttp://openmoko.org/wiki/Wish_ListWish List2008-05-04T00:30:28Z<p>Sin: /* SD Card Slot */</p>
<hr />
<div>This article is a place to collect various thoughts about the future of the [[OpenMoko]] software platform. Most wish list ideas have been linked from this page, but you may also wish to check all pages [[:Category:Ideas|that have a category of 'Ideas']].<br />
<br />
== Development ==<br />
=== Painless SDK installation & Setup ===<br />
Our goal should be a completely painless setup for somebody wanting to develop using [[OpenMoko]]<br />
<br />
* one command for installation (apt-get install openmoko)<br />
* one command to start Xnest (openmoko-xephyr?)<br />
* one command to start an i386 shell (openmoko-386-shell)<br />
* one command to start an armel shell (openmoko-armel-shell)<br />
<br />
No extra configuration required.<br />
<br />
==== IDE Plugins ====<br />
People like to see plugins for<br />
* [http://anjuta.sourceforge.net Anjuta]<br />
* [http://www.eclipse.org Eclipse] (some things are possible - see [[Development with Eclipse]].<br />
* [http://www.netbeans.org NetBeans]<br />
* Game engine - Game Creation plugins<br />
evaluate eclipse project [http://www.eclipse.org/dsdp/index.php Device Software Development Platform Project from eclipse] and subproject [http://www.eclipse.org/proposals/tml/ Tool for Mobile Linux]<br />
* [http://www.kdevelop.org KDevelop]<br />
* [http://developer.apple.com/tools/xcode/ XCode]<br />
* [http://www.monodevelop.com MonoDevelop]<br />
* [http://msdn.microsoft.com/vstudio/ Microsoft Visual Studio 2005]<br />
<br />
==== UI Designer ====<br />
Glade code generation is deprecated, so we don't want to use it. The Gtk+ powers told me that the plan is to have gtk 2.12 (out early 2007) with support for GtkBuilder, a libglade derivative which breaks a bit the XML definition in order to support all the new widgets and properties; as soon as it's in the other ui builders will add support for this format. See also [http://bugzilla.gnome.org/show_bug.cgi?id=172535 the relevant bug entry]<br />
* Possibly a Landscape (rotated) view for the screen (480x640 *or* 640x480)?<br />
<br />
<br />
==== Built-in Scripting Language ====<br />
{{Main|Wishlist:BuiltInScriptingLanguage}}<br />
There was a [http://lists.openmoko.org/pipermail/community/2007-January/001909.html fruitful discussion about a built-in scripting language on the mailing list in January.] Many people feel that it is very important for OpenMoko to choose a scripting language to ship as default in the standard OpenMoko firmware.<br />
==== Easy build of the existing autotools - based packages ====<br />
In the ideal case OpenMoko should exist on the top of the usual ./configure - make workflow which is typical for the majority of the C/C++ based open source projects. It should not require to rewrite or even replace the existing Makefile.am files of the project being ported, and it should allow to pass the needed parameters to the project configure script. Maybe OpenMoko project could be a bigger project having one or more (if some are libraries) autotools - based packages in its separate folders and include the proper documentation how to "wire" the standard autotools based package to the OpenMoko infrastructure.<br />
<br />
===Foreign Widget Set Bindings ===<br />
==== Qt Integration ====<br />
The Trolltech folks have a great widget library. I'd like to interface OpenMoko with Qt4, so that we can write Qt4 applications for the phone which don't look alienated.<br />
<br />
==== Maemo Integration ====<br />
The Maemo folks have created a successful standard for Webpad applications. I'd like to have a set of MaemoMoko and MokoMaemo wrapper classes that allow me add support for running OpenMoko applications on Maemo and vice versa. Perhaps we can get help from the Nokia OSS folks for that.<br />
<br />
==== wxWidgets Integration ====<br />
wxWidgets is a cross-platform application framework that's very popular (I'd say, #3 after Qt and Gtk+). On Linux, wxWidgets uses Gtk+ to implement the widgets. It shouldn't be hard to add support for the additional OpenMoko classes to wxWidgets hence supporting the native OpenMoko look and feel for wxWidgets applications.<br />
<br />
wxWidgets team wants OpenMoko classes too and we (wxWidgets) plan to include this project as one of our ideas for [http://google-code-updates.blogspot.com/2007/02/speaking-of-summer.html GSoC 2007]<br />
<br />
==== SDL Integration ====<br />
SDL is ''the'' game developer library. There are tons of SDL games out there. We should add OpenMoko support into SDL.<br />
<br />
==== Cocoa / GNUstep ====<br />
Allows to use MacOS X as a development platform.<br />
<br />
=== Software: Language bindings ===<br />
==== Python bindings ====<br />
Python bindings seem to be a commonly requested feature. <br />
<br />
[[User:Mickey]] says, "They are kind of usable on the [http://www.maemo.org Nokia 770], but it's at the lower end of being bearable. We should keep this in mind -- Gtk+ already comes with Python Bindings, so we "just" would need to wrap libmoko*. I would prefer to leave this to the community do though, since it doesn't make sense to start wrapping the API until we have a stable API -- and I can imagine it will take us a couple of months after going open until we can start with stabilizing the libmoko API."<br />
<br />
==== C++ bindings ====<br />
There is a whole skilled C++ community coming from the [http://qtopia.net Qtopia] and [http://opie.handhelds.org Opie] projects. If we would consider basing OpenMoko C++ Bindings on [http://www.gtkmm.org/ Gtkmm], then we could drag these guys in.<br />
<br />
==== Ruby bindings ====<br />
Ruby and ruby-(gtk|glade) already ported to OpenMoko according to [http://lists.openmoko.org/pipermail/openmoko-apps/2007-May/000040.html this ] and [http://groups.google.de/group/comp.lang.ruby/browse_thread/thread/6bee9970cf055504 this] mesages. It just have to be included to distribution (only 4.9 MB!)<br />
<br />
==== Java bindings ====<br />
People who concentrate on Java programming would like to have the OpenMoko port of some java virtual machine. GNU Classpath team a lot of great work in the past creating easily portable implementation. Sun's recently open sourced code could also be ported. <br />
==== Other bindings ====<br />
* Perl<br />
* C#<br />
* I think you could skip a bunch of these by binding to Dbus; most languages already have Dbus bindings<br />
<br />
== Community Support ==<br />
<br />
=== [http://projects.openmoko.org projects.openmoko.org] ===<br />
Infrastructure for developers with<br />
* One bugzilla for all projects (makes moving bugs forth and backwards between projects ''very'' easy)<br />
* One mailing list for project<br />
<br />
== Platform ==<br />
=== Community Images ===<br />
In the future there could be complete, unofficial "product images" that are created by the community, for example maybe one that incorporates only free software (in the GNU or OSI sense). Or images build with a particular niche market in mind -- a student for example.<br />
<br />
=== Wishlist voting ===<br />
There could be a kind of voting system like they have at one of those big computer manufacturers homepage. Then the community could vote for the ideas that are most important to them. This would especially make sense for the hardware wishlist, because the hardware is still the part which can't be done by the community that easily.<br />
<br />
Here: [http://www.fevote.com/openmoko OpenMoko suggestion board]<br />
<br />
== Software: Additional features ==<br />
<br />
===PDA Mode===<br />
<br />
There are times when you wish to power up the device and not power up the gsm/cellphone portion of the phone. For example in meetings you might wish to access the PDA side with wifi as is the case for example on an aircraft. On booting some method of booting to pda mode would be good - several other phones offer this feature.<br />
<br />
===Driving Mode===<br />
<br />
It may be forbidden in many countries, but many people use their cell phones while driving. With the touchscreen phones<br />
this is very dangerous: You have to stare at the tiny numbers on the screen and try to hit them with your thumb or try to decipher tiny script of contacts, while steering with the other hand. There should be a configurable driving mode where the interface has a reduced functionality (e.g. only contacts and dialing) with HUGE interface buttons that are easy to use with limited attention.<br />
<br />
===Calling===<br />
<br />
==== Mask ID based on dialed numbers ====<br />
It would be nice if my number only showed up when I call people in my address book and was otherwise masked. The phone I have now either always shows my number or never or can be set on a per call basis. Having it done automatically based on the number dialed would be good.<br />
<br />
==== Use calling cards and similar routing techniques for lower-cost calling ====<br />
Many people use calling cards, low-cost numbers and similar ways of reducing the costs of their calls. It would be nice to have a single panel that would allow you to configure the rules of dialing a number taking in to account such systems.<br />
<br />
==== Outgoing black/white lists ====<br />
The ability to allow or deny outoging calls to certain numbers can be useful in a number of situations (e.g. the holder of the 'phone is a child, untrusted, etc.). This could be related to entries in the contact list, for example a user is only allowed to call people who are in their contact list.<br />
<br />
Also lists for incoming calls? Some friends always come through, unknown numbers get rejected automatically.<br />
<br />
==== Time-based blocking/unblocking of calls ====<br />
Allowing or disallowing outgoing calls at certain times of the day could be useful, e.g. blocking a business phone from making calls outside of business hours.<br />
<br />
====Speaker-phone====<br />
* A speaker-phone is more than simply connecting the speakers to GSM audio, it's also echo cancellation, and eliminating the feedback that will otherwise happen between the speakers and the mic. This software has not been written.<br />
<br />
====Advanced Airtime Tracking====<br />
Many phone users have complicated plans, things like unlimited incoming, 100 anytime minutes, 1000 evening minutes, etc. It would be nice if a user could input the various monthly airtime chunks their plan gives them, and then the phone could track how much is left in each chunk, i.e. How much anytime minutes are left this month? Optionally, the software could warn when someone is close to the monthly limit, to help avoid bigger bills.<br />
On (at least some) prepaid [http://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data USSD] can be used to check current balance.<br />
<br />
* Call duration should consider billing increments and show the durations according to accounting period<br />
<br />
<br />
<br />
==== Anti-stutter software ====<br />
Delayed Auditory Feedback (DAF) has shown to reduce stuttering in individuals by 70%. By using the microphone, it should be pretty simple to implement this on the OpenMoko. The DAF functionality should also be present during phone calls. See http://en.wikipedia.org/wiki/Delayed_auditory_feedback for more information.<br />
<br />
====Minimize In-Call mode (check address book while in call)====<br />
On my locked phones I always find it annoying that one can not use other features while a call is in progress. In particular, I'd like to access the address book so that we can (1) give a caller someone else's phone number (or other info) and (2) lookup a phone number when using a calling card or some other proxy.<br />
<br />
Similar request when using the browser (lookup passwords, todo list, etc).<br />
<br />
====Hold Music (Ringback Tone)====<br />
On some cellphone networks you can pay to change the normal [http://en.wikipedia.org/wiki/Ringback_tone Ringback Tone] that the caller hears when ringing, to a customised sound.<br />
This can partially be implemented on the phone.<br />
Issues are:<br />
*In countries where callers pay, this will make you unpopular.<br />
*In countries where the called party pays, it will use your minutes, or cost you money.<br />
**A list of people to activate this function for would alleviate this.<br />
*[[GPRS]] internet connection will stall while the hold music is being played.<br />
*Extra battery used when playing music.<br />
<br />
Also see [[Answering Machine]].<br />
<br />
====Play sound clips over the air====<br />
Dialer could have a tab with big buttons which, when push, send sound clips over GSM to the person on the other end of the call. This feature is included in GizmoProject and is called sound blasts: http://support.gizmoproject.com/index.php?_a=knowledgebase&_j=questiondetails&_i=104<br />
The buttons can have default sounds, but also have the ability to be customized.<br />
<br />
It would also be useful for notifying people why you can't talk (for example, having an "I can't talk tight now - I'm in the library - this is a pre-recorded message" would be good. Also perhaps you could loop a pre-recorded sound in the background so you can lie about where you are, and have the ability to simulate a really bad connection.<br />
<br />
==== DTMF Landline Dialing ====<br />
The ability to hold the Neo near the microphone of a landline handset and have the Neo dial the landline by sounding DTMF tones. The DTMF tones could be generated in software or be pre-recorded files.<br />
<br />
Graphically this could be done by adding a 'DTFM dial' button to a context menu. The user would select a contact then presses the 'DTMF dial' button to start the process. A small delay could also be added to allow time to put the Neo near the landline handset.<br />
<br />
For the Neo to know which area code to use (or not use) the current or last GPS coordinates could be utilised.<br />
<br />
==== Conversation Recorder ====<br />
<br />
An option to record phone conversations. Would be helpful to have the device always recording for every call, with the sound data encoded to low quality Ogg Vorbis or SPEEX and stored in RAM. At the end of the conversation the user would have the option to save to flash or discard the conversation. This idea could also be applied to voicemail so you could save voicemails locally.<br />
<br />
====Unlicensed Mobile Access (UMA)====<br />
T-Mobile recently rolled out a UMA service that hands off calls between the GSM network and WiFi access points. Only a few phones support it right now, this could be a rather unique feature if OpenMoko can implement it.<br />
<br />
This can be combined with a GPS map to show where local free hubs are.<br />
<br />
==== Ignore-Call Button ====<br />
{{Main|Wishlist:Ignore Call Button}}<br />
<br />
Shut up a ringing phone, without accepting or rejecting the call.<br />
<br />
Another alternative might be to use microphone to recognize when the user gives an audible "Shhh!" command. This could prove difficult to determine with the simultaneous ringing, and possible in-pocket shuffling noises. <br />
<br />
A really usable feature is to "reject with SMS/text message" - letting the user reply the caller choosing a previously setup template or typical response: "I'm in a meeting - I'll call you later" or "Can't take your call now, please call back in 10 minutes". This feature typically is a much better way to get your co-workers (ie boss) to back off, than to silently ignore the call.<br />
<br />
The accelerometers could be queried while the phone is ringing to detect a firm tap on the phone. This would avoid the delays of fumbling to remove the phone from one's pocket to silence the ringer when you've forgotten to set it to silent mode. Just firmly tap the phone through your pocket, and the ringer will silence, like some Motorola pagers. Maybe single tap = silence; double tap = (activate voicemail or preset SMS).<br />
<br />
==== Voice Mailbox ====<br />
{{Main|Voice Mailbox}}<br />
On-Phone voice mailbox that records calls on the phone and retrieves voice messages from your mobile service provider's voice mailbox and saves them locally.<br />
Can act profile-dependent.<br />
<br />
==== Hold Button ====<br />
<br />
Similar to mute, but plays a sound file for the user on the other end while they wait. The sound file could be chosen in some setup beforehand.<br />
<br />
==== Unanswered Call, Fast Call ====<br />
<br />
In Greece because of the various bill programs some people call a mobile phone, rings one time and then hangup.<br />
Then the user of the mobile phone calls the other user(using the CallerID recognition).<br />
<br />
===Audio===<br />
<br />
==== Ambient Noise Detection ====<br />
{{Main|Wishlist:Software:Ambient Noise Detection}}<br />
<br />
Using the microphone to detect ambient noise the ringtone volume could be adjusted automatically.<br />
<br />
If the ambient noise exceeds a preset threshold, the ring vibrator could be activated. This is good for when people forget to enable vibrate mode when entering noisy environments.<br />
<br />
Detection of ambient noise could also be used to subtract the noise from the audio signal. However this approach is best performed using two Microphones, one for the voice and the other to detect the noise.<br />
<br />
==== Active noise control ====<br />
<br />
Using the microphone to do [http://en.wikipedia.org/wiki/Anti-noise active noise control] on media player playback or telephone calls. This should be an independent module/library which can be used by any application which might require this feature. also provide a way to easily alter the parameters of the active noise control.<br />
<br />
==== Hear Impaired Mode ====<br />
<br />
Hearing impaired people need louder speaker(but with less volume than hands free) and equalized sound, based on their hearing problems(example 20dB hearing loss from 2KHz to 4KHz).<br />
Older people 50+ years old need slower speech rate(time stretch, cut the big speech gups) and cleaner voice.<br />
<br />
Please note also the Hearing Aid Compatibility regulations in the US. I have tried to summarize and clarify them [http://quux.wiki.zoho.com/WhereAreHACphones.html here]. I haven't yet discovered whether the FIC device is M or T rated. For many hearing impaired users, a tcoil coupling to their hearing aid (t3/T4 rating) would be preferable to manipulating sound output in other ways.<br />
<br />
==== Mute Button ====<br />
<br />
Button to temporarily disable microphone while talking for applications such as telephone, audio recording and (when available) movie recording.<br />
<br />
<br />
===Web Browser===<br />
<br />
==== Full-page Zoom Support ====<br />
Full page zoom is a very good feature. If possible, people would want to browse the internet with normal layout than a distorted one. It's best if I could double-tap a text or image block and zoom to a fit size.<br />
<br />
The [[BigPageWidget]] proposal suggests 'Full Page Zoom' should be implemented as a widget available to all applications.<br />
<br />
* If the processor and memory could afford, it is good to just use [http://www.mozilla.org/projects/firefox/3.0a8/releasenotes/ Firefox 3] in OpenMoko. It has implemented latest gecko's full-page-zoom ability. With certain modification, we could do the same zoom like iPhone's Safari.<br />
* Firefox 3 may be a big eater. A cut-down version of it may be good enough.<br />
* If this is not practical, Minimo with full-page-zoom ability is good.<br />
<br />
==== Plugins Support ====<br />
* While an extensive browser plugin system would be costly to the efficacy of the platform four particular browser plugins as poplularized by Mozilla firefox should be adapted to the web-browser, namely: [http://noscript.net/ noscript], [http://adblockplus.org/en/ adblock plus], [http://www.greasespot.net/ greasemonkey] and [http://www.foxmarks.com/ foxmarks].<br />
* Careful use of these can dramatically reduce bandwidth, page space, and rendering costs even if it comes at the risk of some hard drive space in the form of block lists.<br />
* Greasemonkey, in particular, gives users control to set up scripts for commonly traveled pages to further reduce unnecessary or unwanted content.<br />
<br />
==== Widget support ====<br />
Built-in browser with the ability to install widget shortcuts (aka links) in the main phone menu, also some apis for interfacing with the other functionality of the phone like adding contacts, reading contacts, reading gps-psoition etc.. (maybe there is some defacto widget standard that could be used)<br />
<br />
There is a [http://www.w3.org/TR/widgets/ W3C spec] being developed, which may not be exactly what the original proposal had in mind, but it is about writing simple applications with HTML, SVG and JavaScript. It is mainly Opera's work, and while most [http://widgets.opera.com/ developed widgets are not very useful], there are some that are, and it creates a very nice development platform, especially for mobile devices. So, I think it makes an awful lot of sense for OpenMoko to support this spec.<br />
<br />
===Media===<br />
====Music/Video Software====<br />
A real good programming area for competition with the iPhone, a singular video/music player would be great for multimedia. A seamless integration system, a la iTunes and iPod, would be extremely popular. <br />
<br />
Using the Wi-Fi connectivity, a separate music program that supports wireless music sharing/ streaming (similar to what can be done when two computer running iTunes that are both on the same network) and that also supports internet radio.<br />
<br />
It would also be nice to have some kind of "announce your musical taste" mode. This could be implemented using last.fm profiles, such that when e.g. in a crowded place a user nearby has a similar musical taste, both users get notified so they can share their music files with each other (perhaps using a photo for id). Great for discovering new music - and making friends!<br />
<br />
- Possible copyright issues sharing music files?<br />
<br />
Sure, but that's the user's concern, not the developer's. There's no way for us to know which audio files the user is permitted/not permitted to share.<br />
<br />
==== Reading Support ====<br />
It would be really great to be able to read :<br />
<br />
*PDF<br />
*Open Document files<br />
*Text / RTF files<br />
*fb2 files (fbreader)<br />
*MS Office files<br />
*Aportis Doc (pdb)<br />
*DjVu<br />
*...<br />
<br />
In both landscape and portrait<br />
<br />
==== Wikipedia Mirror ====<br />
{{Main|Wishlist:Wikipedia_Mirror}}<br />
<br />
==== Blog ScribblePad ====<br />
<br />
Draw an image (and maybe add some text), then post to your blog.<br />
<br />
==== E-Book Reader ====<br />
* Neos brilliant ultra-sharp screen makes for a very good e-book reading device. All it takes is a good e-book reader with touch-screen page turning / scrolling (see the [[BigPageWidget]] proposal). FBReader could probably be adjusted easily by an experienced GTK hacker. Note that e-book reading is different to pure text/pdf displaying as it requires at least auto-bookmarking of the last read page, proper text and image scaling and text formatting.<br />
<br />
==== Personal Wiki ====<br />
{{Main|Wishlist:PersonalWiki}}<br />
<br />
Display the notes database as a Wiki. Inspiration: [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki].<br />
<br />
[http://www.didiwiki.org/ Didiwiki]<br />
<br />
<br />
==== Dictionary, thesaurus, translator and flashcards ====<br />
Native lookup dictionary and thesaurus and foreign translation dictionaries, also with support for Asian languages. Optional custom configurable (though preconfigured) interface with on-line versions of dictionaries, thesaurus and translation services.<br />
<br />
'''Dictionary'''<br />
Something like [http://www-user.tu-chemnitz.de/~fri/ding/ ding]:<br />
<br />
advantages:<br />
* small<br />
* very efficient + useful<br />
* only limited to really needed functions<br />
<br />
Support for vocabulary training with flashcard system (also usable for other content than foreign language words!)<br />
<br />
==== Flickr uploader ====<br />
A simply, drag & drop uploader, tagger and organizer to upload images on phone to [http://flickr.com Flickr], with support for various languages. A good base could be the cross-platform uploader [http://juploadr.org/ jUploadr], written in Java and working on Windows, Mac and Linux. But, most of all, the best '''GPL''' program which actually do this work is '''[http://mobilepushr.jottit.com/ Mobile Pushr]''', written in C and Cocoa for iPhone, must be probably ported in python to work on OpenMoko.<br />
<br />
===PIM (Personal Information Managment)===<br />
====Context Sensitivity====<br />
Any email or sms message or application that contains a telephone number should be click to dial, eg [http://123567890 1234567890]. Addresses link to mapping software too?<br />
<br />
==== Notes ====<br />
<br />
Something for taking notes would be a nice feature:<br />
[http://www.gnome.org/projects/tomboy/ Tomboy] has some nice syncing features and is gtk based.<br />
<br />
Some Screenshots are [http://www.gnome.org/projects/tomboy/images/ here].<br />
<br />
==== Calendar ====<br />
<br />
A nice calendar application should be implemented in OpenMoko. This tool should have a syncing feature with your desktop computer.<br />
The tool should have a reminder feature and other features like other mobile phones already have.<br />
<br />
I think synchronization sould be handled by computer with opensync+syncml based tool, not by calendar itself. --[[User:Antono|Antono]] 12:25, 7 January 2008 (CET)<br />
<br />
* If this cellphone is thought also as a PDA, of course it needs a calendar. But I would like to see something better than just a calendar, I was thinking that there could be some application using "fisheye" view. Just like [http://www.cs.umd.edu/hcil/datelens/], though that example seem a bit chaotic. --[[User:Yprum|Yprum]] 22:27, 21 February 2008 (CEST)<br />
<br />
==== Address Book ====<br />
<br />
* Option to search not just the stored list of addresses, but one or more of the online phonebooks. Probably should be modular to make adding/changing phonebook sites easy. Also allows for future integration with LDAP<br />
servers or whatever.<br />
* Also the possibility to search all info on the contact, like number, email, postal address and so on, in case someone asks you to identify a known number.<br />
* Web-based map-lookup. 'How do I get there from here? (here = current GPS location)' This could also be done<br />
by integrating with whatever on-phone GPS mapping software the Neo ends up using.<br />
* Random text input 'notes' about a contact<br />
* Overall, this should more resemble a Palm-pilot's address-book than your average cellphone's<br />
* Automated Daily backup of phone book to a website archive (similar to Verizon's Back-up Assistant<br />
*Ability to integrate address book with web-based email (such as gmail) account, for those who use web based email as their primary account<br />
* '''[[Wishlist:Tagging|Tagging]]''' Place tags for contacts. Enhance message application to send messages to all contacts tagged with ... . Enhance other application(GPS, ...) with tags.<br />
* Support for:<br />
**[http://en.wikipedia.org/wiki/SyncML SyncML]<br />
**[http://abook.sourceforge.net/ abook] a text-based addressbook program<br />
**[http://en.wikipedia.org/wiki/Ldap LDAP] address book<br />
**[http://en.wikipedia.org/wiki/LDIF LDIF], [http://en.wikipedia.org/wiki/Xml XML] and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export and import (when possible).<br />
*Store Bluetooth IDs of friends and notify (configurable only on this device or on both devices) when a one of these Bluetooth ID has been detected (this is more a separate application but has requirements on the address book. Should also be able to create an address book entry from a Bluetooth ID. Could be used as a nice tool to detect people who you're avoiding.<br />
<br />
==== Database/List Display/Edit ====<br />
{{Main|Wishlist:PilotDB}}<br />
<br />
One of the most useful apps on my Palm Pilot for me is [http://pilot-db.sourceforge.net/ pilot-db]. It's GPL'd.<br />
<br />
==== To-Do lists ====<br />
<br />
* It'd be nice to have something like [http://www.joesgoals.com Joe's Goals] always available, like my phone is, even when I'm disconnected from the net.<br />
* I would like to be able update my [http://todotxt.com/ todo.txt] which is stored on a personal server from the phone.<br />
<br />
<br />
==== Context based To-Do list ====<br />
{{Main|Wishlist:context based to-do list}}<br />
<br />
If I arrive home and there are "@home" things in the to-do list, the Context based to-do list reminds me of that.<br />
<br />
==== Workout ====<br />
<br />
Use your phone instead of your notebook while at the gym, and get pretty graphs to admire after you're done.<br />
<br />
==== Shopping List ====<br />
keep Track of Prices in different shops and the products you have/don't have. Ideally using a barcode reader and gps.<br />
If it was made aware of recipes it could even tell you what to buy without entering a shoppinglist manually.<br />
<br />
==== [[Fuel Log]] ====<br />
File data about fueling your car (date/time, liters, price, mileage, ...) and display some information (costs per month, average consumption, ...).<br />
Advanced features could include:<br />
* Automatically storing the GPS coordinates of the place where the car has been fueled (can be deactivated)<br />
* Sending the data to a central server which collects the information ( spritmonitor.de, anything else ?)<br />
* Let the OpenMoko receive fuel logs per SMS (e.g. if my wife with a non-openmoko mobile fuels the car and wants to file the data using her mobile phone)<br />
* Let the OpenMoko device act as SMS gateway for non-openmoko devices to easily send the data to the central server<br />
* Also support for air log for divers. Not that you will take this device under water but for the crew at the surface.<br />
<br />
==== Keep in touch reminder ====<br />
A background application which keeps track of your friends and reminds you when you have not talked, SMS, IM or mailed a person for more than # days.<br />
<br />
<br />
==== Menstruation period timer ====<br />
Fill in statistics and compute probabilities for menstruation, fertility, mood.<br />
See http://www.getjar.com/products/48/MyGirls<br />
<br />
==== Tagging ====<br />
{{Main|Wishlist:Tagging}}<br />
Tags can be used by various applications. Requirement is interoperability for further enhancement.<br />
Tags should be applied to contacts, calendar events, mail/sms, calls, places(GPS) and files.<br />
http://tracker-project.org has all needed tagging-and-searching functionality and ready to be used on low-resourced devices.<br />
<br />
<br />
<br />
==== Exchange Integration ====<br />
<br />
Once there is good TCP/IP connectivity on this phone, integration with corporate email/calendar/to do/contacts/etc servers would be a big advantage... near-real-time automatic email downloads and automatic bi-directional syncing are productivity boosters that you have to experience to appreciate. It turns your phone from a 'nice gadget to fiddle with' to a natural-feeling extension of your day-to-day life.<br />
<br />
* Is the time right to name names ? Add as your liking...<br />
** Plugin/integration to & from Kontact<br />
** Same with Evolution - Thunderbird - Seamonkey<br />
** ?? Google Calendars ?? (this one is tough)<br />
** Ms Exchange<br />
<br />
==== An electronic wallet ====<br />
<br />
A database which stores securely PIN codes, login data, bank and email accounts, membership informations, and other valuable and private data. Entries can be ordered in a folder-like manner. Access to the database is given by a master password. The database as well as the master password are stored with strong encryption. For security reasons, the program asks again for entry of the master password after a certain period of inactivity. The database can be synchronized with a PC application (ideally written in Java for cross platform compatibility).<br />
<br />
Examples: KWallet [http://docs.kde.org/stable/en/kdeutils/kwallet/index.html], Viskeeper [http://www.sfr-software.de/cms/EN/pocketpc/viskeeperpro/index.html], KeePass [http://keepass.info/]<br />
<br />
==== Easy business card sharing for a small group (in the same room) over bluetooth or WIFI ====<br />
<br />
Six Neo1973 owners are having a chat in a cafe. They agree to split but meet later. They want to exchange their numbers with each other before they go.... The normal way to do this is for a rather longwinded repeating of numbers to each other, or half the people manually inputting numbers before phoning/texting the other half to complete the process. All in all its a fair number of button presses to get it sorted.<br />
<br />
Instead the NEO could have a small app where the phones link up in a small peer to peer Bluetooth network and share automatically with one person initiating a request and the other detected NEOS agreeing/acknowledging the share. The initiating NEO would then sync the mini-group automatically by interrogating each phone and then sending the table of results. The NEOs would have to be clever about checking for duplicates in the address book and offering a choice to the user if there are any conflicts.<br />
<br />
PROS: <br />
*genuine saving in time for social and business situations<br />
<br />
CONS: <br />
*I am sure there are some security hassles to be pondered....<br />
*not going to be used every day... definitely not an immediate priority.....<br />
*only at geek conferences will all have a neo....<br />
<br />
==== SMS Counter ====<br />
<br />
An application which shows on the today-screen how many SMS i've already sent in this actual month. Some have for example 150 free SMS to write each month. With that program you can see all the time how many SMS are left until the end of the period. As an alternative it could be a counter which counts backwards from a predefined number over a defined period.<br />
<br />
==== Data Storage ====<br />
<br />
Store all the data about communications with a contact (SMS, MMS, phone calls, emails, IM, etc) in a database and make them available in one list or one timeline.<br />
Make this list available through the address book.<br />
This would be great for people who are switching between one or more communication channels frequently<br />
<br />
===Profiles===<br />
{{Main|Wishlist:Profiles}}<br />
<br />
The Wishlist:Profiles page documents many possible profiles - ways to configure the phone. Including ways to respond to calls, wifi and GPS events.<br />
And how to automatically switch between them.<br />
<br />
===Text Messaging===<br />
For '''Text Input related ideas''' see [[Wishlist:Text_Input]]. Bear in mind that T9 can not be included<br />
For current development status of the messaging-app see: [[Messages]].<br />
<br />
There are many useful options that now can be used to full capacity:<br />
<br />
* '''Instant Messaging'''<br />
Bringing a new GTK gui or a resized Qt gui out for the serverless Instant Messenger http://Retroshare.sf.net<br />
<br />
* '''Acknowledge/status SMS'''<br />
In GSM networks so-called acknowledge-SMS are sent back to the SMS's dispatcher in order to indicate that the primal sms was received (as message delivery is only best effort and is not guaranteed). So in the SMS dialog there could be equal sized buttons with captions as 'send only', 'send and receive delivery status message' and 'send and notify (e.g. ring) when delivery succeeded'.<br />
<br />
** '''Special handling of status-SMS''' <br />
Related to the previous entry, these acknowledgment-sms' should be handled in a different way than normal SMS'. Most Motorola do this, while Samsung SGH series don't & clog the inbox, warn of a "new" message upon Status notification: Delivery Status Messages should be stored in a separate menu so they don't bloat the received-folder and you are able to quickly review the status of the messages you had sent.<br />
* '''SMS at time/date''' You could be able to set up messages that are sent at a certain time/date<br />
* '''Binary SMS''' Send binary SMS. Could be used to feign WAP pushes. [http://en.wikipedia.org/wiki/Multimedia_Messaging_Service] See: <br />
** Resource for SMS encoding: [http://web.archive.org/web/20021016104345/www.dreamfabric.com/sms/] [http://web.archive.org/web/20060411222332/] [http://home.student.utwente.nl/s.p.ekkebus/portfolio/resource/sms_pdu.html] [http://www.ihub.com/Binary%20Messages.htm]<br />
** [http://www.gammu.org www.gammu.org] - you can use Gammu/Gammu+ source for this software and/or understanding various SMS formats including EMS, WAP, Nokia Smart Messaging, Siemens & Alcatel encoding ([[User:Marcin|I could]] eventually help)<br />
** Resource for SMS encoding (German): http://de.wikipedia.org/wiki/SMS-Kodierung<br />
** The infamous pocketpc-attack: http://www.mulliner.org/pocketpc/<br />
* '''Profile-override-SMS''' SMS that start with a certain code word override the silent profile and have the phone ring. So someone could alert you in case of some emergency.<br />
* '''Codeword-SMS''' An expansion of the above: check for code words and allow selectable tones for matches. E.g. "Server Down!" has a loud klaxon, "Disk Warning" has a quiet chirp.<br />
* '''(De-)Abreviation-script''' Implement a script that de-abbreviates: "hi m8 u k?-sry i 4gt 2 cal u lst nyt-y dnt we go c film 2moz" becomes "Hi mate. Are you okay? I am sorry that I forgot to call you last night. Why don't we go and see a film tomorrow?" (taken from: [http://en.wikipedia.org/wiki/SMS_language])<br />
** Implement a script that abbreviates :-)<br />
* '''Anti-Spam''' ...feature for SMS. May be it's possible to port some Bayesian based application like bogofilter.<br />
* '''Rule based authorizations''' ...for received messages. For example, delete messages from one source between 9h00 and 18h00 (workday) allow them otherwise (to get alerting messages).<br />
* '''Enable chat-like SMS-viewing''' SMS-Email-like: retain SMS app, but store 'conversations' rather than pile-up. Group/archive conversations by Caller Group (Work / Friends / Home / any user-defined Caller Group). Show appropriate icon from either Caller Group or Caller ID at the source of conversations panel<br />
* '''Searching''' allow full-text search or string search.<br />
* '''Massive SMS Deletion''' based on Conversation, author, before-date-xx.xx.xxxx, caller group, [[Wishlist:Tagging|tags]]...<br />
* '''Call Back''' Prompt 'Call Back' alongside other first-line options (Delete, Save number,.. this kind of options) that appear when reading an SMS.<br />
* '''Non-destructive deletion''', deleted messages goes to trash, and are recoverable.<br />
* '''SMS-EMail-Gateway'''<br />
SMS comes in, gets forward to your inbox, like any other piece of mail. Appropriate alerts and etc occur - again, just like for email. A simple SMTPD running on 127.0.0.1 that is hooked to an email-to-SMS translator that will send email addressed to 'SMS@localhost' (or whatever special address) out via SMS<br />
* '''SMS-filter chain''', for stuff like Codeword-SMS above, Theft-mode activation, auto-response (reply with gsm-position for "Where are you?"), auto-substitution (like replace $POS with gsm-position in outgoing SMS).<br />
* '''SCROOGE-SMS''' This is an intelligent SMS router. When you write your SMS you get the option of how to send it<br />
** By standard carrier SMS - cost 10cents<br />
** By OpenMoko SCROOGE SERVER - this will send your SMS to the OpenMoko Community SCROOGE SERVER next time you have WiFi - the phone will remind you to turn on WiFi when it knows you are in places where you have WiFi access. The person you are sending to picks up when they come into WiFi Range. This comes with an intelligent reminder that tells you that message has still not been delivered in 24 hours and would you now like to send it by a paymethod. This is better than IM because both parties do not have to have WiFi at the same time. - cost FREE<br />
** By email/Wifi - cost FREE<br />
** By email/GPRS - cost ?<br />
** Too many options!!!<br />
** Alternatively SCROOGE SERVER could auto launch IM client if it detects both parties have WiFi at the same time (Status kept on SCROOGE SERVER?) to allow instant reply..... Person who receives has the option to reply in SMS or in IM or in VOIP phone.<br />
<br />
=== Text input ===<br />
{{Main|Wishlist:Text Input}}<br />
There are many good suggestions for text input on the specific text input ideas page.<br />
<br />
=== More/Custom Input Method Widgets ===<br />
{{Main|Wishlist:More/Custom_Input_Method_Widgets}}<br />
Additional and customizable Input Method Widgets (similar to virtual keyboard). <br />
This could add soft-key functionality to games or other applications such as:<br />
*D-Pads<br />
*buttons<br />
*virtual trackballs<br />
*...<br />
Personalized layouts could be associated with each application.<br />
<br />
=== Games ===<br />
{{Main|Wishlist:Games}}<br />
<br />
=== Mesh Networking ===<br />
{{Main|Wishlist:Mesh Networking}}<br />
<br />
=== Printing Support ===<br />
It would be really neat to be able to print over either bluetooth, Wifi, or USB. I can imagine wanting to print:<br />
<br />
* Notes<br />
* Maps<br />
* Email<br />
* Calendars<br />
* ...<br />
<br />
Cups contains a bluetooth printing backend, so (in theory) once you have your data in postscript format, you could hand it to cups and it'll do the rest. In practice, it depends on<br />
<br />
# GTK+'s printing support<br />
# Making cups run on a really small system<br />
<br />
{{note| GTK+'s printing support seems to be very immature in 2.6 (which we need to use for some time). Gtk+ 2.10 contains much better printing support -- once we can use this, it should be more easy.}}<br />
<br />
There's always the possibility to render postscript ourselves, but this is not a piece of cake -- in general, printing is much harder than one would imagine.<br />
<br />
Further details:<br />
* [http://groups.osdl.org/apps/group_public/download.php/2205/print-summit-gtk.pdf#search=%22gtk%2B%20printing%20API%22 osdl.org]<br />
* [http://www.gnome.org/~alexl/presentations/guadec2006-printing.pdf#search=%22gtk%2B%20printing%20API%22 gnome.org]<br />
* [http://www.j5live.com/?p=204 j5live.com]<br />
<br />
===Misc Software===<br />
====Clocks/timers/Activity meters====<br />
===== Sport tracker =====<br />
{{Main|Wishlist:Sport_tracker}}<br />
Sport tracker can be used to measure the distance/velocity from point A to point B (or it could have several intermediate stopping points) using GPS. This would be extremely useful for running, biking, hiking, etc.<br />
<br />
===== Standby clock =====<br />
{{Main|Wishlist:Standby_clock}}<br />
A quick way to see what time it is.<br />
<br />
===== Egg Timer =====<br />
{{Main|Wishlist:EggTimer}}<br />
<br />
Very simple (one click) count up / count down timers are very useful.<br />
<br />
===== Cycle Computer =====<br />
As already mentioned by [http://wiki.openmoko.org/wiki/User_talk:Technil Technil], a cycle computer could be created using gps. The sensor at the bike's wheel could transmit data via bluetooth or some cable that would be attached to an openmoko device. In order to save power, one could switch off the gps and only use the bike's sensor.<br />
* Just another idea that came to me: Why don't have sensor's transmit cable plug into the headphone/microphone plug? A tool reads the signals created by the induction of the passing magnet, then gives them to the cycle-computer-app :) --[[User:Minime|Minime]] 19:50, 12 April 2007 (CEST)<br />
<br />
===== NTP Server =====<br />
<br />
Run the [http://www.ntp.org NTP] daemon using the GPS chipset as a reference clock, so that the Neo would have a very accurate time-of-day clock and would be able to serve time to other networked devices. <br />
<br />
I don't know what it would take to implement this. Items to consider would be the availability of a 1 pulse-per-second hardware signal, the accuracy of timestamps delivered in NMEA messags, etc. Dealing with power-management issues (such as the device going to sleep) would also be challenging.<br />
<br />
<br />
===== Find Keys/locate stuff =====<br />
<br />
This would require an additional accessory: a tag which transmits a signal that the Openmoko device can pick up. The tag could for example be attached with a ring loop to your keys, put in your wallet, or be attached with high strength adhesive strips to your remotely controlled aircraft. Whenever you can't find back your keys, wallet, RC aircraft,... you activate this application. When the device picks up the signal of the tag, it translates it to clear audio and visual prompts to guide you in the right direction.<br />
<br />
A commercial device that offers this functionality is the [http://loc8tor.com/ loc8tor]. Having this in the Openmoko phone would obliviate the need for a separate device. Murphy's law dictates that you'll only loose your keys when you don't know any more where you've put the loc8tor tracking device. But you're bound to always have your phone with you. <br />
<br />
Additionally, you could also set a safety perimeter. Whenever a tagged item moves more then X meters from the phone, a signal will be given.<br />
<br />
For a related idea, see [[Wishlist#Dude.2C_Where.27s_My_Car.3F|Dude, Where's my car]].<br />
<br />
===== Reality check reminder =====<br />
{{Main|Wishlist:Reality check reminder}}<br />
<br />
A tool to [http://www.phrack.org/issues.html?issue=64&id=16 hack your brain]<br />
<br />
===== Automatic timezone changing (GPS) =====<br />
<br />
Check the timezone with GPS and adapt them.<br />
<br />
====Calculators====<br />
===== A Universal Unit Converter Tool =====<br />
<br />
One never knows when one may have to convert acre-feet into deciliters. A unit conversion tool makes all engineers and engineer wannabes much happier. And not only the engineers. <br />
<br />
Ideas what kind of conversions a converter tool could do:<br />
<br />
Length<br />
- Acceleration<br />
- Angle<br />
- Angular Velocity<br />
- Area<br />
- Capacitance<br />
- Radioactivity<br />
- Currency <br />
- Charge<br />
- Computer Memory<br />
- Conductance<br />
- Density<br />
- Energy<br />
- Illumination<br />
- Power<br />
- Force <br />
- Flow<br />
- Pressure<br />
- Speed<br />
- Temperature<br />
- Time<br />
- Torque<br />
- Viscosity<br />
- Volume<br />
- Weight<br />
<br />
Roman Numerals<br />
- ASCII, Hex<br />
- Cooking<br />
- BMI<br />
- Clothing Sizes<br />
<br />
Money Converter based on current rates from Internet...<br />
e. g. Dollar <-> Euro<br />
<br />
Physical and Mathematical Constants<br />
GPS conversions <br />
<br />
- link to or integration of a scientific calculator<br />
- link to or integration of a simple calculator<br />
<br />
A good basis for such a converter tool could be the Palm program "units" from <br />
François Pessaux [http://francois.pessaux.neuf.fr/files/units1_11.tgz]. The GPL'd program comes with full documentation.<br />
<br />
For GPS conversions see gpsbabel [http://www.gpsbabel.org]<br />
<br />
===== An Postfix Notation (RPN) calculator =====<br />
<br />
Many engineers, computer scientists and other groups who have grown to enjoy the simplicity and ease of an postfix notation calculator will miss them when they give up other platforms to move to OpenMoko. A RPN calculator will increase adoption by providing one of the tools that other platforms have provided for many years.<br />
<br />
==== Windows CE Emulator ====<br />
<br />
On ARM machine, Windows CE API emulator, like Wine on x86 machines. <br />
<br />
==== PalmOS Emulator ====<br />
<br />
The Access group is probably coming out with their Linux platform any time soon. One of the components is a PalmOS emulator which I'd like to see working on OpenMoko as well. There are literally thousands of PalmOS apps.<br />
<br />
I'd like to see a Windows CE Emulator with active sync support.<br />
<br />
==== Chumby Emulator ====<br />
<br />
Would be very cool if the neo can act as a chumby. see http://chumby.com for more details about a chumby.<br />
<br />
==== TV Guide ====<br />
Display a TV guide using [http://xmltv.org xmltv].<br />
Something like [http://mtvg.sourceforge.net/ Maxemum TV-Guide] (QT)<br />
<br />
==== Alcohol meter ====<br />
Give the phone some info about your body (gender, size, weigth) and when/what you drink and it will compute an approximation of the amount of alcohol in your blood. Updates automatically, could have an alarm, when you are probably sober again.<br />
See, for example (German text) http://www.misterio-online.de/promille.htm<br />
<br />
==== Interaction with LEGO Mindstorm ====<br />
With the accelerometers, GPS and good CPU, the phone could be used to control/serve as input with robots built with LEGO Mindstorm, which can be accessed by USB and Bluetooth.<br />
<br />
==== Flashlight ====<br />
Simple finger application that makes every pixel on the entire screen white to be as bright as possible until you tap the screen again to turn it off. This way, you can use your Neo as a (short term) flashlight!<br />
<br />
==== Wii Controller Emulator ====<br />
Use the accelerometers and buttons on screen to work as a Wii controller via Bluetooth.<br />
<br />
==== FUSE support ====<br />
Ability to use FUSE to mount larger file systems over wireless. (even gmailfs, sshfs, etc.)<br />
<br />
=== Accessibility ===<br />
Accessibility features for the visually impaired.<br />
* High Contrast Themes.<br />
* Screen Magnifier. Features should include automatic cursor tracking when navigating menus and entereing text and provide manual controls to zoom in on other section of the screen.<br />
* Text to speech. The software should read out menu item ,contact lists ,text messages etc. Would also be useful for operating the phone while driving. see: [[Wishlist:Speech synthesis]]<br />
<br />
==== VOIP ====<br />
* [[Dialer]] should be able to use SIP.<br />
Ability to use the phone for VOIP over wi-fi such as Vonage. They currently have 2 different pieces of software for pc . Basically software creates a mac address which is paired with your Vonage account. Skype could also be implemented but I prefer Vonage. Only available when connected to wi-fi with a good connection. Phone treats calls the same as a cellular call, could keep a separate log of minutes, ability to record conversations, etc. Option to use VOIP if connection is available automaticly or manually. Small icon to show when call is using VOIP.<br />
* A standard SIP client would probably fit better into the "free and open" philosophy.<br />
* Ideally a SIP client that includes ZRTP/SRTP for secure communications.<br />
(Note: Vonage will not give you your SIP credentials, so you cannot log into their network with a non-approved softphone. Other VoIP providers have different policies.)<br />
<br />
''This seems very similar to what [http://en.wikipedia.org/wiki/Generic_Access_Network UMA] offers.''<br />
<br />
Asterisk is a great communication platform that can run on small devices. I have an Asterisk server running on a Nokia 770 and I read about running Asterisk on an iPhone. With the crosscompiler available it sould be possible to compile it and run Asterisk on an openmoko phone and let it take care of almost everything on the wishlist below.<br />
Edw/<br />
<br />
==== Power Meter ====<br />
If the power bar is clicked on it will show time left on charge and if charging it will show time until full.<br />
<br />
Also a rrdtool type of configurable timespan/frequency graphical overview would be very cool and usefull to some people?<br />
<br />
=== Accelerometer wishes ===<br />
==== Flick interface ====<br />
Ability to "flick" the phone for page up/down by simply and rapidly tilting the phone back-and-forth for up and forth-and-back for down. The same motion can be implemented for sideways motion. This will take advantage of the 2 3d accelerators.<br />
<br />
Sensitivity of the scrolling should be configurable and a test option provided.<br />
<br />
==== Reading navigation of documents enhanced by accelerometers ====<br />
If the two accelerometers in Neo1973 allows it, it will be nice if when you're reading, give a newspaper, you can move up, down, left and to the right the viewing of the document just moving the phones to the corresponding direction.<br />
<br />
I don't know if this is possible (haven't seen the project in detail yet) but this feature could be very attractive for final users (and this is good). (sorry for my english but i'm italian)<br />
<br />
==== Wand UI ====<br />
In keeping with the requests to think outside of the box... the dual 3d accelerometers should enable a 'magic wand'-style UI for certain uses. Macros could be recorded and edited, or presets could be used. For example, flipping the device playfully could initiate a game mode or could signal the end of the work day.<br />
==== Panning interface ====<br />
Some applications display underlying data that is larger than the screen. Typically they let you pan across the data using scroll bars.<br />
<br />
In cases where the data is only (say) 3 or 4 screens wide or high, it may be very intuitive to just shift the hand held device a few centimeters to the left or right, up or down to pan in that direction. The screen would appear to be a hole into the world of the data, and you're just moving the hole to look at something else.<br />
<br />
When the underlying data is very large, you obviously wouldn't want to use this mechanism unaltered; you'd have to walk to the next room to see the data 100 screens away. Instead different accelerations can be used for different panning sizes. This is the same adaption used for accelerated mouse pointers typical on touch pads. A quick flick moves the mouse pointer fast and far. A slower drag over the same area on a touch pad moves the pointer slower and with more precision.<br />
<br />
==== Shake-to-Wake ====<br />
Giving the phone a shake enables voice commands for a few seconds.<br />
Usage Examples: <br />
<br />
* {Shake} "Call" ''ContactName'' ''PhoneType''<br />
* {Shake} "Call John Mobile" (Calls John's mobile)<br />
* {Shake} ''ApplicationName''<br />
* {Shake} "Reader" (Opens the e-book application)<br />
<br />
Would require a method of inputting voice tags for applications and contacts and obviously will only work for P2 (accelerometers)<br />
But lets get voice command functionality working before P2 (just by pressing a button on the screen instead of shaking)<br />
<br />
I think that is possibly to replace "Shake" with double hit with finger in the side of phone. Proper algorithms(with accelerometers) should recognize any similar activities.<br />
<br />
==== Emergency call ====<br />
When the accelerometer detects a great acceleration (i.e. 5G) start a countdown sequence, if it is not stopped make a call to a preconfigured emergency number. If the data from the GPS is accurate give it.<br />
<br />
A first version could use a recorded message (an audio file). In next version it could use a synthesizer, so it can give more information (add GPS information when it is ready).<br />
<br />
:I would worry that most such events would be false positives, and hard to distinguish from the real thing. A user dropping their phone (an event very common in the life of any cellphone) is far more likely than a user being in a car accident with their phone, and the clatter of a cell phone on asphalt could reach 5G. Additionally, it has to be very hard to distinguish hitting pavement from hitting a windshield, as from a physics standpoint the two are the same thing. [[User:Hashbrowncipher|Hashbrowncipher]] 02:06, 26 October 2007 (CEST)<br />
::It could use the gps data to calculate the speed it is traveling with. Let's say it has been moving for more than 50 km/h for more than 10 seconds. Then it could activate the "emergency call if more than 5g" function. Aside from the countdown timer, it could increase the volume to max and warn the user that an automatic emergency call will take place in x seconds. While it is counting down it could listen for "Never mind, I'm fine, phone" and stop the countdown in case it hears that. It could also output the warning sound to the attached bluetooth headset and let the user talk to emergency services if the user is still conscious. [[User:Tommy|Tommy]] 17:48, 8 January 2008 (CET)<br />
:::Perhaps have the phone yell loudly that it's about to do the emergency call for a decent amount of time, disabled by touching the screen or entering the pin number. In the case of any bluetooth device attached to the user, the phone could check to see if it's in range before calling. [[User:sin|sin]]<br />
<br />
==== Movement detection ====<br />
By detecting that the owner is walking a user defined profile can be activated with a specific set of notification settings. For example you may wish to use a cheap old sounding ringtone so you don't attract attention from muggers. Or you may wish to have a louder ringtone if you carry your phone in a bag where it can't be so easily heard.<br />
<br />
==== Games ====<br />
Imagine a first person shooter that you look around by turning your body.<br />
<br />
==== Sloshing battery indicator ====<br />
Shaking the phone will produce a sloshing sound, as if it contained a liquid. As the battery loses charge, so the sound produced on being shaken, will replicate a decreasingly empty container. [http://mobile.slashdot.org/article.pl?sid=07/11/28/1342248] for an example.<br />
==== Steady screen ====<br />
It may be hard to read the screen when the device is shaking from some source of vibration. E.g.<br />
* being mounted inside a vehicle<br />
* during certain sports<br />
* while the internal vibrator is activated (perhaps)<br />
The accelerometers could be used to determine the frequency of the shaking and to make the screen appear to be steady by offsetting the contents at the same frequency in the opposite direction. If this was handled by the graphics processor it might not even be an intensive operation or produce significant battery usage.<br />
<br />
At slower movements, (say just being held in an older unsteady hand) the accelerometer data could be fed directly into the screen offset. This would allow you to compensate for unpredictable movements. <br />
<br />
Such a mode would cancel out shaking, producing what would appear to be a slightly smaller but steady screen. (Smaller because pixels at the edge of the screen may have ''any'' screen in the same location in the next fraction of the vibration). Gross movements that move the screen to an entirely different position would not be cancelled, effectively 'panning' to keep up with the large movement.<br />
<br />
In situations where the hand is not experiencing the same source of vibration that the screen is, the areas of touch sensitivity should be offset at the same time as the screen. So a steady hand touching a vibrating screen isn't interpretted by the application software as a vibrating hand.<br />
<br />
These features would best be implemented in the rendering and touch libraries so they could be activated for all applications.<br />
<br />
==== Taping as input ====<br />
If I understand correctly the accelerometer should be capable to be used as a simple input. When OpenMoko is in the pocket, simple taps against the pocket should be possible to use as input. For example when there is an incoming call and the user is notified using a headset then one tap would accept the call and two concurrent taps against the pocket would cancel it. This can also be used for lot more.<br />
<br />
==== Others ====<br />
Also see the pages[[Wishlist:Auto Align Map]], [[Wishlist:Determine Position]], [[Distance Measuring]], [[Wishlist:Computer Mouse]], [[Wishlist:Dynamic Screen Orientation]].<br />
<br />
=== Connectivity ===<br />
<br />
==== VNC ====<br />
A good, stylus friendly VNC client/host combo would be easy to add and terribly useful.<br />
<br />
==== Networked X-Windows ====<br />
<br />
Whether it's running true X-Windowing over the network, or your bog-standard VNC connection as mentioned above, the ability to have your phone's screen available on your laptop or palmtop would be most desirable.<br />
<br />
==== NX client ====<br />
<br />
A form of X-windows forwarding optimized for performance over slow, or high-latency links, which could prove extremely useful. Capable of streaming a good quality, full desktop session over modem speeds. The protocol and at least one implementation is gpl'd. [http://en.wikipedia.org/wiki/NX_technology wikipedia]<br />
<br />
==== OpenOffice Presenter Control ====<br />
<br />
I Think it is a good idea to control your OO Presentation with Openmoko about WLAN or Bluetooth.<br />
I think it needs some buttons to go back or forward and control the mouse to show something and take normal mouse clicks.<br />
But with the mouse clicks I think that we need a short time between the clicks in example 1 second. Because when you make a mouse <br />
click than to fast than you must go back.<br />
<br />
Some similar functionality will be implemented during SoC 08. More info at [[OpenMoko Bluetooth remote controller]]<br />
<br />
==== Amarok and other Media Player remote control ====<br />
<br />
Control Amarok or any other Media Player with OpenMoko (as a remote control). Bluetooth or WLAN could be used as protocol to send and receive the data. Maybe a WebInterface of Amarok is a start. Can be used on parties for a mobile music management.<br />
<br />
==== Read informations with SMS ====<br />
Send a SMS with Code to the OpenMoko (from a specific number).<br />
For example to send get the GPS coordinates from a stolen Neo (or if you don't know where your Neo is).<br />
<br />
=== Security ===<br />
<br />
==== General Filesystem Encryption ====<br />
<br />
If anyone wants to get your private data saved on your OpenMoko device, he should have to get through a high security mechanism like dm-crypt. The question is how much CPU power would be needed. <br />
Would it be an idea to encrypt only the private data like phone numbers, preferences, address book etc. (like /home/$USER).<br />
<br />
http://luks.endorphin.org<br />
<br />
==== My Account ====<br />
{{Main|My Account}}<br />
A way to securely store information about the phone, and ensure that a phone you may be considering purchasing is not stolen.<br />
<br />
==== [http://zfoneproject.com/ Zfone] or similar ====<br />
<br />
Something that allows the user to speak with another person securely.<br />
<br />
==== GSM Encryption ====<br />
<br />
This software application would allow GSM encrypted calls to be made using the GSM Data Call Channel. <br />
<br />
[[OSvS]]<br />
<br />
==== My Voice is my Passport ====<br />
Use voice recognition to unlock the phone. "Hi. My name is ... My voice is my passport. Verify me."<br />
<br />
==== Firewall ====<br />
A network firewall<br />
<br />
==== Full Mac Support ====<br />
Full mac support, preferably with full software and full sync capabilities with iCal and iMail <br />
<br />
==== Anti Theft Application ====<br />
<br />
This application would enter the phone into an [[Anti-Theft Mode]] which activates particular security features to reduce the risk of theft and also to ensure a higher probability of recovery of a stolen handset.<br />
<br />
====RFID based personal alerts====<br />
Assuming an RFID reader is available: You'd put an RFID tag on your keys, wallet, etc and train a program on the phone to give you a soft or hard alert when one of them leaves detection range. That way, if you're walking away from one of them, the phone could alert you.<br />
<br />
Actually there is a RFID reader available. Take a look at this: http://www.wdi.ca/ We only need driver for that thing. .... Well, never mind. I think it doesn't work because of the size. Anyway an interesting idea.<br />
<br />
====OpenVPN Client====<br />
This application allows to configure the device as an OpenVPN client using the GUI including support for X.509 certificates.<br />
<br />
=== Integrated Help System ===<br />
<br />
A help system that is either on or off. It could be activated and deactivated by a [[five-second-press]] on a button, for example the AUX button. When the help system is activated, it will explain the use of any item you touch on screen (with stylus or finger). Example: if you touch the battery icon, it will explain that this shows battery level / remaining time. If you touch the date / time icon, it will explain that this icon shows date and time, and that if you press it, you can set date and time. Primarily, this help system should be able to explain all user interface elements in the main screen, but if it proves popular, it could be expanded to cover other applications as well.<br />
<br />
===Performance optimisation===<br />
==== Use DMA engine in CPU for blitter ====<br />
The DMA engine in the CPU can substantially speed up moving of large areas of screen in some cases.<br />
<br />
==== Use virtual screen to optimise scrolling ====<br />
In some other cases, the hardware supported virtual screen may also speed it up.<br />
===Reusable Display/UI Widgets===<br />
====Use BigPage for full page zoom, scroll, scale in many apps====<br />
The [[BigPageWidget]] Page decribes a widget that could bring full natural page viewing, scaling, scrolling to the OM platform - allowing all applications to make intuitive UIs. A good way to read documents of any type without reformatting them massively increases the utility of a device with a small screen<br />
<br />
==Bluetooth==<br />
<br />
=== Voice Dialing ===<br />
<br />
Dial by voice commands.<br />
<br>Dial by dictating phone number. This way we can voice dial any number even if not in our contact list.<br />
<br />
=== Music through Bluetooth Headset ===<br />
<br />
Music can be played through a Bluetooth headset, but would stop playing when a call comes in.<br />
<br />
=== Walkie Talkie ===<br />
<br />
Let OpenMoko devices connect to one another via bluetooth or another connection method (GPRS for long distance but high latency, probably Wifi on P2), and hold a conversation.<br />
<br />
Features for this applications can be:<br />
* Push To Talk (PTT) button<br />
* Voice Activated Control (VAC) which will set it in transmit mode when input has is detected above a certain predefined level.<br />
* Optionally a full duplex mode<br />
* Different channels to choose from<br />
* Monitor different (preselected or all) channels for traffic.<br />
* Content encryption<br />
* Active noise control<br />
* Allow zero config use (units can talk without any access point helping)<br />
* Overview of all connected people trough sending GPS data to everyone who is in the Walkie Talkie channel<br />
<br />
Local (non-GPRS) use cases include chatting while biking<br />
or motorcycling in a group; perhaps also in a car caravan.<br />
This application could also be used as a baby-phone to monitor your siblings.<br />
<br />
This would be more useful if the Neo had Class 1 bluetooth, though probable Wifi on P2 will also offer more range.<br />
<br />
(One thumbs up from me) Jackcday<br />
<br />
See also [[Wish_List#WiFi_Walkie_Talkie|WiFi Walkie Talkie]] and perhaps construct one application that can handle both Bleutooth and Wifi.<br />
<br />
=== Automatic Sync ===<br />
<br />
Automatically synchronize with desktop computer (or with any [http://en.wikipedia.org/wiki/SyncML SyncML] server) when within range based on user profile. This may require the use of a secure data transfer.<br />
<br />
=== GPS Assisted Bluetooth Management ===<br />
<br />
Allow Bluetooth to automatically turn off after loosing connectivity and to automatically turn back on based upon GPS location.<br />
<br />
A Bluetooth device is configured for automatic reacquisition based on the following profiles:<br />
* Manual - only when Bluetooth is on<br />
* Non-mobile - the target device is not mobile, periodically attempt reacquisition when in the general area of the device.<br />
* Mobile - the target device is mobile, periodically attempt reacquisition when in the general area of the device.<br />
<br />
Each target device is configured as follows:<br />
* Automatic acquisition at last known location: enable/disable<br />
* Automatic acquisition at these locations: list of nickname + coordinates + range<br />
<br />
==== Non-mobile devices ====<br />
<br />
Examples devices include: computers<br />
<br />
The location and range of the target device is determined via training. Periodically, the current GPS coordinates and Bluetooth signal strength are logged. Additionally, connectivity loss events are logged. An algorithm uses these logs to determine the device location and range.<br />
<br />
Connection attempts are made when in a configurable proximity to the device. The first attempt when entering the proximity and further attempts at a configurable interval.<br />
<br />
==== Mobile devices ====<br />
<br />
Example devices include: automobiles<br />
<br />
Mobile devices are configured to have two types of locations:<br />
# Last known location<br />
# Non-mobile locations (homes)<br />
<br />
===== Last known location =====<br />
<br />
A car is mobile, ideally, when you leave your car, the phone should note the car's location when connectivity is lost and then attempt to reacquire the car when you return to the location of the car.<br />
<br />
===== Non-mobile locations (homes) =====<br />
<br />
As mobile devices may have multiple users, it is not sufficient to always use the last known location. In this case, the device may additionally have multiple homes. For example, a car might have as its homes: home garage and work parking lot.<br />
<br />
=== Bluetooth neighbor detection and multiuser apps ===<br />
<br />
Like the [http://en.wikipedia.org/wiki/One_laptop_per_child one laptop per child] (OLPC) interface, keep a number in the status bar that represents a count of other openmoko or compatible bluetooth devices in the area. Allow for the spontaneous initiation of a chatroom or multiplayer game or file trading with any moko in the area.<br />
<br />
=== Bluetooth environment detection ===<br />
<br />
Capability to detect when a predetermined bt device enters/leaves bt range and launch a system-wide event accordingly. This would feed not only the "Neighbour detection" idea described above, but also the "Profiles", "Context based TO-DO list" and "Location-based reminders" ideas. Reminders could be set to trigger in the presence of a specific person X (with BT device Y). Profiles can take into account which devices are present around the phone (car kit, for ex.). To-do list could also change according to present devices.<br />
<br />
=== Remote control ===<br />
<br />
==== Wireless presenter ====<br />
Use the phone to run your OpenOffice.org Impress presentation remotely using Bluetooth. Cool features: <br />
* Display the text notes for the presenter on the phone's display and update it whenever the slide is changing.<br />
** OO.org has implemented support for [http://www.openoffice.org/issues/show_bug.cgi?id=12719 dual monitor]/[http://www.openoffice.org/issues/show_bug.cgi?id=18486 presenter mode] that can be used as a starting point<br />
* A small timer showing the time passed (and perhaps remaining if the presentation app supports such a feature). <br />
* If you want to be super-cool, you give a preview of the notes of the next slide in the show. <br />
* At the end of a presentation, a "navigator" could allow to easily jump to any slide in the presentation by clicking on it on the phone.<br />
** When you right-click in a running OO.org Impress presentation, you can choose "got o slide..." and select any slide to jump to.<br />
<br />
Some similar functionality will be implemented during SoC 08. More info at [[OpenMoko Bluetooth remote controller]]<br />
<br />
==== Initiated from another device ====<br />
Remote control over Bluetooth from other devices to control media player (play, pause, next, previous, volume control), camera (capture image), etc.<br />
==== Directed at another device ====<br />
Remote control over Bluetooth to other devices to control media player, lights in your house, etc.<br />
<br />
[http://mjr.iki.fi/software/remote-0.9.0.tar.gz Remote] is my draft of a python-based remote control app that allows you to define button sets and commands to run on the local or a remote host (through ssh, for instance). Error handling and command interface need work.--[[User:Mjr|Mjr]] 11:14, 18 October 2007 (CEST)<br />
<br />
Z-wave uses web-browser control of devices that is said to be compatible with mobile phone browsers so should work with openmoko browser. [http://www.z-wave.com www.z-wave.com]<br />
<br />
=== Bluetooth Car Connection ===<br />
<br />
Have a deeper connection to the car than just handsfree speakerphone. For instance a transceiver with challenge/response systems to open, possibly even start the car. Possibly go as far as OBD connection to monitor car status on screen/log for later.<br />
<br />
Could be done with a port of [https://garage.maemo.org/projects/carman/ Carman] or similar that can connect to an OBD2 adapter via USB or Bluetooth and display various information collect from the car, GPS, and accelerometers. --[http://wiki.openmoko.org/wiki/User:Bmk789 bmk789]<br />
<br />
==== Dude, Where's My Car? ====<br />
<br />
When in range of the car navigation system, remember the position (perhaps check with the car GPS). When not in range, assumme that you are not in the car, and offer the opportunity to navigate to the car's last known position. That way, you can find your car e.g. on a large parking lot.<br />
<br />
=== [[Bluetooth powered Multi-SIM support]] ===<br />
<br />
As the Neo1971 does not come with dual-SIM support this could be solved by joining your old bluetooth-enabled mobile to your OpenMoko-phone.<br />
<br />
Let SIM card A be in your OpenMoko-phone and SIM card B in your old mobile:<br />
* Incoming call on SIM card B - the OpenMoko-phone acts as a headset(Bluetooth Headset profile)<br />
* Calling out via SIM card B - the OpenMoko-phone acts again as a headset<br />
* Same for Short Messages/MMS/Internet<br />
This way you'd have your old phone switched silent and connected to your OpenMoko-phone that handles all the calls and one can select which SIM card to use.<br />
Advantage: No 'switching' between cards<br />
Disadvantage: Second mobile needs to be in range(e.g. handbag) and charged every once in a while.<br />
<br />
===Internet Gateway===<br />
<br />
If the device could function as a Bluetooth router/gateway to the internet via the GPRS/data connector, then you could use it to get network connectivity from your laptop and other devices while on the road. Many smartphones can be configured as modems via Bluetooth for use as Dial-Up Networking connectors, and that should be the minimum target. Ideally, if the WiFi functionality was used so the OpenMoko could be an 802.11 router or peer to peer gateway for a laptop, this would be even better. The full bandwidth of GPRS or whatever network is available would then be available.<br />
<br />
=== Social Networking ===<br />
<br />
Anybody running the social networking app will be broadcasting a profile, and when certain keywords are matched with other users who are also running the application, an alert is sounded. Each mokoid can be added as a hexstring to a profile page, and xml filters can be developed for each social service to convert various keywords and interests to moko-friendly format.<br />
<br />
=== Give userspace api control over bluetooth signal strength ===<br />
<br />
I have tried bluetooth handsfree sets with other phones and don't get perfect reception due to low signal strength. I suppose the reason the signal is so weak is because the manufacturer wants the battery to last long on its latest charge. Can you please make the strength setting configurable by the user of the phone through an api and perhaps even through the phones gui? I would gladly waste some battery time in exchange for stronger bluetooth signal strength.<br />
<br />
<br />
== WiFi ==<br />
<br />
=== Industrial grade Wifi management ===<br />
One annoyance I've had with Wifi enabled gadgets is that they simply keep the connections in a dumb list. What I'd like to see is more granular connection management, which enables me to specify whether a given connection is friend & family (mom's place), professional client (joe's copies and coffee), commercially available (panera), onetime use, or anything else, as well as managing router config backups, firmware images, and security keys. <br />
=== Captive portal auto-login support ===<br />
Having a nice front-end to some sort of script that checks the authenticity of a captive portal login page (SSL cert), then passes your username and password login information to automatically log you into your account would be very nice as well. This can be done with curl, but it is difficult to make it work on all captive portals out there. Perhaps just a field that you can specify "once I am connected to this AP, run this script: ".<br />
<br />
=== WiFi Walkie Talkie ===<br />
Provide walktie talkie functionality like http://www.domain17.net/walkietalkie/index.html See also [[Wish_List#Walkie_Talkie|Bluetooth Walkie Talkie]] and perhaps construct one application that can handle both Bleutooth and Wifi.<br />
<br />
== Wireless Piggyback ==<br />
<br />
HSDPA support and the like, so that users can connect directly with the internet with G3/G4 mobile service providers at speeds at or above 3.6 Mb/s.<br />
<br />
== Other ==<br />
<br />
=== Auto Update ===<br />
<br />
A small tool which is configurable to download the latest OpenMoko and OpenMoko related software. Maybe if any internet connection is available or a minimum of bandwith is available then the auto update would download only security related or the whole system etc. .<br />
<br />
=== Vibrate Pattern Recorder ===<br />
<br />
An application that would allow the user to define their own vibration patterns, and possibly link them to audio files. Recording would be done in real time initiated with a "Record" button, optionally playing the associated sound file in sync with recording). While recording, the user would press and hold a button to define the timing and duration of vibration. The user would press "Stop" when finished. Vibration patterns would have the option of being looped(would terminate at some global ringtone length maximum).<br />
<br />
One simple suggested vibration file format would be a sort of run-length encoding: First byte defines the length of a "time-slice" in milliseconds, which would determine the overall tempo(actually the inverse of tempo). The next byte would define the number of time-slices to leave the vibration on, and then another byte for how long to pause after. Continue alternating these on/off bytes until the entire pattern is defined.<br />
<br />
- or just use MIDI, using a separate channel for the vibrator.<br />
<br />
An implementation of RTTL could also be used to define vibration patterns.<br />
<br />
=== PC Input Device ===<br />
<br />
Provide a method to use the touchscreen as input device for a nearby desktop machine. Could connect over USB or bluetooth.<br />
<br />
Could emulate a pointer device (mouse) or even keyboard using standard bluetooth/USB interfaces for such a device.<br />
<br />
Use case: Alice is lazing on a couch and doesn't want to get up to do some minor interaction with the computer. She can see the screen and uses the OpenMoko device as a mouse and/or keyboard to interact with the computer.<br />
<br />
=== Advanced Notification And Ringtone Manager ===<br />
{{Main|Wishlist-ANARM}}<br />
<br />
ANARM would be an application for handling all event-based audible notifications from an OpenMoko device.<br />
<br />
=== Location based reminders ===<br />
{{Main|Wishlist:Location_based_reminders}}<br />
Location based reminders can be used to notify users of various events or reminders that are location based.<br />
<br />
=== Synergy Client ===<br />
A synergy client would enable the user to place the device next to a desktop PC and share the desktop`s mouse, keyboard and clipboard over a TCP/IP network. [http://synergy2.sourceforge.net/ Synergy]<br />
<br />
=== Next device ===<br />
List features for your fantasy device to come from FIC (or anyone else, for that matter). Define the GTA03 here ;-)<br />
<br />
==== There is no device ====<br />
From [http://wurp.blogspot.com/2008/01/teh-future.html Wurp's blog]:<br />
<br />
Clearly the Next Big Thing has to be for the device to go away altogether. I know the basic idea for wearables has been around forever, but it seems to me that the time has come.<br />
<br />
I wanna wear a bluetooth earpiece and cool shades, possibly with [ here's where my imagination is failing me :-( ] gloves, or fingerless gloves, or (ew) wristbands, and let any surface, including my hand, or no surface, be my interface. Tap the earpiece when you get a phone call, see a dial pad on your palm and tap out the number with the other hand, watch movies on a giant screen hovering in the air...<br />
<br />
(equipment list: bluetooth earpiece, some brick in my pocket or on my belt, glasses w/ minute camera, painted video display, & variable darkness lenses, and gloves)<br />
<br />
Why the hell do I want to dig out a device every time I want mindless entertainment or superficial conversation?<br />
<br />
Ideally, you could then sell any little doohickey with whatever interface you want (switches, knobs, g-spots, ...) and all it needs to do is network with some software on the brick to be anything at all...<br />
<br />
== GPS Software ==<br />
[[Image:Cheap_gps.png|right|300px|From xkcd.com :-)]]<br />
*Providing GPS Support also for outdoor users in addition to ordinary street navigation features<br />
** Overlay of satellite images with existing streetmaps<br />
** Incorporating SRTM digital elevation model: for example using the VRML/X3D as data format (see http://www.ai.sri.com/geovrml/) which is interesting for e.g. mountaineering: using a 3d browser rendering VRML/X3D Model, displaying the current position and track (possibly also other gps-tracks of the different routes to a summit downloaded before could be mapped onto the 3d model), (what about 3d hardware support? there is nothing written in the hardware specs about graphics: thinking of OpenGL for embedded systems (see http://www.khronos.org/opengles/)<br />
** Using sth like a tracking mode to allow certain people to determine the current position and track (for rescue missions - like they have for example at http://www.steiger-stiftung.de (a German beneficence for rescue issues) There you can register your mobile phone so the rescue service is able to track you immediately if necessary. The interesting thing: It seems like some mobile phones with GPS have special support for this issue. If your phone is registered, the rescue service is able to get your GPS coordinates directly from the phone without any user assistance. Openmoko should also support this! )<br />
* Implementation of 3dTracking's (http://free.3dtracking.net/) tracking software or equivalent.<br />
* "Geomark" function: if you have to save the current time with your current location, only hit one button...<br />
** You also should be able to navigate with a small "compass" and the distance should be displayed to your saved point (maybe where you parked your car on a big car parking area)...<br />
* '''Measure the distance between two points (air line or walked way) -> no need for a tape measure'''<br />
**I think it would be good if you could either use Bluetooth, GPRS or AdHoc Wifi, and see near Neo1972 on the GPS map so you could see where your friends are, e.g "You want to know if you friend is on the bus behind" You would need a strong wifi and GPRS would be too expensive.<br />
*A bicycle sat-nav would be cool, speciayl designed for bicycles, e.g. cycle routes<br />
<br />
<br>[[Community Based Traffic Information]]<br />
<br />
== Hardware ==<br />
{{Main|Wish List - Hardware}}<br />
<br />
It could be use for beepway Online service too <br />
[http://www.beepway.com]<br />
<br />
=== Dedicated Power / Charger Pinout ===<br />
<br />
Having not yet seen a physical Neo device, I haven't been able to examine any of the IOs to see if there already is a dedicated power / charger input. However, I can imagine that it might be very tempting to have the device charge solely via USB. For any device that is capable of USB-host, that is a '''horrible''' idea.<br />
<br />
Since the device is able to run in USB host mode, it might be a good idea to allow for an alternate power supply, if say, a USB keyboard was being used for several hours. Rather than drain the battery, one could just supply power via the wall outlet while still providing endless hours of USB-host enjoyment for those hard-coders on the go.<br />
<br />
The main question is just deciding on where to take power from if in USB-client mode and the power cable is inserted, but really, that's not too big of a deal and can be solved with very minimal circuitry.<br />
<br />
This might sound extraneous at first, but when the device shuts down in the middle of an important USB file transfer, or right before that great piece of code was saved, you can bet that those users will be saying "Hmm... a separate power adapter would have really come in handy right now". <br />
<br />
I suggest a tiny 3mm, dedicated +5V power input (something a la Nokia).<br />
<br />
=== Inductive charging ===<br />
<br />
[http://en.wikipedia.org/wiki/Inductive_charging Inductive charging] is the sort of charging where you place the device in a cradle, and a coil in the cradle induces a current in a coil inside the device, allowing it to recharge without wires. This should eliminate proprietary power connections.<br />
<br />
=== Tactile feedback via buzzer ===<br />
Assuming the hardware has a vibrator/buzzer for silent calls, use a lightly pulsed version of that to simulate tactile feedback when dragging finger across buttons on-screen. Implemented properly, it would almost feel as if the buttons were real.<br />
: 25 ms bump on the buzzer feels about right. Does this harm the vibrator motor? --[[User:Sagacis|Sagacis]] 05:15, 2 October 2007 (CEST)<br />
:: Created a patch to do this [[User:Sagacis/ForceFeedback]] --[[User:Sagacis|Sagacis]] 05:05, 3 October 2007 (CEST)<br />
<br />
=== Detachable keyboard ===<br />
Hardware keyboard that can be attached with magnets to a future version of the Neo.<br />
<br />
A bluetooth mini-qwerty keyboard that straps to my wrist!<br />
<br />
: A BT keyboard would be nice, but do you need openmoko to provide it? [[http://www.intomobile.com/2007/11/07/targus-bluetooth-mobile-tumbpad-when-the-tiny-keyboard-on-your-smartphone-just-doesnt-cut-it.html Targus bluetooth keyboard]]<br />
<br />
=== SD Card Slot ===<br />
I think the Neo1973 should have a normal SD card slot as the micro is too small, and the SDs have more space. [unknown author]<br />
<br />
SD Cards now support 32GB. Their storage density will always be multiples ahead of microSD (now at only 2GB). An SD Card slot will:<br />
* Provide enough storage to '''turn an OpenMoko into a music (MP3) jukebox''' large enough for entire music collections, like an iPod with Bluetooth for the car.<br />
* Enable '''storage''' of:<br />
** podcasts, full-length movies, or large photo collections<br />
** photo and video from an on-board high-res camera<br />
** entire email database at your fingertips, even in poor phone signal areas<br />
** more detailed maps and charts<br />
** encrypted work databases that are not available online<br />
* Have easy '''external access''', without requiring battery removal like the microSD card<br />
* Support '''SDIO''' accessories<br />
* Enable '''transfer''' of data from an external camera's full SD memory to:<br />
** a portable USB hard drive, offsetting the need to travel with a notebook PC<br />
** the internet, via wifi or phone network<br />
* Enable editing of videos and photos obtained from external cameras<br />
<br />
Without an easily accessible higher storage SD Card slot, many users will soon be playing the juggling game of which data to delete from the much smaller and harder to swap microSD card. This is especially true for OpenMoko users, who are more likely to be power users than is the average mobile phone carrying population. Why carry an OpenMoko and an iPod, when you can simply add an SD Card slot?<br />
--[[User:Pedro|Pedro]] 20:06, 17 March 2008 (CET)<br />
<br />
: This is not true. Now you can find 2GB micros at the price of 20-30 euros. Too small for what?? --[[User:V0n0|V0n0]] 22:06, 28 December 2007 (CET)<br />
<br />
: Think of putting a few '''movies''' on that SD memory card. It could really help if it was a little bigger (8GB, 16GB, 32GB). Also think of going '''offline''' for 1-2 weeks, far away from any computer you can access and then wanting to listen to some music. What you get in turn with a 2 GB memory slot is the same music over and over. Or you have to switch memory a cards a lot.<br />
<br />
: This situation is far more common than one would think: going in the mountains, going offshore (on a cruise ship). Or simply you may want to store many types of music, and '''share''' your device with friends. --[[User:Bogdanbiv|Bogdanbiv]] 13:47, 10 January 2008 (EEST)<br />
<br />
: Well, it can be micro SD, but why to put it so deep inside, under the battery and even under the SIM card? I would suggest to have a simple slot on the side where we could insert/remove the SD card equally easily as we swap CD's in computer. [[User:AudriusA|AudriusA]] 16:36, 12 January 2008 (CET)<br />
<br />
[[User:Cfriedt|Cfriedt]] 12:40, 24 February 2008 (CET) -- I completely agree with a more accessible SD card slot. It should be made external for quick removal / insertion. I realize that would mean program data shouldn't reside on the SD, but really 256 MB of on-board flash is plenty. Mirco or normally-sized, a regular-sized SD is still trivial to implement in terms of solder pads and traces.<br />
<br />
: Sorry, but this looks like useless chat. Micro-SD cards are perfect for mobile devices as they don't get too much space on the pcb. Also, we can find micro-sd up to 8gb, if you want more space just wait a while and they'll produce a bigger one in a few months :-p. Really, almost every single phone that has a sd slot has in its micro version, why would we need a full-sized, huge normal sd slot ? It gets too much space on the pcb it's not only about sw configuration or pin soldering, it's more regarding pcb layout.<br />
<br />
: What about something like this adapter[http://linitx.com/viewproduct.php?prodid=11922]? Is there any place in the case left to put this into? Nevertheless there is a 12GB microSD card announced from SanDisk and a 8GB card costs about 40€ or 15€ for 4GB. (But a 8GB SD card costs only about 25€) --[[user:kelvan|Kelvan]]<br />
<br />
: Maybe just an additional microSD that is easily accessible and hot-swappable. I imagine replacing the huge lanyard hole could help with this. --[[User:Sin|Sin]] 02:30, 4 May 2008 (CEST)<br />
<br />
=== IR port ===<br />
Remote control applications<br />
<br />
Would be great to use openmoko as a Harmony remote controller.<br />
<br />
:I'd like to add that i fully support this. An IR port on future openmoko devices capable of controlling set-top boxes like TV/DVD/Stereo is necessary to make the device as universal as possible. A cellphone should be your window to the world and allow you to interact with it in as many ways as possible.<br />
<br />
:Care must be taken to use the correct type of IR chipset/controller in the phone. Most IR ports you find on devices like computers, some cellphones etc. Are for high speed data communication and CAN'T control TVs/DVDplayers/Stereos etc.<br />
<br />
:In order to reduce cost it maybe possible to use the sound chipset in the phone to generate the waveform sent to the IR led. IR remotes work at ~38Khz which is within the range of the sound chipset. The sound output could be internally switched between the IR led or the speakers.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-03T19:27:09Z<p>Sin: </p>
<hr />
<div>Would unified theming (something like qtcurve) belong here?<br />
How about a browser element as a high-level service (webkit)? --[[User:Sin|Sin]] 21:27, 3 May 2008 (CEST)</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-03T19:24:40Z<p>Sin: </p>
<hr />
<div>Would unified theming (something on the lines of qtcurve) belong here?<br />
How about a html-rendering high-level service (webkit)?<br />
--[[User:Sin|Sin]] 18:53, 3 May 2008 (CEST)</div>Sinhttp://openmoko.org/wiki/Talk:FSOTalk:FSO2008-05-03T16:53:18Z<p>Sin: </p>
<hr />
<div>Would unified theming (something on the lines of qtcurve) belong here ? --[[User:Sin|Sin]] 18:53, 3 May 2008 (CEST)</div>Sinhttp://openmoko.org/wiki/OpenmokoFrameworkOpenmokoFramework2008-05-03T15:31:40Z<p>Sin: /* The role of Python */</p>
<hr />
<div>''Note: This is the (ongoing) description of the new framework architecture. See [[OpenmokoOldFramework]] for the framework architecture of 2007.1 and 2007.2''<br />
<br />
=Purposes=<br />
* '''Give people the infrastructure to create solid and exciting software products based on the Openmoko platform'''<br />
* '''Support competing UIs while collaborating on developing services'''<br />
* '''Encourage framework users (e.g. application developers) to also contribute to the framework'''<br />
<br />
=Requirements=<br />
* Make it simple<br />
* Concentrate on core services<br />
* Be programming language agnostic<br />
* Be UI toolkit agnostic<br />
* Try to reuse existing technologies as much as possible, but not at the cost of a bad API<br />
<br />
=How to achieve that technically=<br />
* Chose [[Dbus]] as the collaboration line. Below dbus, we can work together. Above dbus, we can differentiate.<br />
* Expose features through dbus APIs implemented by UI-agnostic and language-agnostic services (daemons).<br />
* Optimize for Openmoko devices, but support multiple architectures and purposes through plugin interfaces and suitable hardware abstraction mechanisms.<br />
* Be not afraid of reinventing the wheel for a wheel-barrow if all the existing wheels are made for sports cars.<br />
<br />
=Mandatory Readings=<br />
* [http://adam.gomaa.us/blog/frameworks-exist-for-conceptual-integrity/ Frameworks exist for conceptual integrity]<br />
* [http://humanized.com/weblog/2007/10/05/make_oss_humane/ Ten ways to make more humane open source software]<br />
* [http://www.freesmartphone.org FreeSmartPhone.org Wiki]<br />
<br />
=What this is NOT about=<br />
This initiative does not cover low level services such as<br />
* Bootloader, Kernel, or System Init.<br />
<br />
This initiative does not cover high level services such as<br />
* X-Window-System, Window Manager, UI Toolkits,<br />
* Application Launchers, Applications, or Fancy UIs.<br />
<br />
=Architectural Overview=<br />
[[Image:OpenmokoFramework08.png |823px|left|frontside]]<br />
<br />
''Note: V0.9 :-) Need to update it soon''<br />
<br />
=Software Components=<br />
<br />
We differenciate between low-level and high-level services -- dbus will be used to communicate horizontally and vertically.<br />
<br />
===Low-Level Services===<br />
<br />
====Device Control====<br />
This is about peripheral control, i.e. managing power for individual subsystems such as<br />
* GSM, WiFi, Bluetooth, GPS, as well as<br />
* Backlight brightness and power,<br />
* turning LEDs on and off, etc.<br />
It's also about access to<br />
* charging, suspend/resume,<br />
* accellerometers, and buttons.<br />
<br />
====Audio====<br />
TBD<br />
* pulseaudio<br />
* gstreamer<br />
<br />
====GSM====<br />
TBD<br />
<br />
====Bluetooth====<br />
TBD<br />
<br />
We base on the official Linux Bluetooth subsystem here, which is [http://www.bluez.org BlueZ]. <br />
<br />
====GPS====<br />
TBD<br />
<br />
We base on Gypsy here.<br />
<br />
====Network (LL)====<br />
<br />
Wifi<br />
USB<br />
Options: Networkmanager or Intel Connection Manager<br />
<br />
===High Level===<br />
<br />
====Usage====<br />
* coordinating application I/O requirements (think ''reference counting'' for I/O requirements)<br />
* might use fd.o policy API<br />
<br />
====Events====<br />
* signaling events via I/O (ringing, blinking, vibrating)<br />
* might use fd.o notification API<br />
<br />
====PIM====<br />
* intelligent storage database<br />
* GSoC2008<br />
<br />
====Context====<br />
* Intelligent context API, integrating location as one -- among other -- sources<br />
TBD<br />
Reference Geoclue<br />
<br />
====Telephony====<br />
* Voice<br />
* Data<br />
<br />
===Preferences===<br />
* settings database<br />
<br />
====Network====<br />
* high level networking queries<br />
<br />
=Implementation Tasks=<br />
<br />
==What's there==<br />
* bluez<br />
* gypsy<br />
* geoclue<br />
* py-odeviced<br />
* pygsmd<br />
* gsmd0710muxd<br />
* networkmanager or intel connection manager<br />
* ppp<br />
<br />
==What's missing or not fully completed==<br />
* py-ophoned<br />
* py-odeviced<br />
* pimd (GSoC 2008 project)<br />
* eventd<br />
* usaged<br />
* preferencesd<br />
* contextd<br />
<br />
=The role of Python=<br />
<br />
Where we write new code, we will use Python to implement the dbus services. The reason for that being the rapid prototyping nature of Python and the emphasis on the Dbus APIs. Using Python, the turnaround times to experiment with APIs are incredibly faster than for using a compiled language such as C or C++.<br />
<br />
Once the APIs have been used by application programmers, we can start profiling and possibly reimplement some of the services with daemons written in Vala, ''if'' necessary. We might as well succeed in improving performance by using Pyrex/Cython/Ctypes to keep the benefits of Python.<br />
<br />
=Team & Roadmap=<br />
<br />
... talk about the team and the roadmap ...</div>Sinhttp://openmoko.org/wiki/Main_PageMain Page2008-05-02T20:59:02Z<p>Sin: </p>
<hr />
<div>{{Languages|Main Page}}<br />
__NOTOC__<br />
__NOEDITSECTION__<br />
__NOTOC__<br />
<br />
<br />
<DIV ALIGN=CENTER><big>'''[[Openmoko]]™ Open. Mobile. Free.'''</big><br></DIV><br />
<BR><br />
<br />
==<font color=75d806>Introduction to Openmoko</font>==<br />
[[Image:GTA02.gif |100px|left|frontside]]<br />
[[Openmoko]]™ began as an [http://en.wikipedia.org/wiki/Open_source Open Source] project under [[License| GPL and LGPL license]] dedicated to delivering an open software stack on mobile platforms. After shipping our first product, the Neo 1973, we turned the project into a start-up company with one aim: create great mobile products using the Openmoko stack: Always Open; Always Mobile; Always Free.<br />
<br />
The Openmoko stack, which includes a full X server, allows users and developers to transform mobile hardware platforms into a unique products. The freedom granted by our GPL licence gives developers and users the opportunity to cosmetically customize their device or radically remix it. It allows them to change the wallpaper or rebuild the entire house. It grants them the freedom, for example, to transform a phone into a medical device or point of sale device or<br />
the freedom to simply install their own favorite software. Beyond freeing the software on our devices we have also released our CAD files under Creative Commons. By freeing the software under GPL, we enable the community of FOSS developers to "make it new." By freeing the CAD files we give industrial designers and engineers this same opportunity.<br />
<br />
<br />
{| class="wikitable" cellspacing="0" cellpadding="0" width=100%<br />
! width=30% style="background:#ff6600;border-left:0px solid white;border-right:0px solid white;border-top:0px solid white;" | <font color=white></font><br />
! width=30% style="background:#ff6600;border-left:0px solid white;border-right:0px solid white;border-top:0px solid white;" |<br />
|-<br />
|valign="TOP" style="background:#333333;border-left:0px solid white;border-right:0px solid white;border-bottom:0px solid white;" | <br />
:*[[Background]]<br />
:*[[Meet_the_Core_Team|The Original Core Team]]<br />
:*[[OpenmokoFramework|New Framework Initiative]]<br />
|valign="TOP" style="background:#333333;border-left:0px solid white;border-right:0px solid white;border-bottom:0px solid white;" |<br />
*[[Trademark Policy]]<br />
*[[License]]<br />
*[[Look & Feel]]<br />
|}<br />
<br />
<br />
==<font color=75d806>Openmoko Products</font>==<br />
[[image:FIC-neo1973 small.jpg|100px|left|frontside]]<br />
<br />
The first Openmoko product was the [[Neo1973]] released on July 9, 2007 and sold exclusively through [https://direct.openmoko.com/ Openmoko Online Shop]. This product sold out in early February 2008. <br />
<br />
Openmoko will ship Neo FreeRunner (GTA02), the second generation of Neo 1973 in the first half<br />
of 2008. You can add your nickname to those interested buying the Neo FreeRunner at [[Buying_Interest_List|Buying Interest List]]. <br />
<br />
{| class="wikitable" cellspacing="4" cellpadding="4" width=80%<br />
! width=40% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600; " |<font color=white>GTA01 - Neo 1973</font><br />
! width=40% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600;" |<font color=white>GTA02 - Neo FreeRunner</font><br />
|-<br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " | <br />
<div align=left><br />
*[[Neo1973]]<br />
*[[Neo1973 hardware]]<br />
*[[Disassembling Neo1973]]<br />
*[[Neo1973 Phase 1]]<br />
*[[Getting Started with your Neo1973]]<br />
=====<font color=white>Debug Board</font>=====<br />
*[[Neo1973 Debug Board v2]]<br />
*[[Neo1973 Debug Board v3]]<br />
=====<font color=white>Development Board</font>=====<br />
*[[QT2410]]<br />
<br />
<font color=white> ※</font>[[: Category:Neo1973 Hardware | See More About Neo 1973....]]<br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " |<br />
*[[GTA02 Openness]]<br />
*[[Neo FreeRunner]]<br />
*[[Neo FreeRunner GTA02 Hardware]]<br />
*[[Getting Started with your Neo FreeRunner]]<br />
*[[Prototypes]]<br />
<br />
<font color=white> ※</font>[[: Category: GTA02 Hardware | See More About GTA02....]]<br />
====<font color=white>Openmoko Custom Build</font>====<br />
*[[OpenMoko-supported hardware]]<br />
*[[HXD8]]<br />
*[[Neo1973: GTA01Bv4 versus GTA02 comparison]]</div><br />
<br />
<font color=white> ※</font>[[:Category:Hardware Support | See More About Hardware Support...]]<br />
<br />
|}<br />
<br />
<br />
<br />
==<font color=75d806>Openmoko community</font>==<br />
Anyone can join the Openmoko project and contribute to designing open products. Join us and collaborate through any of the [[Development resources | project resources]], including this Openmoko Wiki. See the [[Help:Contents | wiki editing help]]page for information on making contributions to this wiki. <br />
<br />
You can start by using the [[introduction]] page, photos, videos and Openmoko Wiki Official Index Page. As always, the usual [[FAQ | Frequently Asked Questions]] (FAQ) and [http://lists.openmoko.org/mailman/listinfo/| mailing list] pages are helpful. <br />
<br />
{| class="wikitable" cellspacing="4" cellpadding="6" width=100%<br />
! width=50% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600; " | <font color="white" >In News</font><br />
! width=50% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600;" |<font color="white" >Community & Events</font><br />
|-<br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " | <br />
==<font color=white>Getting Started </font>==<br />
*[[Getting Started with your Neo FreeRunner]]<br />
*[[Getting Started with your Neo1973]]<br />
==<font color=white>Snapshot</font>==<br />
*<font color=white>You can always download the [http://buildhost.openmoko.org/daily/neo1973/deploy/glibc/images/neo1973/ latest build] here.<br />
*Reviews of the daily snapshot build are [[Snapshot_review|here]] and the recommended kernel and root image from the review will always be available [http://downloads.openmoko.org/recommended/ here].<br />
Note that the recommended set is not always the latest, but is the most stable, reliable, and functional.</font><br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " |<br />
<br />
==<font color=white> Community Update</font>==<br />
<font color=white>For the latest status updates, see [[Community_Updates|Community Updates]]</font><br />
<br />
<font color=ffffff> ※</font>[[:Category:Community| See More About Community...]]<br />
<br />
==<font color=white>Get the overview of wiki</font>==<br />
*<font color=white>To get the overview of Openmoko Wiki, see [[Openmoko Wiki Official Index Page]].</font><br />
==<font color=white>Events</font>==<br />
*[[Summer of Code 2008]]<br />
*[[OpenMoko Education/zh tw]]<br />
*[[Events:FOSDEM 2008]]<br />
*[[OpenLab]]<br />
<br />
<font color=ffffff> ※</font>[[:Category:Event| See More About Event...]]<br />
<br />
|}<br />
<br />
<br />
<br />
<br />
==<font color=75d806>Join Openmoko development</font>==<br />
<br />
{| class="wikitable" cellspacing="4" cellpadding="6" width=100%<br />
! width=50% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600; " | <font color="white" >Hardware Docs and Testing</font><br />
! width=50% style="background:#ff6600;border-left:5px solid white;border-right:5px solid white;border-top:0px solid white; border:1px solid #ff6600;" |<font color="white" >Software Documentation</font><br />
|-<br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " | <br />
===<font color=white>Getting Started</font>===<br />
* [[Installation guide]]<br />
* [[Customizing the OpenMoko Distribution]]<br />
* [[Getting Started with your Neo1973]]<br />
* [[MokoMakefile|Building Openmoko using the MokoMakefile]]<br />
* [[Building OpenMoko from scratch (pre-BBT)]]<br />
* [[Migration to bad block tolerant builds]]<br />
<br />
<font color=white> ※</font> [[:Category:Guides| See More About Guides...]]<br />
===<font color=white> Hardware Reference Documentation</font> ===<br />
<br />
<font color=white>Overview about the Components we use, PCB Photographs</font><br />
** [[Disassembling Neo1973]] <font color=white>-A photo story about disassembling the hardware</font><br />
* [[Debug Board]] <font color=white> -The Debug Board for the Neo1973<font><br />
** [[Connecting Neo1973 with Debug Board v2]]<br />
** [[Neo1973 Debug Board v1]] <font color=white>-The old version of the Debug Board</font><br />
* [[QT2410]] <font color=white>-A S3C2410 development board that we used during early development</font><br />
<br />
<font color=white> ※</font>[[:Category: Hardware | See More About Hardware]]<br />
===<font color=white>Test</font>===<br />
*[[GSM unit test]]<br />
*[[GSM 850 test]]<br />
*[[GSM unit test]]<br />
*[[Test Plans]]<br />
<font color=white> ※</font> [[:Category: Test | See More About Test]]<br />
<br />
===<font color=white>Emulation</font>===<br />
*[[Getting OpenMoko working on host with Xephyr]]<br />
*[[Test_Openmoko Emulation with chroot image]]<br />
<br />
|valign="TOP" style="background:#333333;border-left:5px solid white;border-right:5px solid white;border-bottom:0px solid white; border:1px solid #cccccc; " |<br />
<br />
=== <font color=white>Software Reference Documentation </font>===<br />
* <font color=white>Architectural</font><br />
** [[OpenmokoFramework]] <font color=white>-The Openmoko Application Framework</font><br />
* <font color=white>Host utilities</font><br />
** [[sjf2410-linux]] <font color=white>-a JTAG NAND flashing program, last-resort phone un-bricking</font><br />
** [[s3c2410_boot_usb]] <font color=white>-a program for transferring code to the RAM of QT2410 (not Neo1973)</font><br />
** [[Toolchain]] <font color=white>-The toolchain we use for compilation</font><br />
** [[Neo1973 OpenOCD]] <font color=white>-The On-Chip Debugger we use for development</font><br />
** [[OpenEmbedded]] <font color=white> -The distribution building framework</font><br />
* <font color=white>Device Software</font><br />
** <font color=white>Low-Level</font><br />
*** [[u-boot]] <font color=white>-The bootloader we use, including docs to our modifications</font><br />
*** [[kernel]] <font color=white>-The Linux Kernel we use, including docs to our modifications</font><br />
** <font color=white>Userspace</font><br />
*** [[gsmd]] <font color=white> -the GSM daemon managing the GSM Modem</font><br />
*** [[agpsd]] <font color=white>-the AGPS (Assisted GPS) daemon</font><br />
*** [[OpenMoko]] <font color=white>-The Openmoko distribution</font><br />
**** [[OpenMoko2007]] - <font color=white>The first intended release of it</font><br />
**** [[Userspace root image]]<br />
<br />
<font color=ffffff>※</font>[[:Category: Software | See More About Software ]]<br />
<br />
|}<br />
<br />
<br />
==<font color=75d806>Getting started with Openmoko Wiki</font>==<br />
The Openmoko Wiki is open. Everyone can join. You'll find information including: hardware and software documentation, bug lists, community news of Openmoko and much more. Join our wiki, edit the wiki, contribute valued content, and help others. For the full picture of Openmoko Wiki, please visit the [[Openmoko Wiki Official Index Page|Openmoko Wiki Official Index Page]]. <br />
<br />
* Please read our [[OpenMoko Wiki Editing Guidelines]]<br />
* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]<br />
* [http://meta.wikimedia.org/wiki/Help:Wikitext_reference MediaWiki Wikitext Reference]<br />
* If you add a new page, you can reference the [[Openmoko Wiki Categories Index Page|Openmoko Wiki Categories Index Page]] to put your page on the right category.<br />
* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]<br />
<br />
<font color=426fdc>※</font>[[:Category: Help | See More About Help ]]<br />
<br />
[[Category:Information| ]]<br />
[[Category:Categories| ]]</div>Sinhttp://openmoko.org/wiki/Talk:MokopediaTalk:Mokopedia2008-05-02T00:14:09Z<p>Sin: /* Compression */</p>
<hr />
<div>==Project==<br />
<br />
Added the project to http://projects.openmoko.org<br />
Currently coding everything in python. fgau is helping me with the python gtkhtml2 binding.<br />
<br />
==Compression==<br />
<br />
what about compressing the data? probably wouldn't allow you to search, but hey.<br />
--[[User:Minime|Minime]] 16:21, 16 July 2007 (CEST)<br />
<br />
: ([[User:JoSch|JoSch]])I mentioned compression as an option in the article. It would be necessary to compress every single article on its own because it would be overkill to seek a few kilobytes in several GB compressed file every time. Then a title search could be made by filename but I think it's a better idea to have a title list file.<br />
Compress batches of 10 files or so at a time.<br />
<br />
::Compress the data in small portions - say 100K compressed - that can be decompressed in under a second.You probably want to use some sort of page-sorting-compressor - so that pages in one batch are similar - and will compress a bit better.<br />
::It sounds logical that electronics based articles together will compress better than random (of course - in reality)...<br />
::Then store a search-keyword database into this data.<br />
::Works well.<br />
::I use 'wwwoffle' [http://www.gedanken.demon.co.uk/wwwoffle/] to search my browsed web-pages.<br />
::--[[User:Speedevil|Speedevil]] 17:10, 16 July 2007 (CEST)<br />
:::Thanks for your ideas - I will consider them!<br />
:::--[[User:JoSch|JoSch]] 17:57, 16 July 2007 (CEST)<br />
<br />
Bzip is almost certainly a bad idea.<br />
It's really quite slow on this class of hardware.<br />
On another topic - worthwhile may be one 'core' encyclopedia, which contains entries like "Germany", "Paris", "1928".<br />
Combined with a daily or weekly download of 'topical' pages. "Steve Irwin", "Paris Hilton".<br />
This results in much better hit-rates for most users.<br />
<br />
On compression. Of the most popular 5000 pages, they are 393M of uncompressed text.<br />
Compressing the whole lot as a solid block with gzip -9 results in 88M, gzip -1 is 101M.<br />
Individually gzipping -9 each article is 94M, and gzipping them in batches of 10 gives again 88M.<br />
<br />
If the stats supplied are accurate, then this would cover some 80% of a months searches.<br />
Perhaps another 500M might take this to 90%+<br />
--[[User:Speedevil|Speedevil]] 00:14, 18 July 2007 (CEST)<br />
<br />
For me as a programmer it doesnt matter if I access the bzip2 or gzip library to uncompress. Maybe I should not take bzip as the archive format but I will do some reallife benchmarking when my neo1973 arrives. You did excellent research, Speedevil! It shows us, that it is not much difference for the archive size between compressing all files or only ten together. But it also showed that there would be not much space wasted if every file is compressed separately.<br />
<br />
I think in every case one needs an index file of all available articles. It's useful for displaying article search results very quickly (will be faster than file system search) and can manage links to different article names. If I pack, say 10 files, together it will also be necessary for storing where an article is located.<br />
<br />
It would be no problem to pack several versions of wikipedia and the user can pick the file he has space for. I added this to the feature section.<br />
<br />
I think I'm just to much a poweruser because it'd make me embarrassed to say "hey! I can browse wikipedia on my mobile!!! ... but the article about isaac asimov you just asked for is not there..." so I for myself will definately buy a 4GB microSD card if necessary. So thanks for your ideas - it'd really never come to my mind that anyone could be confident with a stripped down wikipedia - no offense! :-) --[[User:JoSch|JoSch]] 00:45, 18 July 2007 (CEST)<br />
<br />
<br />
Consider what you can potentially do with it.<br />
Any email, web-page, SMS, RSS feed, ... can have live links for terms that are cached in the local wikipedia. (downloading 100K+ of text in an article, especially when it may be over a slow link- ...). => erm... pleacy specify how this feature will work - I'm not sure what you mean --[[User:JoSch|JoSch]] 07:21, 18 July 2007 (CEST)<br />
Oh - and using bzip2 in batches of 10 results in 66M. :)<br />
--[[User:Speedevil|Speedevil]] 01:33, 18 July 2007 (CEST)<br />
<br />
Again we need some more benchmarking on a real Neo...<br><br />
With gzip: larger archives - faster extraction<br><br />
With bz2: smaller archives - slower extraction<br><br />
-> TODO: find out how much the speed differs<br><br />
With packing 10files together: smaller overall size - slower article decompression<br><br />
With packing every file on its own: larger overall size - faster article decompression<br><br />
-> TODO: find out how much the speed differs<br><br />
I would gladly do this but I still need a real Neo! Why can't there be someone shipping it from a European location? And why do I have to have a credit card for buying it? Waiting for the next group buy in #neo1973-germany@irc.freenode.net --[[User:JoSch|JoSch]] 16:17, 18 July 2007 (CEST)<br />
<br />
Wouldn't squashFS with lzma compression be enough? Searches should be fast on a mounted fs. [[User:sin|sin]] 03:13, 02 May 2008 (CEST)<br />
<br />
== Type of dump ==<br />
I'd be interested in what made you choose the HTML dump over parsing the database dump; the original data should be more dense once parsed and easier to parse (no need to translate category names, for example). --[[User:Chrysn|chrysn]] 21:21, 29 October 2007 (CET)<br />
<br />
Thanks for asking! You can read my reasons here:<br />
http://projects.openmoko.org/plugins/wiki/index.php?FAQ&id=49&type=g<br />
<br />
In a nutshell: wikitext is no static language and much more diffcult to parse (tables...) xhtml is much easier and wikitext is no static standard - it will change overtime so I let the mediawiki software do the parsing to xhtml for me and then clean up this output.<br />
But you are right - some time in the feature I will look deeper into the mediawiki code and offer patches so that the media wiki dumper will output optimized html right away. --[[User:JoSch|JoSch]] 08:34, 31 October 2007 (CET)<br />
<br />
== essential infos for stripped down versions ==<br />
<br />
when creating stripped down versions, i suggest some categories to be always included, which many people wouldn't think of when choosing their fields of interest. the most important topic that comes to my mind in that context are first aid medical articles. --[[User:Chrysn|chrysn]] 22:54, 4 December 2007 (CET)<br />
<br />
== building a fast offline wikipedia ==<br />
<br />
i saw this on slashdot a few months back, seems to have a similar aim to mokopedia:<br />
<br />
http://users.softlab.ece.ntua.gr/~ttsiod/buildWikipediaOffline.html<br />
<br />
it uses perl, python, php, xapian and django and works very nicely, although it could do with some work to automate the process of getting it working - it's not really designed for the casual user [[User:Myfanwy|myfanwy]] 02:50, 29 March 2008 (CET)</div>Sinhttp://openmoko.org/wiki/OpenEmbeddedOpenEmbedded2008-04-30T12:34:24Z<p>Sin: /* Building the OpenMoko distribution with OpenEmbedded */</p>
<hr />
<div>[[OpenMoko]], our distribution, is built using OpenEmbedded. OpenEmbedded will:<br />
<br />
* Generate (cross-compile) software packages for multiple embedded targets.<br />
* Handle different hardware architectures, and support multiple releases across those architectures. <br />
<br />
For more information please see the [http://www.openembedded.org/ Open Embedded] website.<br />
<br />
== Building the OpenMoko distribution with OpenEmbedded ==<br />
<br />
Note that you probably don't want to build OpenMoko with OpenEmbedded, if you are an application developer. In that case, you better use our prebuilt [[Toolchain]]. Building OpenMoko is a time-, cpu- and diskspace-consuming process which should only be done if you are a system integrator and want to customize your OpenMoko distribution.<br />
<br />
The facility called [[MokoMakefile]] simplifies building OpenEmbedded, however it also shields you from a lot of knowledge. In case you are the aformentioned system integrator / distribution customizer, we strongly advise you to use BitBake and OpenEmbedded directly.<br />
<br />
=== OpenEmbedded mirror ===<br />
The official OpenMoko mirror of the OpenEmbedded database can be found at [[MonotoneServer]]. If you don't have a monotone database yet, you can download a [[http://downloads.openmoko.org/OE/snapshots/OE.mtn.bz2 snapshot database]] and unpack it:<br />
<br />
cd /local/pkg/oe<br />
wget http://downloads.openmoko.org/OE/snapshots/OE.mtn.bz2<br />
bzip2 -d OE.mtn.bz2<br />
<br />
This is faster than using monotone to fetch the initial database from our mirror. Subsequent updates of your tree though should be done by pulling from our monotone server (note that this is only a monotone server which does not contain a web presence):<br />
<br />
mtn --db=/local/pkg/oe/OE.mtn pull<br />
mtn update<br />
<br />
=== Upstream Source tarballs ===<br />
<br />
When bitbake builds a particular OE package, it downloads the original source code of the upstream project (e.g. Linux kernel) and patches from the internet. After downloading sources, bitbake applies a series of patches to the tree. These patches have either been downloaded from the internet or are contained in the OpenEmbemdded metadata repository. The unpatched source tarballs are available from http://downloads.openmoko.org/sources/<br />
<br />
{{todo|finish article}}<br />
<br />
{{Languages|OpenEmbedded}}<br />
[[Category:Software ]]<br />
[[Category:Application Developer]]<br />
[[Category:Openmoko]]</div>Sinhttp://openmoko.org/wiki/Wishlist/Wikipedia_MirrorWishlist/Wikipedia Mirror2008-04-29T19:21:39Z<p>Sin: /* Size */</p>
<hr />
<div>{{Wishlist}}<br />
__TOC__<br />
A local copy of wikipedia that you can browse anywhere without incurring bandwidth costs. It's already been done for the iPod (see [http://encyclopodia.sourceforge.net encyclopodia]), but I think we can do better on the Neo. For starters, it has a much nicer screen, and a real UI toolkit to play with, and can run multiple apps simultaneously etc.<br />
<br />
--[[User:HEx|HEx]] 07:22, 5 May 2007 (CEST)<br />
<br />
== Size ==<br />
This is the real problem. A recent bzipped article-only dump of enwiki comes in at 2.1Gb. Encyclopodia's download seems to be about 1.7Gb. It seems likely that even with some optimization, a full copy of wikipedia is going to be over 1Gb. Thus it would seem that a complete copy is probably going to be impractical for most people (assuming they want to store other things on their Neo too), so it would be worth finding out what bits can be discarded with relatively little loss.<br />
<br />
On the compression front, lzma would seem to be the way to go. Clearly the input needs to be divided into blocks for random access, but the choice of which articles go into which block I think could affect the compression ratio greatly. Maybe if each category is a folder and each letter (article initial) of a category is an archive.<br />
<br />
[http://cs.fit.edu/~mmahoney/compression/text.html] has some interesting benchmarks for wikipedia compression. I still think lzma would be best as it does quite well while not using much CPU and memory (plus it's already in OpenEmbedded).<br />
<br />
To save space, we could provide smaller sections of the main Wikipedia (eg Music, Science, Literature) and download anything else on demand. It needs to be clear what's local and remote, however, as data charges can be expensive.<br />
<br />
From the other side, we could simply count on 8 Gb Micro SD card. Such card could store not just the article texts but maybe even images, if they are resized in advance to the small size, suitable for OpenMoko screen.<br />
<br />
== Integration ==<br />
It would be interesting to integrate Wikipedia with the GPS device, allowing a query about the articles, describing objects that are located nearby. There are many articles about cities and other objects with known locations in Wikipedia, and some uniform coordinate representation system seems also present.<br />
<br />
== Format ==<br />
This is a tough one. Despite the fact that MediaWiki's markup format is notoriously underspecified and hard to interpret, it's also widespread and human-readable and space-efficient, and, while a custom markup format could possibly be more space-efficient and easier to parse, the world really doesn't need any more markup formats. Thus I'm tending towards just rendering MediaWiki markup directly on the Neo, which would have the plus of being able to view the source if and when rendering goes horribly awry.<br />
<br />
Of the possibilities at the [http://meta.wikimedia.org/wiki/Alternative_parsers list of parsers], [http://svn.wikimedia.org/svnroot/mediawiki/trunk/flexbisonparse/ flexbisonparse] looks the most promising.<br />
<br />
HTML or XML as an intermediate step would be a possibility, and there's sure to be a web browser available, but just dumping the output to a GtkTextView would probably be simpler and more efficient.<br />
<br />
== Other E-book software ==<br />
<br />
Since there's bound to be other, similar software being developed or ported, it would make sense to see if this could usefully be part of a larger project. (The alternative, "do one thing, do it well", also has some appeal though.)<br />
<br />
== The Mokopedia Way ==<br />
<br />
This section is about my [[Mokopedia]] project.<br />
<br />
=== Why it isn't using Wikitext ===<br />
<br />
Wikitext is horribly difficult to parse - just look at how tables are defined in wikitext and what thousands of possibilities you have! It would be overkill to write another wikitext Interpreter. Xhtml instead is simply parsed and can also be embedded easily in the gtkhtml widget.<br />
Another reason: if the wikimedia software changes anything on its wikitext 'specification' the parser has to be changed. Its useless to use something in a program, that is no standart and is likely to change without notice.<br />
Wikitext is more lightweight? right.<br />
<br />
=== Why we need SDHC support ===<br />
<br />
Size is only a problem for the english wikipedia. I managed to run the entire german wikipedia UNCOMPRESSED on my Nokia E70 Symbian phone. It had to be uncompressed because the articles were viewed with the Nokia browser from a local Raccoon install with a little Python script to search the articles. For more infos about my optimizations on the mediawiki html dump to get this running see [http://www.johannes-schauer.de/viewforum.php?f=47] (German)<br />
If I compress everything with bzip2 it shrinks to 19% of it's former size but this will not help for an offline version since seeking for a special file in such a big archive will cost an enormous amount of computing power. So the only options are to either pack every file separately or to pack a few files together in chunks of several kB. But this will reduce our compression ratio enormously (~30% compression with bz2) but is unavoidable for fast access.<br />
<br />
Conclusion: our only hope is to hope for SDHC support. I verified that the (second largest) german wiki will fit on a 2GB non-SDHC SD-Card with every file compressed separately. With my optimizations the english wikipedia will need 2.8GB so we need 4GB SDHC media for that.</div>Sinhttp://openmoko.org/wiki/Wishlist/Wikipedia_MirrorWishlist/Wikipedia Mirror2008-04-29T19:21:12Z<p>Sin: /* Size */</p>
<hr />
<div>{{Wishlist}}<br />
__TOC__<br />
A local copy of wikipedia that you can browse anywhere without incurring bandwidth costs. It's already been done for the iPod (see [http://encyclopodia.sourceforge.net encyclopodia]), but I think we can do better on the Neo. For starters, it has a much nicer screen, and a real UI toolkit to play with, and can run multiple apps simultaneously etc.<br />
<br />
--[[User:HEx|HEx]] 07:22, 5 May 2007 (CEST)<br />
<br />
== Size ==<br />
This is the real problem. A recent bzipped article-only dump of enwiki comes in at 2.1Gb. Encyclopodia's download seems to be about 1.7Gb. It seems likely that even with some optimization, a full copy of wikipedia is going to be over 1Gb. Thus it would seem that a complete copy is probably going to be impractical for most people (assuming they want to store other things on their Neo too), so it would be worth finding out what bits can be discarded with relatively little loss.<br />
<br />
On the compression front, lzma would seem to be the way to go. Clearly the input needs to be divided into blocks for random access, but the choice of which articles go into which block I think could affect the compression ratio greatly. Maybe if each category is a folder and each letter of a category is an archive.<br />
<br />
[http://cs.fit.edu/~mmahoney/compression/text.html] has some interesting benchmarks for wikipedia compression. I still think lzma would be best as it does quite well while not using much CPU and memory (plus it's already in OpenEmbedded).<br />
<br />
To save space, we could provide smaller sections of the main Wikipedia (eg Music, Science, Literature) and download anything else on demand. It needs to be clear what's local and remote, however, as data charges can be expensive.<br />
<br />
From the other side, we could simply count on 8 Gb Micro SD card. Such card could store not just the article texts but maybe even images, if they are resized in advance to the small size, suitable for OpenMoko screen.<br />
<br />
== Integration ==<br />
It would be interesting to integrate Wikipedia with the GPS device, allowing a query about the articles, describing objects that are located nearby. There are many articles about cities and other objects with known locations in Wikipedia, and some uniform coordinate representation system seems also present.<br />
<br />
== Format ==<br />
This is a tough one. Despite the fact that MediaWiki's markup format is notoriously underspecified and hard to interpret, it's also widespread and human-readable and space-efficient, and, while a custom markup format could possibly be more space-efficient and easier to parse, the world really doesn't need any more markup formats. Thus I'm tending towards just rendering MediaWiki markup directly on the Neo, which would have the plus of being able to view the source if and when rendering goes horribly awry.<br />
<br />
Of the possibilities at the [http://meta.wikimedia.org/wiki/Alternative_parsers list of parsers], [http://svn.wikimedia.org/svnroot/mediawiki/trunk/flexbisonparse/ flexbisonparse] looks the most promising.<br />
<br />
HTML or XML as an intermediate step would be a possibility, and there's sure to be a web browser available, but just dumping the output to a GtkTextView would probably be simpler and more efficient.<br />
<br />
== Other E-book software ==<br />
<br />
Since there's bound to be other, similar software being developed or ported, it would make sense to see if this could usefully be part of a larger project. (The alternative, "do one thing, do it well", also has some appeal though.)<br />
<br />
== The Mokopedia Way ==<br />
<br />
This section is about my [[Mokopedia]] project.<br />
<br />
=== Why it isn't using Wikitext ===<br />
<br />
Wikitext is horribly difficult to parse - just look at how tables are defined in wikitext and what thousands of possibilities you have! It would be overkill to write another wikitext Interpreter. Xhtml instead is simply parsed and can also be embedded easily in the gtkhtml widget.<br />
Another reason: if the wikimedia software changes anything on its wikitext 'specification' the parser has to be changed. Its useless to use something in a program, that is no standart and is likely to change without notice.<br />
Wikitext is more lightweight? right.<br />
<br />
=== Why we need SDHC support ===<br />
<br />
Size is only a problem for the english wikipedia. I managed to run the entire german wikipedia UNCOMPRESSED on my Nokia E70 Symbian phone. It had to be uncompressed because the articles were viewed with the Nokia browser from a local Raccoon install with a little Python script to search the articles. For more infos about my optimizations on the mediawiki html dump to get this running see [http://www.johannes-schauer.de/viewforum.php?f=47] (German)<br />
If I compress everything with bzip2 it shrinks to 19% of it's former size but this will not help for an offline version since seeking for a special file in such a big archive will cost an enormous amount of computing power. So the only options are to either pack every file separately or to pack a few files together in chunks of several kB. But this will reduce our compression ratio enormously (~30% compression with bz2) but is unavoidable for fast access.<br />
<br />
Conclusion: our only hope is to hope for SDHC support. I verified that the (second largest) german wiki will fit on a 2GB non-SDHC SD-Card with every file compressed separately. With my optimizations the english wikipedia will need 2.8GB so we need 4GB SDHC media for that.</div>Sinhttp://openmoko.org/wiki/Wishlist/PersonalWikiWishlist/PersonalWiki2008-04-29T19:14:56Z<p>Sin: </p>
<hr />
<div>{{Wishlist}}<br />
<br />
<br />
== Personal Wiki ==<br />
<br />
The application I use most frequently on the Palm Pilot is [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki]. It's a simple wiki that runs self-contained on the Palm Pilot. It's major strength is that it uses the standard Memo Pad database, so the content is available to everything that uses the MemoPad database or synchronizes with it. I also had it syncing with an corporate intranet, although that was a pain to set up.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 22:02, 2 April 2007 (CEST)<br />
<br />
Example: [http://en.wikipedia.org/wiki/Tomboy_(software) Tomboy] - however, mono may be too big/slow<br />
<br />
Alternative: Tiddlywiki<br />
(recommends javascript web browser)<br />
for more information see: <br />
<br />
http://www.tiddlywiki.org <br />
<br />
http://en.wikipedia.org/wiki/Tiddlywiki<br />
<br />
http://www.tiddlywiki.com</div>Sinhttp://openmoko.org/wiki/OpenmokoFrameworkOpenmokoFramework2008-04-29T00:37:52Z<p>Sin: /* The role of Python */</p>
<hr />
<div>''Note: This is the (ongoing) description of the new framework architecture. See [[OpenmokoOldFramework]] for the framework architecture of 2007.1 and 2007.2''<br />
<br />
=Purposes=<br />
<br />
* '''Give people the infrastructure to create solid and exciting software products based on the Openmoko platform'''<br />
* '''Support competing UIs while collaborating on developing services'''<br />
* '''Encourage framework users (e.g. application developers) to also contribute to the framework'''<br />
<br />
=Requirements=<br />
<br />
* Make it simple<br />
* Concentrate on core services<br />
* Be programming language agnostic<br />
* Be UI toolkit agnostic<br />
* Try to reuse existing technologies as much as possible, but not at the cost of a bad API<br />
<br />
=How to achieve that technically=<br />
* Chose [[Dbus]] as the collaboration line. Below dbus, we can work together. Above dbus, we can differentiate.<br />
* Expose features through dbus APIs implemented by UI-agnostic and language-agnostic services (daemons).<br />
* Optimize for Openmoko devices, but support multiple architectures and purposes through plugin interfaces and suitable hardware abstraction mechanisms.<br />
* Be not afraid of reinventing the wheel for a wheel-barrow if all the existing wheels are made for sports cars.<br />
<br />
=Mandatory Readings=<br />
<br />
* [http://adam.gomaa.us/blog/frameworks-exist-for-conceptual-integrity/ Frameworks exist for conceptual integrity]<br />
* [http://humanized.com/weblog/2007/10/05/make_oss_humane/ Ten ways to make more humane open source software]<br />
* [http://www.freesmartphone.org FreeSmartPhone.org Wiki]<br />
<br />
=What this is NOT about=<br />
<br />
This initiative does not cover low level services such as<br />
* Bootloader,<br />
* Kernel, or<br />
* System Init.<br />
<br />
This initiative does not cover high level services such as<br />
* X-Window-System,<br />
* Window Manager,<br />
* UI Toolkits,<br />
* Application Launchers,<br />
* Applications, or<br />
* Fancy UIs.<br />
<br />
=Overview=<br />
<br />
... picture ...<br />
<br />
=Components=<br />
<br />
... discussion of subsystem purposes ...<br />
<br />
==Low Level==<br />
<br />
===Device===<br />
...<br />
<br />
===GSM===<br />
This involves three components:<br />
<br />
* GSM 07.10 (Multiplexing Daemon)<br />
* GSM 07.07 (Telephony)<br />
* GSM 07.05 (SMS)<br />
<br />
===Bluetooth===<br />
<br />
We base on the official Linux Bluetooth subsystem here, which is [http://www.bluez.org BlueZ]. <br />
<br />
===Network===<br />
<br />
Options: Networkmanager or Intel Connection Manager<br />
<br />
===GPS===<br />
<br />
We base on Gypsy here.<br />
<br />
==High Level==<br />
<br />
===PIM===<br />
* intelligent storage database<br />
<br />
===Events===<br />
* signaling events via I/O (ringing, blinking, vibrating)<br />
* might use fd.o notification API<br />
<br />
===Usage===<br />
* coordinating application I/O requirements (think ''reference counting'' for I/O requirements)<br />
* might use fd.o policy API<br />
<br />
===Preferences===<br />
* settings database<br />
<br />
===Context===<br />
* Intelligent context API, integrating location as one -- among other -- sources<br />
<br />
=Tasks=<br />
<br />
==What's there==<br />
* bluez<br />
* gypsy<br />
* geoclue<br />
* py-odeviced<br />
* pygsmd<br />
* gsmd0710muxd<br />
* networkmanager or intel connection manager<br />
<br />
==What's missing==<br />
* py-ophoned<br />
* pimd (GSoC 2008 project)<br />
* eventd<br />
* usaged<br />
* preferencesd<br />
* contextd<br />
<br />
=The role of Python=<br />
<br />
Where we write new code, we will use Python to implement the dbus services. The reason for that being the rapid prototyping nature of Python and the emphasis on the Dbus APIs. Using Python, the turnaround times to experiment with APIs are incredibly faster than for using a compiled language such as C or C++.<br />
<br />
Once the APIs have been used by application programmers, we can start profiling and possibly reimplementing some of the services with daemons written in Vala. Reimplementing things in Pyrex/RPython could be easier and many of the benefits of python would remain.<br />
<br />
=Team & Roadmap=<br />
<br />
... talk about the team and the roadmap ...</div>Sinhttp://openmoko.org/wiki/OpenmokoFrameworkOpenmokoFramework2008-04-29T00:21:15Z<p>Sin: /* The role of Python */</p>
<hr />
<div>''Note: This is the (ongoing) description of the new framework architecture. See [[OpenmokoOldFramework]] for the framework architecture of 2007.1 and 2007.2''<br />
<br />
=Purposes=<br />
<br />
* '''Give people the infrastructure to create solid and exciting software products based on the Openmoko platform'''<br />
* '''Support competing UIs while collaborating on developing services'''<br />
* '''Encourage framework users (e.g. application developers) to also contribute to the framework'''<br />
<br />
=Requirements=<br />
<br />
* Make it simple<br />
* Concentrate on core services<br />
* Be programming language agnostic<br />
* Be UI toolkit agnostic<br />
* Try to reuse existing technologies as much as possible, but not at the cost of a bad API<br />
<br />
=How to achieve that technically=<br />
* Chose [[Dbus]] as the collaboration line. Below dbus, we can work together. Above dbus, we can differentiate.<br />
* Expose features through dbus APIs implemented by UI-agnostic and language-agnostic services (daemons).<br />
* Optimize for Openmoko devices, but support multiple architectures and purposes through plugin interfaces and suitable hardware abstraction mechanisms.<br />
* Be not afraid of reinventing the wheel for a wheel-barrow if all the existing wheels are made for sports cars.<br />
<br />
=Mandatory Readings=<br />
<br />
* [http://adam.gomaa.us/blog/frameworks-exist-for-conceptual-integrity/ Frameworks exist for conceptual integrity]<br />
* [http://humanized.com/weblog/2007/10/05/make_oss_humane/ Ten ways to make more humane open source software]<br />
* [http://www.freesmartphone.org FreeSmartPhone.org Wiki]<br />
<br />
=What this is NOT about=<br />
<br />
This initiative does not cover low level services such as<br />
* Bootloader,<br />
* Kernel, or<br />
* System Init.<br />
<br />
This initiative does not cover high level services such as<br />
* X-Window-System,<br />
* Window Manager,<br />
* UI Toolkits,<br />
* Application Launchers,<br />
* Applications, or<br />
* Fancy UIs.<br />
<br />
=Overview=<br />
<br />
... picture ...<br />
<br />
=Components=<br />
<br />
... discussion of subsystem purposes ...<br />
<br />
==Low Level==<br />
<br />
===Device===<br />
...<br />
<br />
===GSM===<br />
This involves three components:<br />
<br />
* GSM 07.10 (Multiplexing Daemon)<br />
* GSM 07.07 (Telephony)<br />
* GSM 07.05 (SMS)<br />
<br />
===Bluetooth===<br />
<br />
We base on the official Linux Bluetooth subsystem here, which is [http://www.bluez.org BlueZ]. <br />
<br />
===Network===<br />
<br />
Options: Networkmanager or Intel Connection Manager<br />
<br />
===GPS===<br />
<br />
We base on Gypsy here.<br />
<br />
==High Level==<br />
<br />
===PIM===<br />
* intelligent storage database<br />
<br />
===Events===<br />
* signaling events via I/O (ringing, blinking, vibrating)<br />
* might use fd.o notification API<br />
<br />
===Usage===<br />
* coordinating application I/O requirements (think ''reference counting'' for I/O requirements)<br />
* might use fd.o policy API<br />
<br />
===Preferences===<br />
* settings database<br />
<br />
===Context===<br />
* Intelligent context API, integrating location as one -- among other -- sources<br />
<br />
=Tasks=<br />
<br />
==What's there==<br />
* bluez<br />
* gypsy<br />
* geoclue<br />
* py-odeviced<br />
* pygsmd<br />
* gsmd0710muxd<br />
* networkmanager or intel connection manager<br />
<br />
==What's missing==<br />
* py-ophoned<br />
* pimd (GSoC 2008 project)<br />
* eventd<br />
* usaged<br />
* preferencesd<br />
* contextd<br />
<br />
=The role of Python=<br />
<br />
Where we write new code, we will use Python to implement the dbus services. The reason for that being the rapid prototyping nature of Python and the emphasis on the Dbus APIs. Using Python, the turnaround times to experiment with APIs are incredibly faster than for using a compiled language such as C or C++.<br />
<br />
Once the APIs have been used by application programmers, we can start profiling and possibly reimplementing some of the services with daemons written in Vala. Reimplementing things in RPython could be easier and many of the benefits of python would remain.<br />
<br />
=Team & Roadmap=<br />
<br />
... talk about the team and the roadmap ...</div>Sinhttp://openmoko.org/wiki/OpenmokoFrameworkOpenmokoFramework2008-04-29T00:18:50Z<p>Sin: /* The role of Python */</p>
<hr />
<div>''Note: This is the (ongoing) description of the new framework architecture. See [[OpenmokoOldFramework]] for the framework architecture of 2007.1 and 2007.2''<br />
<br />
=Purposes=<br />
<br />
* '''Give people the infrastructure to create solid and exciting software products based on the Openmoko platform'''<br />
* '''Support competing UIs while collaborating on developing services'''<br />
* '''Encourage framework users (e.g. application developers) to also contribute to the framework'''<br />
<br />
=Requirements=<br />
<br />
* Make it simple<br />
* Concentrate on core services<br />
* Be programming language agnostic<br />
* Be UI toolkit agnostic<br />
* Try to reuse existing technologies as much as possible, but not at the cost of a bad API<br />
<br />
=How to achieve that technically=<br />
* Chose [[Dbus]] as the collaboration line. Below dbus, we can work together. Above dbus, we can differentiate.<br />
* Expose features through dbus APIs implemented by UI-agnostic and language-agnostic services (daemons).<br />
* Optimize for Openmoko devices, but support multiple architectures and purposes through plugin interfaces and suitable hardware abstraction mechanisms.<br />
* Be not afraid of reinventing the wheel for a wheel-barrow if all the existing wheels are made for sports cars.<br />
<br />
=Mandatory Readings=<br />
<br />
* [http://adam.gomaa.us/blog/frameworks-exist-for-conceptual-integrity/ Frameworks exist for conceptual integrity]<br />
* [http://humanized.com/weblog/2007/10/05/make_oss_humane/ Ten ways to make more humane open source software]<br />
* [http://www.freesmartphone.org FreeSmartPhone.org Wiki]<br />
<br />
=What this is NOT about=<br />
<br />
This initiative does not cover low level services such as<br />
* Bootloader,<br />
* Kernel, or<br />
* System Init.<br />
<br />
This initiative does not cover high level services such as<br />
* X-Window-System,<br />
* Window Manager,<br />
* UI Toolkits,<br />
* Application Launchers,<br />
* Applications, or<br />
* Fancy UIs.<br />
<br />
=Overview=<br />
<br />
... picture ...<br />
<br />
=Components=<br />
<br />
... discussion of subsystem purposes ...<br />
<br />
==Low Level==<br />
<br />
===Device===<br />
...<br />
<br />
===GSM===<br />
This involves three components:<br />
<br />
* GSM 07.10 (Multiplexing Daemon)<br />
* GSM 07.07 (Telephony)<br />
* GSM 07.05 (SMS)<br />
<br />
===Bluetooth===<br />
<br />
We base on the official Linux Bluetooth subsystem here, which is [http://www.bluez.org BlueZ]. <br />
<br />
===Network===<br />
<br />
Options: Networkmanager or Intel Connection Manager<br />
<br />
===GPS===<br />
<br />
We base on Gypsy here.<br />
<br />
==High Level==<br />
<br />
===PIM===<br />
* intelligent storage database<br />
<br />
===Events===<br />
* signaling events via I/O (ringing, blinking, vibrating)<br />
* might use fd.o notification API<br />
<br />
===Usage===<br />
* coordinating application I/O requirements (think ''reference counting'' for I/O requirements)<br />
* might use fd.o policy API<br />
<br />
===Preferences===<br />
* settings database<br />
<br />
===Context===<br />
* Intelligent context API, integrating location as one -- among other -- sources<br />
<br />
=Tasks=<br />
<br />
==What's there==<br />
* bluez<br />
* gypsy<br />
* geoclue<br />
* py-odeviced<br />
* pygsmd<br />
* gsmd0710muxd<br />
* networkmanager or intel connection manager<br />
<br />
==What's missing==<br />
* py-ophoned<br />
* pimd (GSoC 2008 project)<br />
* eventd<br />
* usaged<br />
* preferencesd<br />
* contextd<br />
<br />
=The role of Python=<br />
<br />
Where we write new code, we will use Python to implement the dbus services. The reason for that being the rapid prototyping nature of Python and the emphasis on the Dbus APIs. Using Python, the turnaround times to experiment with APIs are incredibly faster than for using a compiled language such as C or C++.<br />
<br />
Once the APIs have been used by application programmers, we can start profiling and possibly reimplementing some of the services with daemons written in Vala. Reimplementing things in RPython could be easier and much of the benefits of python would remain.<br />
<br />
=Team & Roadmap=<br />
<br />
... talk about the team and the roadmap ...</div>Sinhttp://openmoko.org/wiki/OpenmokoFrameworkOpenmokoFramework2008-04-28T16:27:24Z<p>Sin: /* The role of Python */</p>
<hr />
<div>''Note: This is the (ongoing) description of the new framework architecture. See [[OpenmokoOldFramework]] for the framework architecture of 2007.1 and 2007.2''<br />
<br />
=Purposes=<br />
<br />
* '''Give people the infrastructure to create solid and exciting software products based on the Openmoko platform'''<br />
* '''Support competing UIs while collaborating on developing services'''<br />
* '''Encourage framework users (e.g. application developers) to also contribute to the framework'''<br />
<br />
=Requirements=<br />
<br />
* Make it simple<br />
* Concentrate on core services<br />
* Be programming language agnostic<br />
* Be UI toolkit agnostic<br />
* Try to reuse existing technologies as much as possible, but not at the cost of a bad API<br />
<br />
=How to achieve that technically=<br />
* Chose [[Dbus]] as the collaboration line. Below dbus, we can work together. Above dbus, we can differenciate.<br />
* Expose features through dbus APIs implemented by UI-agnostic and language-agnostic services (daemons).<br />
* Optimize for Openmoko devices, but support multiple architectures and purposes through plugin interfaces and suitable hardware abstraction mechanisms.<br />
* Be not afraid of reinventing the wheel for a wheel-barrow if all the existing wheels are made for sports cars.<br />
<br />
=Mandatory Readings=<br />
<br />
* [http://adam.gomaa.us/blog/frameworks-exist-for-conceptual-integrity/ Frameworks exist for conceptual integrity]<br />
* [http://humanized.com/weblog/2007/10/05/make_oss_humane/ Ten ways to make more humane open source software]<br />
* [http://www.freesmartphone.org FreeSmartPhone.org Wiki]<br />
<br />
=What this is NOT about=<br />
<br />
This initiative does not cover low level services such as<br />
* Bootloader,<br />
* Kernel,<br />
* System Init.<br />
<br />
This initiative does not cover high level services such as<br />
* X-Window-System,<br />
* Window Manager,<br />
* Application Launcher,<br />
* Fancy UIs.<br />
<br />
=Overview=<br />
<br />
... picture ...<br />
<br />
=Components=<br />
<br />
... discussion of subsystem purposes ...<br />
<br />
==Low Level==<br />
<br />
===Device===<br />
...<br />
<br />
===GSM===<br />
This involves three components:<br />
<br />
* GSM 07.10 (Multiplexing Daemon)<br />
* GSM 07.07 (Telephony)<br />
* GSM 07.05 (SMS)<br />
<br />
===Bluetooth===<br />
<br />
We base on the official Linux Bluetooth subsystem here, which is [http://www.bluez.org BlueZ]. <br />
<br />
===Network===<br />
<br />
Options: Networkmanager or Intel Connection Manager<br />
<br />
===GPS===<br />
<br />
We base on Gypsy here.<br />
<br />
==High Level==<br />
<br />
===PIM===<br />
* intelligent storage database<br />
<br />
===Events===<br />
* signaling events via I/O (ringing, blinking, vibrating)<br />
* might use fd.o notification API<br />
<br />
===Usage===<br />
* coordinating application I/O requirements (think ''reference counting'' for I/O requirements)<br />
* might use fd.o policy API<br />
<br />
===Preferences===<br />
* settings database<br />
<br />
===Context===<br />
* Intelligent context API, integrating location as one -- among other -- sources<br />
<br />
=Tasks=<br />
<br />
==What's there==<br />
* bluez<br />
* gypsy<br />
* geoclue<br />
* py-odeviced<br />
* pygsmd<br />
* gsmd0710muxd<br />
* networkmanager or intel connection manager<br />
<br />
==What's missing==<br />
* py-ophoned<br />
* pimd (GSoC 2008 project)<br />
* eventd<br />
* usaged<br />
* preferencesd<br />
* contextd<br />
<br />
=The role of Python=<br />
<br />
Where we write new code, we will use Python to implement the dbus services. The reason for that being the rapid prototyping nature of Python and the emphasis on the Dbus APIs. Using Python, the turnaround times to experiment with APIs are incredibly faster than for using a compiled language such as C or C++.<br />
<br />
Once the APIs have been used by application programmers, we can start profiling and possibly reimplementing some of the services with daemons written in Vala. Reimplementing things in RPython would be much easier than Vala and much of the benefits of python remain.<br />
<br />
=Team & Roadmap=<br />
<br />
... talk about the team and the roadmap ...</div>Sinhttp://openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Digital_gamingHardware:Neo1973:Alternate Cases:Digital gaming2008-04-28T12:34:01Z<p>Sin: /* Interest */</p>
<hr />
<div>Digital gaming alternate case for the Neo1973<br />
<br />
==Concept==<br />
A case with a [http://en.wikipedia.org/wiki/D-pad digital D-pad], four face-mounted buttons and four shoulder-mounted buttons.<br><br />
[[Image:Neogame90.jpg|400px]]<br />
<br />
==Rendered images==<br />
<br />
<br />
==3D model==<br />
<br />
<br />
==Materials==<br />
<br />
<br />
==Processes==<br />
<br />
==Components==<br />
Directional pad.<br />
Buttons<br />
<br />
<br />
==Interest==<br />
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.<br><br />
<br />
{|<br />
|-<br />
|1. ||[[User:orzo|orzo]]<br />
|-<br />
|2. ||[[User:mrfeetio|mrfeetio]]<br />
|-<br />
|3. ||[[User:ruskie|ruskie]]<br />
|-<br />
|4. ||[[User:NJarek|NJarek]]<br />
|-<br />
|5. ||[[User:gwylim|gwylim]]<br />
|-<br />
|6. ||[[User:vozka|vozka]]<br />
|-<br />
|7. ||[[User:Globbi|Globbi]]<br />
|-<br />
|8. ||[[User:Shahn|Shahn]]<br />
|-<br />
|9. ||[[User:DStulle|dStulle]]<br />
|-<br />
|10. ||[[User:KrisAbsinthe|KrisAbsinthe]]<br />
|-<br />
|11. ||[[User:Methril|Methril]]<br />
|-<br />
|12. ||[[User:sin|sin]]<br />
|-<br />
|}<br />
<br />
[[Category:Hardware Support]]<br />
[[Category:Neo1973 Hardware]]<br />
[[Category:Neo1973_alternate_cases]]</div>Sinhttp://openmoko.org/wiki/Wishlist/GamesWishlist/Games2008-04-28T12:31:39Z<p>Sin: /* Candidates for porting/cross compiling */</p>
<hr />
<div>{{Wishlist}}<br />
<br />
=== Games on OpenMoko ===<br />
<br />
This is the page to centralize the suggestions for creating games on the OpenMoko device.<br />
<br />
===== Existing game concepts that could be realized =====<br />
* [http://www.kloonigames.com/blog/general/crayon-physics-deluxe-on-a-tablet-pc/ crayon physics deluxe] You play with crayons and physics. The goal of the game is to move the red ball so that it collects the stars. You can cause the red ball to move by drawing physical objects.<br />
* Simple Flash games like [http://www.albinoblacksheep.com/flash/squares2.php Squares2] are often very addicting and good for short playing sessions. Other examples: Bejewelled, Zoo Keeper, [http://novelconcepts.co.uk/FlashElementTD/ Flash Element TD ], [http://www.addictinggames.com/4secondfrenzy.html 4 second frenzy] ... <br />
* A classic shooter can work well with continous fire and touchscreen controls. An example is Kenta Cho's Java version of [http://www.asahi-net.or.jp/~cs8k-cyu/java/noiz2_e.html Noiz2] <br />
* Same is true for a 3D shooter with no/seldom used additional controls. For example a combat flying game like Hunt for the [http://www.smallrockets.com/pc/baron/ Red Baron]. You can control the speed with a slider, shoot rockets and drop bombs with special buttons but those are things you only need from time to time. Most of the time you are shooting continously and aiming which can be done in the corner of the touchscreen (so it doesn't obstruct your view). Use accelerators for steering?<br />
* Osu! Tatakae! Ouendan/Elite Beat Agents - Rhythm-based touching of circles and paths on the screen is a great concept and shouldn't be that difficult to pull off if you leave out some of the great presentation.<br />
* Pac Pix - The necessary shape-recognition would probably be difficult to manage with a small budget but the general idea is quite cool.<br />
* Kirby Canvas Curse - Again, not easy to do with a small budget.<br />
* Burning Sand/Falling Sand- already supported on a DS [http://siebn.de/]<br />
* Breakout - all you need to do is move the paddle back and forth<br />
* Pong - same as above<br />
* [http://de.wikipedia.org/wiki/Bridge_Builder Bridge Builder] - setting up Architectures, with a limited Budget and see if it can withstand. Doesn't have to be limited on Bridges.<br />
* Volfied - you cut pieces of the screen while dodging baddies and you win when you get to X%. (This probably mean something like [http://games.kde.org/kde_arcade.php KBounce], or another jezz ball clone)<br />
<br />
===== Candidates for porting/cross compiling =====<br />
* [http://www.fade-team.com/acedior.htm Acedior] - A classic graphic adventure game.<br />
* Checkers, Chess, Minesweeper (interesting touchscreen variation: [http://toyspring.com/3dm/ 3D Mines] by Toyspring, Solitaire, Mahjong, Connect Four, Tic-tac-toe, Black Jack<br />
* Command & Conquer and Red Alert - [http://sourceforge.net/projects/freera/ FreeRA]<br />
* Creating a Nethack port could be done. Tony said on the list: "I'm not entirely sure yet. I imagine I'll first do a text port with a "portal" view (in which you only see a part of the screen at a time), and a user-selected font size. Then I'd try a tiles-based port. It all depends on how readable the text is on the small screen."<br />
* [http://dosbox.sourceforge.net/ DOSBox] - would give the Opportunity to play dozens of DOS Games, like [http://www.abandonia.com/games/en/466/LandsofLore.htm Lands of Lore] -- bitbake recipe already exists, but the emulator is to slow without optimization configuration/code changes -- http://www.flickr.com/photos/pitcherfamily/1155008255/in/pool-openmoko/<br />
* [http://www.nongnu.org/enigma/ Enigma] A tilt maze-like puzzle game with 1000 levels (requires LUA).<br />
* [http://www.frozen-bubble.org/ Frozen Bubble] <br />
* [http://www.tucows.com/preview/9259 Gem Drop]<br />
* GJeweled<br />
* [http://www.aeonflame.com/ Gloop Zero] - A little like physics-based Lemmings. Get the liquid from one part of the level to another with tools like path-drawing, bombs, anti-gravity...<br />
* [http://gnome-sudoku.sourceforge.net/ Gnome Sudoku]<br />
* [http://web.mit.edu/xiphmont/Public/gPlanarity.html gPlanarity] would be a nice stylus game.<br />
* [http://en.wikipedia.org/wiki/Heroes_of_Might_and_Magic Heroes of Might and Magic] maybe can be port this [http://www.pocketheroes.net/ Pocket Heroes] for PocketPC<br />
* [http://redshift.hu/ Legacy] (and successor The Quest) - Classic first person turn based RPG. Movement and menus can completely be controlled with the touchscreen.<br />
* [http://www.ufoot.org/liquidwar Liquid War] Liquid War is a unique multiplayer wargame.<br />
* [http://www.mame.net/ MAME] - Multiple Arcade Machine Emulator. This versatile emulator turns a given platform into a powerful gaming system. It has been ported to WinCE and many UNIX flavors as well. It would be wonderul to have this on the OpenMoko.<br />
* [http://www.mess.org/ MESS] - Multiple Emulator Super System. To emulate old computers like TI 99/4A, C64, ...<br />
* Nethack, you could move just touching the direction you want to go.<br />
* [http://icculus.org/neverball/ Neverball] - Move-ball-in-a-maze game, could be great with the accelerometers.<br />
* Nintendo (DS) Emulator (SNES, NES)<br />
* [http://www.openttd.com Open Transport Tycoon Deluxe]. Very possible, in fact the author of the Palm & GP2X ports of the game is already interested in OpenMoko.<br />
* [http://treacle.hewwo.com/jazz/oj/ OpenJazz] Jazz Jackrabbit clone, needs original data. Would need some external controller or [http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Digital_gaming that] alternate case<br />
* Pipe Dreams<br />
* [http://www.clickgamer.com/moreinfo.htm?pid=4188&section=PALM Plazmoids!] - A space game with screen-size levels. Move your ship around by touching where it should go. Collect the plazmoids (asteroids) by catching them in your elastic tractor beam (lots of simple physics again), shoot enemies with a button or double tap.<br />
* Racing Games, like [http://xmoto.sourceforge.net/ XMoto], [http://vdrift.net/ VDrift], [http://ecksdee.sourceforge.net/ Ecksdee] or more likely [http://www.emhsoft.com/ttrooper/ Torus Trooper]<br />
* [http://www.scummvm.org/ ScummVM] - Allows you to run certain classic graphical point-and-click adventure games '''Done - see [[Scummvm]]'''<br />
* [http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ Simon Tatham's Portable Puzzle Collection] is GTK based and includes, among others, both Sudoku and Planarity style games called Solo and Untangle.<br />
* That addictive Photo game where you have to spot the 5 differences in x seconds<br />
* [http://www.t-o-m-e.net TOME] - Roguelike set in Tolkein universe (2.x is current, 3.0 is in devel) that makes wide use of lua scripting, TOME and maybe some modules or other standalone versions such as [http://www.furytech.net/furyband/furyband.php Furyband] should be playable with a virtual keyboard on the go or with a real usb/bluetooth keyboard.<br />
* [http://www.xmoto.tuxfamily.org X-Moto] - A cross game like Elastomania (but better ^^) that can be runned with SDL instead of OpenGL which it normally uses.<br />
* [http://www.warfareincorporated.com/ Warfare Inc.] - A full real time strategy game is no problem with a touchscreen. In fact, it's a lot of fun!<br />
* [http://www.widelands.org/ Widelands] A Settlers 2 clone<br />
* [http://www.wesnoth.org/ Battle for Wesnoth] The turn-based games on Linux. Active development, nice community, 100% addiction factor.There is also a [http://www.wesnoth.org/wiki/WesnothOnLinuxPDAs port on linux pda] that we could use<br />
* [http://www.wormux.org/wiki/en/index.php wormux] (it works without 3d acceleration) the game is playable in 640x480 even if the icon play and quit of the menu aren't displayed entierely(but we can click on them)<br />
<br />
===== General ideas about games on OpenMoko =====<br />
* A proper OpenGL ES library (preferably SDL) for the SMedia chip.<br />
* An easy network library for Bluetooth and/or GPRS connectivity.<br />
* Every turn-based game should be possible with on screen buttons. <br />
* Action games should need only one main control action most of the time such as moving somewhere on a 2D plane, aiming in 3D, drawing a path. Special items and actions are possible but should only be needed from time to time. Moving and aiming independently could be done by using the accelerometers for walking and the touchscreen for aiming.<br />
* The finger getting into the way of seeing what's going on is a problem. Most games would probably need a stylus. Games with first person aiming can be controlled with a thumb in one corner of the screen, however you'd probably need one of them thumbstraps they make for the DS so that your thumb glides over the screen with ease.<br />
* GPS can be used for location based games. An example is [http://codeninja.de/tron/ Tron]. Links to location-based/Alternate Reality games in these [http://del.icio.us/tallpaul/games+street del.icio.us pages]<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* Virtually Real Games; the OpenMoko, with it's network connectivity and loads of basic features, could be used to invent/encourage a new(ish) style of game that mixes reality and tech. A basic version would be urban tag; you get close to someone and the buzzer beeps faster, say. There's so many more creative possibilities though.<br />
<br />
What is not possible without magic tricks / an external controller*:<br />
* Classic first person shooters, action adventures, jump 'n' runs<br />
* Emulators for classic systems<br />
* Network lib for easy Bluetooth and/or GPRS connections.<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* If version 2 of the hardware has an accelerometer a [http://www.rubylane.com/shops/molotov/item/SUN1769 tilt maze ball game] is possible.<br />
<br />
===== Accelerometer based games =====<br />
* Sliding block games, to reassemble pictures.<br />
* Rolling ball games, where you navigate a ball or balls through a maze.<br />
** Multiplayer versions of the above - who can get the ball to the hole first?<br />
* Motorbike game...do you imagine rear up your Ninja taking up your phone??<br />
* PlanetPenguinRacer-like game.<br />
* Snake<br />
* 2D Spacefight game (up/down -maybe left/right- to navigate your fighter and shot button(s))<br />
<br />
<br />
<br />
*Reallife RPG Firstpersonshooter<br />
<br />
**RL-RPG-FPS<br />
**Neo as board computers<br />
<br />
**Bluetooth DEVICE with:<br />
***3d Accerometer<br />
***3d compass<br />
*** various buttons to fire etc.<br />
<br />
**wlan servers as gamarea<br />
*** with shot direction becomes via compass<br />
*** own psoition via gps<br />
*** kind of the weapon<br />
*** over wlan transfer <br />
*** and enemydevice announces hit<br />
<br />
<br />
<br />
<br />
<nowiki>*</nowiki>Much of this could be accomplished with [http://wiki.openmoko.org/wiki/Wish_List#More.2FCustom_Input_Method_Widgets Custom Input Method Widgets] for the keyboard.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Hardware ideas]]</div>Sinhttp://openmoko.org/wiki/Neo_FreeRunner_HardwareNeo FreeRunner Hardware2008-04-25T16:31:06Z<p>Sin: /* microSD Card */</p>
<hr />
<div>{{Languages|Neo FreeRunner GTA02 Hardware}}<br />
[[Openmoko]] is a software distribution stack that sits on top of a [[hardware]] platform. The [[Neo FreeRunner]] phone is the second hardware platform to take advantage of Openmoko. You can find specifications of the hardware by reviewing this introduction page and the pages in the category as shown at the bottom of this page.<br />
<br />
<!-- {{note|This page is about hardware that is currently in '''design/prototype''' phase, changes are frequent}} --><br />
<br />
[[Image:Gta02a5 pcba cs.JPG|thumb|400px|display (top) side NOTE: GTA02 A5 PCBA Component Side photo]]<br />
[[Image:Gta02a5 pcba ps.JPG|thumb|400px|component (back) side NOTE: GTA02 A5 PCBA Print Side photo]]<br />
[[Image:GTA02 A5 PCB CS.jpg|thumb|400px|component (back) side NOTE: GTA02 A5 PCB Component Side photo]]<br />
[[Image:GTA02 A5 PCB PS.jpg|thumb|400px|component (back) side NOTE: GTA02 A5 PCB Print Side photo]]<br />
<br />
=Summary=<br />
FIC is building a Linux based smart phone with full GPL compatible firmware source code for Openmoko, project code named GTA02 (Neo FreeRunner).<br />
<br />
Detail hardware component selection can be found below.<br />
<br />
=Features=<br />
*Display- Topply o2.8, 480 x 640 pixels, VGA, 200 NIT minimum, resistance type touch <br />
<br />
*User Interface Navigation- Touch screen on LCD, 2 control “buttons”, 1 Power button, 1 Aux for 911 emergency call <br />
<br />
*Built-in 802.11b/g Radio (Atheros chipset AR6001 Flash version) <br />
<br />
*Built-in Bluetooth 2.0 + EDR (CSR and support PCM audio , BC4 frimware version) <br />
<br />
*Built-in 2D/3D graphics acceleration chip (S-Media 3362) <br />
<br />
*2 built-in Tri-Axis sensor (ST accelerometer LIS302DL) <br />
<br />
*Built in GPS Radio – -130 dBm with internal antenna, -157 dBm tracking on chipset specification, TTFF under 40 seconds with -130 dBm signal strength, and tracking (u-Blox) <br />
<br />
*Antenna – Specialized antenna for best in hand hold GPS, GPRS and Wi-Fi/Bluetooth performance are required, -105dBm on receiving, Tx 30dbm+2 on GSM <br />
<br />
*External Antennae – MMCX GPS connector <br />
<br />
*GPRS Radio –GSM/GPRS radio. A Pre-PTCRB certified module will be preferred <br />
<br />
*Linux – Linux kernel 2.6.24 or later OpenMoko kernel <br />
<br />
*USB - Client and Host mode switch-able (to be used for software downloading), provide host 5v power <br />
<br />
*Power- Normal mode power will be via 1200 mAh battery with built-in coulomb counter, could charge via specialized charger. Internal Lithium Ion or Lithium Polymer battery will keep device in standby mode. Battery life (Approximation/Ideal Target) Standby time 150-200 Hrs (GSM) Talk time (Backlight off) Up to 3-4 hrs(GSM) <br />
<br />
*LED- LED indicator under Aux/Power button key<br />
<br />
=Hardware Specification=<br />
===Hardware Electrical=== <br />
<br />
*400/500 MHz Samsung 2442B Processor/SOC (400 minimum) <br />
*Boot code in NAND FLASH or 2MB NOR FLASH (optional design)<br />
*128 MB SDRAM total, 64 MB CPU internal, 64 MB external <br />
*256MB NAND Flash MCP package. <br />
<br />
=== Display === <br />
*Topploy VGA ; 2.8” diagonal, 480 x 640 pixels, 16 bit color depth<br />
*Transmissive display: good readability in high ambient light is essential <br />
*White LED backlight. Required brightness is 200 NIT minimum. <br />
*Resistance type touch panel.<br />
<br />
=== WiFi 802.11 b/g transceiver === <br />
*Must have GPL support source or GPL compatible policy<br />
*TX power at 11 Mbps: 13 dBm minimum <br />
*RX sensitivity at 11 Mbps: -89 dBm desired, -83 dBm minimum <br />
*AP mode desirable, not required <br />
*WEP and WPA supported <br />
*Atheros preferred because it's GPL policy<br />
<br />
=== Serial interfaces (UART) ===<br />
*Three serial interfaces are required <br />
*Console <br />
*A-GPS or GPS<br />
*GSM/GPRS<br />
<br />
=== Accelerometer ===<br />
* 2x accelerometer required<br />
* Could support interrupt while suspend or power save mode<br />
* 3 axis sensing<br />
<br />
=== A-GPS === <br />
*GPS chipset receiver and antenna <br />
*Sensitivity at Antenna port: -157 dBm tracking on chipset specification<br />
*LNA and SAW filter for maximum interference protection<br />
*Cold start time to first fix: 40 sec typical at -130 dBm, 60 sec max<br />
*Must support GPL for Assist-GPS function with open API<br />
*Industry quality GPS <br />
*Could fit in GTA01 GPS area on the PCB<br />
<br />
=== GPS Antenna Performance === <br />
*Antenna is passive and internal; 15 mm x 15 mm ceramic patch is nominal design <br />
*Antenna LNA and SAW filter are required to meet GPS performance <br />
*15 mm square ground plane (minimum 1 mm ground border around patch) (TBA) <br />
*There will be one external GPS antenna connector (MMCX)<br />
*C/N ratio should higher than 35 on production testing<br />
<br />
=== Buttons === <br />
*Touch screen over LCD is primary data entry mechanism <br />
*Two “hard” buttons: Power button (on side of Neo1973) is a mechanical switch actuated by a plastic pushbutton in a hole in the housing. Aux (911) button on the top of the device, All two of these buttons, when pushed by the operator, are binary inputs (on/off or pressed/not pressed) to the software. The effect of each button is determined by the application software in the device <br />
*Buttons may need to be backlit<br />
*50000 cycles on hardware specification <br />
<br />
=== Sound outputs === <br />
*Speaker in box (need good volume and acoustic behavior innoise environment) <br />
*Audio is monophonic*Max volume: 100 dB at 5 cm to assure good performance in environment.<br />
*Support earphone with mic by jack<br />
<br />
=== Power Design Requirements===<br />
*Software based power management unit preferred<br />
*NXP PCF series preferred<br />
*Need support charge from USB function<br />
*Need support powered by USB function<br />
*Power switch: Neo1973 will have a power switch, for power on/off and suspend <br />
* Power/Aux switch must be backlit <br />
*Switch controls whether device is running or suspended by presses of the switch <br />
*Switch does not shut off the power; it only suspends/resumes the device <br />
*Internal Li-Ion or Li-Polymer battery is included. This battery supplies standby power to the device eliminates the rebooting of the device when local power is again reapplied. Battery is 1200 ma-hr. <br />
*Battery life (Approximation) Ideal/Target Standby time 150-200 Hrs (GSM) Talk time (Backlight off) Up to 4 hrs(GSM) <br />
*Estimated current draw for the entire device when in suspend mode (and ALL peripherals are turned off or set for deep sleep) is <5 mA at 3.6 volts (Li-Ion terminal voltage).<br />
*GSM module deep sleep(alive and keep contact with base station) stage should take less than 8mA<br />
*Battery will reach half capacity (~600 mAh) with 500 charge-discharge cycles. This will occur in less than 2 years of daily service. <br />
*When powered continuously, Neo1973 must suspend (to low power mode) based either on observed low battery voltage condition or a configurable time delay. <br />
*Neo1973 must monitor battery status while suspended and resume automatically if the charger is inserted. <br />
*Primary power connection: 1200mAh battery <br />
*USB charger have ID pin 47.5k pull down for Openmoko identification <br />
*Indicators: an LED indicator visible from the side of the unit will illuminate when charging or have missing incoming call<br />
<br />
=== GSM/GPRS ===<br />
*850/1800/1900 and 900/1800/1900 MHz bands must be supported <br />
*Design should allow for multi-band version (850/900 MHz) <br />
*Module based GPRS transceiver could meeting PTCRB and appropriate FCC certifications. It preferred that the module be pre-certified with PTCRB or OTA test <br />
*FCC/CE certification required for GSM/GPRS part <br />
<br />
=== GSM-GPRS Antenna Performance === <br />
*-105 dBm receiving on each channel (GSM/PCS) <br />
*30+2 dBm transmission on GSM channel <br />
<br />
=== Wi-Fi Modules ===<br />
*Must support GPL driver<br />
*Atheros AR6k preferred<br />
*Flash version required<br />
<br />
=== Wi-Fi Antenna Performance === <br />
*The Wi-Fi antenna with TX 13 to 15 dBm<br />
*RX -89 to -83 dBm @802.11b 11Mbps or an equivalent performance antenna <br />
<br />
=== Bluetooth ===<br />
*CSR BC4 or later solutions<br />
<br />
=== USB === <br />
*Neo FreeRunner GTA02 will have USB, client/host. Using USB 1.1 <br />
*Could provide USB host 5v power<br />
*Could be powered by USB<br />
<br />
=== Microphone === <br />
1 microphone is in the device <br />
<br />
=== Firmware Image ===<br />
*Using Linux 2.6.24 or later<br />
*Could support boot from NAND or Boot from NOR<br />
*Shipping image should come with basic phone function<br />
*Could do full firmware upgrade by USB cable<br />
<br />
=== PSN ===<br />
*Device will have a PSN (product serial number) printed on the product label and machine readable in system NAND memory<br />
<br />
=== IMEI ===<br />
*Production phase should have IMEI code written<br />
<br />
= Package Specification = <br />
*Weight: ~150 grams with battery. <br />
*4 in 1 laser pen passed RoHs and safty regulation for laser equipment safty<br />
*1x 512MB microSD Card (SanDisk/Transcend)<br />
*1x USB cable Standard A to mini-B connector<br />
*1x 1200mAh smart/gauge battery<br />
*Quick start guide <br />
*5v USB power cord w/100-240 switchable power plug <br />
*Safety card, warranty card<br />
*Package could pass 1m to 1.5m drop test<br />
*AC USB charger,100v-240v, Passed UL and all required safety regulation<br />
*Must pass FCC/CE certification<br />
*Must pass NCC certification for Taiwan import regulation<br />
*RoHS Compatible<br />
*WEEE Report required<br />
<br />
= Life Cycle Specification = <br />
<br />
=== Product Life === <br />
The product is designed to last a minimum of 2 years. <br />
<br />
=== Operating Temperature === <br />
*Target operating range is –10°C to +60°C <br />
<br />
=== Storage Temperature === <br />
*-15 deg C to +70 deg C <br />
<br />
=== ESD === <br />
The device can withstand a 4.0kV contact discharge and 8.0kV air <br />
<br />
=== Drop test ===<br />
Should pass 1m direct drop to concrete ground or 1.5m on slide with carpet<br />
<br />
<br />
= GTA02 Hardware Component Selection =<br />
<br />
== Physical Dimensions ==<br />
* 120.7 x 62 x 18.5 mm (4.75 x 2.44 x 0.728 inch)<br />
* 110 +/- 5 g (4 ounces) without battery <br><br />
<br />
== Main components ==<br />
=== Processor ===<br />
The main Processor (CPU) of the Neo1973 GTA02 is a [[Samsung S3C2442B B54]] (running at 400 MHz)<br />
<br />
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&partnum=SC32442 Samsung SC32442B]<br />
* User Manual: FIXME<br />
* Core: ARM920T<br />
* Instruction Set: ARMv4 (Android ''currently'' requires ARMv5)<br />
* Built-in 64MB SDRAM<br />
* Built-in 256 MB NAND<br />
* Could run at 500Mhz<br />
* GPIO Assignments: https://svn.openmoko.org/trunk/doc/hardware/GTA02v4/gpio.txt<br><br />
* Evaluation board: [http://www.meritech.co.kr/products/product_view.php?num=52 S3C2442 EVB]<br />
<br />
=== Power Management ===<br />
A NXP PCF50633 04 N3 is used for [[Neo1973_Power_Management|power management]].<br />
<br />
* NXP PMU index: [http://www.nxp.com/products/power_management/pmu/index.html NXP PMU index page]<br><br />
* Product Datasheet: [http://people.openmoko.org/tony_tu/GTA02/datasheet/PMU/PCF50633DS_02.pdf NXP PCF50633 Product Data Sheet]<br><br />
* Product User manual: [http://people.openmoko.org/tony_tu/GTA02/datasheet/PMU/PCF50633UM_6.pdf NXP PCF50633 User Manual]<br><br />
**Special thanks NXP provide full user manual and support openness for all developer<br />
**Datasheet/User manual usage [http://lists.openmoko.org/pipermail/community/2008-March/013898.html was legally authorized by NXP]<br />
* Connected to: S3C2442 via I2C, client address is 0x08. <br><br />
* Driver Source: https://svn.openmoko.org/trunk/src/target/kernel/patches/pcf50633.patch<br><br />
<br />
=== Flash ===<br />
==== NAND Flash ====<br />
256MB integrated Samsung NAND flash inside the 2442 multi-chip package, attached to the S3C2442 NAND controller<br />
<br />
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&partnum=SC32442 S3C2442]<br />
* Data Sheet: S3C2442 B54 comes with 256 MB NAND MCP package<br />
* Connected to: S3C2442 NAND controller<br><br />
<br />
==== NOR Flash ====<br />
<br />
16MBit ST M58WR016KB706E NOR flash for 'unbrickable emergency boot' feature.<br />
<br />
* Product Homepage: [http://www.st.com/stonline/products/families/memories/fl_nor_mob/index.htm ST Mobile Flash NOR/Mobile Terminal]<br />
* Data Sheet: [http://www.st.com/stonline/products/literature/ds/13023/m58wr032qb.pdf M58WR016]<br />
* Connected to: S3C2442 NAND controller<br><br />
<br />
=== SDRAM ===<br />
128MB SDRAM (64MB inside 2442 MCP, 1x Samsung K4M51323PC) attached to S3C2442 SDRAM controller<br />
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=136&partnum=K4M51323PC Samsung K4M51323PC]<br />
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/MobileSDRAM/MobileSDRSDRAM/512Mbit/K4M51323PC/ds_k4m51323pc.pdf Samsung K4M51323PC]<br />
* Connected to: S3C2442 <br><br />
<br />
== GSM/GPRS ==<br />
The [[GSM]] (including GPRS) modem is Texas Instruments Calypso based.<br />
<br />
* Connected to: S3C2442 UART1 (full-uart, RxD, TxD, CTS, RTS), /dev/ttySAC0 in userspace<br />
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch<br />
* Accessible GSM/GPRS antenna jack (if battery cover is removed)<br><br />
<br />
=== CALYPSO ASIC digital baseband ===<br />
Unfortunately we cannot provide many details on the GSM chipset due to very tight [http://en.wikipedia.org/wiki/Non-disclosure_agreement NDA]s. However, this is not neccessarily required, since it interfaces using a standard UART serial line with the S3C2442. On that interface, [http://www.3gpp.org/ftp/Specs/archive/07_series/07.05/ GSM 07.05], [http://www.3gpp.org/ftp/Specs/archive/07_series/07.10/ GSM 07.10] and other standardized protocols are used.<br />
<br />
The NDAd documentation for the calypso, [http://cryptome.org/ti-calypso1.pdf register definition ] and [http://cryptome.org/ti-calypso2.pdf hardware definition ] was leaked onto a public forum on the 4th of March by persons or persons unknown.<br />
The legality of reading these files may vary according to your local laws, as may generating code from them.<br />
<br />
<br />
*Calypso D751992AZHH<br><br />
*The firmware within GTA02 should be moko6 or later (internal code name)<br />
<br />
=== TI TWL3025BZGMR analog baseband ===<br />
*Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12295&contentId=4703 TWL3014]<br><br />
<br />
=== TI TRF6151 (GSM/PCS) RF Transceiver ===<br />
*Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12296&contentId=4701 TRF6151] <br><br />
GPRS Class12/CS4 <br><br />
<br />
== AGPS ==<br />
u-blox ANTARIS 4 chip<br />
* Connected to: S3C2442 UART2, /dev/ttySAC1 in userspace<br />
* Driver: none needed, talks standard NMEA<br />
* u-blox Antaris 4 Protocol [http://www.u-blox.com/customersupport/antaris_doc.html Protocol download page]<br />
* ATR0635 Datasheet: [http://www.u-blox.com/products/Data_Sheets/ATR0630_35_SglChip_Data_Sheet(GPS.G4-X-06009).pdf u-blox ATR0635]<br><br />
<br />
== Accelerometers ==<br />
Two ST LIS302DL<br />
* Homepage: http://www.st.com/stonline/products/literature/ds/12726/lis302dl.htm<br />
* Datasheet: http://www.st.com/stonline/products/literature/ds/12726.pdf<br />
* Connected to: S3C2442 via SPI interface<br />
* S3C2442 SPI EINT interrupt inputs<br><br />
<br />
== Graphics/3D Acceleration ==<br />
<br />
Smedia Glamo 3362.<br />
* Homepage: http://www.smediatech.com/product3362.htm<br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/smedia-glamo.patch<br />
* Data sheet: This is not available, as it is under NDA. It will likely never be available. (Source: Raster - IRC)<br />
* Connected to: S3C2442 Address/Data bus <br><br />
<br />
=== microSD ===<br />
The GTA02 has one microSD aka Transflash slot. Using the Glamo 3362 MMC/SD controller<br />
<br />
*It should support SDHC, and 4GB card has been tested. Anyone with 8GB card? MicroSD slot is [[Disassembling_Neo1973#Opening_back_cover|under battery]].<br />
* Connected to: Glamo 3362 MMC/SD controller<br />
* Driver: Check svn for the SMedia driver with SD implementation<br />
* [[Supported microSD cards]]<br />
* Specifications: [http://www.sdcard.org/about/memory_card/pls/ SD Simplified Specification], [http://www.mmca.org/compliance/buy_spec/AN_MMCA050419.pdf MMC (partial)], [http://www.sandisk.com/Assets/File/OEM/Manuals/manual-rs-mmcv1.0.pdf MMC (product manual)]<br />
* SANDISK 128 MB/512 MB and some 4G SDHC card been verified could work on GTA02<br><br />
<br />
== LCD Module (LCM) ==<br />
Toppoly (tpo) 2.8" diagonal (1.7" x 2.27" - 43mm x 58mm) 480x640 TD028TTEC1 module, using a Toshiba JBT6K74 TFT <br />
LCD Driver Chipset.<br><br />
* Homepage: [http://www.tpo.biz/ENG/business-eng/Activer-Matrix-VGA.htm Activer-Matrix-VGA.htm]<br />
* Specification: FIXME<br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-jbt6k74.patch<br />
* Backlight Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-backlight.patch<br />
* Connected to: Glamo3362 LCM interface and Glamo3362 SPI Interface<br><br />
<br />
==== Touch Screen ====<br />
* Connected to: S3C2442 TS controller<br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_touchscreen.patch<br />
<br />
== Bluetooth Module==<br />
Delta DFBM-CS320 Class2 Module, using CSR BlueCore4<br />
<br />
* Data Sheet: [http://www.delta.com.tw/product/cp/vco/BT/download/pdf/CS/2.DFBM-CS320.pdf 2.DFBM-CS320.pdf]<br />
* CSR Data Sheet: [http://www.csrsupport.com/download/2302/CS-101564-DSP10%20BlueCore4-ROM%20Product%20Data%20Sheet.pdf CS-101564-DSP10 BlueCore4-ROM Product Data Sheet.pdf]<br />
* Driver: Stock Linux Kernel BlueZ<br />
* Connected to: S3C2442 USB Host controller (OHCI)<br />
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch<br><br />
<br />
=== Bluetooth Audio ===<br />
This one is wired via PCM bus from the CSR Bluetooth chip to the Wolfson codec.<br><br />
<br />
== WiFi Module==<br />
<br />
Accton (WLAN 802.11b/g SiP-M WM3236AQ(Flash Ver:2.0 Atheros AR6001GZ)<br />
* Connected to: S3C2442 SDIO Host controller<br><br />
* Datasheet: [http://www.accton.com/products/Datasheet/WM3236A.AQ.pdf Accton 3236AQ datasheet]<br><br />
* Driver: http://svn.openmoko.org/developers/sameo/patches/<br><br />
<br />
== Vibrator ==<br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-vibrator.patch<br />
* Connected to: S3C2442 GPIO<br />
<br />
== USB Host ==<br />
The USB Host controller is inside the S3C2442<br />
* Driver: Stock Linux kernel ohci_hcd<br />
* USB version 1.1<br />
* Supply USB 5v in Host mode using usb power switch AAT1275IRN-5.0-T1<br />
** http://www.analogictech.com/products/digitalfiles/AAT1275.pdf<br />
* A net EN_USBHOST is controlled by PMU GPIO "GPO", this one signal when asserted (high)<br />
** enables generation of 5V for external device using a charge pump<br />
** enables connection of 15K pulldowns to D+ and D- to allow device insertion and removal detection for host mode<br />
** DISABLES the path for USB power to charge the battery<br />
<br />
It should also be possible to use host mode with externally-provided power. This will allow the FreeRunner to be connected to a USB device and be powered and charging the battery if present at the same time.<br />
<br />
* Connect 0V, d+, d-, +5 to your USB device<br />
* Connect a 15k ohm resistor between d+ and ground<br />
* Connect a 15k ohm resistor between d- and ground<br />
* Connect 0V, +5 to your >1A power source<br />
** If your power source was not the OpenMoko 1A charger, additionally connect a 47K ohm 5% resistor between the ID pin and ground to pretend to be the 1A charger.<br />
<br />
In addition you need to make sure EN_USBHOST signal that enables the physical Host mode power generation and disables the USB -> PMU charging path is deasserted. This may be taken care of automatically shortly by detection of the 48K resistor on a USB insertion leading to forcing EN_USBHOST deasserted. The charge pump that generates the 5V in host mode doesn't seem to mind getting external 5V given to it, but the real issue is that the battery will not be charged at all if we leave EN_USBHOST asserted since one of its jobs is to stop that happening.<br />
<br />
== USB Device ==<br />
The USB Device controller is inside the S3C2442 <br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_udc.patch<br />
* Please see [[USB Product IDs]] on information about which Vendor/Product IDs we use<br />
* 1200mAh lithium battery charges when connected to powered host.<br />
* Mini-AB connector similar to [http://www.cypressindustries.com/shoponline/proddetail.asp?prod=CCMUSBAB-32005-700&cat=34 this one].<br />
<br />
== I2C Devices ==<br />
I2C is a simple communication standard intended to move small amounts of data a few inches between chips.<br />
Please see [[I2C | Neo I2C Devices]] for more information & a list of devices & the addresses currently in use & documented for the Neo1973.<br><br />
<br />
== Audio ==<br />
See also: [[Neo1973 Audio Subsystem]]<br />
<br />
=== Wolfson Codec ===<br />
There's a [[WM8753]] Wolfson Microelectronics CODEC (This is not a 'smart' codec that can interpret MP3/... it is a simple dumb 'sound card'.<br />
* Product Homepage: http://www.wolfsonmicro.com/products/WM8753/<br />
* Data Sheet: [http://www.wolfsonmicro.com/uploads/documents/en/WM8753.pdf WM8753.pdf]<br />
* Connected to: S3C2442 IIS interface (PCM data), S3C2442 I2C (Control)<br />
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/asoc.patch<br />
<br />
=== Mono Amplifier ===<br />
There's a National Semiconductor [[LM4853]] Mono Amplifier at the analog audio output of the WM8753<br />
<br />
* Product Homepage: [http://www.national.com/pf/LM/LM4853.html LM4853.html]<br />
* Data Sheet: [http://www.national.com/ds.cgi/LM/LM4853.pdf LM4853.pdf]<br />
* Connects to (LM4853 pin): <br />
** S3C2442 GPIO: HP_IN, AMP_SHUT (shutdown); <br />
** Wolfson WM8753: LOUTL (LEFTIN), LOUTR (RIGHTIN); <br />
** speaker4102: (LEFTOUT/BLTOUT-, BLTOUT+);<br />
** headset-jack: ring 2 (RIGHTOUT), ring 3 (LEFTOUT/BLTOUT-) via 1uF-33R each<br />
<br />
=== Analog wired Headset ===<br />
There's a four-ring 2.5mm stereo jack which provides connectivity to old-fashioned wired headsets.<br />
<br />
The headsets used by Motorola smartphones (A780,A1200, ...) and the V-360 have a compatible configuration.<br />
<br />
ring<br><br />
1(base): GND<br><br />
2: right out<br><br />
3: left out<br><br />
4(tip): mic + HOLD-button(press:short to GND)<br />
<br />
=== Buttons ===<br />
The Neo1973 GTA02 features two buttons:<br />
* [[Neo1973 Power Button|The Power Button]]<br />
* [[Neo1973 AUX Button|The "Aux" button]]<br />
<br />
== Case ==<br />
The new case for the FreeRunner is all black, as seen on the front page on the wiki.<br />
Source: Mickey on IRC<br />
=Accessory=<br />
<br />
== Stylus ==<br />
<br />
Using 4 in 1 laser pen<br />
*Vendor: [http://www.quarton.com/laser_pen.html Quarton XPII]<br />
*GTA02 standard setup comes with [http://www.quarton.com.tw/laser_pen_infiniter_xp_2.html QUARTON XPII 4 in 1 laser pen]<br />
<br />
== Battery ==<br />
The [[Neo FreeRunner (GTA02) Battery]] is mechanically and electrically compatible with the [[Neo1973 GTA01 Battery]], as well as limited compatibility with a Nokia BL6C battery.<br />
According to [http://lists.openmoko.org/pipermail/community/2007-February/003758.html this] post on the mailinglist.<br />
[http://wiki.openmoko.org/index.php?title=Image:Neo1973-with-BL5C-battery.png Photo] of the battery inside the Neo1973.<br />
<br />
* GTA02 using the smart battery based on TI bq27000 chipset<br />
* SANYO UF653450S 1200mAh cell.<br><br />
* Battery schematics: [http://people.openmoko.org/tony_tu/GTA02/hardware/GTA02/CT-GTA02.pdf GTA02 Smart Battery Schematics]<br />
<br />
== microSD Card ==<br />
<br />
GTA02 should come with one of following microSD card<br />
<br />
* [http://www.transcendusa.com/ Transcend] 512MB microSD card<br />
* [http://www.sandisk.com/ SanDisk] 512MB microSD card<br><br />
<br />
== Charger ==<br />
<br />
AKII Technology Charger<br />
<br />
*Model: [http://www.ak2.com.tw/pd_main.asp?sg_id=11 A10P1-05MP]<br />
*Input: 100-240v~ /0.3A<br />
*Output: +5v up to 2.0A<br />
*Add 47.5k 1% resistor between ID pin and ground for openmoko charger identification<br><br />
<br />
= History =<br />
<br />
== GTA02v1 ==<br />
First generation of prototypes that was given to internal OpenMoko software developers. Total 30 pcs fabricated.<br />
<br />
*It is working just fine, but still based on 2440, with external NAND/SDRAM and no NOR flash<br />
*Using the PCF50633 05 N3 due to 04 N3 not available, re-work power for basic schematics verification<br />
*Using GTA01 SIM socket<br />
*Add external debug port<br />
*Still using Global locate A-GPS<br />
* ATAG_REVISION: 0310<br />
<br />
== GTA02v2 ==<br />
Second generation of prototypes, Total 50 pcs run at Taipei SMT factory MOUNT<br />
<br />
*Ideal is have 256 MB NAND on Samsung package, Due to chip availability Start using S3C2442 B43<br />
*Using correct PMU PCF50633 04 N3<br />
*Change new SIM socket<br />
*Change to u-blox A-GPS<br />
*Change LCM power from 3.3v to 1.8v<br />
*USB power switch layout/pin assignment mistake, could not verify USB host supply 5v function<br />
*GPS function verified ok with good sensitivity<br />
* ATAG_REVISION: 0320<br />
<br />
== GTA02v3 ==<br />
Production verification version, 2007/10/11 28 pcs fabricate at FIC SuZhou<br />
<br />
*Still using S3C2442 B43 for hardware verification<br />
*Using control pilot run to verify S3C2442 B54 chips<br><br />
* ATAG_REVISION: 0330<br />
<br />
== GTA02v4 ==<br />
Mass production release candidate version 1<br />
<br />
2 weeks after v3 gerber out, release the v4 gerber, and 2007/10/20 20 pcs fabricate at FIC SuZhou <br />
<br />
*Change LCM power from 1.8v to 3.3v for display stability issue<br />
*fabricate another 200 pcs for yield rate/production verification<br />
*fabricate 50 pcs with S3C2442 B43 (128 MB NAND) for quality comparsion<br />
*USB host power chip have some output voltage stability issues with Vb/Vcc comes from different power source, need layout change to fix the issue<br />
*Battery Coulomb design not working on A4<br />
* ATAG_REVISION: 0340<br />
<br />
== GTA02v5 ==<br />
Mass production candidate version 2/Mass production version<br />
<br />
* First batch fabricate 2008/1/14 at FIC SuZhou<br />
* Mass production A5 trial run start from 2008 March, including some resistor/capacitor change compare with inital 100 pcs prototypes A5, and prototypes for GTA02 developers was tracked in the [[Prototypes| Prototypes Page]]<br />
* Coulomb counter issue fixed<br />
* USB host power switch fixed<br />
* Need add capacitor for PMU Vbat input for stability issue, this could be done by direct SMT or hand rework<br />
* Need rework (still using SMT in production) add capacitor for PMU Vbat input for PMU stability issue.<br />
* Need manual rework GSM IR UART path a 100k pull down for better GSM deep sleep<br />
* ATAG_REVISION: 0350<br />
<br />
===GTA02 mass Production version change list===<br />
*PMU's LED power error: PMU potential damage issue<br />
*NOR FLASH enable WP: User can write data into NOR FLASH.<br />
*CE CS/RS fine tune: Audio's background noise too high<br />
*I2C pull high resistor: The resistor is too high and signal is distorted <br />
*GSM leakage current: TX_MODEM has a pull high resistor on IO_3V3<br />
*Power consumption: Disable keep active function<br />
*SDIO clock and esd protect resistor<br />
*Refer to Datasheet: R1526 to 33K<br />
*GSM modem on pin: The R1018 is too small and has some leakage current<br />
*LED driving transistor: When GPIO is on, the transistor will be draw more current on LED. This is component change fix, do not need change PCB or re-work.<br />
<br />
== GTA02v6 ==<br />
Mass production candidate version 3/Mass production version<br><br />
<br />
A6 will be fine tune version of A5, only minor schematic change for better product quality and version control. Capacitor and resistor change A6 also on mass production A5<br><br />
<br />
*First 100 pcs start from 2008 mid April, and factory make component placement mistake on GSM, second 100 pcs PCB arrive time TBD. <br />
*Add capacitor space for Vbat, reduce the SMT effort<br />
*Add GSM IR resistor for better GSM deep sleep<br />
*Reserve 3 GPIO for hardware version control<br />
*Fixed LEDs power usage (from about 150mW of v5 to about 25mW)<br />
* ATAG_REVISION: 0360<br />
<br />
=== GTA02 A5 to A6 changes ===<br />
*Power Glitch on VB_SYS: Add capacitor on layout, Mass production A5 also apply this change.<br />
*G-sensor separate these interrupt pins: At A5, each accelerometer INT1/INT2 connected to same line, at A6 only INT1 was connected.<br />
*GSM_modem power source Reduce power's ripple when the phone is talking<br />
*Keep active Disable keep active function, just fine tune<br />
*GPIO for version control <br />
*GSM RX_IR has some noise Add resistor and reduce GSM RX_IR noise and gsm can't enter suspend mode easily, apply on mass production A5.<br />
*LED driving transistor apply on mass production A5.<br />
*LCM's VDDIO We can totally power off LCM's power, save about extra 1mA.<br />
<br />
= Debug Board =<br />
<br />
== Debug Board Connector definition ==<br />
<br />
This is the connector used to connect the [[Debug Board]] and possibly other hardware.<br />
<br />
Connections are:<br />
* 39 - GND<br />
* 38 - STDI<br />
* 37 - _RESET<br />
* 36 - STMS<br />
* 35 - STCK<br />
* 34 - STDO<br />
* 33 - GSM_EN<br />
* 29 - _STRST<br />
* 19 - X_I2C_SCL (H-TP4703)<br />
* 18 - X_I2C_SDA (H-TP4704)<br />
* 17 - SPI_CLK0<br />
* 16 - SPI_MOSI0<br />
* 15 - SPI-MISO0 <br />
* 14 - SS0<br />
* 13 - EINT3 (H-TP4705)<br />
* 3 - CONSOLE_TXD (H-TP4701)<br />
* 2 - CONSOLE_RXD (H-TP4702)<br />
<br />
Information from [http://people.openmoko.org/roh/Debugport_GTA01bv4.png].<br />
<br />
= Distinguishing hardware revisions =<br />
== Inside the [[Bootloader]] ==<br />
Every hardware revision has its own u-boot image type. Thus, the bootloader has the revision hard-coded.<br />
The hardware revision is passed on to the kernel via the ATAG mechanism (ATAG_REVISION)<br />
<br />
== Inside the [[Kernel]] ==<br />
The kernel receives the ATAG_REVISION during bootup, and saves its contents in the "system_rev" global variable.<br />
<br />
== From Userspace ==<br />
The kernel exports the system_rev variable in /proc/cpuinfo as "Revision :" line.<br />
<br />
= Certification =<br />
<br />
== FCC ==<br />
*For US Import<br />
** 850/1800/1900 Band, FCC ID: EUNGTA02<br />
** 900/1800/1900 Band, FCC ID: EUNGTA02E<br />
** [http://people.openmoko.org/tony_tu/GTA02/certificate/EUNGTA02_850_1800_1900/ FCC test report(GTA02)]<br />
** [http://people.openmoko.org/tony_tu/GTA02/certificate/EUNGTA02E_900_1800_1900/ FCC test report(GTA02E)]<br />
<br />
== NCC ==<br />
*For Taiwan Import<br />
**NCC certification number: CCAF08DG0080T0 <br />
**[http://people.openmoko.org/tony_tu/GTA02/certificate/NCC NCC test report]<br />
<br />
<br />
<br />
[[Category:Hardware ]]<br />
[[Category:GTA02 Hardware]]<br />
[[Category:Hardware Support]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-19T19:15:30Z<p>Sin: /* Feature matrix */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |Medium<br />
|align="center" |Heavy<br />
|align="center" |JIT/gcj<br />
|align="center" |Y (Jython/JRuby)<br />
|-<br />
!align="center" |Python<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex/RPython<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |In development<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |Mature<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |?<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |N<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |N<br />
|align="center" |Y<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], hungry algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. RPython (PyPy) already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150KB. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-19T09:52:58Z<p>Sin: /* Feature matrix */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |Medium<br />
|align="center" |Heavy<br />
|align="center" |JIT / gcj<br />
|align="center" |Y (Jython/JRuby)<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / RPython<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |In development<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |Mature<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |?<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |N<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |N<br />
|align="center" |Y<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], hungry algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. RPython (PyPy) already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150KB. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-19T09:51:42Z<p>Sin: /* Feature matrix */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |Medium<br />
|align="center" |Heavy<br />
|align="center" |JIT / gcj<br />
|align="center" |Y (Jython/JRuby)<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / RPython<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |In development<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |Mature<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |?<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Lua-JIT (x86)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |N<br />
|align="center" |Y<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], hungry algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. RPython (PyPy) already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150KB. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-19T09:48:08Z<p>Sin: /* Python */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT / gcj<br />
|align="center" |?<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / RPython<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |?<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Lua-JIT (x86)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], hungry algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. RPython (PyPy) already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150KB. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-19T09:44:48Z<p>Sin: /* Feature matrix */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT / gcj<br />
|align="center" |?<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / RPython<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |?<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Lua-JIT (x86)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. PyPy already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150kb. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/GamesWishlist/Games2008-04-19T09:44:01Z<p>Sin: /* General ideas about games on OpenMoko */</p>
<hr />
<div>{{Wishlist}}<br />
<br />
=== Games on OpenMoko ===<br />
<br />
This is the page to centralize the suggestions for creating games on the OpenMoko device.<br />
<br />
===== Existing game concepts that could be realized =====<br />
* [http://www.kloonigames.com/blog/general/crayon-physics-deluxe-on-a-tablet-pc/ crayon physics deluxe] You play with crayons and physics. The goal of the game is to move the red ball so that it collects the stars. You can cause the red ball to move by drawing physical objects.<br />
* Simple Flash games like [http://www.albinoblacksheep.com/flash/squares2.php Squares2] are often very addicting and good for short playing sessions. Other examples: Bejewelled, Zoo Keeper, [http://novelconcepts.co.uk/FlashElementTD/ Flash Element TD ], [http://www.addictinggames.com/4secondfrenzy.html 4 second frenzy] ... <br />
* A classic shooter can work well with continous fire and touchscreen controls. An example is Kenta Cho's Java version of [http://www.asahi-net.or.jp/~cs8k-cyu/java/noiz2_e.html Noiz2] <br />
* Same is true for a 3D shooter with no/seldom used additional controls. For example a combat flying game like Hunt for the [http://www.smallrockets.com/pc/baron/ Red Baron]. You can control the speed with a slider, shoot rockets and drop bombs with special buttons but those are things you only need from time to time. Most of the time you are shooting continously and aiming which can be done in the corner of the touchscreen (so it doesn't obstruct your view). Use accelerators for steering?<br />
* Osu! Tatakae! Ouendan/Elite Beat Agents - Rhythm-based touching of circles and paths on the screen is a great concept and shouldn't be that difficult to pull off if you leave out some of the great presentation.<br />
* Pac Pix - The necessary shape-recognition would probably be difficult to manage with a small budget but the general idea is quite cool.<br />
* Kirby Canvas Curse - Again, not easy to do with a small budget.<br />
* Burning Sand/Falling Sand- already supported on a DS [http://siebn.de/]<br />
* Breakout - all you need to do is move the paddle back and forth<br />
* Pong - same as above<br />
* [http://de.wikipedia.org/wiki/Bridge_Builder Bridge Builder] - setting up Architectures, with a limited Budget and see if it can withstand. Doesn't have to be limited on Bridges.<br />
* Volfied - you cut pieces of the screen while dodging baddies and you win when you get to X%. (This probably mean something like [http://games.kde.org/kde_arcade.php KBounce], or another jezz ball clone)<br />
<br />
===== Candidates for porting/cross compiling =====<br />
* [http://www.fade-team.com/acedior.htm Acedior] - A classic graphic adventure game.<br />
* Checkers, Chess, Minesweeper (interesting touchscreen variation: [http://toyspring.com/3dm/ 3D Mines] by Toyspring, Solitaire, Mahjong, Connect Four, Tic-tac-toe, Black Jack<br />
* Command & Conquer and Red Alert - [http://sourceforge.net/projects/freera/ FreeRA]<br />
* Creating a Nethack port could be done. Tony said on the list: "I'm not entirely sure yet. I imagine I'll first do a text port with a "portal" view (in which you only see a part of the screen at a time), and a user-selected font size. Then I'd try a tiles-based port. It all depends on how readable the text is on the small screen."<br />
* [http://dosbox.sourceforge.net/ DOSBox] - would give the Opportunity to play dozens of DOS Games, like [http://www.abandonia.com/games/en/466/LandsofLore.htm Lands of Lore] -- bitbake recipe already exists, but the emulator is to slow without optimization configuration/code changes -- http://www.flickr.com/photos/pitcherfamily/1155008255/in/pool-openmoko/<br />
* [http://www.nongnu.org/enigma/ Enigma] A tilt maze-like puzzle game with 1000 levels (requires LUA).<br />
* [http://www.frozen-bubble.org/ Frozen Bubble] <br />
* [http://www.tucows.com/preview/9259 Gem Drop]<br />
* GJeweled<br />
* [http://www.aeonflame.com/ Gloop Zero] - A little like physics-based Lemmings. Get the liquid from one part of the level to another with tools like path-drawing, bombs, anti-gravity...<br />
* [http://gnome-sudoku.sourceforge.net/ Gnome Sudoku]<br />
* [http://web.mit.edu/xiphmont/Public/gPlanarity.html gPlanarity] would be a nice stylus game.<br />
* [http://en.wikipedia.org/wiki/Heroes_of_Might_and_Magic Heroes of Might and Magic] maybe can be port this [http://www.pocketheroes.net/ Pocket Heroes] for PocketPC<br />
* [http://redshift.hu/ Legacy] (and successor The Quest) - Classic first person turn based RPG. Movement and menus can completely be controlled with the touchscreen.<br />
* [http://www.ufoot.org/liquidwar Liquid War] Liquid War is a unique multiplayer wargame.<br />
* [http://www.mame.net/ MAME] - Multiple Arcade Machine Emulator. This versatile emulator turns a given platform into a powerful gaming system. It has been ported to WinCE and many UNIX flavors as well. It would be wonderul to have this on the OpenMoko.<br />
* [http://www.mess.org/ MESS] - Multiple Emulator Super System. To emulate old computers like TI 99/4A, C64, ...<br />
* Nethack, you could move just touching the direction you want to go.<br />
* Nintendo (DS) Emulator (SNES, NES)<br />
* [http://www.openttd.com Open Transport Tycoon Deluxe]. Very possible, in fact the author of the Palm & GP2X ports of the game is already interested in OpenMoko.<br />
* [http://treacle.hewwo.com/jazz/oj/ OpenJazz] Jazz Jackrabbit clone, needs original data. Would need some external controller or [http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Digital_gaming that] alternate case<br />
* Pipe Dreams<br />
* [http://www.clickgamer.com/moreinfo.htm?pid=4188&section=PALM Plazmoids!] - A space game with screen-size levels. Move your ship around by touching where it should go. Collect the plazmoids (asteroids) by catching them in your elastic tractor beam (lots of simple physics again), shoot enemies with a button or double tap.<br />
* Racing Games, like [http://xmoto.sourceforge.net/ XMoto], [http://vdrift.net/ VDrift], [http://ecksdee.sourceforge.net/ Ecksdee] or more likely [http://www.emhsoft.com/ttrooper/ Torus Trooper]<br />
* [http://www.scummvm.org/ ScummVM] - Allows you to run certain classic graphical point-and-click adventure games '''Done - see [[Scummvm]]'''<br />
* [http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ Simon Tatham's Portable Puzzle Collection] is GTK based and includes, among others, both Sudoku and Planarity style games called Solo and Untangle.<br />
* That addictive Photo game where you have to spot the 5 differences in x seconds<br />
* [http://www.t-o-m-e.net TOME] - Roguelike set in Tolkein universe (2.x is current, 3.0 is in devel) that makes wide use of lua scripting, TOME and maybe some modules or other standalone versions such as [http://www.furytech.net/furyband/furyband.php Furyband] should be playable with a virtual keyboard on the go or with a real usb/bluetooth keyboard.<br />
* [http://www.xmoto.tuxfamily.org X-Moto] - A cross game like Elastomania (but better ^^) that can be runned with SDL instead of OpenGL which it normally uses.<br />
* [http://www.warfareincorporated.com/ Warfare Inc.] - A full real time strategy game is no problem with a touchscreen. In fact, it's a lot of fun!<br />
* [http://www.widelands.org/ Widelands] A Settlers 2 clone<br />
* [http://www.wesnoth.org/ Battle for Wesnoth] The turn-based games on Linux. Active development, nice community, 100% addiction factor.There is also a [http://www.wesnoth.org/wiki/WesnothOnLinuxPDAs port on linux pda] that we could use<br />
* [http://www.wormux.org/wiki/en/index.php wormux] (it works without 3d acceleration) the game is playable in 640x480 even if the icon play and quit of the menu aren't displayed entierely(but we can click on them)<br />
<br />
===== General ideas about games on OpenMoko =====<br />
* A proper OpenGL ES library (preferably SDL) for the SMedia chip.<br />
* An easy network library for Bluetooth and/or GPRS connectivity.<br />
* Every turn-based game should be possible with on screen buttons. <br />
* Action games should need only one main control action most of the time such as moving somewhere on a 2D plane, aiming in 3D, drawing a path. Special items and actions are possible but should only be needed from time to time. Moving and aiming independently could be done by using the accelerometers for walking and the touchscreen for aiming.<br />
* The finger getting into the way of seeing what's going on is a problem. Most games would probably need a stylus. Games with first person aiming can be controlled with a thumb in one corner of the screen, however you'd probably need one of them thumbstraps they make for the DS so that your thumb glides over the screen with ease.<br />
* GPS can be used for location based games. An example is [http://codeninja.de/tron/ Tron]. Links to location-based/Alternate Reality games in these [http://del.icio.us/tallpaul/games+street del.icio.us pages]<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* Virtually Real Games; the OpenMoko, with it's network connectivity and loads of basic features, could be used to invent/encourage a new(ish) style of game that mixes reality and tech. A basic version would be urban tag; you get close to someone and the buzzer beeps faster, say. There's so many more creative possibilities though.<br />
<br />
What is not possible without magic tricks / an external controller*:<br />
* Classic first person shooters, action adventures, jump 'n' runs<br />
* Emulators for classic systems<br />
* Network lib for easy Bluetooth and/or GPRS connections.<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* If version 2 of the hardware has an accelerometer a [http://www.rubylane.com/shops/molotov/item/SUN1769 tilt maze ball game] is possible.<br />
<br />
===== Accelerometer based games =====<br />
* Sliding block games, to reassemble pictures.<br />
* Rolling ball games, where you navigate a ball or balls through a maze.<br />
** Multiplayer versions of the above - who can get the ball to the hole first?<br />
* Motorbike game...do you imagine rear up your Ninja taking up your phone??<br />
* PlanetPenguinRacer-like game.<br />
* Snake<br />
* 2D Spacefight game (up/down -maybe left/right- to navigate your fighter and shot button(s))<br />
<br />
<br />
<br />
*Reallife RPG Firstpersonshooter<br />
<br />
**RL-RPG-FPS<br />
**Neo as board computers<br />
<br />
**Bluetooth DEVICE with:<br />
***3d Accerometer<br />
***3d compass<br />
*** various buttons to fire etc.<br />
<br />
**wlan servers as gamarea<br />
*** with shot direction becomes via compass<br />
*** own psoition via gps<br />
*** kind of the weapon<br />
*** over wlan transfer <br />
*** and enemydevice announces hit<br />
<br />
<br />
<br />
<br />
<nowiki>*</nowiki>Much of this could be accomplished with [http://wiki.openmoko.org/wiki/Wish_List#More.2FCustom_Input_Method_Widgets Custom Input Method Widgets] for the keyboard.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Hardware ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/GamesWishlist/Games2008-04-19T09:43:18Z<p>Sin: /* General ideas about games on OpenMoko */</p>
<hr />
<div>{{Wishlist}}<br />
<br />
=== Games on OpenMoko ===<br />
<br />
This is the page to centralize the suggestions for creating games on the OpenMoko device.<br />
<br />
===== Existing game concepts that could be realized =====<br />
* [http://www.kloonigames.com/blog/general/crayon-physics-deluxe-on-a-tablet-pc/ crayon physics deluxe] You play with crayons and physics. The goal of the game is to move the red ball so that it collects the stars. You can cause the red ball to move by drawing physical objects.<br />
* Simple Flash games like [http://www.albinoblacksheep.com/flash/squares2.php Squares2] are often very addicting and good for short playing sessions. Other examples: Bejewelled, Zoo Keeper, [http://novelconcepts.co.uk/FlashElementTD/ Flash Element TD ], [http://www.addictinggames.com/4secondfrenzy.html 4 second frenzy] ... <br />
* A classic shooter can work well with continous fire and touchscreen controls. An example is Kenta Cho's Java version of [http://www.asahi-net.or.jp/~cs8k-cyu/java/noiz2_e.html Noiz2] <br />
* Same is true for a 3D shooter with no/seldom used additional controls. For example a combat flying game like Hunt for the [http://www.smallrockets.com/pc/baron/ Red Baron]. You can control the speed with a slider, shoot rockets and drop bombs with special buttons but those are things you only need from time to time. Most of the time you are shooting continously and aiming which can be done in the corner of the touchscreen (so it doesn't obstruct your view). Use accelerators for steering?<br />
* Osu! Tatakae! Ouendan/Elite Beat Agents - Rhythm-based touching of circles and paths on the screen is a great concept and shouldn't be that difficult to pull off if you leave out some of the great presentation.<br />
* Pac Pix - The necessary shape-recognition would probably be difficult to manage with a small budget but the general idea is quite cool.<br />
* Kirby Canvas Curse - Again, not easy to do with a small budget.<br />
* Burning Sand/Falling Sand- already supported on a DS [http://siebn.de/]<br />
* Breakout - all you need to do is move the paddle back and forth<br />
* Pong - same as above<br />
* [http://de.wikipedia.org/wiki/Bridge_Builder Bridge Builder] - setting up Architectures, with a limited Budget and see if it can withstand. Doesn't have to be limited on Bridges.<br />
* Volfied - you cut pieces of the screen while dodging baddies and you win when you get to X%. (This probably mean something like [http://games.kde.org/kde_arcade.php KBounce], or another jezz ball clone)<br />
<br />
===== Candidates for porting/cross compiling =====<br />
* [http://www.fade-team.com/acedior.htm Acedior] - A classic graphic adventure game.<br />
* Checkers, Chess, Minesweeper (interesting touchscreen variation: [http://toyspring.com/3dm/ 3D Mines] by Toyspring, Solitaire, Mahjong, Connect Four, Tic-tac-toe, Black Jack<br />
* Command & Conquer and Red Alert - [http://sourceforge.net/projects/freera/ FreeRA]<br />
* Creating a Nethack port could be done. Tony said on the list: "I'm not entirely sure yet. I imagine I'll first do a text port with a "portal" view (in which you only see a part of the screen at a time), and a user-selected font size. Then I'd try a tiles-based port. It all depends on how readable the text is on the small screen."<br />
* [http://dosbox.sourceforge.net/ DOSBox] - would give the Opportunity to play dozens of DOS Games, like [http://www.abandonia.com/games/en/466/LandsofLore.htm Lands of Lore] -- bitbake recipe already exists, but the emulator is to slow without optimization configuration/code changes -- http://www.flickr.com/photos/pitcherfamily/1155008255/in/pool-openmoko/<br />
* [http://www.nongnu.org/enigma/ Enigma] A tilt maze-like puzzle game with 1000 levels (requires LUA).<br />
* [http://www.frozen-bubble.org/ Frozen Bubble] <br />
* [http://www.tucows.com/preview/9259 Gem Drop]<br />
* GJeweled<br />
* [http://www.aeonflame.com/ Gloop Zero] - A little like physics-based Lemmings. Get the liquid from one part of the level to another with tools like path-drawing, bombs, anti-gravity...<br />
* [http://gnome-sudoku.sourceforge.net/ Gnome Sudoku]<br />
* [http://web.mit.edu/xiphmont/Public/gPlanarity.html gPlanarity] would be a nice stylus game.<br />
* [http://en.wikipedia.org/wiki/Heroes_of_Might_and_Magic Heroes of Might and Magic] maybe can be port this [http://www.pocketheroes.net/ Pocket Heroes] for PocketPC<br />
* [http://redshift.hu/ Legacy] (and successor The Quest) - Classic first person turn based RPG. Movement and menus can completely be controlled with the touchscreen.<br />
* [http://www.ufoot.org/liquidwar Liquid War] Liquid War is a unique multiplayer wargame.<br />
* [http://www.mame.net/ MAME] - Multiple Arcade Machine Emulator. This versatile emulator turns a given platform into a powerful gaming system. It has been ported to WinCE and many UNIX flavors as well. It would be wonderul to have this on the OpenMoko.<br />
* [http://www.mess.org/ MESS] - Multiple Emulator Super System. To emulate old computers like TI 99/4A, C64, ...<br />
* Nethack, you could move just touching the direction you want to go.<br />
* Nintendo (DS) Emulator (SNES, NES)<br />
* [http://www.openttd.com Open Transport Tycoon Deluxe]. Very possible, in fact the author of the Palm & GP2X ports of the game is already interested in OpenMoko.<br />
* [http://treacle.hewwo.com/jazz/oj/ OpenJazz] Jazz Jackrabbit clone, needs original data. Would need some external controller or [http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Digital_gaming that] alternate case<br />
* Pipe Dreams<br />
* [http://www.clickgamer.com/moreinfo.htm?pid=4188&section=PALM Plazmoids!] - A space game with screen-size levels. Move your ship around by touching where it should go. Collect the plazmoids (asteroids) by catching them in your elastic tractor beam (lots of simple physics again), shoot enemies with a button or double tap.<br />
* Racing Games, like [http://xmoto.sourceforge.net/ XMoto], [http://vdrift.net/ VDrift], [http://ecksdee.sourceforge.net/ Ecksdee] or more likely [http://www.emhsoft.com/ttrooper/ Torus Trooper]<br />
* [http://www.scummvm.org/ ScummVM] - Allows you to run certain classic graphical point-and-click adventure games '''Done - see [[Scummvm]]'''<br />
* [http://www.chiark.greenend.org.uk/~sgtatham/puzzles/ Simon Tatham's Portable Puzzle Collection] is GTK based and includes, among others, both Sudoku and Planarity style games called Solo and Untangle.<br />
* That addictive Photo game where you have to spot the 5 differences in x seconds<br />
* [http://www.t-o-m-e.net TOME] - Roguelike set in Tolkein universe (2.x is current, 3.0 is in devel) that makes wide use of lua scripting, TOME and maybe some modules or other standalone versions such as [http://www.furytech.net/furyband/furyband.php Furyband] should be playable with a virtual keyboard on the go or with a real usb/bluetooth keyboard.<br />
* [http://www.xmoto.tuxfamily.org X-Moto] - A cross game like Elastomania (but better ^^) that can be runned with SDL instead of OpenGL which it normally uses.<br />
* [http://www.warfareincorporated.com/ Warfare Inc.] - A full real time strategy game is no problem with a touchscreen. In fact, it's a lot of fun!<br />
* [http://www.widelands.org/ Widelands] A Settlers 2 clone<br />
* [http://www.wesnoth.org/ Battle for Wesnoth] The turn-based games on Linux. Active development, nice community, 100% addiction factor.There is also a [http://www.wesnoth.org/wiki/WesnothOnLinuxPDAs port on linux pda] that we could use<br />
* [http://www.wormux.org/wiki/en/index.php wormux] (it works without 3d acceleration) the game is playable in 640x480 even if the icon play and quit of the menu aren't displayed entierely(but we can click on them)<br />
<br />
===== General ideas about games on OpenMoko =====<br />
* A proper opengl library (preferably SDL).<br />
* An easy network library for Bluetooth and/or GPRS connectivity.<br />
* Every turn-based game should be possible with on screen buttons. <br />
* Action games should need only one main control action most of the time such as moving somewhere on a 2D plane, aiming in 3D, drawing a path. Special items and actions are possible but should only be needed from time to time. Moving and aiming independently could be done by using the accelerometers for walking and the touchscreen for aiming.<br />
* The finger getting into the way of seeing what's going on is a problem. Most games would probably need a stylus. Games with first person aiming can be controlled with a thumb in one corner of the screen, however you'd probably need one of them thumbstraps they make for the DS so that your thumb glides over the screen with ease.<br />
* GPS can be used for location based games. An example is [http://codeninja.de/tron/ Tron]. Links to location-based/Alternate Reality games in these [http://del.icio.us/tallpaul/games+street del.icio.us pages]<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* Virtually Real Games; the OpenMoko, with it's network connectivity and loads of basic features, could be used to invent/encourage a new(ish) style of game that mixes reality and tech. A basic version would be urban tag; you get close to someone and the buzzer beeps faster, say. There's so many more creative possibilities though.<br />
<br />
What is not possible without magic tricks / an external controller*:<br />
* Classic first person shooters, action adventures, jump 'n' runs<br />
* Emulators for classic systems<br />
* Network lib for easy Bluetooth and/or GPRS connections.<br />
* Bluetooth controllers should be supported. I am especially thinking about the Nintendo Wii remote.<br />
* If version 2 of the hardware has an accelerometer a [http://www.rubylane.com/shops/molotov/item/SUN1769 tilt maze ball game] is possible.<br />
<br />
===== Accelerometer based games =====<br />
* Sliding block games, to reassemble pictures.<br />
* Rolling ball games, where you navigate a ball or balls through a maze.<br />
** Multiplayer versions of the above - who can get the ball to the hole first?<br />
* Motorbike game...do you imagine rear up your Ninja taking up your phone??<br />
* PlanetPenguinRacer-like game.<br />
* Snake<br />
* 2D Spacefight game (up/down -maybe left/right- to navigate your fighter and shot button(s))<br />
<br />
<br />
<br />
*Reallife RPG Firstpersonshooter<br />
<br />
**RL-RPG-FPS<br />
**Neo as board computers<br />
<br />
**Bluetooth DEVICE with:<br />
***3d Accerometer<br />
***3d compass<br />
*** various buttons to fire etc.<br />
<br />
**wlan servers as gamarea<br />
*** with shot direction becomes via compass<br />
*** own psoition via gps<br />
*** kind of the weapon<br />
*** over wlan transfer <br />
*** and enemydevice announces hit<br />
<br />
<br />
<br />
<br />
<nowiki>*</nowiki>Much of this could be accomplished with [http://wiki.openmoko.org/wiki/Wish_List#More.2FCustom_Input_Method_Widgets Custom Input Method Widgets] for the keyboard.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Hardware ideas]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-16T13:32:29Z<p>Sin: /* Java */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT / gcj<br />
|align="center" |?<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / PyPy JIT<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |?<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |JIT(Lua-JIT)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. PyPy already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150kb. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]<br />
[[Category:Software ideas]]</div>Sinhttp://openmoko.org/wiki/Talk:Openmoko_supported_devicesTalk:Openmoko supported devices2008-04-16T13:22:36Z<p>Sin: /* How about the iPhone ? */</p>
<hr />
<div>== Other supported hardware (Sony Ericsson) ==<br />
<br />
Hello,<br />
<br />
I have an old sony ericsson that I would be willing to try OpenMoko on. How do I get started? I am a C++ programmer so technical stuff does not bother me. What do I read, where do look?<br />
<br />
Thanks<br />
<br />
== How about the iPhone ? ==<br />
<br />
I'm not too knowledgeable about embedded devices. Is having OpenMoko run on the iPhone feasible ? What would be needed for that ?</div>Sinhttp://openmoko.org/wiki/Talk:Openmoko_supported_devicesTalk:Openmoko supported devices2008-04-14T21:24:33Z<p>Sin: </p>
<hr />
<div>== Other supported hardware (Sony Ericsson) ==<br />
<br />
Hello,<br />
<br />
I have an old sony ericsson that I would be willing to try OpenMoko on. How do I get started? I am a C++ programmer so technical stuff does not bother me. What do I read, where do look?<br />
<br />
Thanks<br />
<br />
== How about the iPhone ? ==<br />
<br />
I'm not too knowledgeable about embedded devices. Is having OpenMoko run on the iPhone feasible ? What would be needed for that ? (besides drivers)</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2008-04-05T12:53:24Z<p>Sin: /* Python */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT / gcj<br />
|align="center" |?<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |Light<br />
|align="center" |Medium<br />
|align="center" |Pyrex / PyPy JIT<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono/IronPython<br />
|align="center" |?<br />
|align="center" |Heavy<br />
|align="center" |Heavy<br />
|align="center" |JIT<br />
|align="center" |Y (IronPython)<br />
|-<br />
!align="center" |Perl<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |JIT(Lua-JIT)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. PyPy already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained. Tinypy may become usable.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150kb. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small, no-JIT [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)</div>Sinhttp://openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Removal_of_free_spaceHardware:Neo1973:Alternate Cases:Removal of free space2008-03-05T20:39:14Z<p>Sin: /* Interest */</p>
<hr />
<div>=Concept=<br />
There is unnecessary free space within the case - this variant would remove that, possibly with some re-arrangement of components, to make the phone slightly smaller.<br />
<br />
==Rendered images==<br />
<br />
<br />
==3D model==<br />
<br />
<br />
==Materials==<br />
<br />
<br />
==Processes==<br />
Stereolithography<br />
<br />
==Components==<br />
<br />
==Interest==<br />
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.<br><br />
<br />
{|<br />
!No !! Nick<br />
|-<br />
|1. || [[User:Chooseopen|Chooseopen]]<br />
|-<br />
|2. ||[[User:willjcroz|willjcroz]]<br />
|-<br />
|3. ||[[User:Dev|Dev]]<br />
|-<br />
|4. ||[[User:Deedend|Deedend]]<br />
|-<br />
|5. ||[[User:Aztlek|Aztlek]]<br />
|-<br />
|6. ||[[User:Oatty|Oatty]]<br />
|-<br />
|7. ||[[User:larstobi|larstobi]]<br />
|-<br />
|8. ||[[User:pokazene_maslo|pokazene_maslo]]<br />
|-<br />
|9. ||[[User:sin|sin]]<br />
|}<br />
<br />
<br />
<br />
[[Category:Hardware ]]<br />
[[Category:Supported Phone| ]]<br />
[[Category:Neo1973 Hardware]]<br />
[[Category:Neo1973_alternate_cases]]</div>Sinhttp://openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Scroll-wheel_(side-mounted)Hardware:Neo1973:Alternate Cases:Scroll-wheel (side-mounted)2008-03-05T20:38:45Z<p>Sin: /* Interest */</p>
<hr />
<div>Alternate case for the Neo1973, with side-mounted scroll-wheel<br />
<br />
==Concept==<br />
<br />
<br />
==Rendered images==<br />
<br />
<br />
==3D model==<br />
<br />
<br />
==Materials==<br />
<br />
<br />
==Processes==<br />
Stereolithography<br />
<br />
==Components==<br />
Scroll-wheel (from old mouse?)<br />
<br/><br />
There are some scroll wheel-type things in a lot of modern digital cameras that would suit the purpose. I think the scroll wheel from a mouse would be too "soft" for a portable device. [[User:Mmanjos|Mmanjos]] 20:23, 4 November 2007 (CET)<br />
==Interest==<br />
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.<br><br />
<br />
{|<br />
!No !! Nick !!<br />
|-<br />
|1. ||[[User:ruskie|ruskie]]<br />
|-<br />
|2. ||[[User:Filippo|Filippo]]<br />
|-<br />
|3. ||[[User:Beady|beady]]<br />
|-<br />
|4. ||[[User:Mmanjos|mmanjos]]<br />
|-<br />
|5. ||[[User:pokazene_maslo|pokazene_maslo]]<br />
|-<br />
|5. ||[[User:jackcday|jackcday]]<br />
|-<br />
|6. ||[[User:oz1lln|oz1lln]]<br />
|-<br />
|7. ||[[User:wurstwolf|wurstwolf]]<br />
|-<br />
|8. ||[[User:sin|sin]]<br />
|-<br />
|}<br />
<br />
[[Category:Hardware ]]<br />
[[Category:Supported Phone| ]]<br />
[[Category:Neo1973 Hardware]]<br />
[[Category:Neo1973_alternate_cases]]</div>Sinhttp://openmoko.org/wiki/Wish_ListWish List2008-03-01T21:59:56Z<p>Sin: /* Emergency call */</p>
<hr />
<div>This article is a place to collect various thoughts about the future of the [[OpenMoko]] software platform. Most wish list ideas have been linked from this page, but you may also wish to check all pages [http://wiki.openmoko.org/wiki/Category:Ideas that have a category of 'Ideas'].<br />
<br />
== Development ==<br />
=== Painless SDK installation & Setup ===<br />
Our goal should be a completely painless setup for somebody wanting to develop using [[OpenMoko]]<br />
<br />
* one command for installation (apt-get install openmoko)<br />
* one command to start Xnest (openmoko-xephyr?)<br />
* one command to start an i386 shell (openmoko-386-shell)<br />
* one command to start an armel shell (openmoko-armel-shell)<br />
<br />
No extra configuration required.<br />
<br />
==== IDE Plugins ====<br />
People like to see plugins for<br />
* [http://anjuta.sourceforge.net Anjuta]<br />
* [http://www.eclipse.org Eclipse] (some things are possible - see [[Development with Eclipse]].<br />
* [http://www.netbeans.org NetBeans]<br />
* Game engine - Game Creation plugins<br />
evaluate eclipse project [http://www.eclipse.org/dsdp/index.php Device Software Development Platform Project from eclipse] and subproject [http://www.eclipse.org/proposals/tml/ Tool for Mobile Linux]<br />
* [http://www.kdevelop.org KDevelop]<br />
* [http://developer.apple.com/tools/xcode/ XCode]<br />
* [http://msdn.microsoft.com/vstudio/ Microsoft Visual Studio 2005]<br />
<br />
==== UI Designer ====<br />
Glade code generation is deprecated, so we don't want to use it. The Gtk+ powers told me that the plan is to have gtk 2.12 (out early 2007) with support for GtkBuilder, a libglade derivative which breaks a bit the XML definition in order to support all the new widgets and properties; as soon as it's in the other ui builders will add support for this format. See also [http://bugzilla.gnome.org/show_bug.cgi?id=172535 the relevant bug entry]<br />
* Possibly a Landscape (rotated) view for the screen (480x640 *or* 640x480)?<br />
<br />
<br />
==== Built-in Scripting Language ====<br />
{{Main|Wishlist:BuiltInScriptingLanguage}}<br />
There was a [http://lists.openmoko.org/pipermail/community/2007-January/001909.html fruitful discussion about a built-in scripting language on the mailing list in January.] Many people feel that it is very important for OpenMoko to choose a scripting language to ship as default in the standard OpenMoko firmware.<br />
==== Easy build of the existing autotools - based packages ====<br />
In the ideal case OpenMoko should exist on the top of the usual ./configure - make workflow which is typical for the majority of the C/C++ based open source projects. It should not require to rewrite or even replace the existing Makefile.am files of the project being ported, and it should allow to pass the needed parameters to the project configure script. Maybe OpenMoko project could be a bigger project having one or more (if some are libraries) autotools - based packages in its separate folders and include the proper documentation how to "wire" the standard autotools based package to the OpenMoko infrastructure.<br />
<br />
===Foreign Widget Set Bindings ===<br />
==== Qt Integration ====<br />
The Trolltech folks have a great widget library. I'd like to interface OpenMoko with Qt4, so that we can write Qt4 applications for the phone which don't look alienated.<br />
<br />
==== Maemo Integration ====<br />
The Maemo folks have created a successful standard for Webpad applications. I'd like to have a set of MaemoMoko and MokoMaemo wrapper classes that allow me add support for running OpenMoko applications on Maemo and vice versa. Perhaps we can get help from the Nokia OSS folks for that.<br />
<br />
==== wxWidgets Integration ====<br />
wxWidgets is a cross-platform application framework that's very popular (I'd say, #3 after Qt and Gtk+). On Linux, wxWidgets uses Gtk+ to implement the widgets. It shouldn't be hard to add support for the additional OpenMoko classes to wxWidgets hence supporting the native OpenMoko look and feel for wxWidgets applications.<br />
<br />
wxWidgets team wants OpenMoko classes too and we (wxWidgets) plan to include this project as one of our ideas for [http://google-code-updates.blogspot.com/2007/02/speaking-of-summer.html GSoC 2007]<br />
<br />
==== SDL Integration ====<br />
SDL is ''the'' game developer library. There are tons of SDL games out there. We should add OpenMoko support into SDL.<br />
<br />
==== Cocoa / GNUstep ====<br />
Allows to use MacOS X as a development platform.<br />
<br />
=== Software: Language bindings ===<br />
==== Python bindings ====<br />
Python bindings seem to be a commonly requested feature. <br />
<br />
[[User:Mickey]] says, "They are kind of usable on the [http://www.maemo.org Nokia 770], but it's at the lower end of being bearable. We should keep this in mind -- Gtk+ already comes with Python Bindings, so we "just" would need to wrap libmoko*. I would prefer to leave this to the community do though, since it doesn't make sense to start wrapping the API until we have a stable API -- and I can imagine it will take us a couple of months after going open until we can start with stabilizing the libmoko API."<br />
<br />
==== C++ bindings ====<br />
There is a whole skilled C++ community coming from the [http://qtopia.net Qtopia] and [http://opie.handhelds.org Opie] projects. If we would consider basing OpenMoko C++ Bindings on [http://www.gtkmm.org/ Gtkmm], then we could drag these guys in.<br />
<br />
==== Ruby bindings ====<br />
Ruby and ruby-(gtk|glade) already ported to OpenMoko according to [http://lists.openmoko.org/pipermail/openmoko-apps/2007-May/000040.html this ] and [http://groups.google.de/group/comp.lang.ruby/browse_thread/thread/6bee9970cf055504 this] mesages. It just have to be included to distribution (only 4.9 MB!)<br />
<br />
==== Java bindings ====<br />
People who concentrate on Java programming would like to have the OpenMoko port of some java virtual machine. GNU Classpath team a lot of great work in the past creating easily portable implementation. Sun's recently open sourced code could also be ported. <br />
==== Other bindings ====<br />
* Perl<br />
* C#<br />
* I think you could skip a bunch of these by binding to Dbus; most languages already have Dbus bindings<br />
<br />
== Community Support ==<br />
<br />
=== [http://projects.openmoko.org projects.openmoko.org] ===<br />
Infrastructure for developers with<br />
* One bugzilla for all projects (makes moving bugs forth and backwards between projects ''very'' easy)<br />
* One mailing list for project<br />
<br />
== Platform ==<br />
=== Community Images ===<br />
In the future there could be complete, unofficial "product images" that are created by the community, for example maybe one that incorporates only free software (in the GNU or OSI sense). Or images build with a particular niche market in mind -- a student for example.<br />
<br />
=== Wishlist voting ===<br />
There could be a kind of voting system like they have at one of those big computer manufacturers homepage. Then the community could vote for the ideas that are most important to them. This would especially make sense for the hardware wishlist, because the hardware is still the part which can't be done by the community that easily.<br />
<br />
Here: [http://www.fevote.com/openmoko OpenMoko suggestion board]<br />
<br />
== Software: Additional features ==<br />
<br />
===PDA Mode===<br />
<br />
There are times when you wish to power up the device and not power up the gsm/cellphone portion of the phone. For example in meetings you might wish to access the PDA side with wifi as is the case for example on an aircraft. On booting some method of booting to pda mode would be good - several other phones offer this feature.<br />
<br />
===Driving Mode===<br />
<br />
It may be forbidden in many countries, but many people use their cell phones while driving. With the touchscreen phones<br />
this is very dangerous: You have to stare at the tiny numbers on the screen and try to hit them with your thumb or try to decipher tiny script of contacts, while steering with the other hand. There should be a configurable driving mode where the interface has a reduced functionality (e.g. only contacts and dialing) with HUGE interface buttons that are easy to use with limited attention.<br />
<br />
===Calling===<br />
<br />
==== Mask ID based on dialed numbers ====<br />
It would be nice if my number only showed up when I call people in my address book and was otherwise masked. The phone I have now either always shows my number or never or can be set on a per call basis. Having it done automatically based on the number dialed would be good.<br />
<br />
==== Use calling cards and similar routing techniques for lower-cost calling ====<br />
Many people use calling cards, low-cost numbers and similar ways of reducing the costs of their calls. It would be nice to have a single panel that would allow you to configure the rules of dialing a number taking in to account such systems.<br />
<br />
==== Outgoing black/white lists ====<br />
The ability to allow or deny outoging calls to certain numbers can be useful in a number of situations (e.g. the holder of the 'phone is a child, untrusted, etc.). This could be related to entries in the contact list, for example a user is only allowed to call people who are in their contact list.<br />
<br />
Also lists for incoming calls? Some friends always come through, unknown numbers get rejected automatically.<br />
<br />
==== Time-based blocking/unblocking of calls ====<br />
Allowing or disallowing outgoing calls at certain times of the day could be useful, e.g. blocking a business phone from making calls outside of business hours.<br />
<br />
====Speaker-phone====<br />
* A speaker-phone is more than simply connecting the speakers to GSM audio, it's also echo cancellation, and eliminating the feedback that will otherwise happen between the speakers and the mic. This software has not been written.<br />
<br />
====Advanced Airtime Tracking====<br />
Many phone users have complicated plans, things like unlimited incoming, 100 anytime minutes, 1000 evening minutes, etc. It would be nice if a user could input the various monthly airtime chunks their plan gives them, and then the phone could track how much is left in each chunk, i.e. How much anytime minutes are left this month? Optionally, the software could warn when someone is close to the monthly limit, to help avoid bigger bills.<br />
On (at least some) prepaid [http://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data USSD] can be used to check current balance.<br />
<br />
==== Anti-stutter software ====<br />
Delayed Auditory Feedback (DAF) has shown to reduce stuttering in individuals by 70%. By using the microphone, it should be pretty simple to implement this on the OpenMoko. The DAF functionality should also be present during phone calls. See http://en.wikipedia.org/wiki/Delayed_auditory_feedback for more information.<br />
<br />
====Minimize In-Call mode (check address book while in call)====<br />
On my locked phones I always find it annoying that one can not use other features while a call is in progress. In particular, I'd like to access the address book so that we can (1) give a caller someone else's phone number (or other info) and (2) lookup a phone number when using a calling card or some other proxy.<br />
<br />
Similar request when using the browser (lookup passwords, todo list, etc).<br />
<br />
====Hold Music (Ringback Tone)====<br />
On some cellphone networks you can pay to change the normal [http://en.wikipedia.org/wiki/Ringback_tone Ringback Tone] that the caller hears when ringing, to a customised sound.<br />
This can partially be implemented on the phone.<br />
Issues are:<br />
*In countries where callers pay, this will make you unpopular.<br />
*In countries where the called party pays, it will use your minutes, or cost you money.<br />
**A list of people to activate this function for would alleviate this.<br />
*[[GPRS]] internet connection will stall while the hold music is being played.<br />
*Extra battery used when playing music.<br />
<br />
Also see [[Answering Machine]].<br />
<br />
====Play sound clips over the air====<br />
Dialer could have a tab with big buttons which, when push, send sound clips over GSM to the person on the other end of the call. This feature is included in GizmoProject and is called sound blasts: http://support.gizmoproject.com/index.php?_a=knowledgebase&_j=questiondetails&_i=104<br />
The buttons can have default sounds, but also have the ability to be customized.<br />
<br />
It would also be useful for notifying people why you can't talk (for example, having an "I can't talk tight now - I'm in the library - this is a pre-recorded message" would be good. Also perhaps you could loop a pre-recorded sound in the background so you can lie about where you are, and have the ability to simulate a really bad connection.<br />
<br />
==== DTMF Landline Dialing ====<br />
The ability to hold the Neo near the microphone of a landline handset and have the Neo dial the landline by sounding DTMF tones. The DTMF tones could be generated in software or be pre-recorded files.<br />
<br />
Graphically this could be done by adding a 'DTFM dial' button to a context menu. The user would select a contact then presses the 'DTMF dial' button to start the process. A small delay could also be added to allow time to put the Neo near the landline handset.<br />
<br />
For the Neo to know which area code to use (or not use) the current or last GPS coordinates could be utilised.<br />
<br />
==== Conversation Recorder ====<br />
<br />
An option to record phone conversations. Would be helpful to have the device always recording for every call, with the sound data encoded to low quality Ogg Vorbis or SPEEX and stored in RAM. At the end of the conversation the user would have the option to save to flash or discard the conversation. This idea could also be applied to voicemail so you could save voicemails locally.<br />
<br />
====Unlicensed Mobile Access (UMA)====<br />
T-Mobile recently rolled out a UMA service that hands off calls between the GSM network and WiFi access points. Only a few phones support it right now, this could be a rather unique feature if OpenMoko can implement it.<br />
<br />
This can be combined with a GPS map to show where local free hubs are.<br />
<br />
==== Ignore-Call Button ====<br />
{{Main|Wishlist:Ignore Call Button}}<br />
<br />
Shut up a ringing phone, without accepting or rejecting the call.<br />
<br />
Another alternative might be to use microphone to recognize when the user gives an audible "Shhh!" command. This could prove difficult to determine with the simultaneous ringing, and possible in-pocket shuffling noises.<br />
<br />
A really usable feature is to "reject with SMS/text message" - letting the user reply the caller choosing a previously setup template or typical response: "I'm in a meeting - I'll call you later" or "Can't take your call now, please call back in 10 minutes". This feature typically is a much better way to get your co-workers (ie boss) to back off, than to silently ignore the call.<br />
<br />
==== Voice Mailbox ====<br />
{{Main|Voice Mailbox}}<br />
On-Phone voice mailbox that records calls on the phone and retrieves voice messages from your mobile service provider's voice mailbox and saves them locally.<br />
Can act profile-dependent.<br />
<br />
==== Hold Button ====<br />
<br />
Similar to mute, but plays a sound file for the user on the other end while they wait. The sound file could be chosen in some setup beforehand.<br />
<br />
==== Unanswered Call, Fast Call ====<br />
<br />
In Greece because of the various bill programs some people call a mobile phone, rings one time and then hangup.<br />
Then the user of the mobile phone calls the other user(using the CallerID recognition).<br />
<br />
===Audio===<br />
<br />
==== Ambient Noise Detection ====<br />
{{Main|Wishlist:Software:Ambient Noise Detection}}<br />
<br />
Using the microphone to detect ambient noise the ringtone volume could be adjusted automatically.<br />
<br />
Detection of ambient noise could also be used to subtract the noise from the audio signal. However this approach is best performed using two Microphones, one for the voice and the other to detect the noise.<br />
<br />
==== Active noise control ====<br />
<br />
Using the microphone to do [http://en.wikipedia.org/wiki/Anti-noise active noise control] on media player playback or telephone calls. This should be an independent module/library which can be used by any application which might require this feature. also provide a way to easily alter the parameters of the active noise control.<br />
<br />
==== Hear Impaired Mode ====<br />
<br />
Hearing impaired people need louder speaker(but with less volume than hands free) and equalized sound, based on their hearing problems(example 20dB hearing loss from 2KHz to 4KHz).<br />
Older people 50+ years old need slower speech rate(time stretch, cut the big speech gups) and cleaner voice.<br />
<br />
Please note also the Hearing Aid Compatibility regulations in the US. I have tried to summarize and clarify them [http://quux.wiki.zoho.com/WhereAreHACphones.html here]. I haven't yet discovered whether the FIC device is M or T rated. For many hearing impaired users, a tcoil coupling to their hearing aid (t3/T4 rating) would be preferable to manipulating sound output in other ways.<br />
<br />
==== Mute Button ====<br />
<br />
Button to temporarily disable microphone while talking for applications such as telephone, audio recording and (when available) movie recording.<br />
<br />
<br />
===Web Browser===<br />
<br />
==== Full-page Zoom Support ====<br />
Full page zoom is a very good feature. If possible, people would want to browse the internet with normal layout than a distorted one. It's best if I could double-tap a text or image block and zoom to a fit size.<br />
<br />
The [[BigPageWidget]] proposal suggests 'Full Page Zoom' should be implemented as a widget available to all applications.<br />
<br />
* If the processor and memory could afford, it is good to just use [http://www.mozilla.org/projects/firefox/3.0a8/releasenotes/ Firefox 3] in OpenMoko. It has implemented latest gecko's full-page-zoom ability. With certain modification, we could do the same zoom like iPhone's Safari.<br />
* Firefox 3 may be a big eater. A cut-down version of it may be good enough.<br />
* If this is not practical, Minimo with full-page-zoom ability is good.<br />
<br />
==== Plugins Support ====<br />
* While an extensive browser plugin system would be costly to the efficacy of the platform three particular browser plugins as poplularized by Mozilla firefox should be adapted to the web-browser, namely: [http://noscript.net/ noscript], [http://adblockplus.org/en/ adblock plus], [http://www.greasespot.net/ greasemonkey] and [http://www.foxmarks.com/ foxmarks].<br />
* Careful use of these can dramatically reduce bandwidth, page space, and rendering costs even if it comes at the risk of some hard drive space in the form of block lists.<br />
* Greasemonkey, in particular, gives users control to set up scripts for commonly traveled pages to further reduce unnecessary or unwanted content.<br />
<br />
==== Widget support ====<br />
Built-in browser with the ability to install widget shortcuts (aka links) in the main phone menu, also some apis for interfacing with the other functionality of the phone like adding contacts, reading contacts, reading gps-psoition etc.. (maybe there is some defacto widget standard that could be used)<br />
<br />
There is a [http://www.w3.org/TR/widgets/ W3C spec] being developed, which may not be exactly what the original proposal had in mind, but it is about writing simple applications with HTML, SVG and JavaScript. It is mainly Opera's work, and while most [http://widgets.opera.com/ developed widgets are not very useful], there are some that are, and it creates a very nice development platform, especially for mobile devices. So, I think it makes an awful lot of sense for OpenMoko to support this spec.<br />
<br />
===Media===<br />
====Music/Video Software====<br />
A real good programming area for competition with the iPhone, a singular video/music player would be great for multimedia. A seamless integration system, a la iTunes and iPod, would be extremely popular. <br />
<br />
Using the Wi-Fi connectivity, a separate music program that supports wireless music sharing/ streaming (similar to what can be done when two computer running iTunes that are both on the same network) and that also supports internet radio.<br />
<br />
It would also be nice to have some kind of "announce your musical taste" mode. This could be implemented using last.fm profiles, such that when e.g. in a crowded place a user nearby has a similar musical taste, both users get notified so they can share their music files with each other (perhaps using a photo for id). Great for discovering new music - and making friends!<br />
<br />
- Possible copyright issues sharing music files?<br />
<br />
Sure, but that's the user's concern, not the developer's. There's no way for us to know which audio files the user is permitted/not permitted to share.<br />
<br />
==== Reading Support ====<br />
It would be really great to be able to read :<br />
<br />
*PDF<br />
*Open Document files<br />
*Text / RTF files<br />
*fb2 files (fbreader)<br />
*MS Office files<br />
*Aportis Doc (pdb)<br />
*DjVu<br />
*...<br />
<br />
In both landscape and portrait<br />
<br />
==== Wikipedia Mirror ====<br />
{{Main|Wishlist:Wikipedia_Mirror}}<br />
<br />
==== Blog ScribblePad ====<br />
<br />
Draw an image (and maybe add some text), then post to your blog.<br />
<br />
==== E-Book Reader ====<br />
* Neos brilliant ultra-sharp screen makes for a very good e-book reading device. All it takes is a good e-book reader with touch-screen page turning / scrolling (see the [[BigPageWidget]] proposal). FBReader could probably be adjusted easily by an experienced GTK hacker. Note that e-book reading is different to pure text/pdf displaying as it requires at least auto-bookmarking of the last read page, proper text and image scaling and text formatting.<br />
<br />
==== Personal Wiki ====<br />
{{Main|Wishlist:PersonalWiki}}<br />
<br />
Display the notes database as a Wiki. Inspiration: [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki].<br />
<br />
[http://www.didiwiki.org/ Didiwiki]<br />
<br />
<br />
==== Dictionary, thesaurus, translator and flashcards ====<br />
Native lookup dictionary and thesaurus and foreign translation dictionaries, also with support for Asian languages. Optional custom configurable (though preconfigured) interface with on-line versions of dictionaries, thesaurus and translation services.<br />
<br />
'''Dictionary'''<br />
Something like [http://www-user.tu-chemnitz.de/~fri/ding/ ding]:<br />
<br />
advantages:<br />
* small<br />
* very efficient + useful<br />
* only limited to really needed functions<br />
<br />
Support for vocabulary training with flashcard system (also usable for other content than foreign language words!)<br />
<br />
==== Flickr uploader ====<br />
A simply, drag & drop uploader, tagger and organizer to upload images on phone to [http://flickr.com Flickr], with support for various languages. A good base could be the cross-platform uploader [http://juploadr.org/ jUploadr], written in Java and working on Windows, Mac and Linux. But, most of all, the best '''GPL''' program which actually do this work is '''[http://mobilepushr.jottit.com/ Mobile Pushr]''', written in C and Cocoa for iPhone, must be probably ported in python to work on OpenMoko.<br />
<br />
===PIM (Personal Information Managment)===<br />
====Context Sensitivity====<br />
Any email or sms message or application that contains a telephone number should be click to dial, eg [http://123567890 1234567890]. Addresses link to mapping software too?<br />
<br />
==== Notes ====<br />
<br />
Something for taking notes would be a nice feature:<br />
[http://www.gnome.org/projects/tomboy/ Tomboy] has some nice syncing features and is gtk based.<br />
<br />
Some Screenshots are [http://www.gnome.org/projects/tomboy/images/ here].<br />
<br />
==== Calendar ====<br />
<br />
A nice calendar application should be implemented in OpenMoko. This tool should have a syncing feature with your desktop computer.<br />
The tool should have a reminder feature and other features like other mobile phones already have.<br />
<br />
I think synchronization sould be handled by computer with opensync+syncml based tool, not by calendar itself. --[[User:Antono|Antono]] 12:25, 7 January 2008 (CET)<br />
<br />
* If this cellphone is thought also as a PDA, of course it needs a calendar. But I would like to see something better than just a calendar, I was thinking that there could be some application using "fisheye" view. Just like [http://www.cs.umd.edu/hcil/datelens/], though that example seem a bit chaotic. --[[User:Yprum|Yprum]] 22:27, 21 February 2008 (CEST)<br />
<br />
==== Address Book ====<br />
<br />
* Option to search not just the stored list of addresses, but one or more of the online phonebooks. Probably should be modular to make adding/changing phonebook sites easy. Also allows for future integration with LDAP<br />
servers or whatever.<br />
* Also the possibility to search all info on the contact, like number, email, postal address and so on, in case someone asks you to identify a known number.<br />
* Web-based map-lookup. 'How do I get there from here? (here = current GPS location)' This could also be done<br />
by integrating with whatever on-phone GPS mapping software the Neo ends up using.<br />
* Random text input 'notes' about a contact<br />
* Overall, this should more resemble a Palm-pilot's address-book than your average cellphone's<br />
* Automated Daily backup of phone book to a website archive (similar to Verizon's Back-up Assistant<br />
*Ability to integrate address book with web-based email (such as gmail) account, for those who use web based email as their primary account<br />
* '''[[Wishlist:Tagging|Tagging]]''' Place tags for contacts. Enhance message application to send messages to all contacts tagged with ... . Enhance other application(GPS, ...) with tags.<br />
* Support for:<br />
**[http://en.wikipedia.org/wiki/SyncML SyncML]<br />
**[http://en.wikipedia.org/wiki/Ldap LDAP] address book<br />
**[http://en.wikipedia.org/wiki/LDIF LDIF], [http://en.wikipedia.org/wiki/Xml XML] and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export and import (when possible).<br />
*Store Bluetooth IDs of friends and notify (configurable only on this device or on both devices) when a one of these Bluetooth ID has been detected (this is more a separate application but has requirements on the address book. Should also be able to create an address book entry from a Bluetooth ID. Could be used as a nice tool to detect people who you're avoiding.<br />
<br />
==== Database/List Display/Edit ====<br />
{{Main|Wishlist:PilotDB}}<br />
<br />
One of the most useful apps on my Palm Pilot for me is [http://pilot-db.sourceforge.net/ pilot-db]. It's GPL'd.<br />
<br />
==== Joe's Goals ====<br />
<br />
It'd be nice to have something like [http://www.joesgoals.com Joe's Goals] always available, like my phone is, even when I'm disconnected from the net.<br />
<br />
==== Workout ====<br />
<br />
Use your phone instead of your notebook while at the gym, and get pretty graphs to admire after you're done.<br />
<br />
==== Shopping List ====<br />
keep Track of Prices in different shops and the products you have/don't have. Ideally using a barcode reader and gps.<br />
If it was made aware of recipes it could even tell you what to buy without entering a shoppinglist manually.<br />
<br />
==== [[Fuel Log]] ====<br />
File data about fueling your car (date/time, liters, price, mileage, ...) and display some information (costs per month, average consumption, ...).<br />
Advanced features could include:<br />
* Automatically storing the GPS coordinates of the place where the car has been fueled (can be deactivated)<br />
* Sending the data to a central server which collects the information ( spritmonitor.de, anything else ?)<br />
* Let the OpenMoko receive fuel logs per SMS (e.g. if my wife with a non-openmoko mobile fuels the car and wants to file the data using her mobile phone)<br />
* Let the OpenMoko device act as SMS gateway for non-openmoko devices to easily send the data to the central server<br />
* Also support for air log for divers. Not that you will take this device under water but for the crew at the surface.<br />
<br />
==== Keep in touch reminder ====<br />
A background application which keeps track of your friends and reminds you when you have not talked, SMS, IM or mailed a person for more than # days.<br />
<br />
<br />
==== Menstruation period timer ====<br />
Fill in statistics and compute probabilities for menstruation, fertility, mood.<br />
See http://www.getjar.com/products/48/MyGirls<br />
<br />
==== Tagging ====<br />
{{Main|Wishlist:Tagging}}<br />
Tags can be used by various applications. Requirement is interoperability for further enhancement.<br />
Tags should be applied to calendar events, mail/sms, calls, places(GPS) and files.<br />
http://tracker-project.org has all needed tagging-and-searching functionality and ready to be used on low-resourced devices.<br />
<br />
==== Context based TO-DO list ====<br />
{{Main|Wishlist:context based to-do list}}<br />
<br />
If I arrive home and there are "@home" things in the to-do list, the Context based to-do list reminds me of that.<br />
<br />
==== Faster access to task list ====<br />
Click on the date to add a new task.<br />
<br />
==== Exchange Integration ====<br />
<br />
Once there is good TCP/IP connectivity on this phone, integration with corporate email/calendar/to do/contacts/etc servers would be a big advantage... near-real-time automatic email downloads and automatic bi-directional syncing are productivity boosters that you have to experience to appreciate. It turns your phone from a 'nice gadget to fiddle with' to a natural-feeling extension of your day-to-day life.<br />
<br />
* Is the time right to name names ? Add as your liking...<br />
** Plugin/integration to & from Kontact<br />
** Same with Evolution - Thunderbird - Seamonkey<br />
** ?? Google Calendars ?? (this one is tough)<br />
** Ms Exchange<br />
<br />
==== An electronic wallet ====<br />
<br />
A database which stores securely PIN codes, login data, bank and email accounts, membership informations, and other valuable and private data. Entries can be ordered in a folder-like manner. Access to the database is given by a master password. The database as well as the master password are stored with strong encryption. For security reasons, the program asks again for entry of the master password after a certain period of inactivity. The database can be synchronized with a PC application (ideally written in Java for cross platform compatibility).<br />
<br />
Examples: KWallet [http://docs.kde.org/stable/en/kdeutils/kwallet/index.html], Viskeeper [http://www.sfr-software.de/cms/EN/pocketpc/viskeeperpro/index.html], KeePass [http://keepass.info/]<br />
<br />
==== Easy business card sharing for a small group (in the same room) over bluetooth or WIFI ====<br />
<br />
Six Neo1973 owners are having a chat in a cafe. They agree to split but meet later. They want to exchange their numbers with each other before they go.... The normal way to do this is for a rather longwinded repeating of numbers to each other, or half the people manually inputting numbers before phoning/texting the other half to complete the process. All in all its a fair number of button presses to get it sorted.<br />
<br />
Instead the NEO could have a small app where the phones link up in a small peer to peer Bluetooth network and share automatically with one person initiating a request and the other detected NEOS agreeing/acknowledging the share. The initiating NEO would then sync the mini-group automatically by interrogating each phone and then sending the table of results. The NEOs would have to be clever about checking for duplicates in the address book and offering a choice to the user if there are any conflicts.<br />
<br />
PROS: <br />
*genuine saving in time for social and business situations<br />
<br />
CONS: <br />
*I am sure there are some security hassles to be pondered....<br />
*not going to be used every day... definitely not an immediate priority.....<br />
*only at geek conferences will all have a neo....<br />
<br />
==== SMS Counter ====<br />
<br />
An application which shows on the today-screen how many SMS i've already sent in this actual month. Some have for example 150 free SMS to write each month. With that program you can see all the time how many SMS are left until the end of the period. As an alternative it could be a counter which counts backwards from a predefined number over a defined period.<br />
<br />
===Profiles===<br />
{{Main|Wishlist:Profiles}}<br />
<br />
The Wishlist:Profiles page documents many possible profiles - ways to configure the phone. Including ways to respond to calls, wifi and GPS events.<br />
And how to automatically switch between them.<br />
<br />
===Text Messaging===<br />
For '''Text Input related ideas''' see [[Wishlist:Text_Input]]. Bear in mind that T9 can not be included<br />
For current development status of the messaging-app see: [[Messages]].<br />
<br />
There are many useful options that now can be used to full capacity:<br />
* '''Acknowledge/status SMS'''<br />
In GSM networks so-called acknowledge-SMS are sent back to the SMS's dispatcher in order to indicate that the primal sms was received (as message delivery is only best effort and is not guaranteed). So in the SMS dialog there could be equal sized buttons with captions as 'send only', 'send and receive delivery status message' and 'send and notify (e.g. ring) when delivery succeeded'.<br />
** '''Special handling of status-SMS''' <br />
Related to the previous entry, these acknowledgment-sms' should be handled in a different way than normal SMS'. Most Motorola do this, while Samsung SGH series don't & clog the inbox, warn of a "new" message upon Status notification: Delivery Status Messages should be stored in a separate menu so they don't bloat the received-folder and you are able to quickly review the status of the messages you had sent.<br />
* '''SMS at time/date''' You could be able to set up messages that are sent at a certain time/date<br />
* '''Binary SMS''' Send binary SMS. Could be used to feign WAP pushes. [http://en.wikipedia.org/wiki/Multimedia_Messaging_Service] See: <br />
** Resource for SMS encoding: [http://web.archive.org/web/20021016104345/www.dreamfabric.com/sms/] [http://web.archive.org/web/20060411222332/] [http://home.student.utwente.nl/s.p.ekkebus/portfolio/resource/sms_pdu.html] [http://www.ihub.com/Binary%20Messages.htm]<br />
** [http://www.gammu.org www.gammu.org] - you can use Gammu/Gammu+ source for this software and/or understanding various SMS formats including EMS, WAP, Nokia Smart Messaging, Siemens & Alcatel encoding ([[User:Marcin|I could]] eventually help)<br />
** Resource for SMS encoding (German): http://de.wikipedia.org/wiki/SMS-Kodierung<br />
** The infamous pocketpc-attack: http://www.mulliner.org/pocketpc/<br />
* '''Profile-override-SMS''' SMS that start with a certain code word override the silent profile and have the phone ring. So someone could alert you in case of some emergency.<br />
* '''Codeword-SMS''' An expansion of the above: check for code words and allow selectable tones for matches. E.g. "Server Down!" has a loud klaxon, "Disk Warning" has a quiet chirp.<br />
* '''(De-)Abreviation-script''' Implement a script that de-abbreviates: "hi m8 u k?-sry i 4gt 2 cal u lst nyt-y dnt we go c film 2moz" becomes "Hi mate. Are you okay? I am sorry that I forgot to call you last night. Why don't we go and see a film tomorrow?" (taken from: [http://en.wikipedia.org/wiki/SMS_language])<br />
** Implement a script that abbreviates :-)<br />
* '''Anti-Spam''' ...feature for SMS. May be it's possible to port some Bayesian based application like bogofilter.<br />
* '''Rule based authorizations''' ...for received messages. For example, delete messages from one source between 9h00 and 18h00 (workday) allow them otherwise (to get alerting messages).<br />
* '''Enable chat-like SMS-viewing''' SMS-Email-like: retain SMS app, but store 'conversations' rather than pile-up. Group/archive conversations by Caller Group (Work / Friends / Home / any user-defined Caller Group). Show appropriate icon from either Caller Group or Caller ID at the source of conversations panel<br />
* '''Searching''' allow full-text search or string search.<br />
* '''Massive SMS Deletion''' based on Conversation, author, before-date-xx.xx.xxxx, caller group, [[Wishlist:Tagging|tags]]...<br />
* '''Call Back''' Prompt 'Call Back' alongside other first-line options (Delete, Save number,.. this kind of options) that appear when reading an SMS.<br />
* '''Non-destructive deletion''', deleted messages goes to trash, and are recoverable.<br />
* '''SMS-EMail-Gateway'''<br />
SMS comes in, gets forward to your inbox, like any other piece of mail. Appropriate alerts and etc occur - again, just like for email. A simple SMTPD running on 127.0.0.1 that is hooked to an email-to-SMS translator that will send email addressed to 'SMS@localhost' (or whatever special address) out via SMS<br />
* '''SMS-filter chain''', for stuff like Codeword-SMS above, Theft-mode activation, auto-response (reply with gsm-position for "Where are you?"), auto-substitution (like replace $POS with gsm-position in outgoing SMS).<br />
* '''SCROOGE-SMS''' This is an intelligent SMS router. When you write your SMS you get the option of how to send it<br />
** By standard carrier SMS - cost 10cents<br />
** By OpenMoko SCROOGE SERVER - this will send your SMS to the OpenMoko Community SCROOGE SERVER next time you have WiFi - the phone will remind you to turn on WiFi when it knows you are in places where you have WiFi access. The person you are sending to picks up when they come into WiFi Range. This comes with an intelligent reminder that tells you that message has still not been delivered in 24 hours and would you now like to send it by a paymethod. This is better than IM because both parties do not have to have WiFi at the same time. - cost FREE<br />
** By email/Wifi - cost FREE<br />
** By email/GPRS - cost ?<br />
** Too many options!!!<br />
** Alternatively SCROOGE SERVER could auto launch IM client if it detects both parties have WiFi at the same time (Status kept on SCROOGE SERVER?) to allow instant reply..... Person who receives has the option to reply in SMS or in IM or in VOIP phone.<br />
<br />
=== Text input ===<br />
{{Main|Wishlist:Text Input}}<br />
There are many good suggestions for text input on the specific text input ideas page.<br />
<br />
=== More/Custom Input Method Widgets ===<br />
{{Main|Wishlist:More/Custom_Input_Method_Widgets}}<br />
Additional and customizable Input Method Widgets (similar to virtual keyboard). <br />
This could add soft-key functionality to games or other applications such as:<br />
*D-Pads<br />
*buttons<br />
*virtual trackballs<br />
*...<br />
Personalized layouts could be associated with each application.<br />
<br />
=== Games ===<br />
{{Main|Wishlist:Games}}<br />
<br />
=== Mesh Networking ===<br />
{{Main|Wishlist:Mesh Networking}}<br />
<br />
=== Printing Support ===<br />
It would be really neat to be able to print over either bluetooth, Wifi, or USB. I can imagine wanting to print:<br />
<br />
* Notes<br />
* Maps<br />
* Email<br />
* Calendars<br />
* ...<br />
<br />
Cups contains a bluetooth printing backend, so (in theory) once you have your data in postscript format, you could hand it to cups and it'll do the rest. In practice, it depends on<br />
<br />
# GTK+'s printing support<br />
# Making cups run on a really small system<br />
<br />
{{note| GTK+'s printing support seems to be very immature in 2.6 (which we need to use for some time). Gtk+ 2.10 contains much better printing support -- once we can use this, it should be more easy.}}<br />
<br />
There's always the possibility to render postscript ourselves, but this is not a piece of cake -- in general, printing is much harder than one would imagine.<br />
<br />
Further details:<br />
* [http://groups.osdl.org/apps/group_public/download.php/2205/print-summit-gtk.pdf#search=%22gtk%2B%20printing%20API%22 osdl.org]<br />
* [http://www.gnome.org/~alexl/presentations/guadec2006-printing.pdf#search=%22gtk%2B%20printing%20API%22 gnome.org]<br />
* [http://www.j5live.com/?p=204 j5live.com]<br />
<br />
===Misc Software===<br />
====Clocks/timers/Activity meters====<br />
===== Sport tracker =====<br />
{{Main|Wishlist:Sport_tracker}}<br />
Sport tracker can be used to measure the distance/velocity from point A to point B (or it could have several intermediate stopping points) using GPS. This would be extremely useful for running, biking, hiking, etc.<br />
<br />
===== Standby clock =====<br />
{{Main|Wishlist:Standby_clock}}<br />
A quick way to see what time it is.<br />
<br />
===== Egg Timer =====<br />
{{Main|Wishlist:EggTimer}}<br />
<br />
Very simple (one click) count up / count down timers are very useful.<br />
<br />
===== Cycle Computer =====<br />
As already mentioned by [http://wiki.openmoko.org/wiki/User_talk:Technil Technil], a cycle computer could be created using gps. The sensor at the bike's wheel could transmit data via bluetooth or some cable that would be attached to an openmoko device. In order to save power, one could switch off the gps and only use the bike's sensor.<br />
* Just another idea that came to me: Why don't have sensor's transmit cable plug into the headphone/microphone plug? A tool reads the signals created by the induction of the passing magnet, then gives them to the cycle-computer-app :) --[[User:Minime|Minime]] 19:50, 12 April 2007 (CEST)<br />
<br />
===== NTP Server =====<br />
<br />
Run the [http://www.ntp.org NTP] daemon using the GPS chipset as a reference clock, so that the Neo would have a very accurate time-of-day clock and would be able to serve time to other networked devices. <br />
<br />
I don't know what it would take to implement this. Items to consider would be the availability of a 1 pulse-per-second hardware signal, the accuracy of timestamps delivered in NMEA messags, etc. Dealing with power-management issues (such as the device going to sleep) would also be challenging.<br />
<br />
===== Reality check reminder =====<br />
{{Main|Wishlist:Reality check reminder}}<br />
<br />
A tool to [http://www.phrack.org/issues.html?issue=64&id=16 hack your brain]<br />
<br />
===== Automatic timezone changing (GPS) =====<br />
<br />
Check the timezone with GPS and adapt them.<br />
<br />
====Calculators====<br />
===== A Universal Unit Converter Tool =====<br />
<br />
One never knows when one may have to convert acre-feet into deciliters. A unit conversion tool makes all engineers and engineer wannabes much happier. And not only the engineers. <br />
<br />
Ideas what kind of conversions a converter tool could do:<br />
<br />
Lenght<br />
- Acceleration<br />
- Angle<br />
- Angular Velocity<br />
- Area<br />
- Capacitance<br />
- Radioactivity<br />
- Currency <br />
- Charge<br />
- Computer Memory<br />
- Conductance<br />
- Density<br />
- Energy<br />
- Illumination<br />
- Power<br />
- Force <br />
- Flow<br />
- Pressure<br />
- Speed<br />
- Temperature<br />
- Time<br />
- Torque<br />
- Viscosity<br />
- Volume<br />
- Weight<br />
<br />
Roman Numerals<br />
- ASCII, Hex<br />
- Cooking<br />
- BMI<br />
- Clothing Sizes<br />
<br />
Money Converter based on current rates from Internet...<br />
e. g. Dollar <-> Euro<br />
<br />
Physical and Mathematical Constants<br />
GPS conversions <br />
<br />
- link to or integration of a scientific calculator<br />
- link to or integration of a simple calculator<br />
<br />
A good basis for such a converter tool could be the Palm program "units" from <br />
François Pessaux [http://francois.pessaux.neuf.fr/files/units1_11.tgz]. The GPL'd program comes with full documentation.<br />
<br />
For GPS conversions see gpsbabel [http://www.gpsbabel.org]<br />
<br />
===== An Postfix Notation (RPN) calculator =====<br />
<br />
Many engineers, computer scientists and other groups who have grown to enjoy the simplicity and ease of an postfix notation calculator will miss them when they give up other platforms to move to OpenMoko. A RPN calculator will increase adoption by providing one of the tools that other platforms have provided for many years.<br />
<br />
==== Windows CE Emulator ====<br />
<br />
On ARM machine, Windows CE API emulator, like Wine on x86 machines. <br />
<br />
==== PalmOS Emulator ====<br />
<br />
The Access group is probably coming out with their Linux platform any time soon. One of the components is a PalmOS emulator which I'd like to see working on OpenMoko as well. There are literally thousands of PalmOS apps.<br />
<br />
I'd like to see a Windows CE Emulator with active sync support.<br />
<br />
==== TV Guide/Remote Control ====<br />
<br />
Use your Phone to easily program your VCR using EPGs.<br />
<br />
<br />
==== Alcohol meter ====<br />
Give the phone some info about your body (gender, size, weigth) and when/what you drink and it will compute an approximation of the amount of alcohol in your blood. Updates automatically, could have an alarm, when you are probably sober again.<br />
See, for example (German text) http://www.misterio-online.de/promille.htm<br />
<br />
==== Interaction with LEGO Mindstorm ====<br />
With the accelerometers, GPS and good CPU, the phone could be used to control/serve as input with robots built with LEGO Mindstorm, which can be accessed by USB and Bluetooth.<br />
<br />
==== Flashlight ====<br />
Simple finger application that makes every pixel on the entire screen white to be as bright as possible until you tap the screen again to turn it off. This way, you can use your Neo as a (short term) flashlight!<br />
<br />
==== Wii Controller Emulator ====<br />
Use the accelerometers and buttons on screen to work as a Wii controller via Bluetooth.<br />
<br />
==== FUSE support ====<br />
Ability to use FUSE to mount larger file systems over wireless. (even gmailfs, sshfs, etc.)<br />
<br />
=== Accessibility ===<br />
Accessibility features for the visually impaired.<br />
* High Contrast Themes.<br />
* Screen Magnifier. Features should include automatic cursor tracking when navigating menus and entereing text and provide manual controls to zoom in on other section of the screen.<br />
* Text to speech. The software should read out menu item ,contact lists ,text messages etc. Would also be useful for operating the phone while driving. see: [[Wishlist:Speech synthesis]]<br />
<br />
==== VOIP ====<br />
Ability to use the phone for VOIP over wi-fi such as Vonage. They currently have 2 different pieces of software for pc . Basically software creates a mac address which is paired with your Vonage account. Skype could also be implemented but I prefer Vonage. Only available when connected to wi-fi with a good connection. Phone treats calls the same as a cellular call, could keep a separate log of minutes, ability to record conversations, etc. Option to use VOIP if connection is available automaticly or manually. Small icon to show when call is using VOIP.<br />
* A standard SIP client would probably fit better into the "free and open" philosophy.<br />
* Ideally a SIP client that includes ZRTP/SRTP for secure communications.<br />
(Note: Vonage will not give you your SIP credentials, so you cannot log into their network with a non-approved softphone. Other VoIP providers have different policies.)<br />
<br />
''This seems very similar to what [http://en.wikipedia.org/wiki/Generic_Access_Network UMA] offers.''<br />
<br />
Asterisk is a great communication platform that can run on small devices. I have an Asterisk server running on a Nokia 770 and I read about running Asterisk on an iPhone. With the crosscompiler available it sould be possible to compile it and run Asterisk on an openmoko phone and let it take care of almost everything on the wishlist below.<br />
Edw/<br />
<br />
==== Power Meter ====<br />
If the power bar is clicked on it will show time left on charge and if charging it will show time until full.<br />
<br />
=== Accelerometer wishes ===<br />
==== Flick interface ====<br />
Ability to "flick" the phone for page up/down by simply and rapidly tilting the phone back-and-forth for up and forth-and-back for down. The same motion can be implemented for sideways motion. This will take advantage of the 2 3d accelerators.<br />
<br />
Sensitivity of the scrolling should be configurable and a test option provided.<br />
<br />
==== Reading navigation of documents enhanced by accelerometers ====<br />
If the two accelerometers in Neo1973 allows it, it will be nice if when you're reading, give a newspaper, you can move up, down, left and to the right the viewing of the document just moving the phones to the corresponding direction.<br />
<br />
I don't know if this is possible (haven't seen the project in detail yet) but this feature could be very attractive for final users (and this is good). (sorry for my english but i'm italian)<br />
<br />
==== Wand UI ====<br />
In keeping with the requests to think outside of the box... the dual 3d accelerometers should enable a 'magic wand'-style UI for certain uses. Macros could be recorded and edited, or presets could be used. For example, flipping the device playfully could initiate a game mode or could signal the end of the work day.<br />
<br />
==== Shake-to-Wake ====<br />
Giving the phone a shake enables voice commands for a few seconds.<br />
Usage Examples: <br />
<br />
* {Shake} "Call" ''ContactName'' ''PhoneType''<br />
* {Shake} "Call John Mobile" (Calls John's mobile)<br />
* {Shake} ''ApplicationName''<br />
* {Shake} "Reader" (Opens the e-book application)<br />
<br />
Would require a method of inputting voice tags for applications and contacts and obviously will only work for P2 (accelerometers)<br />
But lets get voice command functionality working before P2 (just by pressing a button on the screen instead of shaking)<br />
<br />
I think that is possibly to replace "Shake" with double hit with finger in the side of phone. Proper algorithms(with accelerometers) should recognize any similar activities.<br />
<br />
==== Emergency call ====<br />
When the accelerometer detects a great acceleration (i.e. 5G) start a countdown sequence, if it is not stopped make a call to a preconfigured emergency number. If the data from the GPS is accurate give it.<br />
<br />
A first version could use a recorded message (an audio file). In next version it could use a synthesizer, so it can give more information (add GPS information when it is ready).<br />
<br />
:I would worry that most such events would be false positives, and hard to distinguish from the real thing. A user dropping their phone (an event very common in the life of any cellphone) is far more likely than a user being in a car accident with their phone, and the clatter of a cell phone on asphalt could reach 5G. Additionally, it has to be very hard to distinguish hitting pavement from hitting a windshield, as from a physics standpoint the two are the same thing. [[User:Hashbrowncipher|Hashbrowncipher]] 02:06, 26 October 2007 (CEST)<br />
::It could use the gps data to calculate the speed it is traveling with. Let's say it has been moving for more than 50 km/h for more than 10 seconds. Then it could activate the "emergency call if more than 5g" function. Aside from the countdown timer, it could increase the volume to max and warn the user that an automatic emergency call will take place in x seconds. While it is counting down it could listen for "Never mind, I'm fine, phone" and stop the countdown in case it hears that. It could also output the warning sound to the attached bluetooth headset and let the user talk to emergency services if the user is still conscious. [[User:Tommy|Tommy]] 17:48, 8 January 2008 (CET)<br />
:::Perhaps have the phone yell loudly that it's about to do the emergency call for a decent amount of time, disabled by touching the screen or entering the pin number. In the case of any bluetooth device attached to the user, the phone could check to see if it's in range before calling. [[User:sin|sin]]<br />
<br />
==== Movement detection ====<br />
By detecting that the owner is walking a user defined profile can be activated with a specific set of notification settings. For example you may wish to use a cheap old sounding ringtone so you don't attract attention from muggers. Or you may wish to have a louder ringtone if you carry your phone in a bag where it can't be so easily heard.<br />
<br />
==== Games ====<br />
Imagine a first person shooter that you look around by turning your body.<br />
<br />
==== Sloshing battery indicator ====<br />
Shaking the phone will produce a sloshing sound, as if it contained a liquid. As the battery loses charge, so the sound produced on being shaken, will replicate a decreasingly empty container. [http://mobile.slashdot.org/article.pl?sid=07/11/28/1342248] for an example.<br />
<br />
<br />
==== Others ====<br />
Also see the pages[[Wishlist:Auto Align Map]], [[Wishlist:Determine Position]], [[Distance Measuring]], [[Wishlist:Computer Mouse]], [[Wishlist:Dynamic Screen Orientation]].<br />
<br />
=== Connectivity ===<br />
<br />
==== VNC client ====<br />
A good, stylus friendly VNC client/host combo would be easy to add and terribly useful.<br />
<br />
<br />
==== Networked X-Windows ====<br />
<br />
Whether it's running true X-Windowing over the network, or your bog-standard VNC connection as mentioned above, the ability to have your phone's screen available on your laptop or palmtop would be most desirable.<br />
<br />
==== NX client ====<br />
<br />
A form of X-windows forwarding optimized for performance over slow, or high-latency links, which could prove extremely useful. Capable of streaming a good quality, full desktop session over modem speeds. The protocol and at least one implementation is gpl'd. [http://en.wikipedia.org/wiki/NX_technology wikipedia]<br />
<br />
==== OpenOffice Presenter Control ====<br />
<br />
I Think it is a good idea to control your OO Presentation with Openmoko about WLAN or Bluetooth.<br />
I think it needs some buttons to go back or forward and control the mouse to show something and take normal mouse clicks.<br />
But with the mouse clicks I think that we need a short time between the clicks in example 1 second. Because when you make a mouse <br />
click than to fast than you must go back.<br />
<br />
==== Amarok and other Media Player remote control ====<br />
<br />
Control Amarok or any other Media Player with OpenMoko (as a remote control). Bluetooth or WLAN could be used as protocol to send and receive the data. Maybe a WebInterface of Amarok is a start. Can be used on parties for a mobile music management.<br />
<br />
==== Read informations with SMS ====<br />
Send a SMS with Code to the OpenMoko (from a specific number).<br />
For example to send get the GPS coordinates from a stolen Neo (or if you don't know where your Neo is).<br />
<br />
=== Security ===<br />
<br />
==== General Filesystem Encryption ====<br />
<br />
If anyone wants to get your private data saved on your OpenMoko device, he should have to get through a high security mechanism like dm-crypt. The question is how much CPU power would be needed. <br />
Would it be an idea to encrypt only the private data like phone numbers, preferences, address book etc. (like /home/$USER).<br />
<br />
http://luks.endorphin.org<br />
<br />
==== My Account ====<br />
{{Main|My Account}}<br />
A way to securely store information about the phone, and ensure that a phone you may be considering purchasing is not stolen.<br />
<br />
==== [http://zfoneproject.com/ Zfone] or similar ====<br />
<br />
Something that allows the user to speak with another person securely.<br />
<br />
==== GSM Encryption ====<br />
<br />
This software application would allow GSM encrypted calls to be made using the GSM Data Call Channel. <br />
<br />
[[OSvS]]<br />
<br />
==== My Voice is my Passport ====<br />
Use voice recognition to unlock the phone. "Hi. My name is ... My voice is my passport. Verify me."<br />
<br />
==== Firewall ====<br />
A network firewall<br />
<br />
==== Full Mac Support ====<br />
Full mac support, preferably with full software and full sync capabilities with iCal and iMail <br />
<br />
==== Anti Theft Application ====<br />
<br />
This application would enter the phone into an [[Anti-Theft Mode]] which activates particular security features to reduce the risk of theft and also to ensure a higher probability of recovery of a stolen handset.<br />
<br />
====RFID based personal alerts====<br />
Assuming an RFID reader is available: You'd put an RFID tag on your keys, wallet, etc and train a program on the phone to give you a soft or hard alert when one of them leaves detection range. That way, if you're walking away from one of them, the phone could alert you.<br />
<br />
====OpenVPN Client====<br />
This application allows to configure the device as an OpenVPN client using the GUI including support for X.509 certificates.<br />
<br />
=== Integrated Help System ===<br />
<br />
A help system that is either on or off. It could be activated and deactivated by a [[five-second-press]] on a button, for example the AUX button. When the help system is activated, it will explain the use of any item you touch on screen (with stylus or finger). Example: if you touch the battery icon, it will explain that this shows battery level / remaining time. If you touch the date / time icon, it will explain that this icon shows date and time, and that if you press it, you can set date and time. Primarily, this help system should be able to explain all user interface elements in the main screen, but if it proves popular, it could be expanded to cover other applications as well.<br />
<br />
===Performance optimisation===<br />
==== Use DMA engine in CPU for blitter ====<br />
The DMA engine in the CPU can substantially speed up moving of large areas of screen in some cases.<br />
<br />
==== Use virtual screen to optimise scrolling ====<br />
In some other cases, the hardware supported virtual screen may also speed it up.<br />
===Reusable Display/UI Widgets===<br />
====Use BigPage for full page zoom, scroll, scale in many apps====<br />
The [[BigPageWidget]] Page decribes a widget that could bring full natural page viewing, scaling, scrolling to the OM platform - allowing all applications to make intuitive UIs. A good way to read documents of any type without reformatting them massively increases the utility of a device with a small screen<br />
<br />
==Bluetooth==<br />
<br />
=== Voice Dialing ===<br />
<br />
Dial by voice commands.<br />
<br>Dial by dictating phone number. This way we can voice dial any number even if not in our contact list.<br />
<br />
=== Music through Bluetooth Headset ===<br />
<br />
Music can be played through a Bluetooth headset, but would stop playing when a call comes in.<br />
<br />
=== Walkie Talkie ===<br />
<br />
Let OpenMoko devices connect to one another via bluetooth or another connection method (GPRS for long distance but high latency, probably Wifi on P2), and hold a conversation.<br />
<br />
Features for this applications can be:<br />
* Push To Talk (PTT) button<br />
* Voice Activated Control (VAC) which will set it in transmit mode when input has is detected above a certain predefined level.<br />
* Optionally a full duplex mode<br />
* Different channels to choose from<br />
* Monitor different (preselected or all) channels for traffic.<br />
* Content encryption<br />
* Active noise control<br />
* Allow zero config use (units can talk without any access point helping)<br />
* Overview of all connected people trough sending GPS data to everyone who is in the Walkie Talkie channel<br />
<br />
Local (non-GPRS) use cases include chatting while biking<br />
or motorcycling in a group; perhaps also in a car caravan.<br />
This application could also be used as a baby-phone to monitor your siblings.<br />
<br />
This would be more useful if the Neo had Class 1 bluetooth, though probable Wifi on P2 will also offer more range.<br />
<br />
(One thumbs up from me) Jackcday<br />
<br />
=== Automatic Sync ===<br />
<br />
Automatically synchronize with desktop computer (or with any [http://en.wikipedia.org/wiki/SyncML SyncML] server) when within range based on user profile. This may require the use of a secure data transfer.<br />
<br />
=== GPS Assisted Bluetooth Management ===<br />
<br />
Allow Bluetooth to automatically turn off after loosing connectivity and to automatically turn back on based upon GPS location.<br />
<br />
A Bluetooth device is configured for automatic reacquisition based on the following profiles:<br />
* Manual - only when Bluetooth is on<br />
* Non-mobile - the target device is not mobile, periodically attempt reacquisition when in the general area of the device.<br />
* Mobile - the target device is mobile, periodically attempt reacquisition when in the general area of the device.<br />
<br />
Each target device is configured as follows:<br />
* Automatic acquisition at last known location: enable/disable<br />
* Automatic acquisition at these locations: list of nickname + coordinates + range<br />
<br />
==== Non-mobile devices ====<br />
<br />
Examples devices include: computers<br />
<br />
The location and range of the target device is determined via training. Periodically, the current GPS coordinates and Bluetooth signal strength are logged. Additionally, connectivity loss events are logged. An algorithm uses these logs to determine the device location and range.<br />
<br />
Connection attempts are made when in a configurable proximity to the device. The first attempt when entering the proximity and further attempts at a configurable interval.<br />
<br />
==== Mobile devices ====<br />
<br />
Example devices include: automobiles<br />
<br />
Mobile devices are configured to have two types of locations:<br />
# Last known location<br />
# Non-mobile locations (homes)<br />
<br />
===== Last known location =====<br />
<br />
A car is mobile, ideally, when you leave your car, the phone should note the car's location when connectivity is lost and then attempt to reacquire the car when you return to the location of the car.<br />
<br />
===== Non-mobile locations (homes) =====<br />
<br />
As mobile devices may have multiple users, it is not sufficient to always use the last known location. In this case, the device may additionally have multiple homes. For example, a car might have as its homes: home garage and work parking lot.<br />
<br />
=== Bluetooth neighbor detection and multiuser apps ===<br />
<br />
Like the [http://en.wikipedia.org/wiki/One_laptop_per_child one laptop per child] (OLPC) interface, keep a number in the status bar that represents a count of other openmoko or compatible bluetooth devices in the area. Allow for the spontaneous initiation of a chatroom or multiplayer game or file trading with any moko in the area.<br />
<br />
=== Bluetooth environment detection ===<br />
<br />
Capability to detect when a predetermined bt device enters/leaves bt range and launch a system-wide event accordingly. This would feed not only the "Neighbour detection" idea described above, but also the "Profiles", "Context based TO-DO list" and "Location-based reminders" ideas. Reminders could be set to trigger in the presence of a specific person X (with BT device Y). Profiles can take into account which devices are present around the phone (car kit, for ex.). To-do list could also change according to present devices.<br />
<br />
=== Remote control ===<br />
<br />
==== Wireless presenter ====<br />
Use the phone to run your OpenOffice.org Impress presentation remotely using Bluetooth. Cool features: <br />
* Display the text notes for the presenter on the phone's display and update it whenever the slide is changing.<br />
** OO.org has implemented support for [http://www.openoffice.org/issues/show_bug.cgi?id=12719 dual monitor]/[http://www.openoffice.org/issues/show_bug.cgi?id=18486 presenter mode] that can be used as a starting point<br />
* A small timer showing the time passed (and perhaps remaining if the presentation app supports such a feature). <br />
* If you want to be super-cool, you give a preview of the notes of the next slide in the show. <br />
* At the end of a presentation, a "navigator" could allow to easily jump to any slide in the presentation by clicking on it on the phone.<br />
** When you right-click in a running OO.org Impress presentation, you can choose "got o slide..." and select any slide to jump to.<br />
<br />
==== Initiated from another device ====<br />
Remote control over Bluetooth from other devices to control media player (play, pause, next, previous, volume control), camera (capture image), etc.<br />
==== Directed at another device ====<br />
Remote control over Bluetooth to other devices to control media player, lights in your house, etc.<br />
<br />
[http://mjr.iki.fi/software/remote-0.9.0.tar.gz Remote] is my draft of a python-based remote control app that allows you to define button sets and commands to run on the local or a remote host (through ssh, for instance). Error handling and command interface need work.--[[User:Mjr|Mjr]] 11:14, 18 October 2007 (CEST)<br />
<br />
Z-wave uses web-browser control of devices that is said to be compatible with mobile phone browsers so should work with openmoko browser. [http://www.z-wave.com www.z-wave.com]<br />
<br />
=== Bluetooth Car Connection ===<br />
<br />
Have a deeper connection to the car than just handsfree speakerphone. For instance a transceiver with challenge/response systems to open, possibly even start the car. Possibly go as far as OBD connection to monitor car status on screen/log for later.<br />
<br />
Could be done with a port of [https://garage.maemo.org/projects/carman/ Carman] or similar that can connect to an OBD2 adapter via USB or Bluetooth and display various information collect from the car, GPS, and accelerometers. --[http://wiki.openmoko.org/wiki/User:Bmk789 bmk789]<br />
<br />
==== Dude, Where's My Car? ====<br />
<br />
When in range of the car navigation system, remember the position (perhaps check with the car GPS). When not in range, assumme that you are not in the car, and offer the opportunity to navigate to the car's last known position. That way, you can find your car e.g. on a large parking lot.<br />
<br />
=== [[Bluetooth powered Multi-SIM support]] ===<br />
<br />
As the Neo1971 does not come with dual-SIM support this could be solved by joining your old bluetooth-enabled mobile to your OpenMoko-phone.<br />
<br />
Let SIM card A be in your OpenMoko-phone and SIM card B in your old mobile:<br />
* Incoming call on SIM card B - the OpenMoko-phone acts as a headset(Bluetooth Headset profile)<br />
* Calling out via SIM card B - the OpenMoko-phone acts again as a headset<br />
* Same for Short Messages/MMS/Internet<br />
This way you'd have your old phone switched silent and connected to your OpenMoko-phone that handles all the calls and one can select which SIM card to use.<br />
Advantage: No 'switching' between cards<br />
Disadvantage: Second mobile needs to be in range(e.g. handbag) and charged every once in a while.<br />
<br />
===Internet Gateway===<br />
<br />
If the device could function as a Bluetooth router/gateway to the internet via the GPRS/data connector, then you could use it to get network connectivity from your laptop and other devices while on the road. Many smartphones can be configured as modems via Bluetooth for use as Dial-Up Networking connectors, and that should be the minimum target. Ideally, if the WiFi functionality was used so the OpenMoko could be an 802.11 router or peer to peer gateway for a laptop, this would be even better. The full bandwidth of GPRS or whatever network is available would then be available.<br />
<br />
=== Social Networking ===<br />
<br />
Anybody running the social networking app will be broadcasting a profile, and when certain keywords are matched with other users who are also running the application, an alert is sounded. Each mokoid can be added as a hexstring to a profile page, and xml filters can be developed for each social service to convert various keywords and interests to moko-friendly format.<br />
<br />
=== Give userspace api control over bluetooth signal strength ===<br />
<br />
I have tried bluetooth handsfree sets with other phones and don't get perfect reception due to low signal strength. I suppose the reason the signal is so weak is because the manufacturer wants the battery to last long on its latest charge. Can you please make the strength setting configurable by the user of the phone through an api and perhaps even through the phones gui? I would gladly waste some battery time in exchange for stronger bluetooth signal strength.<br />
<br />
<br />
== WiFi ==<br />
<br />
=== Industrial grade Wifi management ===<br />
One annoyance I've had with Wifi enabled gadgets is that they simply keep the connections in a dumb list. What I'd like to see is more granular connection management, which enables me to specify whether a given connection is friend & family (mom's place), professional client (joe's copies and coffee), commercially available (panera), onetime use, or anything else, as well as managing router config backups, firmware images, and security keys. <br />
=== Captive portal auto-login support ===<br />
Having a nice front-end to some sort of script that checks the authenticity of a captive portal login page (SSL cert), then passes your username and password login information to automatically log you into your account would be very nice as well. This can be done with curl, but it is difficult to make it work on all captive portals out there. Perhaps just a field that you can specify "once I am connected to this AP, run this script: ".<br />
<br />
== Wireless Piggyback ==<br />
<br />
HSDPA support and the like, so that users can connect directly with the internet with G3/G4 mobile service providers at speeds at or above 3.6 Mb/s.<br />
<br />
== Other ==<br />
<br />
=== Auto Update ===<br />
<br />
A small tool which is configurable to download the latest OpenMoko and OpenMoko related software. Maybe if any internet connection is available or a minimum of bandwith is available then the auto update would download only security related or the whole system etc. .<br />
<br />
=== Vibrate Pattern Recorder ===<br />
<br />
An application that would allow the user to define their own vibration patterns, and possibly link them to audio files. Recording would be done in real time initiated with a "Record" button, optionally playing the associated sound file in sync with recording). While recording, the user would press and hold a button to define the timing and duration of vibration. The user would press "Stop" when finished. Vibration patterns would have the option of being looped(would terminate at some global ringtone length maximum).<br />
<br />
One simple suggested vibration file format would be a sort of run-length encoding: First byte defines the length of a "time-slice" in milliseconds, which would determine the overall tempo(actually the inverse of tempo). The next byte would define the number of time-slices to leave the vibration on, and then another byte for how long to pause after. Continue alternating these on/off bytes until the entire pattern is defined.<br />
<br />
- or just use MIDI, using a separate channel for the vibrator.<br />
<br />
An implementation of RTTL could also be used to define vibration patterns.<br />
<br />
=== PC Input Device ===<br />
<br />
Provide a method to use the touchscreen as input device for a nearby desktop machine. Could connect over USB or bluetooth.<br />
<br />
=== Advanced Notification And Ringtone Manager ===<br />
{{Main|Wishlist-ANARM}}<br />
<br />
ANARM would be an application for handling all event-based audible notifications from an OpenMoko device.<br />
<br />
=== Location based reminders ===<br />
{{Main|Wishlist:Location_based_reminders}}<br />
Location based reminders can be used to notify users of various events or reminders that are location based.<br />
<br />
=== Synergy Client ===<br />
A synergy client would enable the user to place the device next to a desktop PC and share the desktop`s mouse, keyboard and clipboard over a TCP/IP network. [http://synergy2.sourceforge.net/ Synergy]<br />
<br />
=== Next device ===<br />
List features for your fantasy device to come from FIC (or anyone else, for that matter). Define the GTA03 here ;-)<br />
<br />
==== There is no device ====<br />
From [http://wurp.blogspot.com/2008/01/teh-future.html Wurp's blog]:<br />
<br />
Clearly the Next Big Thing has to be for the device to go away altogether. I know the basic idea for wearables has been around forever, but it seems to me that the time has come.<br />
<br />
I wanna wear a bluetooth earpiece and cool shades, possibly with [ here's where my imagination is failing me :-( ] gloves, or fingerless gloves, or (ew) wristbands, and let any surface, including my hand, or no surface, be my interface. Tap the earpiece when you get a phone call, see a dial pad on your palm and tap out the number with the other hand, watch movies on a giant screen hovering in the air...<br />
<br />
(equipment list: bluetooth earpiece, some brick in my pocket or on my belt, glasses w/ minute camera, painted video display, & variable darkness lenses, and gloves)<br />
<br />
Why the hell do I want to dig out a device every time I want mindless entertainment or superficial conversation?<br />
<br />
Ideally, you could then sell any little doohickey with whatever interface you want (switches, knobs, g-spots, ...) and all it needs to do is network with some software on the brick to be anything at all...<br />
<br />
== GPS Software ==<br />
*Providing GPS Support also for outdoor users in addition to ordinary street navigation features<br />
** Overlay of satellite images with existing streetmaps<br />
** Incorporating SRTM digital elevation model: for example using the VRML/X3D as data format (see http://www.ai.sri.com/geovrml/) which is interesting for e.g. mountaineering: using a 3d browser rendering VRML/X3D Model, displaying the current position and track (possibly also other gps-tracks of the different routes to a summit downloaded before could be mapped onto the 3d model), (what about 3d hardware support? there is nothing written in the hardware specs about graphics: thinking of OpenGL for embedded systems (see http://www.khronos.org/opengles/)<br />
** Using sth like a tracking mode to allow certain people to determine the current position and track (for rescue missions - like they have for example at http://www.steiger-stiftung.de (a German beneficence for rescue issues) There you can register your mobile phone so the rescue service is able to track you immediately if necessary. The interesting thing: It seems like some mobile phones with GPS have special support for this issue. If your phone is registered, the rescue service is able to get your GPS coordinates directly from the phone without any user assistance. Openmoko should also support this! )<br />
* Implementation of 3dTracking's (http://free.3dtracking.net/) tracking software or equivalent.<br />
* "Geomark" function: if you have to save the current time with your current location, only hit one button...<br />
** You also should be able to navigate with a small "compass" and the distance should be displayed to your saved point (maybe where you parked your car on a big car parking area)...<br />
* '''Measure the distance between two points (air line or walked way) -> no need for a tape measure'''<br />
**I think it would be good if you could either use Bluetooth, GPRS or AdHoc Wifi, and see near Neo1972 on the GPS map so you could see where your friends are, e.g "You want to know if you friend is on the bus behind" You would need a strong wifi and GPRS would be too expensive.<br />
*A bicycle sat-nav would be cool, speciayl designed for bicycles, e.g. cycle routes<br />
<br />
<br>[[Community Based Traffic Information]]<br />
<br />
== Hardware ==<br />
{{Main|Wish List - Hardware}}<br />
<br />
It could be use for beepway Online service too <br />
[http://www.beepway.com]<br />
<br />
=== Dedicated Power / Charger Pinout ===<br />
<br />
Having not yet seen a physical Neo device, I haven't been able to examine any of the IOs to see if there already is a dedicated power / charger input. However, I can imagine that it might be very tempting to have the device charge solely via USB. For any device that is capable of USB-host, that is a '''horrible''' idea.<br />
<br />
Since the device is able to run in USB host mode, it might be a good idea to allow for an alternate power supply, if say, a USB keyboard was being used for several hours. Rather than drain the battery, one could just supply power via the wall outlet while still providing endless hours of USB-host enjoyment for those hard-coders on the go.<br />
<br />
The main question is just deciding on where to take power from if in USB-client mode and the power cable is inserted, but really, that's not too big of a deal and can be solved with very minimal circuitry.<br />
<br />
This might sound extraneous at first, but when the device shuts down in the middle of an important USB file transfer, or right before that great piece of code was saved, you can bet that those users will be saying "Hmm... a separate power adapter would have really come in handy right now". <br />
<br />
I suggest a tiny 3mm, dedicated +5V power input (something a la Nokia).<br />
<br />
=== Tactile feedback via buzzer ===<br />
Assuming the hardware has a vibrator/buzzer for silent calls, use a lightly pulsed version of that to simulate tactile feedback when dragging finger across buttons on-screen. Implemented properly, it would almost feel as if the buttons were real.<br />
: 25 ms bump on the buzzer feels about right. Does this harm the vibrator motor? --[[User:Sagacis|Sagacis]] 05:15, 2 October 2007 (CEST)<br />
:: Created a patch to do this [[User:Sagacis/ForceFeedback]] --[[User:Sagacis|Sagacis]] 05:05, 3 October 2007 (CEST)<br />
<br />
=== Detachable keyboard ===<br />
Hardware keyboard that can be attached with magnets to a future version of the Neo.<br />
<br />
A bluetooth mini-qwerty keyboard that straps to my wrist!<br />
<br />
<br />
=== SD Slot ===<br />
I think the Neo1973 should have a normal SD card slot as the micro is too small, and the SDs have more space.<br />
<br />
: This is not true. Now you can find 2GB micros at the price of 20-30 euros. Too small for what?? --[[User:V0n0|V0n0]] 22:06, 28 December 2007 (CET)<br />
<br />
: Think of putting a few '''movies''' on that SD memory card. It could really help if it was a little bigger (8GB, 16GB, 32GB). Also think of going '''offline''' for 1-2 weeks, far away from any computer you can access and then wanting to listen to some music. What you get in turn with a 2 GB memory slot is the same music over and over. Or you have to switch memory a cards a lot.<br />
<br />
: This situation is far more common than one would think: going in the mountains, going offshore (on a cruise ship). Or simply you may want to store many types of music, and '''share''' your device with friends. --[[User:Bogdanbiv|Bogdanbiv]] 13:47, 10 January 2008 (EEST)<br />
<br />
: Well, it can be micro SD, but why to put it so deep inside, under the battery and even under the SIM card? I would suggest to have a simple slot on the side where we could insert/remove the SD card equally easily as we swap CD's in computer. [[User:AudriusA|AudriusA]] 16:36, 12 January 2008 (CET)<br />
<br />
[[User:Cfriedt|Cfriedt]] 12:40, 24 February 2008 (CET) -- I completely agree with a more accessible SD card slot. It should be made external for quick removal / insertion. I realize that would mean program data shouldn't reside on the SD, but really 256 MB of on-board flash is plenty. Mirco or normally-sized, a regular-sized SD is still trivial to implement in terms of solder pads and traces.<br />
<br />
=== IR port ===<br />
Remote control applications<br />
<br />
Would be great to use openmoko as a Harmony remote controller.<br />
<br />
:I'd like to add that i fully support this. An IR port on future openmoko devices capable of controlling set-top boxes like TV/DVD/Stereo is necessary to make the device as universal as possible. A cellphone should be your window to the world and allow you to interact with it in as many ways as possible.<br />
<br />
:Care must be taken to use the correct type of IR chipset/controller in the phone. Most IR ports you find on devices like computers, some cellphones etc. Are for high speed data communication and CAN'T control TVs/DVDplayers/Stereos etc.<br />
<br />
:In order to reduce cost it maybe possible to use the sound chipset in the phone to generate the waveform sent to the IR led. IR remotes work at ~38Khz which is within the range of the sound chipset. The sound output could be internally switched between the IR led or the speakers.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]</div>Sinhttp://openmoko.org/wiki/Wish_ListWish List2008-03-01T21:52:39Z<p>Sin: /* Emergency call */</p>
<hr />
<div>This article is a place to collect various thoughts about the future of the [[OpenMoko]] software platform. Most wish list ideas have been linked from this page, but you may also wish to check all pages [http://wiki.openmoko.org/wiki/Category:Ideas that have a category of 'Ideas'].<br />
<br />
== Development ==<br />
=== Painless SDK installation & Setup ===<br />
Our goal should be a completely painless setup for somebody wanting to develop using [[OpenMoko]]<br />
<br />
* one command for installation (apt-get install openmoko)<br />
* one command to start Xnest (openmoko-xephyr?)<br />
* one command to start an i386 shell (openmoko-386-shell)<br />
* one command to start an armel shell (openmoko-armel-shell)<br />
<br />
No extra configuration required.<br />
<br />
==== IDE Plugins ====<br />
People like to see plugins for<br />
* [http://anjuta.sourceforge.net Anjuta]<br />
* [http://www.eclipse.org Eclipse] (some things are possible - see [[Development with Eclipse]].<br />
* [http://www.netbeans.org NetBeans]<br />
* Game engine - Game Creation plugins<br />
evaluate eclipse project [http://www.eclipse.org/dsdp/index.php Device Software Development Platform Project from eclipse] and subproject [http://www.eclipse.org/proposals/tml/ Tool for Mobile Linux]<br />
* [http://www.kdevelop.org KDevelop]<br />
* [http://developer.apple.com/tools/xcode/ XCode]<br />
* [http://msdn.microsoft.com/vstudio/ Microsoft Visual Studio 2005]<br />
<br />
==== UI Designer ====<br />
Glade code generation is deprecated, so we don't want to use it. The Gtk+ powers told me that the plan is to have gtk 2.12 (out early 2007) with support for GtkBuilder, a libglade derivative which breaks a bit the XML definition in order to support all the new widgets and properties; as soon as it's in the other ui builders will add support for this format. See also [http://bugzilla.gnome.org/show_bug.cgi?id=172535 the relevant bug entry]<br />
* Possibly a Landscape (rotated) view for the screen (480x640 *or* 640x480)?<br />
<br />
<br />
==== Built-in Scripting Language ====<br />
{{Main|Wishlist:BuiltInScriptingLanguage}}<br />
There was a [http://lists.openmoko.org/pipermail/community/2007-January/001909.html fruitful discussion about a built-in scripting language on the mailing list in January.] Many people feel that it is very important for OpenMoko to choose a scripting language to ship as default in the standard OpenMoko firmware.<br />
==== Easy build of the existing autotools - based packages ====<br />
In the ideal case OpenMoko should exist on the top of the usual ./configure - make workflow which is typical for the majority of the C/C++ based open source projects. It should not require to rewrite or even replace the existing Makefile.am files of the project being ported, and it should allow to pass the needed parameters to the project configure script. Maybe OpenMoko project could be a bigger project having one or more (if some are libraries) autotools - based packages in its separate folders and include the proper documentation how to "wire" the standard autotools based package to the OpenMoko infrastructure.<br />
<br />
===Foreign Widget Set Bindings ===<br />
==== Qt Integration ====<br />
The Trolltech folks have a great widget library. I'd like to interface OpenMoko with Qt4, so that we can write Qt4 applications for the phone which don't look alienated.<br />
<br />
==== Maemo Integration ====<br />
The Maemo folks have created a successful standard for Webpad applications. I'd like to have a set of MaemoMoko and MokoMaemo wrapper classes that allow me add support for running OpenMoko applications on Maemo and vice versa. Perhaps we can get help from the Nokia OSS folks for that.<br />
<br />
==== wxWidgets Integration ====<br />
wxWidgets is a cross-platform application framework that's very popular (I'd say, #3 after Qt and Gtk+). On Linux, wxWidgets uses Gtk+ to implement the widgets. It shouldn't be hard to add support for the additional OpenMoko classes to wxWidgets hence supporting the native OpenMoko look and feel for wxWidgets applications.<br />
<br />
wxWidgets team wants OpenMoko classes too and we (wxWidgets) plan to include this project as one of our ideas for [http://google-code-updates.blogspot.com/2007/02/speaking-of-summer.html GSoC 2007]<br />
<br />
==== SDL Integration ====<br />
SDL is ''the'' game developer library. There are tons of SDL games out there. We should add OpenMoko support into SDL.<br />
<br />
==== Cocoa / GNUstep ====<br />
Allows to use MacOS X as a development platform.<br />
<br />
=== Software: Language bindings ===<br />
==== Python bindings ====<br />
Python bindings seem to be a commonly requested feature. <br />
<br />
[[User:Mickey]] says, "They are kind of usable on the [http://www.maemo.org Nokia 770], but it's at the lower end of being bearable. We should keep this in mind -- Gtk+ already comes with Python Bindings, so we "just" would need to wrap libmoko*. I would prefer to leave this to the community do though, since it doesn't make sense to start wrapping the API until we have a stable API -- and I can imagine it will take us a couple of months after going open until we can start with stabilizing the libmoko API."<br />
<br />
==== C++ bindings ====<br />
There is a whole skilled C++ community coming from the [http://qtopia.net Qtopia] and [http://opie.handhelds.org Opie] projects. If we would consider basing OpenMoko C++ Bindings on [http://www.gtkmm.org/ Gtkmm], then we could drag these guys in.<br />
<br />
==== Ruby bindings ====<br />
Ruby and ruby-(gtk|glade) already ported to OpenMoko according to [http://lists.openmoko.org/pipermail/openmoko-apps/2007-May/000040.html this ] and [http://groups.google.de/group/comp.lang.ruby/browse_thread/thread/6bee9970cf055504 this] mesages. It just have to be included to distribution (only 4.9 MB!)<br />
<br />
==== Java bindings ====<br />
People who concentrate on Java programming would like to have the OpenMoko port of some java virtual machine. GNU Classpath team a lot of great work in the past creating easily portable implementation. Sun's recently open sourced code could also be ported. <br />
==== Other bindings ====<br />
* Perl<br />
* C#<br />
* I think you could skip a bunch of these by binding to Dbus; most languages already have Dbus bindings<br />
<br />
== Community Support ==<br />
<br />
=== [http://projects.openmoko.org projects.openmoko.org] ===<br />
Infrastructure for developers with<br />
* One bugzilla for all projects (makes moving bugs forth and backwards between projects ''very'' easy)<br />
* One mailing list for project<br />
<br />
== Platform ==<br />
=== Community Images ===<br />
In the future there could be complete, unofficial "product images" that are created by the community, for example maybe one that incorporates only free software (in the GNU or OSI sense). Or images build with a particular niche market in mind -- a student for example.<br />
<br />
=== Wishlist voting ===<br />
There could be a kind of voting system like they have at one of those big computer manufacturers homepage. Then the community could vote for the ideas that are most important to them. This would especially make sense for the hardware wishlist, because the hardware is still the part which can't be done by the community that easily.<br />
<br />
Here: [http://www.fevote.com/openmoko OpenMoko suggestion board]<br />
<br />
== Software: Additional features ==<br />
<br />
===PDA Mode===<br />
<br />
There are times when you wish to power up the device and not power up the gsm/cellphone portion of the phone. For example in meetings you might wish to access the PDA side with wifi as is the case for example on an aircraft. On booting some method of booting to pda mode would be good - several other phones offer this feature.<br />
<br />
===Driving Mode===<br />
<br />
It may be forbidden in many countries, but many people use their cell phones while driving. With the touchscreen phones<br />
this is very dangerous: You have to stare at the tiny numbers on the screen and try to hit them with your thumb or try to decipher tiny script of contacts, while steering with the other hand. There should be a configurable driving mode where the interface has a reduced functionality (e.g. only contacts and dialing) with HUGE interface buttons that are easy to use with limited attention.<br />
<br />
===Calling===<br />
<br />
==== Mask ID based on dialed numbers ====<br />
It would be nice if my number only showed up when I call people in my address book and was otherwise masked. The phone I have now either always shows my number or never or can be set on a per call basis. Having it done automatically based on the number dialed would be good.<br />
<br />
==== Use calling cards and similar routing techniques for lower-cost calling ====<br />
Many people use calling cards, low-cost numbers and similar ways of reducing the costs of their calls. It would be nice to have a single panel that would allow you to configure the rules of dialing a number taking in to account such systems.<br />
<br />
==== Outgoing black/white lists ====<br />
The ability to allow or deny outoging calls to certain numbers can be useful in a number of situations (e.g. the holder of the 'phone is a child, untrusted, etc.). This could be related to entries in the contact list, for example a user is only allowed to call people who are in their contact list.<br />
<br />
Also lists for incoming calls? Some friends always come through, unknown numbers get rejected automatically.<br />
<br />
==== Time-based blocking/unblocking of calls ====<br />
Allowing or disallowing outgoing calls at certain times of the day could be useful, e.g. blocking a business phone from making calls outside of business hours.<br />
<br />
====Speaker-phone====<br />
* A speaker-phone is more than simply connecting the speakers to GSM audio, it's also echo cancellation, and eliminating the feedback that will otherwise happen between the speakers and the mic. This software has not been written.<br />
<br />
====Advanced Airtime Tracking====<br />
Many phone users have complicated plans, things like unlimited incoming, 100 anytime minutes, 1000 evening minutes, etc. It would be nice if a user could input the various monthly airtime chunks their plan gives them, and then the phone could track how much is left in each chunk, i.e. How much anytime minutes are left this month? Optionally, the software could warn when someone is close to the monthly limit, to help avoid bigger bills.<br />
On (at least some) prepaid [http://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data USSD] can be used to check current balance.<br />
<br />
==== Anti-stutter software ====<br />
Delayed Auditory Feedback (DAF) has shown to reduce stuttering in individuals by 70%. By using the microphone, it should be pretty simple to implement this on the OpenMoko. The DAF functionality should also be present during phone calls. See http://en.wikipedia.org/wiki/Delayed_auditory_feedback for more information.<br />
<br />
====Minimize In-Call mode (check address book while in call)====<br />
On my locked phones I always find it annoying that one can not use other features while a call is in progress. In particular, I'd like to access the address book so that we can (1) give a caller someone else's phone number (or other info) and (2) lookup a phone number when using a calling card or some other proxy.<br />
<br />
Similar request when using the browser (lookup passwords, todo list, etc).<br />
<br />
====Hold Music (Ringback Tone)====<br />
On some cellphone networks you can pay to change the normal [http://en.wikipedia.org/wiki/Ringback_tone Ringback Tone] that the caller hears when ringing, to a customised sound.<br />
This can partially be implemented on the phone.<br />
Issues are:<br />
*In countries where callers pay, this will make you unpopular.<br />
*In countries where the called party pays, it will use your minutes, or cost you money.<br />
**A list of people to activate this function for would alleviate this.<br />
*[[GPRS]] internet connection will stall while the hold music is being played.<br />
*Extra battery used when playing music.<br />
<br />
Also see [[Answering Machine]].<br />
<br />
====Play sound clips over the air====<br />
Dialer could have a tab with big buttons which, when push, send sound clips over GSM to the person on the other end of the call. This feature is included in GizmoProject and is called sound blasts: http://support.gizmoproject.com/index.php?_a=knowledgebase&_j=questiondetails&_i=104<br />
The buttons can have default sounds, but also have the ability to be customized.<br />
<br />
It would also be useful for notifying people why you can't talk (for example, having an "I can't talk tight now - I'm in the library - this is a pre-recorded message" would be good. Also perhaps you could loop a pre-recorded sound in the background so you can lie about where you are, and have the ability to simulate a really bad connection.<br />
<br />
==== DTMF Landline Dialing ====<br />
The ability to hold the Neo near the microphone of a landline handset and have the Neo dial the landline by sounding DTMF tones. The DTMF tones could be generated in software or be pre-recorded files.<br />
<br />
Graphically this could be done by adding a 'DTFM dial' button to a context menu. The user would select a contact then presses the 'DTMF dial' button to start the process. A small delay could also be added to allow time to put the Neo near the landline handset.<br />
<br />
For the Neo to know which area code to use (or not use) the current or last GPS coordinates could be utilised.<br />
<br />
==== Conversation Recorder ====<br />
<br />
An option to record phone conversations. Would be helpful to have the device always recording for every call, with the sound data encoded to low quality Ogg Vorbis or SPEEX and stored in RAM. At the end of the conversation the user would have the option to save to flash or discard the conversation. This idea could also be applied to voicemail so you could save voicemails locally.<br />
<br />
====Unlicensed Mobile Access (UMA)====<br />
T-Mobile recently rolled out a UMA service that hands off calls between the GSM network and WiFi access points. Only a few phones support it right now, this could be a rather unique feature if OpenMoko can implement it.<br />
<br />
This can be combined with a GPS map to show where local free hubs are.<br />
<br />
==== Ignore-Call Button ====<br />
{{Main|Wishlist:Ignore Call Button}}<br />
<br />
Shut up a ringing phone, without accepting or rejecting the call.<br />
<br />
Another alternative might be to use microphone to recognize when the user gives an audible "Shhh!" command. This could prove difficult to determine with the simultaneous ringing, and possible in-pocket shuffling noises.<br />
<br />
A really usable feature is to "reject with SMS/text message" - letting the user reply the caller choosing a previously setup template or typical response: "I'm in a meeting - I'll call you later" or "Can't take your call now, please call back in 10 minutes". This feature typically is a much better way to get your co-workers (ie boss) to back off, than to silently ignore the call.<br />
<br />
==== Voice Mailbox ====<br />
{{Main|Voice Mailbox}}<br />
On-Phone voice mailbox that records calls on the phone and retrieves voice messages from your mobile service provider's voice mailbox and saves them locally.<br />
Can act profile-dependent.<br />
<br />
==== Hold Button ====<br />
<br />
Similar to mute, but plays a sound file for the user on the other end while they wait. The sound file could be chosen in some setup beforehand.<br />
<br />
==== Unanswered Call, Fast Call ====<br />
<br />
In Greece because of the various bill programs some people call a mobile phone, rings one time and then hangup.<br />
Then the user of the mobile phone calls the other user(using the CallerID recognition).<br />
<br />
===Audio===<br />
<br />
==== Ambient Noise Detection ====<br />
{{Main|Wishlist:Software:Ambient Noise Detection}}<br />
<br />
Using the microphone to detect ambient noise the ringtone volume could be adjusted automatically.<br />
<br />
Detection of ambient noise could also be used to subtract the noise from the audio signal. However this approach is best performed using two Microphones, one for the voice and the other to detect the noise.<br />
<br />
==== Active noise control ====<br />
<br />
Using the microphone to do [http://en.wikipedia.org/wiki/Anti-noise active noise control] on media player playback or telephone calls. This should be an independent module/library which can be used by any application which might require this feature. also provide a way to easily alter the parameters of the active noise control.<br />
<br />
==== Hear Impaired Mode ====<br />
<br />
Hearing impaired people need louder speaker(but with less volume than hands free) and equalized sound, based on their hearing problems(example 20dB hearing loss from 2KHz to 4KHz).<br />
Older people 50+ years old need slower speech rate(time stretch, cut the big speech gups) and cleaner voice.<br />
<br />
Please note also the Hearing Aid Compatibility regulations in the US. I have tried to summarize and clarify them [http://quux.wiki.zoho.com/WhereAreHACphones.html here]. I haven't yet discovered whether the FIC device is M or T rated. For many hearing impaired users, a tcoil coupling to their hearing aid (t3/T4 rating) would be preferable to manipulating sound output in other ways.<br />
<br />
==== Mute Button ====<br />
<br />
Button to temporarily disable microphone while talking for applications such as telephone, audio recording and (when available) movie recording.<br />
<br />
<br />
===Web Browser===<br />
<br />
==== Full-page Zoom Support ====<br />
Full page zoom is a very good feature. If possible, people would want to browse the internet with normal layout than a distorted one. It's best if I could double-tap a text or image block and zoom to a fit size.<br />
<br />
The [[BigPageWidget]] proposal suggests 'Full Page Zoom' should be implemented as a widget available to all applications.<br />
<br />
* If the processor and memory could afford, it is good to just use [http://www.mozilla.org/projects/firefox/3.0a8/releasenotes/ Firefox 3] in OpenMoko. It has implemented latest gecko's full-page-zoom ability. With certain modification, we could do the same zoom like iPhone's Safari.<br />
* Firefox 3 may be a big eater. A cut-down version of it may be good enough.<br />
* If this is not practical, Minimo with full-page-zoom ability is good.<br />
<br />
==== Plugins Support ====<br />
* While an extensive browser plugin system would be costly to the efficacy of the platform three particular browser plugins as poplularized by Mozilla firefox should be adapted to the web-browser, namely: [http://noscript.net/ noscript], [http://adblockplus.org/en/ adblock plus], [http://www.greasespot.net/ greasemonkey] and [http://www.foxmarks.com/ foxmarks].<br />
* Careful use of these can dramatically reduce bandwidth, page space, and rendering costs even if it comes at the risk of some hard drive space in the form of block lists.<br />
* Greasemonkey, in particular, gives users control to set up scripts for commonly traveled pages to further reduce unnecessary or unwanted content.<br />
<br />
==== Widget support ====<br />
Built-in browser with the ability to install widget shortcuts (aka links) in the main phone menu, also some apis for interfacing with the other functionality of the phone like adding contacts, reading contacts, reading gps-psoition etc.. (maybe there is some defacto widget standard that could be used)<br />
<br />
There is a [http://www.w3.org/TR/widgets/ W3C spec] being developed, which may not be exactly what the original proposal had in mind, but it is about writing simple applications with HTML, SVG and JavaScript. It is mainly Opera's work, and while most [http://widgets.opera.com/ developed widgets are not very useful], there are some that are, and it creates a very nice development platform, especially for mobile devices. So, I think it makes an awful lot of sense for OpenMoko to support this spec.<br />
<br />
===Media===<br />
====Music/Video Software====<br />
A real good programming area for competition with the iPhone, a singular video/music player would be great for multimedia. A seamless integration system, a la iTunes and iPod, would be extremely popular. <br />
<br />
Using the Wi-Fi connectivity, a separate music program that supports wireless music sharing/ streaming (similar to what can be done when two computer running iTunes that are both on the same network) and that also supports internet radio.<br />
<br />
It would also be nice to have some kind of "announce your musical taste" mode. This could be implemented using last.fm profiles, such that when e.g. in a crowded place a user nearby has a similar musical taste, both users get notified so they can share their music files with each other (perhaps using a photo for id). Great for discovering new music - and making friends!<br />
<br />
- Possible copyright issues sharing music files?<br />
<br />
Sure, but that's the user's concern, not the developer's. There's no way for us to know which audio files the user is permitted/not permitted to share.<br />
<br />
==== Reading Support ====<br />
It would be really great to be able to read :<br />
<br />
*PDF<br />
*Open Document files<br />
*Text / RTF files<br />
*fb2 files (fbreader)<br />
*MS Office files<br />
*Aportis Doc (pdb)<br />
*DjVu<br />
*...<br />
<br />
In both landscape and portrait<br />
<br />
==== Wikipedia Mirror ====<br />
{{Main|Wishlist:Wikipedia_Mirror}}<br />
<br />
==== Blog ScribblePad ====<br />
<br />
Draw an image (and maybe add some text), then post to your blog.<br />
<br />
==== E-Book Reader ====<br />
* Neos brilliant ultra-sharp screen makes for a very good e-book reading device. All it takes is a good e-book reader with touch-screen page turning / scrolling (see the [[BigPageWidget]] proposal). FBReader could probably be adjusted easily by an experienced GTK hacker. Note that e-book reading is different to pure text/pdf displaying as it requires at least auto-bookmarking of the last read page, proper text and image scaling and text formatting.<br />
<br />
==== Personal Wiki ====<br />
{{Main|Wishlist:PersonalWiki}}<br />
<br />
Display the notes database as a Wiki. Inspiration: [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki].<br />
<br />
[http://www.didiwiki.org/ Didiwiki]<br />
<br />
<br />
==== Dictionary, thesaurus, translator and flashcards ====<br />
Native lookup dictionary and thesaurus and foreign translation dictionaries, also with support for Asian languages. Optional custom configurable (though preconfigured) interface with on-line versions of dictionaries, thesaurus and translation services.<br />
<br />
'''Dictionary'''<br />
Something like [http://www-user.tu-chemnitz.de/~fri/ding/ ding]:<br />
<br />
advantages:<br />
* small<br />
* very efficient + useful<br />
* only limited to really needed functions<br />
<br />
Support for vocabulary training with flashcard system (also usable for other content than foreign language words!)<br />
<br />
==== Flickr uploader ====<br />
A simply, drag & drop uploader, tagger and organizer to upload images on phone to [http://flickr.com Flickr], with support for various languages. A good base could be the cross-platform uploader [http://juploadr.org/ jUploadr], written in Java and working on Windows, Mac and Linux. But, most of all, the best '''GPL''' program which actually do this work is '''[http://mobilepushr.jottit.com/ Mobile Pushr]''', written in C and Cocoa for iPhone, must be probably ported in python to work on OpenMoko.<br />
<br />
===PIM (Personal Information Managment)===<br />
====Context Sensitivity====<br />
Any email or sms message or application that contains a telephone number should be click to dial, eg [http://123567890 1234567890]. Addresses link to mapping software too?<br />
<br />
==== Notes ====<br />
<br />
Something for taking notes would be a nice feature:<br />
[http://www.gnome.org/projects/tomboy/ Tomboy] has some nice syncing features and is gtk based.<br />
<br />
Some Screenshots are [http://www.gnome.org/projects/tomboy/images/ here].<br />
<br />
==== Calendar ====<br />
<br />
A nice calendar application should be implemented in OpenMoko. This tool should have a syncing feature with your desktop computer.<br />
The tool should have a reminder feature and other features like other mobile phones already have.<br />
<br />
I think synchronization sould be handled by computer with opensync+syncml based tool, not by calendar itself. --[[User:Antono|Antono]] 12:25, 7 January 2008 (CET)<br />
<br />
* If this cellphone is thought also as a PDA, of course it needs a calendar. But I would like to see something better than just a calendar, I was thinking that there could be some application using "fisheye" view. Just like [http://www.cs.umd.edu/hcil/datelens/], though that example seem a bit chaotic. --[[User:Yprum|Yprum]] 22:27, 21 February 2008 (CEST)<br />
<br />
==== Address Book ====<br />
<br />
* Option to search not just the stored list of addresses, but one or more of the online phonebooks. Probably should be modular to make adding/changing phonebook sites easy. Also allows for future integration with LDAP<br />
servers or whatever.<br />
* Also the possibility to search all info on the contact, like number, email, postal address and so on, in case someone asks you to identify a known number.<br />
* Web-based map-lookup. 'How do I get there from here? (here = current GPS location)' This could also be done<br />
by integrating with whatever on-phone GPS mapping software the Neo ends up using.<br />
* Random text input 'notes' about a contact<br />
* Overall, this should more resemble a Palm-pilot's address-book than your average cellphone's<br />
* Automated Daily backup of phone book to a website archive (similar to Verizon's Back-up Assistant<br />
*Ability to integrate address book with web-based email (such as gmail) account, for those who use web based email as their primary account<br />
* '''[[Wishlist:Tagging|Tagging]]''' Place tags for contacts. Enhance message application to send messages to all contacts tagged with ... . Enhance other application(GPS, ...) with tags.<br />
* Support for:<br />
**[http://en.wikipedia.org/wiki/SyncML SyncML]<br />
**[http://en.wikipedia.org/wiki/Ldap LDAP] address book<br />
**[http://en.wikipedia.org/wiki/LDIF LDIF], [http://en.wikipedia.org/wiki/Xml XML] and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export and import (when possible).<br />
*Store Bluetooth IDs of friends and notify (configurable only on this device or on both devices) when a one of these Bluetooth ID has been detected (this is more a separate application but has requirements on the address book. Should also be able to create an address book entry from a Bluetooth ID. Could be used as a nice tool to detect people who you're avoiding.<br />
<br />
==== Database/List Display/Edit ====<br />
{{Main|Wishlist:PilotDB}}<br />
<br />
One of the most useful apps on my Palm Pilot for me is [http://pilot-db.sourceforge.net/ pilot-db]. It's GPL'd.<br />
<br />
==== Joe's Goals ====<br />
<br />
It'd be nice to have something like [http://www.joesgoals.com Joe's Goals] always available, like my phone is, even when I'm disconnected from the net.<br />
<br />
==== Workout ====<br />
<br />
Use your phone instead of your notebook while at the gym, and get pretty graphs to admire after you're done.<br />
<br />
==== Shopping List ====<br />
keep Track of Prices in different shops and the products you have/don't have. Ideally using a barcode reader and gps.<br />
If it was made aware of recipes it could even tell you what to buy without entering a shoppinglist manually.<br />
<br />
==== [[Fuel Log]] ====<br />
File data about fueling your car (date/time, liters, price, mileage, ...) and display some information (costs per month, average consumption, ...).<br />
Advanced features could include:<br />
* Automatically storing the GPS coordinates of the place where the car has been fueled (can be deactivated)<br />
* Sending the data to a central server which collects the information ( spritmonitor.de, anything else ?)<br />
* Let the OpenMoko receive fuel logs per SMS (e.g. if my wife with a non-openmoko mobile fuels the car and wants to file the data using her mobile phone)<br />
* Let the OpenMoko device act as SMS gateway for non-openmoko devices to easily send the data to the central server<br />
* Also support for air log for divers. Not that you will take this device under water but for the crew at the surface.<br />
<br />
==== Keep in touch reminder ====<br />
A background application which keeps track of your friends and reminds you when you have not talked, SMS, IM or mailed a person for more than # days.<br />
<br />
<br />
==== Menstruation period timer ====<br />
Fill in statistics and compute probabilities for menstruation, fertility, mood.<br />
See http://www.getjar.com/products/48/MyGirls<br />
<br />
==== Tagging ====<br />
{{Main|Wishlist:Tagging}}<br />
Tags can be used by various applications. Requirement is interoperability for further enhancement.<br />
Tags should be applied to calendar events, mail/sms, calls, places(GPS) and files.<br />
http://tracker-project.org has all needed tagging-and-searching functionality and ready to be used on low-resourced devices.<br />
<br />
==== Context based TO-DO list ====<br />
{{Main|Wishlist:context based to-do list}}<br />
<br />
If I arrive home and there are "@home" things in the to-do list, the Context based to-do list reminds me of that.<br />
<br />
==== Faster access to task list ====<br />
Click on the date to add a new task.<br />
<br />
==== Exchange Integration ====<br />
<br />
Once there is good TCP/IP connectivity on this phone, integration with corporate email/calendar/to do/contacts/etc servers would be a big advantage... near-real-time automatic email downloads and automatic bi-directional syncing are productivity boosters that you have to experience to appreciate. It turns your phone from a 'nice gadget to fiddle with' to a natural-feeling extension of your day-to-day life.<br />
<br />
* Is the time right to name names ? Add as your liking...<br />
** Plugin/integration to & from Kontact<br />
** Same with Evolution - Thunderbird - Seamonkey<br />
** ?? Google Calendars ?? (this one is tough)<br />
** Ms Exchange<br />
<br />
==== An electronic wallet ====<br />
<br />
A database which stores securely PIN codes, login data, bank and email accounts, membership informations, and other valuable and private data. Entries can be ordered in a folder-like manner. Access to the database is given by a master password. The database as well as the master password are stored with strong encryption. For security reasons, the program asks again for entry of the master password after a certain period of inactivity. The database can be synchronized with a PC application (ideally written in Java for cross platform compatibility).<br />
<br />
Examples: KWallet [http://docs.kde.org/stable/en/kdeutils/kwallet/index.html], Viskeeper [http://www.sfr-software.de/cms/EN/pocketpc/viskeeperpro/index.html], KeePass [http://keepass.info/]<br />
<br />
==== Easy business card sharing for a small group (in the same room) over bluetooth or WIFI ====<br />
<br />
Six Neo1973 owners are having a chat in a cafe. They agree to split but meet later. They want to exchange their numbers with each other before they go.... The normal way to do this is for a rather longwinded repeating of numbers to each other, or half the people manually inputting numbers before phoning/texting the other half to complete the process. All in all its a fair number of button presses to get it sorted.<br />
<br />
Instead the NEO could have a small app where the phones link up in a small peer to peer Bluetooth network and share automatically with one person initiating a request and the other detected NEOS agreeing/acknowledging the share. The initiating NEO would then sync the mini-group automatically by interrogating each phone and then sending the table of results. The NEOs would have to be clever about checking for duplicates in the address book and offering a choice to the user if there are any conflicts.<br />
<br />
PROS: <br />
*genuine saving in time for social and business situations<br />
<br />
CONS: <br />
*I am sure there are some security hassles to be pondered....<br />
*not going to be used every day... definitely not an immediate priority.....<br />
*only at geek conferences will all have a neo....<br />
<br />
==== SMS Counter ====<br />
<br />
An application which shows on the today-screen how many SMS i've already sent in this actual month. Some have for example 150 free SMS to write each month. With that program you can see all the time how many SMS are left until the end of the period. As an alternative it could be a counter which counts backwards from a predefined number over a defined period.<br />
<br />
===Profiles===<br />
{{Main|Wishlist:Profiles}}<br />
<br />
The Wishlist:Profiles page documents many possible profiles - ways to configure the phone. Including ways to respond to calls, wifi and GPS events.<br />
And how to automatically switch between them.<br />
<br />
===Text Messaging===<br />
For '''Text Input related ideas''' see [[Wishlist:Text_Input]]. Bear in mind that T9 can not be included<br />
For current development status of the messaging-app see: [[Messages]].<br />
<br />
There are many useful options that now can be used to full capacity:<br />
* '''Acknowledge/status SMS'''<br />
In GSM networks so-called acknowledge-SMS are sent back to the SMS's dispatcher in order to indicate that the primal sms was received (as message delivery is only best effort and is not guaranteed). So in the SMS dialog there could be equal sized buttons with captions as 'send only', 'send and receive delivery status message' and 'send and notify (e.g. ring) when delivery succeeded'.<br />
** '''Special handling of status-SMS''' <br />
Related to the previous entry, these acknowledgment-sms' should be handled in a different way than normal SMS'. Most Motorola do this, while Samsung SGH series don't & clog the inbox, warn of a "new" message upon Status notification: Delivery Status Messages should be stored in a separate menu so they don't bloat the received-folder and you are able to quickly review the status of the messages you had sent.<br />
* '''SMS at time/date''' You could be able to set up messages that are sent at a certain time/date<br />
* '''Binary SMS''' Send binary SMS. Could be used to feign WAP pushes. [http://en.wikipedia.org/wiki/Multimedia_Messaging_Service] See: <br />
** Resource for SMS encoding: [http://web.archive.org/web/20021016104345/www.dreamfabric.com/sms/] [http://web.archive.org/web/20060411222332/] [http://home.student.utwente.nl/s.p.ekkebus/portfolio/resource/sms_pdu.html] [http://www.ihub.com/Binary%20Messages.htm]<br />
** [http://www.gammu.org www.gammu.org] - you can use Gammu/Gammu+ source for this software and/or understanding various SMS formats including EMS, WAP, Nokia Smart Messaging, Siemens & Alcatel encoding ([[User:Marcin|I could]] eventually help)<br />
** Resource for SMS encoding (German): http://de.wikipedia.org/wiki/SMS-Kodierung<br />
** The infamous pocketpc-attack: http://www.mulliner.org/pocketpc/<br />
* '''Profile-override-SMS''' SMS that start with a certain code word override the silent profile and have the phone ring. So someone could alert you in case of some emergency.<br />
* '''Codeword-SMS''' An expansion of the above: check for code words and allow selectable tones for matches. E.g. "Server Down!" has a loud klaxon, "Disk Warning" has a quiet chirp.<br />
* '''(De-)Abreviation-script''' Implement a script that de-abbreviates: "hi m8 u k?-sry i 4gt 2 cal u lst nyt-y dnt we go c film 2moz" becomes "Hi mate. Are you okay? I am sorry that I forgot to call you last night. Why don't we go and see a film tomorrow?" (taken from: [http://en.wikipedia.org/wiki/SMS_language])<br />
** Implement a script that abbreviates :-)<br />
* '''Anti-Spam''' ...feature for SMS. May be it's possible to port some Bayesian based application like bogofilter.<br />
* '''Rule based authorizations''' ...for received messages. For example, delete messages from one source between 9h00 and 18h00 (workday) allow them otherwise (to get alerting messages).<br />
* '''Enable chat-like SMS-viewing''' SMS-Email-like: retain SMS app, but store 'conversations' rather than pile-up. Group/archive conversations by Caller Group (Work / Friends / Home / any user-defined Caller Group). Show appropriate icon from either Caller Group or Caller ID at the source of conversations panel<br />
* '''Searching''' allow full-text search or string search.<br />
* '''Massive SMS Deletion''' based on Conversation, author, before-date-xx.xx.xxxx, caller group, [[Wishlist:Tagging|tags]]...<br />
* '''Call Back''' Prompt 'Call Back' alongside other first-line options (Delete, Save number,.. this kind of options) that appear when reading an SMS.<br />
* '''Non-destructive deletion''', deleted messages goes to trash, and are recoverable.<br />
* '''SMS-EMail-Gateway'''<br />
SMS comes in, gets forward to your inbox, like any other piece of mail. Appropriate alerts and etc occur - again, just like for email. A simple SMTPD running on 127.0.0.1 that is hooked to an email-to-SMS translator that will send email addressed to 'SMS@localhost' (or whatever special address) out via SMS<br />
* '''SMS-filter chain''', for stuff like Codeword-SMS above, Theft-mode activation, auto-response (reply with gsm-position for "Where are you?"), auto-substitution (like replace $POS with gsm-position in outgoing SMS).<br />
* '''SCROOGE-SMS''' This is an intelligent SMS router. When you write your SMS you get the option of how to send it<br />
** By standard carrier SMS - cost 10cents<br />
** By OpenMoko SCROOGE SERVER - this will send your SMS to the OpenMoko Community SCROOGE SERVER next time you have WiFi - the phone will remind you to turn on WiFi when it knows you are in places where you have WiFi access. The person you are sending to picks up when they come into WiFi Range. This comes with an intelligent reminder that tells you that message has still not been delivered in 24 hours and would you now like to send it by a paymethod. This is better than IM because both parties do not have to have WiFi at the same time. - cost FREE<br />
** By email/Wifi - cost FREE<br />
** By email/GPRS - cost ?<br />
** Too many options!!!<br />
** Alternatively SCROOGE SERVER could auto launch IM client if it detects both parties have WiFi at the same time (Status kept on SCROOGE SERVER?) to allow instant reply..... Person who receives has the option to reply in SMS or in IM or in VOIP phone.<br />
<br />
=== Text input ===<br />
{{Main|Wishlist:Text Input}}<br />
There are many good suggestions for text input on the specific text input ideas page.<br />
<br />
=== More/Custom Input Method Widgets ===<br />
{{Main|Wishlist:More/Custom_Input_Method_Widgets}}<br />
Additional and customizable Input Method Widgets (similar to virtual keyboard). <br />
This could add soft-key functionality to games or other applications such as:<br />
*D-Pads<br />
*buttons<br />
*virtual trackballs<br />
*...<br />
Personalized layouts could be associated with each application.<br />
<br />
=== Games ===<br />
{{Main|Wishlist:Games}}<br />
<br />
=== Mesh Networking ===<br />
{{Main|Wishlist:Mesh Networking}}<br />
<br />
=== Printing Support ===<br />
It would be really neat to be able to print over either bluetooth, Wifi, or USB. I can imagine wanting to print:<br />
<br />
* Notes<br />
* Maps<br />
* Email<br />
* Calendars<br />
* ...<br />
<br />
Cups contains a bluetooth printing backend, so (in theory) once you have your data in postscript format, you could hand it to cups and it'll do the rest. In practice, it depends on<br />
<br />
# GTK+'s printing support<br />
# Making cups run on a really small system<br />
<br />
{{note| GTK+'s printing support seems to be very immature in 2.6 (which we need to use for some time). Gtk+ 2.10 contains much better printing support -- once we can use this, it should be more easy.}}<br />
<br />
There's always the possibility to render postscript ourselves, but this is not a piece of cake -- in general, printing is much harder than one would imagine.<br />
<br />
Further details:<br />
* [http://groups.osdl.org/apps/group_public/download.php/2205/print-summit-gtk.pdf#search=%22gtk%2B%20printing%20API%22 osdl.org]<br />
* [http://www.gnome.org/~alexl/presentations/guadec2006-printing.pdf#search=%22gtk%2B%20printing%20API%22 gnome.org]<br />
* [http://www.j5live.com/?p=204 j5live.com]<br />
<br />
===Misc Software===<br />
====Clocks/timers/Activity meters====<br />
===== Sport tracker =====<br />
{{Main|Wishlist:Sport_tracker}}<br />
Sport tracker can be used to measure the distance/velocity from point A to point B (or it could have several intermediate stopping points) using GPS. This would be extremely useful for running, biking, hiking, etc.<br />
<br />
===== Standby clock =====<br />
{{Main|Wishlist:Standby_clock}}<br />
A quick way to see what time it is.<br />
<br />
===== Egg Timer =====<br />
{{Main|Wishlist:EggTimer}}<br />
<br />
Very simple (one click) count up / count down timers are very useful.<br />
<br />
===== Cycle Computer =====<br />
As already mentioned by [http://wiki.openmoko.org/wiki/User_talk:Technil Technil], a cycle computer could be created using gps. The sensor at the bike's wheel could transmit data via bluetooth or some cable that would be attached to an openmoko device. In order to save power, one could switch off the gps and only use the bike's sensor.<br />
* Just another idea that came to me: Why don't have sensor's transmit cable plug into the headphone/microphone plug? A tool reads the signals created by the induction of the passing magnet, then gives them to the cycle-computer-app :) --[[User:Minime|Minime]] 19:50, 12 April 2007 (CEST)<br />
<br />
===== NTP Server =====<br />
<br />
Run the [http://www.ntp.org NTP] daemon using the GPS chipset as a reference clock, so that the Neo would have a very accurate time-of-day clock and would be able to serve time to other networked devices. <br />
<br />
I don't know what it would take to implement this. Items to consider would be the availability of a 1 pulse-per-second hardware signal, the accuracy of timestamps delivered in NMEA messags, etc. Dealing with power-management issues (such as the device going to sleep) would also be challenging.<br />
<br />
===== Reality check reminder =====<br />
{{Main|Wishlist:Reality check reminder}}<br />
<br />
A tool to [http://www.phrack.org/issues.html?issue=64&id=16 hack your brain]<br />
<br />
===== Automatic timezone changing (GPS) =====<br />
<br />
Check the timezone with GPS and adapt them.<br />
<br />
====Calculators====<br />
===== A Universal Unit Converter Tool =====<br />
<br />
One never knows when one may have to convert acre-feet into deciliters. A unit conversion tool makes all engineers and engineer wannabes much happier. And not only the engineers. <br />
<br />
Ideas what kind of conversions a converter tool could do:<br />
<br />
Lenght<br />
- Acceleration<br />
- Angle<br />
- Angular Velocity<br />
- Area<br />
- Capacitance<br />
- Radioactivity<br />
- Currency <br />
- Charge<br />
- Computer Memory<br />
- Conductance<br />
- Density<br />
- Energy<br />
- Illumination<br />
- Power<br />
- Force <br />
- Flow<br />
- Pressure<br />
- Speed<br />
- Temperature<br />
- Time<br />
- Torque<br />
- Viscosity<br />
- Volume<br />
- Weight<br />
<br />
Roman Numerals<br />
- ASCII, Hex<br />
- Cooking<br />
- BMI<br />
- Clothing Sizes<br />
<br />
Money Converter based on current rates from Internet...<br />
e. g. Dollar <-> Euro<br />
<br />
Physical and Mathematical Constants<br />
GPS conversions <br />
<br />
- link to or integration of a scientific calculator<br />
- link to or integration of a simple calculator<br />
<br />
A good basis for such a converter tool could be the Palm program "units" from <br />
François Pessaux [http://francois.pessaux.neuf.fr/files/units1_11.tgz]. The GPL'd program comes with full documentation.<br />
<br />
For GPS conversions see gpsbabel [http://www.gpsbabel.org]<br />
<br />
===== An Postfix Notation (RPN) calculator =====<br />
<br />
Many engineers, computer scientists and other groups who have grown to enjoy the simplicity and ease of an postfix notation calculator will miss them when they give up other platforms to move to OpenMoko. A RPN calculator will increase adoption by providing one of the tools that other platforms have provided for many years.<br />
<br />
==== Windows CE Emulator ====<br />
<br />
On ARM machine, Windows CE API emulator, like Wine on x86 machines. <br />
<br />
==== PalmOS Emulator ====<br />
<br />
The Access group is probably coming out with their Linux platform any time soon. One of the components is a PalmOS emulator which I'd like to see working on OpenMoko as well. There are literally thousands of PalmOS apps.<br />
<br />
I'd like to see a Windows CE Emulator with active sync support.<br />
<br />
==== TV Guide/Remote Control ====<br />
<br />
Use your Phone to easily program your VCR using EPGs.<br />
<br />
<br />
==== Alcohol meter ====<br />
Give the phone some info about your body (gender, size, weigth) and when/what you drink and it will compute an approximation of the amount of alcohol in your blood. Updates automatically, could have an alarm, when you are probably sober again.<br />
See, for example (German text) http://www.misterio-online.de/promille.htm<br />
<br />
==== Interaction with LEGO Mindstorm ====<br />
With the accelerometers, GPS and good CPU, the phone could be used to control/serve as input with robots built with LEGO Mindstorm, which can be accessed by USB and Bluetooth.<br />
<br />
==== Flashlight ====<br />
Simple finger application that makes every pixel on the entire screen white to be as bright as possible until you tap the screen again to turn it off. This way, you can use your Neo as a (short term) flashlight!<br />
<br />
==== Wii Controller Emulator ====<br />
Use the accelerometers and buttons on screen to work as a Wii controller via Bluetooth.<br />
<br />
==== FUSE support ====<br />
Ability to use FUSE to mount larger file systems over wireless. (even gmailfs, sshfs, etc.)<br />
<br />
=== Accessibility ===<br />
Accessibility features for the visually impaired.<br />
* High Contrast Themes.<br />
* Screen Magnifier. Features should include automatic cursor tracking when navigating menus and entereing text and provide manual controls to zoom in on other section of the screen.<br />
* Text to speech. The software should read out menu item ,contact lists ,text messages etc. Would also be useful for operating the phone while driving. see: [[Wishlist:Speech synthesis]]<br />
<br />
==== VOIP ====<br />
Ability to use the phone for VOIP over wi-fi such as Vonage. They currently have 2 different pieces of software for pc . Basically software creates a mac address which is paired with your Vonage account. Skype could also be implemented but I prefer Vonage. Only available when connected to wi-fi with a good connection. Phone treats calls the same as a cellular call, could keep a separate log of minutes, ability to record conversations, etc. Option to use VOIP if connection is available automaticly or manually. Small icon to show when call is using VOIP.<br />
* A standard SIP client would probably fit better into the "free and open" philosophy.<br />
* Ideally a SIP client that includes ZRTP/SRTP for secure communications.<br />
(Note: Vonage will not give you your SIP credentials, so you cannot log into their network with a non-approved softphone. Other VoIP providers have different policies.)<br />
<br />
''This seems very similar to what [http://en.wikipedia.org/wiki/Generic_Access_Network UMA] offers.''<br />
<br />
Asterisk is a great communication platform that can run on small devices. I have an Asterisk server running on a Nokia 770 and I read about running Asterisk on an iPhone. With the crosscompiler available it sould be possible to compile it and run Asterisk on an openmoko phone and let it take care of almost everything on the wishlist below.<br />
Edw/<br />
<br />
==== Power Meter ====<br />
If the power bar is clicked on it will show time left on charge and if charging it will show time until full.<br />
<br />
=== Accelerometer wishes ===<br />
==== Flick interface ====<br />
Ability to "flick" the phone for page up/down by simply and rapidly tilting the phone back-and-forth for up and forth-and-back for down. The same motion can be implemented for sideways motion. This will take advantage of the 2 3d accelerators.<br />
<br />
Sensitivity of the scrolling should be configurable and a test option provided.<br />
<br />
==== Reading navigation of documents enhanced by accelerometers ====<br />
If the two accelerometers in Neo1973 allows it, it will be nice if when you're reading, give a newspaper, you can move up, down, left and to the right the viewing of the document just moving the phones to the corresponding direction.<br />
<br />
I don't know if this is possible (haven't seen the project in detail yet) but this feature could be very attractive for final users (and this is good). (sorry for my english but i'm italian)<br />
<br />
==== Wand UI ====<br />
In keeping with the requests to think outside of the box... the dual 3d accelerometers should enable a 'magic wand'-style UI for certain uses. Macros could be recorded and edited, or presets could be used. For example, flipping the device playfully could initiate a game mode or could signal the end of the work day.<br />
<br />
==== Shake-to-Wake ====<br />
Giving the phone a shake enables voice commands for a few seconds.<br />
Usage Examples: <br />
<br />
* {Shake} "Call" ''ContactName'' ''PhoneType''<br />
* {Shake} "Call John Mobile" (Calls John's mobile)<br />
* {Shake} ''ApplicationName''<br />
* {Shake} "Reader" (Opens the e-book application)<br />
<br />
Would require a method of inputting voice tags for applications and contacts and obviously will only work for P2 (accelerometers)<br />
But lets get voice command functionality working before P2 (just by pressing a button on the screen instead of shaking)<br />
<br />
I think that is possibly to replace "Shake" with double hit with finger in the side of phone. Proper algorithms(with accelerometers) should recognize any similar activities.<br />
<br />
==== Emergency call ====<br />
When the accelerometer detects a great acceleration (i.e. 5G) start a countdown sequence, if it is not stopped make a call to a preconfigured emergency number. If the data from the GPS is accurate give it.<br />
<br />
A first version could use a recorded message (an audio file). In next version it could use a synthesizer, so it can give more information (add GPS information when it is ready).<br />
<br />
:I would worry that most such events would be false positives, and hard to distinguish from the real thing. A user dropping their phone (an event very common in the life of any cellphone) is far more likely than a user being in a car accident with their phone, and the clatter of a cell phone on asphalt could reach 5G. Additionally, it has to be very hard to distinguish hitting pavement from hitting a windshield, as from a physics standpoint the two are the same thing. [[User:Hashbrowncipher|Hashbrowncipher]] 02:06, 26 October 2007 (CEST)<br />
::It could use the gps data to calculate the speed it is traveling with. Let's say it has been moving for more than 50 km/h for more than 10 seconds. Then it could activate the "emergency call if more than 5g" function. Aside from the countdown timer, it could increase the volume to max and warn the user that an automatic emergency call will take place in x seconds. While it is counting down it could listen for "Never mind, I'm fine, phone" and stop the countdown in case it hears that. It could also output the warning sound to the attached bluetooth headset and let the user talk to emergency services if the user is still conscious. [[User:Tommy|Tommy]] 17:48, 8 January 2008 (CET)<br />
:::Perhaps have the phone yell loudly that it's about to do the emergency call for a decent amount of time, disabled by touching the screen or entering the pin number. [[User:sin|sin]]<br />
<br />
==== Movement detection ====<br />
By detecting that the owner is walking a user defined profile can be activated with a specific set of notification settings. For example you may wish to use a cheap old sounding ringtone so you don't attract attention from muggers. Or you may wish to have a louder ringtone if you carry your phone in a bag where it can't be so easily heard.<br />
<br />
==== Games ====<br />
Imagine a first person shooter that you look around by turning your body.<br />
<br />
==== Sloshing battery indicator ====<br />
Shaking the phone will produce a sloshing sound, as if it contained a liquid. As the battery loses charge, so the sound produced on being shaken, will replicate a decreasingly empty container. [http://mobile.slashdot.org/article.pl?sid=07/11/28/1342248] for an example.<br />
<br />
<br />
==== Others ====<br />
Also see the pages[[Wishlist:Auto Align Map]], [[Wishlist:Determine Position]], [[Distance Measuring]], [[Wishlist:Computer Mouse]], [[Wishlist:Dynamic Screen Orientation]].<br />
<br />
=== Connectivity ===<br />
<br />
==== VNC client ====<br />
A good, stylus friendly VNC client/host combo would be easy to add and terribly useful.<br />
<br />
<br />
==== Networked X-Windows ====<br />
<br />
Whether it's running true X-Windowing over the network, or your bog-standard VNC connection as mentioned above, the ability to have your phone's screen available on your laptop or palmtop would be most desirable.<br />
<br />
==== NX client ====<br />
<br />
A form of X-windows forwarding optimized for performance over slow, or high-latency links, which could prove extremely useful. Capable of streaming a good quality, full desktop session over modem speeds. The protocol and at least one implementation is gpl'd. [http://en.wikipedia.org/wiki/NX_technology wikipedia]<br />
<br />
==== OpenOffice Presenter Control ====<br />
<br />
I Think it is a good idea to control your OO Presentation with Openmoko about WLAN or Bluetooth.<br />
I think it needs some buttons to go back or forward and control the mouse to show something and take normal mouse clicks.<br />
But with the mouse clicks I think that we need a short time between the clicks in example 1 second. Because when you make a mouse <br />
click than to fast than you must go back.<br />
<br />
==== Amarok and other Media Player remote control ====<br />
<br />
Control Amarok or any other Media Player with OpenMoko (as a remote control). Bluetooth or WLAN could be used as protocol to send and receive the data. Maybe a WebInterface of Amarok is a start. Can be used on parties for a mobile music management.<br />
<br />
==== Read informations with SMS ====<br />
Send a SMS with Code to the OpenMoko (from a specific number).<br />
For example to send get the GPS coordinates from a stolen Neo (or if you don't know where your Neo is).<br />
<br />
=== Security ===<br />
<br />
==== General Filesystem Encryption ====<br />
<br />
If anyone wants to get your private data saved on your OpenMoko device, he should have to get through a high security mechanism like dm-crypt. The question is how much CPU power would be needed. <br />
Would it be an idea to encrypt only the private data like phone numbers, preferences, address book etc. (like /home/$USER).<br />
<br />
http://luks.endorphin.org<br />
<br />
==== My Account ====<br />
{{Main|My Account}}<br />
A way to securely store information about the phone, and ensure that a phone you may be considering purchasing is not stolen.<br />
<br />
==== [http://zfoneproject.com/ Zfone] or similar ====<br />
<br />
Something that allows the user to speak with another person securely.<br />
<br />
==== GSM Encryption ====<br />
<br />
This software application would allow GSM encrypted calls to be made using the GSM Data Call Channel. <br />
<br />
[[OSvS]]<br />
<br />
==== My Voice is my Passport ====<br />
Use voice recognition to unlock the phone. "Hi. My name is ... My voice is my passport. Verify me."<br />
<br />
==== Firewall ====<br />
A network firewall<br />
<br />
==== Full Mac Support ====<br />
Full mac support, preferably with full software and full sync capabilities with iCal and iMail <br />
<br />
==== Anti Theft Application ====<br />
<br />
This application would enter the phone into an [[Anti-Theft Mode]] which activates particular security features to reduce the risk of theft and also to ensure a higher probability of recovery of a stolen handset.<br />
<br />
====RFID based personal alerts====<br />
Assuming an RFID reader is available: You'd put an RFID tag on your keys, wallet, etc and train a program on the phone to give you a soft or hard alert when one of them leaves detection range. That way, if you're walking away from one of them, the phone could alert you.<br />
<br />
====OpenVPN Client====<br />
This application allows to configure the device as an OpenVPN client using the GUI including support for X.509 certificates.<br />
<br />
=== Integrated Help System ===<br />
<br />
A help system that is either on or off. It could be activated and deactivated by a [[five-second-press]] on a button, for example the AUX button. When the help system is activated, it will explain the use of any item you touch on screen (with stylus or finger). Example: if you touch the battery icon, it will explain that this shows battery level / remaining time. If you touch the date / time icon, it will explain that this icon shows date and time, and that if you press it, you can set date and time. Primarily, this help system should be able to explain all user interface elements in the main screen, but if it proves popular, it could be expanded to cover other applications as well.<br />
<br />
===Performance optimisation===<br />
==== Use DMA engine in CPU for blitter ====<br />
The DMA engine in the CPU can substantially speed up moving of large areas of screen in some cases.<br />
<br />
==== Use virtual screen to optimise scrolling ====<br />
In some other cases, the hardware supported virtual screen may also speed it up.<br />
===Reusable Display/UI Widgets===<br />
====Use BigPage for full page zoom, scroll, scale in many apps====<br />
The [[BigPageWidget]] Page decribes a widget that could bring full natural page viewing, scaling, scrolling to the OM platform - allowing all applications to make intuitive UIs. A good way to read documents of any type without reformatting them massively increases the utility of a device with a small screen<br />
<br />
==Bluetooth==<br />
<br />
=== Voice Dialing ===<br />
<br />
Dial by voice commands.<br />
<br>Dial by dictating phone number. This way we can voice dial any number even if not in our contact list.<br />
<br />
=== Music through Bluetooth Headset ===<br />
<br />
Music can be played through a Bluetooth headset, but would stop playing when a call comes in.<br />
<br />
=== Walkie Talkie ===<br />
<br />
Let OpenMoko devices connect to one another via bluetooth or another connection method (GPRS for long distance but high latency, probably Wifi on P2), and hold a conversation.<br />
<br />
Features for this applications can be:<br />
* Push To Talk (PTT) button<br />
* Voice Activated Control (VAC) which will set it in transmit mode when input has is detected above a certain predefined level.<br />
* Optionally a full duplex mode<br />
* Different channels to choose from<br />
* Monitor different (preselected or all) channels for traffic.<br />
* Content encryption<br />
* Active noise control<br />
* Allow zero config use (units can talk without any access point helping)<br />
* Overview of all connected people trough sending GPS data to everyone who is in the Walkie Talkie channel<br />
<br />
Local (non-GPRS) use cases include chatting while biking<br />
or motorcycling in a group; perhaps also in a car caravan.<br />
This application could also be used as a baby-phone to monitor your siblings.<br />
<br />
This would be more useful if the Neo had Class 1 bluetooth, though probable Wifi on P2 will also offer more range.<br />
<br />
(One thumbs up from me) Jackcday<br />
<br />
=== Automatic Sync ===<br />
<br />
Automatically synchronize with desktop computer (or with any [http://en.wikipedia.org/wiki/SyncML SyncML] server) when within range based on user profile. This may require the use of a secure data transfer.<br />
<br />
=== GPS Assisted Bluetooth Management ===<br />
<br />
Allow Bluetooth to automatically turn off after loosing connectivity and to automatically turn back on based upon GPS location.<br />
<br />
A Bluetooth device is configured for automatic reacquisition based on the following profiles:<br />
* Manual - only when Bluetooth is on<br />
* Non-mobile - the target device is not mobile, periodically attempt reacquisition when in the general area of the device.<br />
* Mobile - the target device is mobile, periodically attempt reacquisition when in the general area of the device.<br />
<br />
Each target device is configured as follows:<br />
* Automatic acquisition at last known location: enable/disable<br />
* Automatic acquisition at these locations: list of nickname + coordinates + range<br />
<br />
==== Non-mobile devices ====<br />
<br />
Examples devices include: computers<br />
<br />
The location and range of the target device is determined via training. Periodically, the current GPS coordinates and Bluetooth signal strength are logged. Additionally, connectivity loss events are logged. An algorithm uses these logs to determine the device location and range.<br />
<br />
Connection attempts are made when in a configurable proximity to the device. The first attempt when entering the proximity and further attempts at a configurable interval.<br />
<br />
==== Mobile devices ====<br />
<br />
Example devices include: automobiles<br />
<br />
Mobile devices are configured to have two types of locations:<br />
# Last known location<br />
# Non-mobile locations (homes)<br />
<br />
===== Last known location =====<br />
<br />
A car is mobile, ideally, when you leave your car, the phone should note the car's location when connectivity is lost and then attempt to reacquire the car when you return to the location of the car.<br />
<br />
===== Non-mobile locations (homes) =====<br />
<br />
As mobile devices may have multiple users, it is not sufficient to always use the last known location. In this case, the device may additionally have multiple homes. For example, a car might have as its homes: home garage and work parking lot.<br />
<br />
=== Bluetooth neighbor detection and multiuser apps ===<br />
<br />
Like the [http://en.wikipedia.org/wiki/One_laptop_per_child one laptop per child] (OLPC) interface, keep a number in the status bar that represents a count of other openmoko or compatible bluetooth devices in the area. Allow for the spontaneous initiation of a chatroom or multiplayer game or file trading with any moko in the area.<br />
<br />
=== Bluetooth environment detection ===<br />
<br />
Capability to detect when a predetermined bt device enters/leaves bt range and launch a system-wide event accordingly. This would feed not only the "Neighbour detection" idea described above, but also the "Profiles", "Context based TO-DO list" and "Location-based reminders" ideas. Reminders could be set to trigger in the presence of a specific person X (with BT device Y). Profiles can take into account which devices are present around the phone (car kit, for ex.). To-do list could also change according to present devices.<br />
<br />
=== Remote control ===<br />
<br />
==== Wireless presenter ====<br />
Use the phone to run your OpenOffice.org Impress presentation remotely using Bluetooth. Cool features: <br />
* Display the text notes for the presenter on the phone's display and update it whenever the slide is changing.<br />
** OO.org has implemented support for [http://www.openoffice.org/issues/show_bug.cgi?id=12719 dual monitor]/[http://www.openoffice.org/issues/show_bug.cgi?id=18486 presenter mode] that can be used as a starting point<br />
* A small timer showing the time passed (and perhaps remaining if the presentation app supports such a feature). <br />
* If you want to be super-cool, you give a preview of the notes of the next slide in the show. <br />
* At the end of a presentation, a "navigator" could allow to easily jump to any slide in the presentation by clicking on it on the phone.<br />
** When you right-click in a running OO.org Impress presentation, you can choose "got o slide..." and select any slide to jump to.<br />
<br />
==== Initiated from another device ====<br />
Remote control over Bluetooth from other devices to control media player (play, pause, next, previous, volume control), camera (capture image), etc.<br />
==== Directed at another device ====<br />
Remote control over Bluetooth to other devices to control media player, lights in your house, etc.<br />
<br />
[http://mjr.iki.fi/software/remote-0.9.0.tar.gz Remote] is my draft of a python-based remote control app that allows you to define button sets and commands to run on the local or a remote host (through ssh, for instance). Error handling and command interface need work.--[[User:Mjr|Mjr]] 11:14, 18 October 2007 (CEST)<br />
<br />
Z-wave uses web-browser control of devices that is said to be compatible with mobile phone browsers so should work with openmoko browser. [http://www.z-wave.com www.z-wave.com]<br />
<br />
=== Bluetooth Car Connection ===<br />
<br />
Have a deeper connection to the car than just handsfree speakerphone. For instance a transceiver with challenge/response systems to open, possibly even start the car. Possibly go as far as OBD connection to monitor car status on screen/log for later.<br />
<br />
Could be done with a port of [https://garage.maemo.org/projects/carman/ Carman] or similar that can connect to an OBD2 adapter via USB or Bluetooth and display various information collect from the car, GPS, and accelerometers. --[http://wiki.openmoko.org/wiki/User:Bmk789 bmk789]<br />
<br />
==== Dude, Where's My Car? ====<br />
<br />
When in range of the car navigation system, remember the position (perhaps check with the car GPS). When not in range, assumme that you are not in the car, and offer the opportunity to navigate to the car's last known position. That way, you can find your car e.g. on a large parking lot.<br />
<br />
=== [[Bluetooth powered Multi-SIM support]] ===<br />
<br />
As the Neo1971 does not come with dual-SIM support this could be solved by joining your old bluetooth-enabled mobile to your OpenMoko-phone.<br />
<br />
Let SIM card A be in your OpenMoko-phone and SIM card B in your old mobile:<br />
* Incoming call on SIM card B - the OpenMoko-phone acts as a headset(Bluetooth Headset profile)<br />
* Calling out via SIM card B - the OpenMoko-phone acts again as a headset<br />
* Same for Short Messages/MMS/Internet<br />
This way you'd have your old phone switched silent and connected to your OpenMoko-phone that handles all the calls and one can select which SIM card to use.<br />
Advantage: No 'switching' between cards<br />
Disadvantage: Second mobile needs to be in range(e.g. handbag) and charged every once in a while.<br />
<br />
===Internet Gateway===<br />
<br />
If the device could function as a Bluetooth router/gateway to the internet via the GPRS/data connector, then you could use it to get network connectivity from your laptop and other devices while on the road. Many smartphones can be configured as modems via Bluetooth for use as Dial-Up Networking connectors, and that should be the minimum target. Ideally, if the WiFi functionality was used so the OpenMoko could be an 802.11 router or peer to peer gateway for a laptop, this would be even better. The full bandwidth of GPRS or whatever network is available would then be available.<br />
<br />
=== Social Networking ===<br />
<br />
Anybody running the social networking app will be broadcasting a profile, and when certain keywords are matched with other users who are also running the application, an alert is sounded. Each mokoid can be added as a hexstring to a profile page, and xml filters can be developed for each social service to convert various keywords and interests to moko-friendly format.<br />
<br />
=== Give userspace api control over bluetooth signal strength ===<br />
<br />
I have tried bluetooth handsfree sets with other phones and don't get perfect reception due to low signal strength. I suppose the reason the signal is so weak is because the manufacturer wants the battery to last long on its latest charge. Can you please make the strength setting configurable by the user of the phone through an api and perhaps even through the phones gui? I would gladly waste some battery time in exchange for stronger bluetooth signal strength.<br />
<br />
<br />
== WiFi ==<br />
<br />
=== Industrial grade Wifi management ===<br />
One annoyance I've had with Wifi enabled gadgets is that they simply keep the connections in a dumb list. What I'd like to see is more granular connection management, which enables me to specify whether a given connection is friend & family (mom's place), professional client (joe's copies and coffee), commercially available (panera), onetime use, or anything else, as well as managing router config backups, firmware images, and security keys. <br />
=== Captive portal auto-login support ===<br />
Having a nice front-end to some sort of script that checks the authenticity of a captive portal login page (SSL cert), then passes your username and password login information to automatically log you into your account would be very nice as well. This can be done with curl, but it is difficult to make it work on all captive portals out there. Perhaps just a field that you can specify "once I am connected to this AP, run this script: ".<br />
<br />
== Wireless Piggyback ==<br />
<br />
HSDPA support and the like, so that users can connect directly with the internet with G3/G4 mobile service providers at speeds at or above 3.6 Mb/s.<br />
<br />
== Other ==<br />
<br />
=== Auto Update ===<br />
<br />
A small tool which is configurable to download the latest OpenMoko and OpenMoko related software. Maybe if any internet connection is available or a minimum of bandwith is available then the auto update would download only security related or the whole system etc. .<br />
<br />
=== Vibrate Pattern Recorder ===<br />
<br />
An application that would allow the user to define their own vibration patterns, and possibly link them to audio files. Recording would be done in real time initiated with a "Record" button, optionally playing the associated sound file in sync with recording). While recording, the user would press and hold a button to define the timing and duration of vibration. The user would press "Stop" when finished. Vibration patterns would have the option of being looped(would terminate at some global ringtone length maximum).<br />
<br />
One simple suggested vibration file format would be a sort of run-length encoding: First byte defines the length of a "time-slice" in milliseconds, which would determine the overall tempo(actually the inverse of tempo). The next byte would define the number of time-slices to leave the vibration on, and then another byte for how long to pause after. Continue alternating these on/off bytes until the entire pattern is defined.<br />
<br />
- or just use MIDI, using a separate channel for the vibrator.<br />
<br />
An implementation of RTTL could also be used to define vibration patterns.<br />
<br />
=== PC Input Device ===<br />
<br />
Provide a method to use the touchscreen as input device for a nearby desktop machine. Could connect over USB or bluetooth.<br />
<br />
=== Advanced Notification And Ringtone Manager ===<br />
{{Main|Wishlist-ANARM}}<br />
<br />
ANARM would be an application for handling all event-based audible notifications from an OpenMoko device.<br />
<br />
=== Location based reminders ===<br />
{{Main|Wishlist:Location_based_reminders}}<br />
Location based reminders can be used to notify users of various events or reminders that are location based.<br />
<br />
=== Synergy Client ===<br />
A synergy client would enable the user to place the device next to a desktop PC and share the desktop`s mouse, keyboard and clipboard over a TCP/IP network. [http://synergy2.sourceforge.net/ Synergy]<br />
<br />
=== Next device ===<br />
List features for your fantasy device to come from FIC (or anyone else, for that matter). Define the GTA03 here ;-)<br />
<br />
==== There is no device ====<br />
From [http://wurp.blogspot.com/2008/01/teh-future.html Wurp's blog]:<br />
<br />
Clearly the Next Big Thing has to be for the device to go away altogether. I know the basic idea for wearables has been around forever, but it seems to me that the time has come.<br />
<br />
I wanna wear a bluetooth earpiece and cool shades, possibly with [ here's where my imagination is failing me :-( ] gloves, or fingerless gloves, or (ew) wristbands, and let any surface, including my hand, or no surface, be my interface. Tap the earpiece when you get a phone call, see a dial pad on your palm and tap out the number with the other hand, watch movies on a giant screen hovering in the air...<br />
<br />
(equipment list: bluetooth earpiece, some brick in my pocket or on my belt, glasses w/ minute camera, painted video display, & variable darkness lenses, and gloves)<br />
<br />
Why the hell do I want to dig out a device every time I want mindless entertainment or superficial conversation?<br />
<br />
Ideally, you could then sell any little doohickey with whatever interface you want (switches, knobs, g-spots, ...) and all it needs to do is network with some software on the brick to be anything at all...<br />
<br />
== GPS Software ==<br />
*Providing GPS Support also for outdoor users in addition to ordinary street navigation features<br />
** Overlay of satellite images with existing streetmaps<br />
** Incorporating SRTM digital elevation model: for example using the VRML/X3D as data format (see http://www.ai.sri.com/geovrml/) which is interesting for e.g. mountaineering: using a 3d browser rendering VRML/X3D Model, displaying the current position and track (possibly also other gps-tracks of the different routes to a summit downloaded before could be mapped onto the 3d model), (what about 3d hardware support? there is nothing written in the hardware specs about graphics: thinking of OpenGL for embedded systems (see http://www.khronos.org/opengles/)<br />
** Using sth like a tracking mode to allow certain people to determine the current position and track (for rescue missions - like they have for example at http://www.steiger-stiftung.de (a German beneficence for rescue issues) There you can register your mobile phone so the rescue service is able to track you immediately if necessary. The interesting thing: It seems like some mobile phones with GPS have special support for this issue. If your phone is registered, the rescue service is able to get your GPS coordinates directly from the phone without any user assistance. Openmoko should also support this! )<br />
* Implementation of 3dTracking's (http://free.3dtracking.net/) tracking software or equivalent.<br />
* "Geomark" function: if you have to save the current time with your current location, only hit one button...<br />
** You also should be able to navigate with a small "compass" and the distance should be displayed to your saved point (maybe where you parked your car on a big car parking area)...<br />
* '''Measure the distance between two points (air line or walked way) -> no need for a tape measure'''<br />
**I think it would be good if you could either use Bluetooth, GPRS or AdHoc Wifi, and see near Neo1972 on the GPS map so you could see where your friends are, e.g "You want to know if you friend is on the bus behind" You would need a strong wifi and GPRS would be too expensive.<br />
*A bicycle sat-nav would be cool, speciayl designed for bicycles, e.g. cycle routes<br />
<br />
<br>[[Community Based Traffic Information]]<br />
<br />
== Hardware ==<br />
{{Main|Wish List - Hardware}}<br />
<br />
It could be use for beepway Online service too <br />
[http://www.beepway.com]<br />
<br />
=== Dedicated Power / Charger Pinout ===<br />
<br />
Having not yet seen a physical Neo device, I haven't been able to examine any of the IOs to see if there already is a dedicated power / charger input. However, I can imagine that it might be very tempting to have the device charge solely via USB. For any device that is capable of USB-host, that is a '''horrible''' idea.<br />
<br />
Since the device is able to run in USB host mode, it might be a good idea to allow for an alternate power supply, if say, a USB keyboard was being used for several hours. Rather than drain the battery, one could just supply power via the wall outlet while still providing endless hours of USB-host enjoyment for those hard-coders on the go.<br />
<br />
The main question is just deciding on where to take power from if in USB-client mode and the power cable is inserted, but really, that's not too big of a deal and can be solved with very minimal circuitry.<br />
<br />
This might sound extraneous at first, but when the device shuts down in the middle of an important USB file transfer, or right before that great piece of code was saved, you can bet that those users will be saying "Hmm... a separate power adapter would have really come in handy right now". <br />
<br />
I suggest a tiny 3mm, dedicated +5V power input (something a la Nokia).<br />
<br />
=== Tactile feedback via buzzer ===<br />
Assuming the hardware has a vibrator/buzzer for silent calls, use a lightly pulsed version of that to simulate tactile feedback when dragging finger across buttons on-screen. Implemented properly, it would almost feel as if the buttons were real.<br />
: 25 ms bump on the buzzer feels about right. Does this harm the vibrator motor? --[[User:Sagacis|Sagacis]] 05:15, 2 October 2007 (CEST)<br />
:: Created a patch to do this [[User:Sagacis/ForceFeedback]] --[[User:Sagacis|Sagacis]] 05:05, 3 October 2007 (CEST)<br />
<br />
=== Detachable keyboard ===<br />
Hardware keyboard that can be attached with magnets to a future version of the Neo.<br />
<br />
A bluetooth mini-qwerty keyboard that straps to my wrist!<br />
<br />
<br />
=== SD Slot ===<br />
I think the Neo1973 should have a normal SD card slot as the micro is too small, and the SDs have more space.<br />
<br />
: This is not true. Now you can find 2GB micros at the price of 20-30 euros. Too small for what?? --[[User:V0n0|V0n0]] 22:06, 28 December 2007 (CET)<br />
<br />
: Think of putting a few '''movies''' on that SD memory card. It could really help if it was a little bigger (8GB, 16GB, 32GB). Also think of going '''offline''' for 1-2 weeks, far away from any computer you can access and then wanting to listen to some music. What you get in turn with a 2 GB memory slot is the same music over and over. Or you have to switch memory a cards a lot.<br />
<br />
: This situation is far more common than one would think: going in the mountains, going offshore (on a cruise ship). Or simply you may want to store many types of music, and '''share''' your device with friends. --[[User:Bogdanbiv|Bogdanbiv]] 13:47, 10 January 2008 (EEST)<br />
<br />
: Well, it can be micro SD, but why to put it so deep inside, under the battery and even under the SIM card? I would suggest to have a simple slot on the side where we could insert/remove the SD card equally easily as we swap CD's in computer. [[User:AudriusA|AudriusA]] 16:36, 12 January 2008 (CET)<br />
<br />
[[User:Cfriedt|Cfriedt]] 12:40, 24 February 2008 (CET) -- I completely agree with a more accessible SD card slot. It should be made external for quick removal / insertion. I realize that would mean program data shouldn't reside on the SD, but really 256 MB of on-board flash is plenty. Mirco or normally-sized, a regular-sized SD is still trivial to implement in terms of solder pads and traces.<br />
<br />
=== IR port ===<br />
Remote control applications<br />
<br />
Would be great to use openmoko as a Harmony remote controller.<br />
<br />
:I'd like to add that i fully support this. An IR port on future openmoko devices capable of controlling set-top boxes like TV/DVD/Stereo is necessary to make the device as universal as possible. A cellphone should be your window to the world and allow you to interact with it in as many ways as possible.<br />
<br />
:Care must be taken to use the correct type of IR chipset/controller in the phone. Most IR ports you find on devices like computers, some cellphones etc. Are for high speed data communication and CAN'T control TVs/DVDplayers/Stereos etc.<br />
<br />
:In order to reduce cost it maybe possible to use the sound chipset in the phone to generate the waveform sent to the IR led. IR remotes work at ~38Khz which is within the range of the sound chipset. The sound output could be internally switched between the IR led or the speakers.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]</div>Sinhttp://openmoko.org/wiki/Wish_ListWish List2008-03-01T21:51:48Z<p>Sin: /* Emergency call */</p>
<hr />
<div>This article is a place to collect various thoughts about the future of the [[OpenMoko]] software platform. Most wish list ideas have been linked from this page, but you may also wish to check all pages [http://wiki.openmoko.org/wiki/Category:Ideas that have a category of 'Ideas'].<br />
<br />
== Development ==<br />
=== Painless SDK installation & Setup ===<br />
Our goal should be a completely painless setup for somebody wanting to develop using [[OpenMoko]]<br />
<br />
* one command for installation (apt-get install openmoko)<br />
* one command to start Xnest (openmoko-xephyr?)<br />
* one command to start an i386 shell (openmoko-386-shell)<br />
* one command to start an armel shell (openmoko-armel-shell)<br />
<br />
No extra configuration required.<br />
<br />
==== IDE Plugins ====<br />
People like to see plugins for<br />
* [http://anjuta.sourceforge.net Anjuta]<br />
* [http://www.eclipse.org Eclipse] (some things are possible - see [[Development with Eclipse]].<br />
* [http://www.netbeans.org NetBeans]<br />
* Game engine - Game Creation plugins<br />
evaluate eclipse project [http://www.eclipse.org/dsdp/index.php Device Software Development Platform Project from eclipse] and subproject [http://www.eclipse.org/proposals/tml/ Tool for Mobile Linux]<br />
* [http://www.kdevelop.org KDevelop]<br />
* [http://developer.apple.com/tools/xcode/ XCode]<br />
* [http://msdn.microsoft.com/vstudio/ Microsoft Visual Studio 2005]<br />
<br />
==== UI Designer ====<br />
Glade code generation is deprecated, so we don't want to use it. The Gtk+ powers told me that the plan is to have gtk 2.12 (out early 2007) with support for GtkBuilder, a libglade derivative which breaks a bit the XML definition in order to support all the new widgets and properties; as soon as it's in the other ui builders will add support for this format. See also [http://bugzilla.gnome.org/show_bug.cgi?id=172535 the relevant bug entry]<br />
* Possibly a Landscape (rotated) view for the screen (480x640 *or* 640x480)?<br />
<br />
<br />
==== Built-in Scripting Language ====<br />
{{Main|Wishlist:BuiltInScriptingLanguage}}<br />
There was a [http://lists.openmoko.org/pipermail/community/2007-January/001909.html fruitful discussion about a built-in scripting language on the mailing list in January.] Many people feel that it is very important for OpenMoko to choose a scripting language to ship as default in the standard OpenMoko firmware.<br />
==== Easy build of the existing autotools - based packages ====<br />
In the ideal case OpenMoko should exist on the top of the usual ./configure - make workflow which is typical for the majority of the C/C++ based open source projects. It should not require to rewrite or even replace the existing Makefile.am files of the project being ported, and it should allow to pass the needed parameters to the project configure script. Maybe OpenMoko project could be a bigger project having one or more (if some are libraries) autotools - based packages in its separate folders and include the proper documentation how to "wire" the standard autotools based package to the OpenMoko infrastructure.<br />
<br />
===Foreign Widget Set Bindings ===<br />
==== Qt Integration ====<br />
The Trolltech folks have a great widget library. I'd like to interface OpenMoko with Qt4, so that we can write Qt4 applications for the phone which don't look alienated.<br />
<br />
==== Maemo Integration ====<br />
The Maemo folks have created a successful standard for Webpad applications. I'd like to have a set of MaemoMoko and MokoMaemo wrapper classes that allow me add support for running OpenMoko applications on Maemo and vice versa. Perhaps we can get help from the Nokia OSS folks for that.<br />
<br />
==== wxWidgets Integration ====<br />
wxWidgets is a cross-platform application framework that's very popular (I'd say, #3 after Qt and Gtk+). On Linux, wxWidgets uses Gtk+ to implement the widgets. It shouldn't be hard to add support for the additional OpenMoko classes to wxWidgets hence supporting the native OpenMoko look and feel for wxWidgets applications.<br />
<br />
wxWidgets team wants OpenMoko classes too and we (wxWidgets) plan to include this project as one of our ideas for [http://google-code-updates.blogspot.com/2007/02/speaking-of-summer.html GSoC 2007]<br />
<br />
==== SDL Integration ====<br />
SDL is ''the'' game developer library. There are tons of SDL games out there. We should add OpenMoko support into SDL.<br />
<br />
==== Cocoa / GNUstep ====<br />
Allows to use MacOS X as a development platform.<br />
<br />
=== Software: Language bindings ===<br />
==== Python bindings ====<br />
Python bindings seem to be a commonly requested feature. <br />
<br />
[[User:Mickey]] says, "They are kind of usable on the [http://www.maemo.org Nokia 770], but it's at the lower end of being bearable. We should keep this in mind -- Gtk+ already comes with Python Bindings, so we "just" would need to wrap libmoko*. I would prefer to leave this to the community do though, since it doesn't make sense to start wrapping the API until we have a stable API -- and I can imagine it will take us a couple of months after going open until we can start with stabilizing the libmoko API."<br />
<br />
==== C++ bindings ====<br />
There is a whole skilled C++ community coming from the [http://qtopia.net Qtopia] and [http://opie.handhelds.org Opie] projects. If we would consider basing OpenMoko C++ Bindings on [http://www.gtkmm.org/ Gtkmm], then we could drag these guys in.<br />
<br />
==== Ruby bindings ====<br />
Ruby and ruby-(gtk|glade) already ported to OpenMoko according to [http://lists.openmoko.org/pipermail/openmoko-apps/2007-May/000040.html this ] and [http://groups.google.de/group/comp.lang.ruby/browse_thread/thread/6bee9970cf055504 this] mesages. It just have to be included to distribution (only 4.9 MB!)<br />
<br />
==== Java bindings ====<br />
People who concentrate on Java programming would like to have the OpenMoko port of some java virtual machine. GNU Classpath team a lot of great work in the past creating easily portable implementation. Sun's recently open sourced code could also be ported. <br />
==== Other bindings ====<br />
* Perl<br />
* C#<br />
* I think you could skip a bunch of these by binding to Dbus; most languages already have Dbus bindings<br />
<br />
== Community Support ==<br />
<br />
=== [http://projects.openmoko.org projects.openmoko.org] ===<br />
Infrastructure for developers with<br />
* One bugzilla for all projects (makes moving bugs forth and backwards between projects ''very'' easy)<br />
* One mailing list for project<br />
<br />
== Platform ==<br />
=== Community Images ===<br />
In the future there could be complete, unofficial "product images" that are created by the community, for example maybe one that incorporates only free software (in the GNU or OSI sense). Or images build with a particular niche market in mind -- a student for example.<br />
<br />
=== Wishlist voting ===<br />
There could be a kind of voting system like they have at one of those big computer manufacturers homepage. Then the community could vote for the ideas that are most important to them. This would especially make sense for the hardware wishlist, because the hardware is still the part which can't be done by the community that easily.<br />
<br />
Here: [http://www.fevote.com/openmoko OpenMoko suggestion board]<br />
<br />
== Software: Additional features ==<br />
<br />
===PDA Mode===<br />
<br />
There are times when you wish to power up the device and not power up the gsm/cellphone portion of the phone. For example in meetings you might wish to access the PDA side with wifi as is the case for example on an aircraft. On booting some method of booting to pda mode would be good - several other phones offer this feature.<br />
<br />
===Driving Mode===<br />
<br />
It may be forbidden in many countries, but many people use their cell phones while driving. With the touchscreen phones<br />
this is very dangerous: You have to stare at the tiny numbers on the screen and try to hit them with your thumb or try to decipher tiny script of contacts, while steering with the other hand. There should be a configurable driving mode where the interface has a reduced functionality (e.g. only contacts and dialing) with HUGE interface buttons that are easy to use with limited attention.<br />
<br />
===Calling===<br />
<br />
==== Mask ID based on dialed numbers ====<br />
It would be nice if my number only showed up when I call people in my address book and was otherwise masked. The phone I have now either always shows my number or never or can be set on a per call basis. Having it done automatically based on the number dialed would be good.<br />
<br />
==== Use calling cards and similar routing techniques for lower-cost calling ====<br />
Many people use calling cards, low-cost numbers and similar ways of reducing the costs of their calls. It would be nice to have a single panel that would allow you to configure the rules of dialing a number taking in to account such systems.<br />
<br />
==== Outgoing black/white lists ====<br />
The ability to allow or deny outoging calls to certain numbers can be useful in a number of situations (e.g. the holder of the 'phone is a child, untrusted, etc.). This could be related to entries in the contact list, for example a user is only allowed to call people who are in their contact list.<br />
<br />
Also lists for incoming calls? Some friends always come through, unknown numbers get rejected automatically.<br />
<br />
==== Time-based blocking/unblocking of calls ====<br />
Allowing or disallowing outgoing calls at certain times of the day could be useful, e.g. blocking a business phone from making calls outside of business hours.<br />
<br />
====Speaker-phone====<br />
* A speaker-phone is more than simply connecting the speakers to GSM audio, it's also echo cancellation, and eliminating the feedback that will otherwise happen between the speakers and the mic. This software has not been written.<br />
<br />
====Advanced Airtime Tracking====<br />
Many phone users have complicated plans, things like unlimited incoming, 100 anytime minutes, 1000 evening minutes, etc. It would be nice if a user could input the various monthly airtime chunks their plan gives them, and then the phone could track how much is left in each chunk, i.e. How much anytime minutes are left this month? Optionally, the software could warn when someone is close to the monthly limit, to help avoid bigger bills.<br />
On (at least some) prepaid [http://en.wikipedia.org/wiki/Unstructured_Supplementary_Service_Data USSD] can be used to check current balance.<br />
<br />
==== Anti-stutter software ====<br />
Delayed Auditory Feedback (DAF) has shown to reduce stuttering in individuals by 70%. By using the microphone, it should be pretty simple to implement this on the OpenMoko. The DAF functionality should also be present during phone calls. See http://en.wikipedia.org/wiki/Delayed_auditory_feedback for more information.<br />
<br />
====Minimize In-Call mode (check address book while in call)====<br />
On my locked phones I always find it annoying that one can not use other features while a call is in progress. In particular, I'd like to access the address book so that we can (1) give a caller someone else's phone number (or other info) and (2) lookup a phone number when using a calling card or some other proxy.<br />
<br />
Similar request when using the browser (lookup passwords, todo list, etc).<br />
<br />
====Hold Music (Ringback Tone)====<br />
On some cellphone networks you can pay to change the normal [http://en.wikipedia.org/wiki/Ringback_tone Ringback Tone] that the caller hears when ringing, to a customised sound.<br />
This can partially be implemented on the phone.<br />
Issues are:<br />
*In countries where callers pay, this will make you unpopular.<br />
*In countries where the called party pays, it will use your minutes, or cost you money.<br />
**A list of people to activate this function for would alleviate this.<br />
*[[GPRS]] internet connection will stall while the hold music is being played.<br />
*Extra battery used when playing music.<br />
<br />
Also see [[Answering Machine]].<br />
<br />
====Play sound clips over the air====<br />
Dialer could have a tab with big buttons which, when push, send sound clips over GSM to the person on the other end of the call. This feature is included in GizmoProject and is called sound blasts: http://support.gizmoproject.com/index.php?_a=knowledgebase&_j=questiondetails&_i=104<br />
The buttons can have default sounds, but also have the ability to be customized.<br />
<br />
It would also be useful for notifying people why you can't talk (for example, having an "I can't talk tight now - I'm in the library - this is a pre-recorded message" would be good. Also perhaps you could loop a pre-recorded sound in the background so you can lie about where you are, and have the ability to simulate a really bad connection.<br />
<br />
==== DTMF Landline Dialing ====<br />
The ability to hold the Neo near the microphone of a landline handset and have the Neo dial the landline by sounding DTMF tones. The DTMF tones could be generated in software or be pre-recorded files.<br />
<br />
Graphically this could be done by adding a 'DTFM dial' button to a context menu. The user would select a contact then presses the 'DTMF dial' button to start the process. A small delay could also be added to allow time to put the Neo near the landline handset.<br />
<br />
For the Neo to know which area code to use (or not use) the current or last GPS coordinates could be utilised.<br />
<br />
==== Conversation Recorder ====<br />
<br />
An option to record phone conversations. Would be helpful to have the device always recording for every call, with the sound data encoded to low quality Ogg Vorbis or SPEEX and stored in RAM. At the end of the conversation the user would have the option to save to flash or discard the conversation. This idea could also be applied to voicemail so you could save voicemails locally.<br />
<br />
====Unlicensed Mobile Access (UMA)====<br />
T-Mobile recently rolled out a UMA service that hands off calls between the GSM network and WiFi access points. Only a few phones support it right now, this could be a rather unique feature if OpenMoko can implement it.<br />
<br />
This can be combined with a GPS map to show where local free hubs are.<br />
<br />
==== Ignore-Call Button ====<br />
{{Main|Wishlist:Ignore Call Button}}<br />
<br />
Shut up a ringing phone, without accepting or rejecting the call.<br />
<br />
Another alternative might be to use microphone to recognize when the user gives an audible "Shhh!" command. This could prove difficult to determine with the simultaneous ringing, and possible in-pocket shuffling noises.<br />
<br />
A really usable feature is to "reject with SMS/text message" - letting the user reply the caller choosing a previously setup template or typical response: "I'm in a meeting - I'll call you later" or "Can't take your call now, please call back in 10 minutes". This feature typically is a much better way to get your co-workers (ie boss) to back off, than to silently ignore the call.<br />
<br />
==== Voice Mailbox ====<br />
{{Main|Voice Mailbox}}<br />
On-Phone voice mailbox that records calls on the phone and retrieves voice messages from your mobile service provider's voice mailbox and saves them locally.<br />
Can act profile-dependent.<br />
<br />
==== Hold Button ====<br />
<br />
Similar to mute, but plays a sound file for the user on the other end while they wait. The sound file could be chosen in some setup beforehand.<br />
<br />
==== Unanswered Call, Fast Call ====<br />
<br />
In Greece because of the various bill programs some people call a mobile phone, rings one time and then hangup.<br />
Then the user of the mobile phone calls the other user(using the CallerID recognition).<br />
<br />
===Audio===<br />
<br />
==== Ambient Noise Detection ====<br />
{{Main|Wishlist:Software:Ambient Noise Detection}}<br />
<br />
Using the microphone to detect ambient noise the ringtone volume could be adjusted automatically.<br />
<br />
Detection of ambient noise could also be used to subtract the noise from the audio signal. However this approach is best performed using two Microphones, one for the voice and the other to detect the noise.<br />
<br />
==== Active noise control ====<br />
<br />
Using the microphone to do [http://en.wikipedia.org/wiki/Anti-noise active noise control] on media player playback or telephone calls. This should be an independent module/library which can be used by any application which might require this feature. also provide a way to easily alter the parameters of the active noise control.<br />
<br />
==== Hear Impaired Mode ====<br />
<br />
Hearing impaired people need louder speaker(but with less volume than hands free) and equalized sound, based on their hearing problems(example 20dB hearing loss from 2KHz to 4KHz).<br />
Older people 50+ years old need slower speech rate(time stretch, cut the big speech gups) and cleaner voice.<br />
<br />
Please note also the Hearing Aid Compatibility regulations in the US. I have tried to summarize and clarify them [http://quux.wiki.zoho.com/WhereAreHACphones.html here]. I haven't yet discovered whether the FIC device is M or T rated. For many hearing impaired users, a tcoil coupling to their hearing aid (t3/T4 rating) would be preferable to manipulating sound output in other ways.<br />
<br />
==== Mute Button ====<br />
<br />
Button to temporarily disable microphone while talking for applications such as telephone, audio recording and (when available) movie recording.<br />
<br />
<br />
===Web Browser===<br />
<br />
==== Full-page Zoom Support ====<br />
Full page zoom is a very good feature. If possible, people would want to browse the internet with normal layout than a distorted one. It's best if I could double-tap a text or image block and zoom to a fit size.<br />
<br />
The [[BigPageWidget]] proposal suggests 'Full Page Zoom' should be implemented as a widget available to all applications.<br />
<br />
* If the processor and memory could afford, it is good to just use [http://www.mozilla.org/projects/firefox/3.0a8/releasenotes/ Firefox 3] in OpenMoko. It has implemented latest gecko's full-page-zoom ability. With certain modification, we could do the same zoom like iPhone's Safari.<br />
* Firefox 3 may be a big eater. A cut-down version of it may be good enough.<br />
* If this is not practical, Minimo with full-page-zoom ability is good.<br />
<br />
==== Plugins Support ====<br />
* While an extensive browser plugin system would be costly to the efficacy of the platform three particular browser plugins as poplularized by Mozilla firefox should be adapted to the web-browser, namely: [http://noscript.net/ noscript], [http://adblockplus.org/en/ adblock plus], [http://www.greasespot.net/ greasemonkey] and [http://www.foxmarks.com/ foxmarks].<br />
* Careful use of these can dramatically reduce bandwidth, page space, and rendering costs even if it comes at the risk of some hard drive space in the form of block lists.<br />
* Greasemonkey, in particular, gives users control to set up scripts for commonly traveled pages to further reduce unnecessary or unwanted content.<br />
<br />
==== Widget support ====<br />
Built-in browser with the ability to install widget shortcuts (aka links) in the main phone menu, also some apis for interfacing with the other functionality of the phone like adding contacts, reading contacts, reading gps-psoition etc.. (maybe there is some defacto widget standard that could be used)<br />
<br />
There is a [http://www.w3.org/TR/widgets/ W3C spec] being developed, which may not be exactly what the original proposal had in mind, but it is about writing simple applications with HTML, SVG and JavaScript. It is mainly Opera's work, and while most [http://widgets.opera.com/ developed widgets are not very useful], there are some that are, and it creates a very nice development platform, especially for mobile devices. So, I think it makes an awful lot of sense for OpenMoko to support this spec.<br />
<br />
===Media===<br />
====Music/Video Software====<br />
A real good programming area for competition with the iPhone, a singular video/music player would be great for multimedia. A seamless integration system, a la iTunes and iPod, would be extremely popular. <br />
<br />
Using the Wi-Fi connectivity, a separate music program that supports wireless music sharing/ streaming (similar to what can be done when two computer running iTunes that are both on the same network) and that also supports internet radio.<br />
<br />
It would also be nice to have some kind of "announce your musical taste" mode. This could be implemented using last.fm profiles, such that when e.g. in a crowded place a user nearby has a similar musical taste, both users get notified so they can share their music files with each other (perhaps using a photo for id). Great for discovering new music - and making friends!<br />
<br />
- Possible copyright issues sharing music files?<br />
<br />
Sure, but that's the user's concern, not the developer's. There's no way for us to know which audio files the user is permitted/not permitted to share.<br />
<br />
==== Reading Support ====<br />
It would be really great to be able to read :<br />
<br />
*PDF<br />
*Open Document files<br />
*Text / RTF files<br />
*fb2 files (fbreader)<br />
*MS Office files<br />
*Aportis Doc (pdb)<br />
*DjVu<br />
*...<br />
<br />
In both landscape and portrait<br />
<br />
==== Wikipedia Mirror ====<br />
{{Main|Wishlist:Wikipedia_Mirror}}<br />
<br />
==== Blog ScribblePad ====<br />
<br />
Draw an image (and maybe add some text), then post to your blog.<br />
<br />
==== E-Book Reader ====<br />
* Neos brilliant ultra-sharp screen makes for a very good e-book reading device. All it takes is a good e-book reader with touch-screen page turning / scrolling (see the [[BigPageWidget]] proposal). FBReader could probably be adjusted easily by an experienced GTK hacker. Note that e-book reading is different to pure text/pdf displaying as it requires at least auto-bookmarking of the last read page, proper text and image scaling and text formatting.<br />
<br />
==== Personal Wiki ====<br />
{{Main|Wishlist:PersonalWiki}}<br />
<br />
Display the notes database as a Wiki. Inspiration: [http://www.acrocat.com/AcroWiki/default.asp?lang=en AcroWiki].<br />
<br />
[http://www.didiwiki.org/ Didiwiki]<br />
<br />
<br />
==== Dictionary, thesaurus, translator and flashcards ====<br />
Native lookup dictionary and thesaurus and foreign translation dictionaries, also with support for Asian languages. Optional custom configurable (though preconfigured) interface with on-line versions of dictionaries, thesaurus and translation services.<br />
<br />
'''Dictionary'''<br />
Something like [http://www-user.tu-chemnitz.de/~fri/ding/ ding]:<br />
<br />
advantages:<br />
* small<br />
* very efficient + useful<br />
* only limited to really needed functions<br />
<br />
Support for vocabulary training with flashcard system (also usable for other content than foreign language words!)<br />
<br />
==== Flickr uploader ====<br />
A simply, drag & drop uploader, tagger and organizer to upload images on phone to [http://flickr.com Flickr], with support for various languages. A good base could be the cross-platform uploader [http://juploadr.org/ jUploadr], written in Java and working on Windows, Mac and Linux. But, most of all, the best '''GPL''' program which actually do this work is '''[http://mobilepushr.jottit.com/ Mobile Pushr]''', written in C and Cocoa for iPhone, must be probably ported in python to work on OpenMoko.<br />
<br />
===PIM (Personal Information Managment)===<br />
====Context Sensitivity====<br />
Any email or sms message or application that contains a telephone number should be click to dial, eg [http://123567890 1234567890]. Addresses link to mapping software too?<br />
<br />
==== Notes ====<br />
<br />
Something for taking notes would be a nice feature:<br />
[http://www.gnome.org/projects/tomboy/ Tomboy] has some nice syncing features and is gtk based.<br />
<br />
Some Screenshots are [http://www.gnome.org/projects/tomboy/images/ here].<br />
<br />
==== Calendar ====<br />
<br />
A nice calendar application should be implemented in OpenMoko. This tool should have a syncing feature with your desktop computer.<br />
The tool should have a reminder feature and other features like other mobile phones already have.<br />
<br />
I think synchronization sould be handled by computer with opensync+syncml based tool, not by calendar itself. --[[User:Antono|Antono]] 12:25, 7 January 2008 (CET)<br />
<br />
* If this cellphone is thought also as a PDA, of course it needs a calendar. But I would like to see something better than just a calendar, I was thinking that there could be some application using "fisheye" view. Just like [http://www.cs.umd.edu/hcil/datelens/], though that example seem a bit chaotic. --[[User:Yprum|Yprum]] 22:27, 21 February 2008 (CEST)<br />
<br />
==== Address Book ====<br />
<br />
* Option to search not just the stored list of addresses, but one or more of the online phonebooks. Probably should be modular to make adding/changing phonebook sites easy. Also allows for future integration with LDAP<br />
servers or whatever.<br />
* Also the possibility to search all info on the contact, like number, email, postal address and so on, in case someone asks you to identify a known number.<br />
* Web-based map-lookup. 'How do I get there from here? (here = current GPS location)' This could also be done<br />
by integrating with whatever on-phone GPS mapping software the Neo ends up using.<br />
* Random text input 'notes' about a contact<br />
* Overall, this should more resemble a Palm-pilot's address-book than your average cellphone's<br />
* Automated Daily backup of phone book to a website archive (similar to Verizon's Back-up Assistant<br />
*Ability to integrate address book with web-based email (such as gmail) account, for those who use web based email as their primary account<br />
* '''[[Wishlist:Tagging|Tagging]]''' Place tags for contacts. Enhance message application to send messages to all contacts tagged with ... . Enhance other application(GPS, ...) with tags.<br />
* Support for:<br />
**[http://en.wikipedia.org/wiki/SyncML SyncML]<br />
**[http://en.wikipedia.org/wiki/Ldap LDAP] address book<br />
**[http://en.wikipedia.org/wiki/LDIF LDIF], [http://en.wikipedia.org/wiki/Xml XML] and [http://en.wikipedia.org/wiki/Comma-separated_values CSV] export and import (when possible).<br />
*Store Bluetooth IDs of friends and notify (configurable only on this device or on both devices) when a one of these Bluetooth ID has been detected (this is more a separate application but has requirements on the address book. Should also be able to create an address book entry from a Bluetooth ID. Could be used as a nice tool to detect people who you're avoiding.<br />
<br />
==== Database/List Display/Edit ====<br />
{{Main|Wishlist:PilotDB}}<br />
<br />
One of the most useful apps on my Palm Pilot for me is [http://pilot-db.sourceforge.net/ pilot-db]. It's GPL'd.<br />
<br />
==== Joe's Goals ====<br />
<br />
It'd be nice to have something like [http://www.joesgoals.com Joe's Goals] always available, like my phone is, even when I'm disconnected from the net.<br />
<br />
==== Workout ====<br />
<br />
Use your phone instead of your notebook while at the gym, and get pretty graphs to admire after you're done.<br />
<br />
==== Shopping List ====<br />
keep Track of Prices in different shops and the products you have/don't have. Ideally using a barcode reader and gps.<br />
If it was made aware of recipes it could even tell you what to buy without entering a shoppinglist manually.<br />
<br />
==== [[Fuel Log]] ====<br />
File data about fueling your car (date/time, liters, price, mileage, ...) and display some information (costs per month, average consumption, ...).<br />
Advanced features could include:<br />
* Automatically storing the GPS coordinates of the place where the car has been fueled (can be deactivated)<br />
* Sending the data to a central server which collects the information ( spritmonitor.de, anything else ?)<br />
* Let the OpenMoko receive fuel logs per SMS (e.g. if my wife with a non-openmoko mobile fuels the car and wants to file the data using her mobile phone)<br />
* Let the OpenMoko device act as SMS gateway for non-openmoko devices to easily send the data to the central server<br />
* Also support for air log for divers. Not that you will take this device under water but for the crew at the surface.<br />
<br />
==== Keep in touch reminder ====<br />
A background application which keeps track of your friends and reminds you when you have not talked, SMS, IM or mailed a person for more than # days.<br />
<br />
<br />
==== Menstruation period timer ====<br />
Fill in statistics and compute probabilities for menstruation, fertility, mood.<br />
See http://www.getjar.com/products/48/MyGirls<br />
<br />
==== Tagging ====<br />
{{Main|Wishlist:Tagging}}<br />
Tags can be used by various applications. Requirement is interoperability for further enhancement.<br />
Tags should be applied to calendar events, mail/sms, calls, places(GPS) and files.<br />
http://tracker-project.org has all needed tagging-and-searching functionality and ready to be used on low-resourced devices.<br />
<br />
==== Context based TO-DO list ====<br />
{{Main|Wishlist:context based to-do list}}<br />
<br />
If I arrive home and there are "@home" things in the to-do list, the Context based to-do list reminds me of that.<br />
<br />
==== Faster access to task list ====<br />
Click on the date to add a new task.<br />
<br />
==== Exchange Integration ====<br />
<br />
Once there is good TCP/IP connectivity on this phone, integration with corporate email/calendar/to do/contacts/etc servers would be a big advantage... near-real-time automatic email downloads and automatic bi-directional syncing are productivity boosters that you have to experience to appreciate. It turns your phone from a 'nice gadget to fiddle with' to a natural-feeling extension of your day-to-day life.<br />
<br />
* Is the time right to name names ? Add as your liking...<br />
** Plugin/integration to & from Kontact<br />
** Same with Evolution - Thunderbird - Seamonkey<br />
** ?? Google Calendars ?? (this one is tough)<br />
** Ms Exchange<br />
<br />
==== An electronic wallet ====<br />
<br />
A database which stores securely PIN codes, login data, bank and email accounts, membership informations, and other valuable and private data. Entries can be ordered in a folder-like manner. Access to the database is given by a master password. The database as well as the master password are stored with strong encryption. For security reasons, the program asks again for entry of the master password after a certain period of inactivity. The database can be synchronized with a PC application (ideally written in Java for cross platform compatibility).<br />
<br />
Examples: KWallet [http://docs.kde.org/stable/en/kdeutils/kwallet/index.html], Viskeeper [http://www.sfr-software.de/cms/EN/pocketpc/viskeeperpro/index.html], KeePass [http://keepass.info/]<br />
<br />
==== Easy business card sharing for a small group (in the same room) over bluetooth or WIFI ====<br />
<br />
Six Neo1973 owners are having a chat in a cafe. They agree to split but meet later. They want to exchange their numbers with each other before they go.... The normal way to do this is for a rather longwinded repeating of numbers to each other, or half the people manually inputting numbers before phoning/texting the other half to complete the process. All in all its a fair number of button presses to get it sorted.<br />
<br />
Instead the NEO could have a small app where the phones link up in a small peer to peer Bluetooth network and share automatically with one person initiating a request and the other detected NEOS agreeing/acknowledging the share. The initiating NEO would then sync the mini-group automatically by interrogating each phone and then sending the table of results. The NEOs would have to be clever about checking for duplicates in the address book and offering a choice to the user if there are any conflicts.<br />
<br />
PROS: <br />
*genuine saving in time for social and business situations<br />
<br />
CONS: <br />
*I am sure there are some security hassles to be pondered....<br />
*not going to be used every day... definitely not an immediate priority.....<br />
*only at geek conferences will all have a neo....<br />
<br />
==== SMS Counter ====<br />
<br />
An application which shows on the today-screen how many SMS i've already sent in this actual month. Some have for example 150 free SMS to write each month. With that program you can see all the time how many SMS are left until the end of the period. As an alternative it could be a counter which counts backwards from a predefined number over a defined period.<br />
<br />
===Profiles===<br />
{{Main|Wishlist:Profiles}}<br />
<br />
The Wishlist:Profiles page documents many possible profiles - ways to configure the phone. Including ways to respond to calls, wifi and GPS events.<br />
And how to automatically switch between them.<br />
<br />
===Text Messaging===<br />
For '''Text Input related ideas''' see [[Wishlist:Text_Input]]. Bear in mind that T9 can not be included<br />
For current development status of the messaging-app see: [[Messages]].<br />
<br />
There are many useful options that now can be used to full capacity:<br />
* '''Acknowledge/status SMS'''<br />
In GSM networks so-called acknowledge-SMS are sent back to the SMS's dispatcher in order to indicate that the primal sms was received (as message delivery is only best effort and is not guaranteed). So in the SMS dialog there could be equal sized buttons with captions as 'send only', 'send and receive delivery status message' and 'send and notify (e.g. ring) when delivery succeeded'.<br />
** '''Special handling of status-SMS''' <br />
Related to the previous entry, these acknowledgment-sms' should be handled in a different way than normal SMS'. Most Motorola do this, while Samsung SGH series don't & clog the inbox, warn of a "new" message upon Status notification: Delivery Status Messages should be stored in a separate menu so they don't bloat the received-folder and you are able to quickly review the status of the messages you had sent.<br />
* '''SMS at time/date''' You could be able to set up messages that are sent at a certain time/date<br />
* '''Binary SMS''' Send binary SMS. Could be used to feign WAP pushes. [http://en.wikipedia.org/wiki/Multimedia_Messaging_Service] See: <br />
** Resource for SMS encoding: [http://web.archive.org/web/20021016104345/www.dreamfabric.com/sms/] [http://web.archive.org/web/20060411222332/] [http://home.student.utwente.nl/s.p.ekkebus/portfolio/resource/sms_pdu.html] [http://www.ihub.com/Binary%20Messages.htm]<br />
** [http://www.gammu.org www.gammu.org] - you can use Gammu/Gammu+ source for this software and/or understanding various SMS formats including EMS, WAP, Nokia Smart Messaging, Siemens & Alcatel encoding ([[User:Marcin|I could]] eventually help)<br />
** Resource for SMS encoding (German): http://de.wikipedia.org/wiki/SMS-Kodierung<br />
** The infamous pocketpc-attack: http://www.mulliner.org/pocketpc/<br />
* '''Profile-override-SMS''' SMS that start with a certain code word override the silent profile and have the phone ring. So someone could alert you in case of some emergency.<br />
* '''Codeword-SMS''' An expansion of the above: check for code words and allow selectable tones for matches. E.g. "Server Down!" has a loud klaxon, "Disk Warning" has a quiet chirp.<br />
* '''(De-)Abreviation-script''' Implement a script that de-abbreviates: "hi m8 u k?-sry i 4gt 2 cal u lst nyt-y dnt we go c film 2moz" becomes "Hi mate. Are you okay? I am sorry that I forgot to call you last night. Why don't we go and see a film tomorrow?" (taken from: [http://en.wikipedia.org/wiki/SMS_language])<br />
** Implement a script that abbreviates :-)<br />
* '''Anti-Spam''' ...feature for SMS. May be it's possible to port some Bayesian based application like bogofilter.<br />
* '''Rule based authorizations''' ...for received messages. For example, delete messages from one source between 9h00 and 18h00 (workday) allow them otherwise (to get alerting messages).<br />
* '''Enable chat-like SMS-viewing''' SMS-Email-like: retain SMS app, but store 'conversations' rather than pile-up. Group/archive conversations by Caller Group (Work / Friends / Home / any user-defined Caller Group). Show appropriate icon from either Caller Group or Caller ID at the source of conversations panel<br />
* '''Searching''' allow full-text search or string search.<br />
* '''Massive SMS Deletion''' based on Conversation, author, before-date-xx.xx.xxxx, caller group, [[Wishlist:Tagging|tags]]...<br />
* '''Call Back''' Prompt 'Call Back' alongside other first-line options (Delete, Save number,.. this kind of options) that appear when reading an SMS.<br />
* '''Non-destructive deletion''', deleted messages goes to trash, and are recoverable.<br />
* '''SMS-EMail-Gateway'''<br />
SMS comes in, gets forward to your inbox, like any other piece of mail. Appropriate alerts and etc occur - again, just like for email. A simple SMTPD running on 127.0.0.1 that is hooked to an email-to-SMS translator that will send email addressed to 'SMS@localhost' (or whatever special address) out via SMS<br />
* '''SMS-filter chain''', for stuff like Codeword-SMS above, Theft-mode activation, auto-response (reply with gsm-position for "Where are you?"), auto-substitution (like replace $POS with gsm-position in outgoing SMS).<br />
* '''SCROOGE-SMS''' This is an intelligent SMS router. When you write your SMS you get the option of how to send it<br />
** By standard carrier SMS - cost 10cents<br />
** By OpenMoko SCROOGE SERVER - this will send your SMS to the OpenMoko Community SCROOGE SERVER next time you have WiFi - the phone will remind you to turn on WiFi when it knows you are in places where you have WiFi access. The person you are sending to picks up when they come into WiFi Range. This comes with an intelligent reminder that tells you that message has still not been delivered in 24 hours and would you now like to send it by a paymethod. This is better than IM because both parties do not have to have WiFi at the same time. - cost FREE<br />
** By email/Wifi - cost FREE<br />
** By email/GPRS - cost ?<br />
** Too many options!!!<br />
** Alternatively SCROOGE SERVER could auto launch IM client if it detects both parties have WiFi at the same time (Status kept on SCROOGE SERVER?) to allow instant reply..... Person who receives has the option to reply in SMS or in IM or in VOIP phone.<br />
<br />
=== Text input ===<br />
{{Main|Wishlist:Text Input}}<br />
There are many good suggestions for text input on the specific text input ideas page.<br />
<br />
=== More/Custom Input Method Widgets ===<br />
{{Main|Wishlist:More/Custom_Input_Method_Widgets}}<br />
Additional and customizable Input Method Widgets (similar to virtual keyboard). <br />
This could add soft-key functionality to games or other applications such as:<br />
*D-Pads<br />
*buttons<br />
*virtual trackballs<br />
*...<br />
Personalized layouts could be associated with each application.<br />
<br />
=== Games ===<br />
{{Main|Wishlist:Games}}<br />
<br />
=== Mesh Networking ===<br />
{{Main|Wishlist:Mesh Networking}}<br />
<br />
=== Printing Support ===<br />
It would be really neat to be able to print over either bluetooth, Wifi, or USB. I can imagine wanting to print:<br />
<br />
* Notes<br />
* Maps<br />
* Email<br />
* Calendars<br />
* ...<br />
<br />
Cups contains a bluetooth printing backend, so (in theory) once you have your data in postscript format, you could hand it to cups and it'll do the rest. In practice, it depends on<br />
<br />
# GTK+'s printing support<br />
# Making cups run on a really small system<br />
<br />
{{note| GTK+'s printing support seems to be very immature in 2.6 (which we need to use for some time). Gtk+ 2.10 contains much better printing support -- once we can use this, it should be more easy.}}<br />
<br />
There's always the possibility to render postscript ourselves, but this is not a piece of cake -- in general, printing is much harder than one would imagine.<br />
<br />
Further details:<br />
* [http://groups.osdl.org/apps/group_public/download.php/2205/print-summit-gtk.pdf#search=%22gtk%2B%20printing%20API%22 osdl.org]<br />
* [http://www.gnome.org/~alexl/presentations/guadec2006-printing.pdf#search=%22gtk%2B%20printing%20API%22 gnome.org]<br />
* [http://www.j5live.com/?p=204 j5live.com]<br />
<br />
===Misc Software===<br />
====Clocks/timers/Activity meters====<br />
===== Sport tracker =====<br />
{{Main|Wishlist:Sport_tracker}}<br />
Sport tracker can be used to measure the distance/velocity from point A to point B (or it could have several intermediate stopping points) using GPS. This would be extremely useful for running, biking, hiking, etc.<br />
<br />
===== Standby clock =====<br />
{{Main|Wishlist:Standby_clock}}<br />
A quick way to see what time it is.<br />
<br />
===== Egg Timer =====<br />
{{Main|Wishlist:EggTimer}}<br />
<br />
Very simple (one click) count up / count down timers are very useful.<br />
<br />
===== Cycle Computer =====<br />
As already mentioned by [http://wiki.openmoko.org/wiki/User_talk:Technil Technil], a cycle computer could be created using gps. The sensor at the bike's wheel could transmit data via bluetooth or some cable that would be attached to an openmoko device. In order to save power, one could switch off the gps and only use the bike's sensor.<br />
* Just another idea that came to me: Why don't have sensor's transmit cable plug into the headphone/microphone plug? A tool reads the signals created by the induction of the passing magnet, then gives them to the cycle-computer-app :) --[[User:Minime|Minime]] 19:50, 12 April 2007 (CEST)<br />
<br />
===== NTP Server =====<br />
<br />
Run the [http://www.ntp.org NTP] daemon using the GPS chipset as a reference clock, so that the Neo would have a very accurate time-of-day clock and would be able to serve time to other networked devices. <br />
<br />
I don't know what it would take to implement this. Items to consider would be the availability of a 1 pulse-per-second hardware signal, the accuracy of timestamps delivered in NMEA messags, etc. Dealing with power-management issues (such as the device going to sleep) would also be challenging.<br />
<br />
===== Reality check reminder =====<br />
{{Main|Wishlist:Reality check reminder}}<br />
<br />
A tool to [http://www.phrack.org/issues.html?issue=64&id=16 hack your brain]<br />
<br />
===== Automatic timezone changing (GPS) =====<br />
<br />
Check the timezone with GPS and adapt them.<br />
<br />
====Calculators====<br />
===== A Universal Unit Converter Tool =====<br />
<br />
One never knows when one may have to convert acre-feet into deciliters. A unit conversion tool makes all engineers and engineer wannabes much happier. And not only the engineers. <br />
<br />
Ideas what kind of conversions a converter tool could do:<br />
<br />
Lenght<br />
- Acceleration<br />
- Angle<br />
- Angular Velocity<br />
- Area<br />
- Capacitance<br />
- Radioactivity<br />
- Currency <br />
- Charge<br />
- Computer Memory<br />
- Conductance<br />
- Density<br />
- Energy<br />
- Illumination<br />
- Power<br />
- Force <br />
- Flow<br />
- Pressure<br />
- Speed<br />
- Temperature<br />
- Time<br />
- Torque<br />
- Viscosity<br />
- Volume<br />
- Weight<br />
<br />
Roman Numerals<br />
- ASCII, Hex<br />
- Cooking<br />
- BMI<br />
- Clothing Sizes<br />
<br />
Money Converter based on current rates from Internet...<br />
e. g. Dollar <-> Euro<br />
<br />
Physical and Mathematical Constants<br />
GPS conversions <br />
<br />
- link to or integration of a scientific calculator<br />
- link to or integration of a simple calculator<br />
<br />
A good basis for such a converter tool could be the Palm program "units" from <br />
François Pessaux [http://francois.pessaux.neuf.fr/files/units1_11.tgz]. The GPL'd program comes with full documentation.<br />
<br />
For GPS conversions see gpsbabel [http://www.gpsbabel.org]<br />
<br />
===== An Postfix Notation (RPN) calculator =====<br />
<br />
Many engineers, computer scientists and other groups who have grown to enjoy the simplicity and ease of an postfix notation calculator will miss them when they give up other platforms to move to OpenMoko. A RPN calculator will increase adoption by providing one of the tools that other platforms have provided for many years.<br />
<br />
==== Windows CE Emulator ====<br />
<br />
On ARM machine, Windows CE API emulator, like Wine on x86 machines. <br />
<br />
==== PalmOS Emulator ====<br />
<br />
The Access group is probably coming out with their Linux platform any time soon. One of the components is a PalmOS emulator which I'd like to see working on OpenMoko as well. There are literally thousands of PalmOS apps.<br />
<br />
I'd like to see a Windows CE Emulator with active sync support.<br />
<br />
==== TV Guide/Remote Control ====<br />
<br />
Use your Phone to easily program your VCR using EPGs.<br />
<br />
<br />
==== Alcohol meter ====<br />
Give the phone some info about your body (gender, size, weigth) and when/what you drink and it will compute an approximation of the amount of alcohol in your blood. Updates automatically, could have an alarm, when you are probably sober again.<br />
See, for example (German text) http://www.misterio-online.de/promille.htm<br />
<br />
==== Interaction with LEGO Mindstorm ====<br />
With the accelerometers, GPS and good CPU, the phone could be used to control/serve as input with robots built with LEGO Mindstorm, which can be accessed by USB and Bluetooth.<br />
<br />
==== Flashlight ====<br />
Simple finger application that makes every pixel on the entire screen white to be as bright as possible until you tap the screen again to turn it off. This way, you can use your Neo as a (short term) flashlight!<br />
<br />
==== Wii Controller Emulator ====<br />
Use the accelerometers and buttons on screen to work as a Wii controller via Bluetooth.<br />
<br />
==== FUSE support ====<br />
Ability to use FUSE to mount larger file systems over wireless. (even gmailfs, sshfs, etc.)<br />
<br />
=== Accessibility ===<br />
Accessibility features for the visually impaired.<br />
* High Contrast Themes.<br />
* Screen Magnifier. Features should include automatic cursor tracking when navigating menus and entereing text and provide manual controls to zoom in on other section of the screen.<br />
* Text to speech. The software should read out menu item ,contact lists ,text messages etc. Would also be useful for operating the phone while driving. see: [[Wishlist:Speech synthesis]]<br />
<br />
==== VOIP ====<br />
Ability to use the phone for VOIP over wi-fi such as Vonage. They currently have 2 different pieces of software for pc . Basically software creates a mac address which is paired with your Vonage account. Skype could also be implemented but I prefer Vonage. Only available when connected to wi-fi with a good connection. Phone treats calls the same as a cellular call, could keep a separate log of minutes, ability to record conversations, etc. Option to use VOIP if connection is available automaticly or manually. Small icon to show when call is using VOIP.<br />
* A standard SIP client would probably fit better into the "free and open" philosophy.<br />
* Ideally a SIP client that includes ZRTP/SRTP for secure communications.<br />
(Note: Vonage will not give you your SIP credentials, so you cannot log into their network with a non-approved softphone. Other VoIP providers have different policies.)<br />
<br />
''This seems very similar to what [http://en.wikipedia.org/wiki/Generic_Access_Network UMA] offers.''<br />
<br />
Asterisk is a great communication platform that can run on small devices. I have an Asterisk server running on a Nokia 770 and I read about running Asterisk on an iPhone. With the crosscompiler available it sould be possible to compile it and run Asterisk on an openmoko phone and let it take care of almost everything on the wishlist below.<br />
Edw/<br />
<br />
==== Power Meter ====<br />
If the power bar is clicked on it will show time left on charge and if charging it will show time until full.<br />
<br />
=== Accelerometer wishes ===<br />
==== Flick interface ====<br />
Ability to "flick" the phone for page up/down by simply and rapidly tilting the phone back-and-forth for up and forth-and-back for down. The same motion can be implemented for sideways motion. This will take advantage of the 2 3d accelerators.<br />
<br />
Sensitivity of the scrolling should be configurable and a test option provided.<br />
<br />
==== Reading navigation of documents enhanced by accelerometers ====<br />
If the two accelerometers in Neo1973 allows it, it will be nice if when you're reading, give a newspaper, you can move up, down, left and to the right the viewing of the document just moving the phones to the corresponding direction.<br />
<br />
I don't know if this is possible (haven't seen the project in detail yet) but this feature could be very attractive for final users (and this is good). (sorry for my english but i'm italian)<br />
<br />
==== Wand UI ====<br />
In keeping with the requests to think outside of the box... the dual 3d accelerometers should enable a 'magic wand'-style UI for certain uses. Macros could be recorded and edited, or presets could be used. For example, flipping the device playfully could initiate a game mode or could signal the end of the work day.<br />
<br />
==== Shake-to-Wake ====<br />
Giving the phone a shake enables voice commands for a few seconds.<br />
Usage Examples: <br />
<br />
* {Shake} "Call" ''ContactName'' ''PhoneType''<br />
* {Shake} "Call John Mobile" (Calls John's mobile)<br />
* {Shake} ''ApplicationName''<br />
* {Shake} "Reader" (Opens the e-book application)<br />
<br />
Would require a method of inputting voice tags for applications and contacts and obviously will only work for P2 (accelerometers)<br />
But lets get voice command functionality working before P2 (just by pressing a button on the screen instead of shaking)<br />
<br />
I think that is possibly to replace "Shake" with double hit with finger in the side of phone. Proper algorithms(with accelerometers) should recognize any similar activities.<br />
<br />
==== Emergency call ====<br />
When the accelerometer detects a great acceleration (i.e. 5G) start a countdown sequence, if it is not stopped make a call to a preconfigured emergency number. If the data from the GPS is accurate give it.<br />
<br />
A first version could use a recorded message (an audio file). In next version it could use a synthesizer, so it can give more information (add GPS information when it is ready).<br />
<br />
:I would worry that most such events would be false positives, and hard to distinguish from the real thing. A user dropping their phone (an event very common in the life of any cellphone) is far more likely than a user being in a car accident with their phone, and the clatter of a cell phone on asphalt could reach 5G. Additionally, it has to be very hard to distinguish hitting pavement from hitting a windshield, as from a physics standpoint the two are the same thing. [[User:Hashbrowncipher|Hashbrowncipher]] 02:06, 26 October 2007 (CEST)<br />
::It could use the gps data to calculate the speed it is traveling with. Let's say it has been moving for more than 50 km/h for more than 10 seconds. Then it could activate the "emergency call if more than 5g" function. Aside from the countdown timer, it could increase the volume to max and warn the user that an automatic emergency call will take place in x seconds. While it is counting down it could listen for "Never mind, I'm fine, phone" and stop the countdown in case it hears that. It could also output the warning sound to the attached bluetooth headset and let the user talk to emergency services if the user is still conscious. [[User:Tommy|Tommy]] 17:48, 8 January 2008 (CET)<br />
:::Perhaps have the phone yell loudly that it's about to do the emergency call for a decent amount of time, disabled by touching the screen or entering the pin number.<br />
<br />
==== Movement detection ====<br />
By detecting that the owner is walking a user defined profile can be activated with a specific set of notification settings. For example you may wish to use a cheap old sounding ringtone so you don't attract attention from muggers. Or you may wish to have a louder ringtone if you carry your phone in a bag where it can't be so easily heard.<br />
<br />
==== Games ====<br />
Imagine a first person shooter that you look around by turning your body.<br />
<br />
==== Sloshing battery indicator ====<br />
Shaking the phone will produce a sloshing sound, as if it contained a liquid. As the battery loses charge, so the sound produced on being shaken, will replicate a decreasingly empty container. [http://mobile.slashdot.org/article.pl?sid=07/11/28/1342248] for an example.<br />
<br />
<br />
==== Others ====<br />
Also see the pages[[Wishlist:Auto Align Map]], [[Wishlist:Determine Position]], [[Distance Measuring]], [[Wishlist:Computer Mouse]], [[Wishlist:Dynamic Screen Orientation]].<br />
<br />
=== Connectivity ===<br />
<br />
==== VNC client ====<br />
A good, stylus friendly VNC client/host combo would be easy to add and terribly useful.<br />
<br />
<br />
==== Networked X-Windows ====<br />
<br />
Whether it's running true X-Windowing over the network, or your bog-standard VNC connection as mentioned above, the ability to have your phone's screen available on your laptop or palmtop would be most desirable.<br />
<br />
==== NX client ====<br />
<br />
A form of X-windows forwarding optimized for performance over slow, or high-latency links, which could prove extremely useful. Capable of streaming a good quality, full desktop session over modem speeds. The protocol and at least one implementation is gpl'd. [http://en.wikipedia.org/wiki/NX_technology wikipedia]<br />
<br />
==== OpenOffice Presenter Control ====<br />
<br />
I Think it is a good idea to control your OO Presentation with Openmoko about WLAN or Bluetooth.<br />
I think it needs some buttons to go back or forward and control the mouse to show something and take normal mouse clicks.<br />
But with the mouse clicks I think that we need a short time between the clicks in example 1 second. Because when you make a mouse <br />
click than to fast than you must go back.<br />
<br />
==== Amarok and other Media Player remote control ====<br />
<br />
Control Amarok or any other Media Player with OpenMoko (as a remote control). Bluetooth or WLAN could be used as protocol to send and receive the data. Maybe a WebInterface of Amarok is a start. Can be used on parties for a mobile music management.<br />
<br />
==== Read informations with SMS ====<br />
Send a SMS with Code to the OpenMoko (from a specific number).<br />
For example to send get the GPS coordinates from a stolen Neo (or if you don't know where your Neo is).<br />
<br />
=== Security ===<br />
<br />
==== General Filesystem Encryption ====<br />
<br />
If anyone wants to get your private data saved on your OpenMoko device, he should have to get through a high security mechanism like dm-crypt. The question is how much CPU power would be needed. <br />
Would it be an idea to encrypt only the private data like phone numbers, preferences, address book etc. (like /home/$USER).<br />
<br />
http://luks.endorphin.org<br />
<br />
==== My Account ====<br />
{{Main|My Account}}<br />
A way to securely store information about the phone, and ensure that a phone you may be considering purchasing is not stolen.<br />
<br />
==== [http://zfoneproject.com/ Zfone] or similar ====<br />
<br />
Something that allows the user to speak with another person securely.<br />
<br />
==== GSM Encryption ====<br />
<br />
This software application would allow GSM encrypted calls to be made using the GSM Data Call Channel. <br />
<br />
[[OSvS]]<br />
<br />
==== My Voice is my Passport ====<br />
Use voice recognition to unlock the phone. "Hi. My name is ... My voice is my passport. Verify me."<br />
<br />
==== Firewall ====<br />
A network firewall<br />
<br />
==== Full Mac Support ====<br />
Full mac support, preferably with full software and full sync capabilities with iCal and iMail <br />
<br />
==== Anti Theft Application ====<br />
<br />
This application would enter the phone into an [[Anti-Theft Mode]] which activates particular security features to reduce the risk of theft and also to ensure a higher probability of recovery of a stolen handset.<br />
<br />
====RFID based personal alerts====<br />
Assuming an RFID reader is available: You'd put an RFID tag on your keys, wallet, etc and train a program on the phone to give you a soft or hard alert when one of them leaves detection range. That way, if you're walking away from one of them, the phone could alert you.<br />
<br />
====OpenVPN Client====<br />
This application allows to configure the device as an OpenVPN client using the GUI including support for X.509 certificates.<br />
<br />
=== Integrated Help System ===<br />
<br />
A help system that is either on or off. It could be activated and deactivated by a [[five-second-press]] on a button, for example the AUX button. When the help system is activated, it will explain the use of any item you touch on screen (with stylus or finger). Example: if you touch the battery icon, it will explain that this shows battery level / remaining time. If you touch the date / time icon, it will explain that this icon shows date and time, and that if you press it, you can set date and time. Primarily, this help system should be able to explain all user interface elements in the main screen, but if it proves popular, it could be expanded to cover other applications as well.<br />
<br />
===Performance optimisation===<br />
==== Use DMA engine in CPU for blitter ====<br />
The DMA engine in the CPU can substantially speed up moving of large areas of screen in some cases.<br />
<br />
==== Use virtual screen to optimise scrolling ====<br />
In some other cases, the hardware supported virtual screen may also speed it up.<br />
===Reusable Display/UI Widgets===<br />
====Use BigPage for full page zoom, scroll, scale in many apps====<br />
The [[BigPageWidget]] Page decribes a widget that could bring full natural page viewing, scaling, scrolling to the OM platform - allowing all applications to make intuitive UIs. A good way to read documents of any type without reformatting them massively increases the utility of a device with a small screen<br />
<br />
==Bluetooth==<br />
<br />
=== Voice Dialing ===<br />
<br />
Dial by voice commands.<br />
<br>Dial by dictating phone number. This way we can voice dial any number even if not in our contact list.<br />
<br />
=== Music through Bluetooth Headset ===<br />
<br />
Music can be played through a Bluetooth headset, but would stop playing when a call comes in.<br />
<br />
=== Walkie Talkie ===<br />
<br />
Let OpenMoko devices connect to one another via bluetooth or another connection method (GPRS for long distance but high latency, probably Wifi on P2), and hold a conversation.<br />
<br />
Features for this applications can be:<br />
* Push To Talk (PTT) button<br />
* Voice Activated Control (VAC) which will set it in transmit mode when input has is detected above a certain predefined level.<br />
* Optionally a full duplex mode<br />
* Different channels to choose from<br />
* Monitor different (preselected or all) channels for traffic.<br />
* Content encryption<br />
* Active noise control<br />
* Allow zero config use (units can talk without any access point helping)<br />
* Overview of all connected people trough sending GPS data to everyone who is in the Walkie Talkie channel<br />
<br />
Local (non-GPRS) use cases include chatting while biking<br />
or motorcycling in a group; perhaps also in a car caravan.<br />
This application could also be used as a baby-phone to monitor your siblings.<br />
<br />
This would be more useful if the Neo had Class 1 bluetooth, though probable Wifi on P2 will also offer more range.<br />
<br />
(One thumbs up from me) Jackcday<br />
<br />
=== Automatic Sync ===<br />
<br />
Automatically synchronize with desktop computer (or with any [http://en.wikipedia.org/wiki/SyncML SyncML] server) when within range based on user profile. This may require the use of a secure data transfer.<br />
<br />
=== GPS Assisted Bluetooth Management ===<br />
<br />
Allow Bluetooth to automatically turn off after loosing connectivity and to automatically turn back on based upon GPS location.<br />
<br />
A Bluetooth device is configured for automatic reacquisition based on the following profiles:<br />
* Manual - only when Bluetooth is on<br />
* Non-mobile - the target device is not mobile, periodically attempt reacquisition when in the general area of the device.<br />
* Mobile - the target device is mobile, periodically attempt reacquisition when in the general area of the device.<br />
<br />
Each target device is configured as follows:<br />
* Automatic acquisition at last known location: enable/disable<br />
* Automatic acquisition at these locations: list of nickname + coordinates + range<br />
<br />
==== Non-mobile devices ====<br />
<br />
Examples devices include: computers<br />
<br />
The location and range of the target device is determined via training. Periodically, the current GPS coordinates and Bluetooth signal strength are logged. Additionally, connectivity loss events are logged. An algorithm uses these logs to determine the device location and range.<br />
<br />
Connection attempts are made when in a configurable proximity to the device. The first attempt when entering the proximity and further attempts at a configurable interval.<br />
<br />
==== Mobile devices ====<br />
<br />
Example devices include: automobiles<br />
<br />
Mobile devices are configured to have two types of locations:<br />
# Last known location<br />
# Non-mobile locations (homes)<br />
<br />
===== Last known location =====<br />
<br />
A car is mobile, ideally, when you leave your car, the phone should note the car's location when connectivity is lost and then attempt to reacquire the car when you return to the location of the car.<br />
<br />
===== Non-mobile locations (homes) =====<br />
<br />
As mobile devices may have multiple users, it is not sufficient to always use the last known location. In this case, the device may additionally have multiple homes. For example, a car might have as its homes: home garage and work parking lot.<br />
<br />
=== Bluetooth neighbor detection and multiuser apps ===<br />
<br />
Like the [http://en.wikipedia.org/wiki/One_laptop_per_child one laptop per child] (OLPC) interface, keep a number in the status bar that represents a count of other openmoko or compatible bluetooth devices in the area. Allow for the spontaneous initiation of a chatroom or multiplayer game or file trading with any moko in the area.<br />
<br />
=== Bluetooth environment detection ===<br />
<br />
Capability to detect when a predetermined bt device enters/leaves bt range and launch a system-wide event accordingly. This would feed not only the "Neighbour detection" idea described above, but also the "Profiles", "Context based TO-DO list" and "Location-based reminders" ideas. Reminders could be set to trigger in the presence of a specific person X (with BT device Y). Profiles can take into account which devices are present around the phone (car kit, for ex.). To-do list could also change according to present devices.<br />
<br />
=== Remote control ===<br />
<br />
==== Wireless presenter ====<br />
Use the phone to run your OpenOffice.org Impress presentation remotely using Bluetooth. Cool features: <br />
* Display the text notes for the presenter on the phone's display and update it whenever the slide is changing.<br />
** OO.org has implemented support for [http://www.openoffice.org/issues/show_bug.cgi?id=12719 dual monitor]/[http://www.openoffice.org/issues/show_bug.cgi?id=18486 presenter mode] that can be used as a starting point<br />
* A small timer showing the time passed (and perhaps remaining if the presentation app supports such a feature). <br />
* If you want to be super-cool, you give a preview of the notes of the next slide in the show. <br />
* At the end of a presentation, a "navigator" could allow to easily jump to any slide in the presentation by clicking on it on the phone.<br />
** When you right-click in a running OO.org Impress presentation, you can choose "got o slide..." and select any slide to jump to.<br />
<br />
==== Initiated from another device ====<br />
Remote control over Bluetooth from other devices to control media player (play, pause, next, previous, volume control), camera (capture image), etc.<br />
==== Directed at another device ====<br />
Remote control over Bluetooth to other devices to control media player, lights in your house, etc.<br />
<br />
[http://mjr.iki.fi/software/remote-0.9.0.tar.gz Remote] is my draft of a python-based remote control app that allows you to define button sets and commands to run on the local or a remote host (through ssh, for instance). Error handling and command interface need work.--[[User:Mjr|Mjr]] 11:14, 18 October 2007 (CEST)<br />
<br />
Z-wave uses web-browser control of devices that is said to be compatible with mobile phone browsers so should work with openmoko browser. [http://www.z-wave.com www.z-wave.com]<br />
<br />
=== Bluetooth Car Connection ===<br />
<br />
Have a deeper connection to the car than just handsfree speakerphone. For instance a transceiver with challenge/response systems to open, possibly even start the car. Possibly go as far as OBD connection to monitor car status on screen/log for later.<br />
<br />
Could be done with a port of [https://garage.maemo.org/projects/carman/ Carman] or similar that can connect to an OBD2 adapter via USB or Bluetooth and display various information collect from the car, GPS, and accelerometers. --[http://wiki.openmoko.org/wiki/User:Bmk789 bmk789]<br />
<br />
==== Dude, Where's My Car? ====<br />
<br />
When in range of the car navigation system, remember the position (perhaps check with the car GPS). When not in range, assumme that you are not in the car, and offer the opportunity to navigate to the car's last known position. That way, you can find your car e.g. on a large parking lot.<br />
<br />
=== [[Bluetooth powered Multi-SIM support]] ===<br />
<br />
As the Neo1971 does not come with dual-SIM support this could be solved by joining your old bluetooth-enabled mobile to your OpenMoko-phone.<br />
<br />
Let SIM card A be in your OpenMoko-phone and SIM card B in your old mobile:<br />
* Incoming call on SIM card B - the OpenMoko-phone acts as a headset(Bluetooth Headset profile)<br />
* Calling out via SIM card B - the OpenMoko-phone acts again as a headset<br />
* Same for Short Messages/MMS/Internet<br />
This way you'd have your old phone switched silent and connected to your OpenMoko-phone that handles all the calls and one can select which SIM card to use.<br />
Advantage: No 'switching' between cards<br />
Disadvantage: Second mobile needs to be in range(e.g. handbag) and charged every once in a while.<br />
<br />
===Internet Gateway===<br />
<br />
If the device could function as a Bluetooth router/gateway to the internet via the GPRS/data connector, then you could use it to get network connectivity from your laptop and other devices while on the road. Many smartphones can be configured as modems via Bluetooth for use as Dial-Up Networking connectors, and that should be the minimum target. Ideally, if the WiFi functionality was used so the OpenMoko could be an 802.11 router or peer to peer gateway for a laptop, this would be even better. The full bandwidth of GPRS or whatever network is available would then be available.<br />
<br />
=== Social Networking ===<br />
<br />
Anybody running the social networking app will be broadcasting a profile, and when certain keywords are matched with other users who are also running the application, an alert is sounded. Each mokoid can be added as a hexstring to a profile page, and xml filters can be developed for each social service to convert various keywords and interests to moko-friendly format.<br />
<br />
=== Give userspace api control over bluetooth signal strength ===<br />
<br />
I have tried bluetooth handsfree sets with other phones and don't get perfect reception due to low signal strength. I suppose the reason the signal is so weak is because the manufacturer wants the battery to last long on its latest charge. Can you please make the strength setting configurable by the user of the phone through an api and perhaps even through the phones gui? I would gladly waste some battery time in exchange for stronger bluetooth signal strength.<br />
<br />
<br />
== WiFi ==<br />
<br />
=== Industrial grade Wifi management ===<br />
One annoyance I've had with Wifi enabled gadgets is that they simply keep the connections in a dumb list. What I'd like to see is more granular connection management, which enables me to specify whether a given connection is friend & family (mom's place), professional client (joe's copies and coffee), commercially available (panera), onetime use, or anything else, as well as managing router config backups, firmware images, and security keys. <br />
=== Captive portal auto-login support ===<br />
Having a nice front-end to some sort of script that checks the authenticity of a captive portal login page (SSL cert), then passes your username and password login information to automatically log you into your account would be very nice as well. This can be done with curl, but it is difficult to make it work on all captive portals out there. Perhaps just a field that you can specify "once I am connected to this AP, run this script: ".<br />
<br />
== Wireless Piggyback ==<br />
<br />
HSDPA support and the like, so that users can connect directly with the internet with G3/G4 mobile service providers at speeds at or above 3.6 Mb/s.<br />
<br />
== Other ==<br />
<br />
=== Auto Update ===<br />
<br />
A small tool which is configurable to download the latest OpenMoko and OpenMoko related software. Maybe if any internet connection is available or a minimum of bandwith is available then the auto update would download only security related or the whole system etc. .<br />
<br />
=== Vibrate Pattern Recorder ===<br />
<br />
An application that would allow the user to define their own vibration patterns, and possibly link them to audio files. Recording would be done in real time initiated with a "Record" button, optionally playing the associated sound file in sync with recording). While recording, the user would press and hold a button to define the timing and duration of vibration. The user would press "Stop" when finished. Vibration patterns would have the option of being looped(would terminate at some global ringtone length maximum).<br />
<br />
One simple suggested vibration file format would be a sort of run-length encoding: First byte defines the length of a "time-slice" in milliseconds, which would determine the overall tempo(actually the inverse of tempo). The next byte would define the number of time-slices to leave the vibration on, and then another byte for how long to pause after. Continue alternating these on/off bytes until the entire pattern is defined.<br />
<br />
- or just use MIDI, using a separate channel for the vibrator.<br />
<br />
An implementation of RTTL could also be used to define vibration patterns.<br />
<br />
=== PC Input Device ===<br />
<br />
Provide a method to use the touchscreen as input device for a nearby desktop machine. Could connect over USB or bluetooth.<br />
<br />
=== Advanced Notification And Ringtone Manager ===<br />
{{Main|Wishlist-ANARM}}<br />
<br />
ANARM would be an application for handling all event-based audible notifications from an OpenMoko device.<br />
<br />
=== Location based reminders ===<br />
{{Main|Wishlist:Location_based_reminders}}<br />
Location based reminders can be used to notify users of various events or reminders that are location based.<br />
<br />
=== Synergy Client ===<br />
A synergy client would enable the user to place the device next to a desktop PC and share the desktop`s mouse, keyboard and clipboard over a TCP/IP network. [http://synergy2.sourceforge.net/ Synergy]<br />
<br />
=== Next device ===<br />
List features for your fantasy device to come from FIC (or anyone else, for that matter). Define the GTA03 here ;-)<br />
<br />
==== There is no device ====<br />
From [http://wurp.blogspot.com/2008/01/teh-future.html Wurp's blog]:<br />
<br />
Clearly the Next Big Thing has to be for the device to go away altogether. I know the basic idea for wearables has been around forever, but it seems to me that the time has come.<br />
<br />
I wanna wear a bluetooth earpiece and cool shades, possibly with [ here's where my imagination is failing me :-( ] gloves, or fingerless gloves, or (ew) wristbands, and let any surface, including my hand, or no surface, be my interface. Tap the earpiece when you get a phone call, see a dial pad on your palm and tap out the number with the other hand, watch movies on a giant screen hovering in the air...<br />
<br />
(equipment list: bluetooth earpiece, some brick in my pocket or on my belt, glasses w/ minute camera, painted video display, & variable darkness lenses, and gloves)<br />
<br />
Why the hell do I want to dig out a device every time I want mindless entertainment or superficial conversation?<br />
<br />
Ideally, you could then sell any little doohickey with whatever interface you want (switches, knobs, g-spots, ...) and all it needs to do is network with some software on the brick to be anything at all...<br />
<br />
== GPS Software ==<br />
*Providing GPS Support also for outdoor users in addition to ordinary street navigation features<br />
** Overlay of satellite images with existing streetmaps<br />
** Incorporating SRTM digital elevation model: for example using the VRML/X3D as data format (see http://www.ai.sri.com/geovrml/) which is interesting for e.g. mountaineering: using a 3d browser rendering VRML/X3D Model, displaying the current position and track (possibly also other gps-tracks of the different routes to a summit downloaded before could be mapped onto the 3d model), (what about 3d hardware support? there is nothing written in the hardware specs about graphics: thinking of OpenGL for embedded systems (see http://www.khronos.org/opengles/)<br />
** Using sth like a tracking mode to allow certain people to determine the current position and track (for rescue missions - like they have for example at http://www.steiger-stiftung.de (a German beneficence for rescue issues) There you can register your mobile phone so the rescue service is able to track you immediately if necessary. The interesting thing: It seems like some mobile phones with GPS have special support for this issue. If your phone is registered, the rescue service is able to get your GPS coordinates directly from the phone without any user assistance. Openmoko should also support this! )<br />
* Implementation of 3dTracking's (http://free.3dtracking.net/) tracking software or equivalent.<br />
* "Geomark" function: if you have to save the current time with your current location, only hit one button...<br />
** You also should be able to navigate with a small "compass" and the distance should be displayed to your saved point (maybe where you parked your car on a big car parking area)...<br />
* '''Measure the distance between two points (air line or walked way) -> no need for a tape measure'''<br />
**I think it would be good if you could either use Bluetooth, GPRS or AdHoc Wifi, and see near Neo1972 on the GPS map so you could see where your friends are, e.g "You want to know if you friend is on the bus behind" You would need a strong wifi and GPRS would be too expensive.<br />
*A bicycle sat-nav would be cool, speciayl designed for bicycles, e.g. cycle routes<br />
<br />
<br>[[Community Based Traffic Information]]<br />
<br />
== Hardware ==<br />
{{Main|Wish List - Hardware}}<br />
<br />
It could be use for beepway Online service too <br />
[http://www.beepway.com]<br />
<br />
=== Dedicated Power / Charger Pinout ===<br />
<br />
Having not yet seen a physical Neo device, I haven't been able to examine any of the IOs to see if there already is a dedicated power / charger input. However, I can imagine that it might be very tempting to have the device charge solely via USB. For any device that is capable of USB-host, that is a '''horrible''' idea.<br />
<br />
Since the device is able to run in USB host mode, it might be a good idea to allow for an alternate power supply, if say, a USB keyboard was being used for several hours. Rather than drain the battery, one could just supply power via the wall outlet while still providing endless hours of USB-host enjoyment for those hard-coders on the go.<br />
<br />
The main question is just deciding on where to take power from if in USB-client mode and the power cable is inserted, but really, that's not too big of a deal and can be solved with very minimal circuitry.<br />
<br />
This might sound extraneous at first, but when the device shuts down in the middle of an important USB file transfer, or right before that great piece of code was saved, you can bet that those users will be saying "Hmm... a separate power adapter would have really come in handy right now". <br />
<br />
I suggest a tiny 3mm, dedicated +5V power input (something a la Nokia).<br />
<br />
=== Tactile feedback via buzzer ===<br />
Assuming the hardware has a vibrator/buzzer for silent calls, use a lightly pulsed version of that to simulate tactile feedback when dragging finger across buttons on-screen. Implemented properly, it would almost feel as if the buttons were real.<br />
: 25 ms bump on the buzzer feels about right. Does this harm the vibrator motor? --[[User:Sagacis|Sagacis]] 05:15, 2 October 2007 (CEST)<br />
:: Created a patch to do this [[User:Sagacis/ForceFeedback]] --[[User:Sagacis|Sagacis]] 05:05, 3 October 2007 (CEST)<br />
<br />
=== Detachable keyboard ===<br />
Hardware keyboard that can be attached with magnets to a future version of the Neo.<br />
<br />
A bluetooth mini-qwerty keyboard that straps to my wrist!<br />
<br />
<br />
=== SD Slot ===<br />
I think the Neo1973 should have a normal SD card slot as the micro is too small, and the SDs have more space.<br />
<br />
: This is not true. Now you can find 2GB micros at the price of 20-30 euros. Too small for what?? --[[User:V0n0|V0n0]] 22:06, 28 December 2007 (CET)<br />
<br />
: Think of putting a few '''movies''' on that SD memory card. It could really help if it was a little bigger (8GB, 16GB, 32GB). Also think of going '''offline''' for 1-2 weeks, far away from any computer you can access and then wanting to listen to some music. What you get in turn with a 2 GB memory slot is the same music over and over. Or you have to switch memory a cards a lot.<br />
<br />
: This situation is far more common than one would think: going in the mountains, going offshore (on a cruise ship). Or simply you may want to store many types of music, and '''share''' your device with friends. --[[User:Bogdanbiv|Bogdanbiv]] 13:47, 10 January 2008 (EEST)<br />
<br />
: Well, it can be micro SD, but why to put it so deep inside, under the battery and even under the SIM card? I would suggest to have a simple slot on the side where we could insert/remove the SD card equally easily as we swap CD's in computer. [[User:AudriusA|AudriusA]] 16:36, 12 January 2008 (CET)<br />
<br />
[[User:Cfriedt|Cfriedt]] 12:40, 24 February 2008 (CET) -- I completely agree with a more accessible SD card slot. It should be made external for quick removal / insertion. I realize that would mean program data shouldn't reside on the SD, but really 256 MB of on-board flash is plenty. Mirco or normally-sized, a regular-sized SD is still trivial to implement in terms of solder pads and traces.<br />
<br />
=== IR port ===<br />
Remote control applications<br />
<br />
Would be great to use openmoko as a Harmony remote controller.<br />
<br />
:I'd like to add that i fully support this. An IR port on future openmoko devices capable of controlling set-top boxes like TV/DVD/Stereo is necessary to make the device as universal as possible. A cellphone should be your window to the world and allow you to interact with it in as many ways as possible.<br />
<br />
:Care must be taken to use the correct type of IR chipset/controller in the phone. Most IR ports you find on devices like computers, some cellphones etc. Are for high speed data communication and CAN'T control TVs/DVDplayers/Stereos etc.<br />
<br />
:In order to reduce cost it maybe possible to use the sound chipset in the phone to generate the waveform sent to the IR led. IR remotes work at ~38Khz which is within the range of the sound chipset. The sound output could be internally switched between the IR led or the speakers.<br />
<br />
[[Category:User]]<br />
[[Category:Ideas| ]]</div>Sinhttp://openmoko.org/wiki/Neo_1973_BatteryNeo 1973 Battery2008-02-14T12:27:05Z<p>Sin: /* Compatibility */</p>
<hr />
<div>The battery is a one 3.7V (nominal) cell.<br />
It has internal protection circuitry, and a capacity of 1200mAh.<br />
<br />
On the battery, which has dimensions of approximately 53mm*38mm*7mm is<br />
written "FIC, First International Computer, Model: GTC-01/GTA-01, Standard Battery Pack, 1200mAh Li-ion, Rechargeable Battery: 3.7V".<br />
<br />
=== Compatibility ===<br />
[[Image:Neo1973-with-BL5C-battery.png|right|thumb|100px|Neo1973 with Nokia BL-5C Battery]]<br />
It is apparently compatible with the Nokia BL-5C See [http://lists.openmoko.org/pipermail/community/2007-February/003758.html this mailing list post] These are available very inexpensively from ebay. Though quality will of course vary.<br />
However, currently Neo1973 won't charge BL-5C batteries. Also note that the BL-5C is rated at 850mAh new, only 70% of the FIC battery.<br />
<br />
BL-5C battery will work in Neo, but not the other way around. Battery is too thick for Nokia, and attempting to use Neo battery in Nokia will result in Nokia entering strange "test mode". This is because of the pack supervisor chip (the small chip in all Li-* batteries that takes care of charging the pack properly) which also contains some identification data (e.g. serial number, part number etc.), which identification data Nokia uses to perform several tasks, such as entering the aforementioned ''test mode''. If you look in the Nokia service manuals, you will see that the debug rig for mostly all Nokia phones includes a so-called "debug battery adapter" which fits inside the phone, instead of the battery, but replies with a special identification when inquired by the phone upon boot, thus triggering "test mode".<br />
<br />
This is also the reason why Nokia phones (and, presumably, all Nokia standalone smart-chargers) will refuse to charge a Neo1973 battery because it does not match the identification code expected by the phone firmware.<br />
<br />
Nokia BL-6C is a bit thicker than BL-5C, but (almost?) identical in all other dimensions and electrically. It'll fit nicely inside Neo too. The original BL-6C is 1070mAh compared to BL-5C 850mAh making it a slightly more interesting replacement battery.<br />
<br />
Modding BL-6C [http://www.metku.net/index.html?path=mods/6600/index_eng] is only needed on some Nokia phones, there is no need for modding it - BL-6C will fit without problems in Neo.<br />
<br />
Whatever batteries fit physically need to be chargeable in situ, otherwise we are asking people to carry external chargers around if such things are available - remember that the ability to charge Li-* batteries outside of their intended product(s) is quite rare.<br />
<br />
Neo1973 will happily run off 3 NiMH batteries, with thermistor disconnected.<br />
{{note|This is not recommended as the charging modes for NiMH and Li-Ion are different. The Neo1973 u-boot and kernel will assume the battery is Li-Ion and charge it appropriately. You thus might damage your batteries!!}}<br />
Being able to use AA/AAA batteries would make the device much more open to this respect but should be regarded as a step backwards. However, no problem if their charging might well need some external appliance, or be impossible for non rechargeable pills. But would it be possible to autodetect Li-Ion batteries and refuse, or warn, on attempt to charge other types?<br />
<br />
[[Category:Neo1973 Hardware]]<br />
[[Category:Neo1973_Phase_0_related]]<br />
[[Category:Neo1973_Phase_1_related]]</div>Sinhttp://openmoko.org/wiki/FAQFAQ2008-02-14T12:08:10Z<p>Sin: /* Q: What will I be able to do with the Neo Freerunner? */</p>
<hr />
<div>Frequently Asked Questions... with answers included!<br />
<br />
==Introduction== <br />
<br />
=== Q: What is OpenMoko? What is the Neo 1973? What is the Neo Freerunner? ===<br />
A: [[OpenMoko]] is a software platform and the world's first completely open mobile phone software stack. It is based on Linux and allows users and enthusiasts great freedom to customise their phone.<br />
* The [[FIC]] [[Neo1973]] is the first fully supported OpenMoko phone. <br />
* The FIC [[Neo FreeRunner]] is the second Openmoko phone although it is not released as of yet (Feb08)<br />
<br />
=== Q: I'm a ____ expert, can I join/help OpenMoko? ===<br />
<br />
We would love to hear from you.<br />
<br />
* If you are interested in joining OpenMoko as a software developer, please visit http://www.openmoko.com/contact-index.html and send us an e-mail. <br />
* Or simply join the Openmoko Community - more info here http://wiki.openmoko.org/wiki/OpenMoko:Community_Portal<br />
<br />
=== Q: When can I buy a [[Neo1973]]? ===<br />
<br />
A: Now - from https://direct.openmoko.com/.<br />
<br />
=== Q: When can I buy a [[Neo FreeRunner]]? ===<br />
<br />
A: Spring 2008, maybe March. Watch the [[OpenMoko:Community Portal|Community Portal]] for further updates<br />
<br />
=== Q: What are the new features that the Neo Freerunner will have? ===<br />
<br />
It will retain many good features from the Neo1973 such as the very high resolution touch screen and integrated GPS unit.<br />
<br />
It adds the following features<br />
* WiFi - 802.11 b/g - for high speed internet<br />
* Faster processor operating at 400Mhz (up from 266Mhz) - for faster operation<br />
* * SMedia Glamo3362 Graphics Accelerator - for improved graphical performance<br />
* 2 3D Accelerometers - the phone applications will know which way the phone is oriented<br />
* 256MB Flash - larger memory to run bigger applications<br />
* LED's illuminating the 2 external buttons on the phone<br />
<br />
=== Q: Where can I buy a [[Neo1973]]? ===<br />
<br />
How do I buy a cell phone that runs Linux?[http://blog.syntaxpolice.org/isaac/technology/linuxPhones.html]<br />
<br />
A: From https://direct.openmoko.com/. But please see "What will it do?" below first.<br />
<br />
=== Q: How much? === <br />
<br />
A: Neo1973 (Internal code name GTA01B_v04): $300 for Neo Base, $399 for Neo Advanced. Available now. See [[Neo1973]] for what is included.<br />
<br />
A: Freerunner (Internal code name GTA02): $450 for Neo Base, $600 for Neo Advanced. See [[Neo1973]] for list of hardware.<br />
<br />
=== Q: What can I do with the Neo1973? ===<br />
<br />
A: For long answer see [[Developer preview]]<br />
<br />
A: The Neo1973 is a Phase 1 phone and aimed at software developers only. It is not suitable for end users, it will have basic functionality as a touchscreen phone. Little else will work, software development will continue till mass market release.<br />
<br />
Those interested should:<br />
<br />
* Know that there will be a device with faster cpu, gsm system etc in the spring of 2008.<br />
* Have fun hacking devices.<br />
* Be able to find their way through prototype software and hardware without much documentation.<br />
* Share the dream of a device powered by free software.<br />
* Not expect a consumer-level device.<br />
* Come up with new ideas for exploring the age of mobile computing.<br />
* Have $300.<br />
<br />
Ideally they also:<br />
<br />
* Can spot bugs and submit patches.<br />
* Love to cooperate with a community improving the software.<br />
<br />
=== Q: What will I be able to do with the Neo Freerunner? ===<br />
<br />
A: The Neo Freerunner is the first phase 2 (mass release) phone from the Openmoko project and is designed for everyday use by end users and continued software development and improvements by the Openmoko team and the Openmoko community.<br />
<br />
A: The question is almost what can you NOT do with this phone - eventually there will be a huge range of free software applications allowing both end users and developers to get much more out of this phone than a standard "locked" mobile phone using features like the integrated GPS, bluetooth, wifi and accelerometers.<br />
<br />
=== Q: Do I need the Neo 1973 Advanced (or in due course the Neo Freerunner Advanced)? === <br />
<br />
End users or power users should buy the "base" unit.<br />
<br />
Software developers may wish to buy the "advanced" model.<br />
<br />
With Neo 1973 Base or Neo Freerunner Base you can do:<br />
* Kernel development.<br />
* Application development.<br />
* Updating u-boot (equivalent to PC BIOS) using a tested image.<br />
* Replace a non-booting kernel and/or rootfs using [[Dfu-util]].<br />
<br />
With Neo 1973 Advanced or Neo Freerunner Advanced you can additionally do:<br />
* U-boot development.<br />
* Use the kernel console.<br />
* Unbrick your device if you flash a wrong or non-working u-boot image.<br />
<br />
=== Q: I have a shipping related question === <br />
<br />
For Neo1973<br />
* See [[SH1_FAQ|Shipment 1 FAQ]].<br />
<br />
For Freerunner<br />
* Shipping and distribution arrangements will be announced later<br />
<br />
=== Q: What does the [[Neo1973]] look like? ===<br />
<br />
* See the original launch [[Artwork|artwork]]<br />
* Collected images from google [[http://images.google.co.uk/images?q=neo+1973&ie=UTF-8&oe=utf-8&rls=com.ubuntu:en-GB:official&client=firefox-a&um=1&sa=N&tab=wi]]<br />
<br />
=== Q: What does the [[Neo Freerunner]] look like? ===<br />
<br />
* It uses the same case and dimensions as the Neo1973 (as announced at CES Jan08)<br />
<br />
=== Q: What else do I need to know? ===<br />
<br />
* Both Neo 1973 and Neo Freerunner are tri-band GSM phones. <br />
* The Neo Freerunner is expected to be offered in an 850/1800/1900MHz version for North America and an 900/1800/1900MHz version for the rest of the world. <br />
* The Neo1973 is an 900/1800/1900Mhz version only and may not work well in some rural parts of North America although a hardware modification is being tested as of Feb08 - see here for more info -[[GSM]] - and here http://wiki.openmoko.org/wiki/GSM_850_test.<br />
<br />
=== Q: What are the benefits of an "open" phone over a "closed" phone ===<br />
<br />
A: In a conventional closed phone, the handset maker and the mobile network operator work together to provide a service to you that best suits their business model. The capabilities of a modern smartphone equipped with GPS, Wifi and bluetooth are amazing and the result is that many features are "locked down" because they do not suit the network operator. Up until now it has been difficult to buy a phone on which you have freedom to install sofware which is not controlled by the network operators - [[Openmoko]] changes that!<br />
<br />
A: A list of examples of "closed" behaviour has been started here - [[Problems of typical "closed" phones]]<br />
<br />
==Software==<br />
<br />
<br />
=== Q: Can the software do/connect to/... ===<br />
A: At the moment, the answer is in almost all cases no. The phone is at the moment a small linux box with a touchscreen, a working dialer and some prototype apps. <br />
Most do not function in any way that would be suitable for users.<br />
If you want to add a feature or application request, then look over the existing applications and either add one, or add a feature request to the applications page.<br />
<br />
===What software is on the phone?===<br />
At the moment, almost no 'end-user' applications are present and working in a usable state.<br />
It is possible to make and receive calls in some software revisions, this frequently breaks though.<br />
<br />
====What software can be installed on the phone?====<br />
<br />
=== Q: Is there description and list of OpenMoko software? ===<br />
<br />
A: See [[OpenMoko]] and [[OpenMokoFramework]]<br />
<br />
=== Q: Is it completely free software/open source? ===<br />
<br />
A: User space [[Gpsd]] will use binary plugin (to be released soon) for [[:Category:Neo1973 Hardware#AGPS|Hammerhead AGPS]] and [[:Category:Neo1973 Hardware#GSM.2FGPRS|GSM modem]] is separate subsystem connected to S3C2410 UART1. Otherwise it is completely free software. See [[MokoMakefile]] and [[Development resources]].<br />
<br />
=== Q: How do I install and manage software on OpenMoko? ===<br />
<br />
A: ipkg: http://handhelds.org/moin/moin.cgi/Ipkg<br />
<br />
=== Q: How can I compile programs for the Neo1973? ===<br />
<br />
A: See [[Toolchain]].<br />
<br />
=== Q: Is there an emulator available for OpenMoko? ===<br />
<br />
For a lot of testing and development work, you don't actually need emulation as you can run OpenMoko on a normal PC too. The emulators also aren't 100% accurate. That being said, there are several emulation options as described in the following.<br />
<br />
====QEMU====<br />
QEMU can now emulate the Neo1973 device. The [[MokoMakefile]] has support for automatically building, flashing, and running [[OpenMoko under QEMU|the Neo1973 emulator]].<br />
<br />
“make qemu” will build qemu-neo1973, download the latest official openmoko images, flash the images into the virtual NAND flash, and run the emulator.<br />
<br />
====Xoo====<br />
Another is [http://projects.o-hand.com/xoo Xoo]. Koen says: "Xoo should be enough for most apps people will develop, since most don't need access to the gsm uart directly. If you're hardcore you could use qemu + xoo, but that still doesn't emulate all the hardware quirks (e.g. unaligned access)".<br />
<br />
Update: Stefan Schmidt has resized the [[Neo1973]] Mock-up and written a small description for xoo. In his words:<br />
<br />
It's not really useable at all, as you need a really high screen resolution to fit the whole picture on your screen. And of course the dpi are wrong. Even no buttons because I can't remember where they are at the case.<br />
<br />
http://www.datenfreihafen.org/~stefan/OpenMoko/neo1973-xoo-device.tar.bz2<br />
<br />
Start with 'xoo --device /path/to/neo1973.xml'<br />
<br />
Some more details [[Getting_Openmoko_working_on_host_with_Xoo|here]].<br />
<br />
====Xephyr====<br />
Or use Xephyr directly with locally compiled programs (e.g. matchbox svn + openmoko):<br />
Xephyr -screen 480x640 -nolisten tcp -ac :1 &<br />
export DISPLAY=:1<br />
export LD_LIBRARY_PATH=/usr/local/lib<br />
matchbox-window-manager -display $DISPLAY -use_titlebar no \<br />
-use_super_modal yes -use_lowlight yes -use_dialog_mode static \<br />
-use_cursor yes &<br />
matchbox-panel --geometry=480x44 --end-applets=clock &<br />
openmoko-footer &<br />
openmoko-taskmanager &<br />
<br />
=== Q: Where can I find some type of tutorial for a 'Hello, world' on OpenMoko? ===<br />
<br />
A: This should get you started:<br />
http://www.gtk.org/tutorial/<br />
<br />
=== Q: Can PalmOS apps applications be ported to run on OpenMoko? ===<br />
<br />
A: Making legacy apps written for the "Garnet" OS (née "Palm OS") run on Linux<br />
is decidedly non-trivial.<br />
<br />
PalmOS apps are in general very hard to simply 'port'. Particularly well-designed programs may make it possible.<br />
<br />
The ACCESS Linux Platform will include Garnet on Host (GHost), a PalmOS emulator that will support M6800 (68k) and ARM PalmOS applications. This part (GarnetVM and the .prc loader) will however be closed-source and likely under a restrictive license (fact confirmed by ACCESS Co. employees), making it rather unusable. In addition GarnetVM depends on Hiker and other packages.<br />
<br />
It is possible that POSE, an emulator that simulates a Palm device on a Linux host could be used to allow 68k based applications to run. This emulator has been around a long time; one expects that it will also run on OpenMoko, but this has to be considered a short-term bandaid rather than a long-term solution.<br />
<br />
The soon-to-be-released [http://www.palm.com/foleo/ Palm Foleo], which runs a Linux port developed by Palm Inc. independently of ALP, contains a PalmOS compatibility environment that runs PalmOS apps, supposedly all of them and supposedly seamlessly. Little is known about how it works but if it's not too kludgy it should run unmodified on any ARM linux. It is not known what license it will be distributed under.<br />
<br />
Hopefully emulation will be necessary only for M68000 code (pre-PalmOS 5) while native ARM programs can run natively under Linux, provided a proper set of PalmOS libraries and a .prc executable loader.<br />
<br />
=== Q: Does it have Java? ===<br />
A: It will have eventually, if you help us to get it working. Some good places to keep track of would be [http://projects.openmoko.org/projects/java-pkg/ projects.openmoko.org] and [https://phoneme.dev.java.net/ PhoneME].<br />
<br />
Project [[https://wiki.evolvis.org/jalimo/index.php/Jalimo Jalimo]] is a project aiming to provide a Java stack on mobile devices. This project supports OpenMoko.<br />
<br />
=== Q: What are the relevant X11 details? ===<br />
<br />
A: See [http://lists.openmoko.org/pipermail/community/2007-January/001353.html xdpyinfo output].<br />
<br />
=== Q: Does OpenMoko run on any other hardware? ===<br />
<br />
You can run it on your [[How_to_run_OpenMoko_Apps_on_PC|PC]]. There is work going on with [http://www.datenfreihafen.org/~stefan/weblog//archives/2007/02/#e2007-02-18T15_27_07.txt OpenEZX and HTC]. It's running on [http://dominion.kabel.utwente.nl/koen/cms/openmoko-running-on-an-ipaq iPaq hx4700], on a [http://hackndev.com/node/701 Palm TX] and on [http://blog.mikeasoft.com/2007/07/01/openmoko-on-a-treo-650/ PalmOne's Treo 650].<br />
<br />
=== Q: What are the requirements to the hardware to run OpenMoko? (Would it run on the IXI ogo?) ===<br />
<br />
=== Q: Why do you not build on top of the Maemo platform instead? ===<br />
<br />
While I can't speak for the OpenMoko team, it's worth noting that maemo is fixed resolution only. That will, I've heard, change in the future, but it hasn't yet. Maemo's current layout is also optimized for wide screens, not tall narrow ones. Most third party maemo applications that are out there will need to be modified to work at different sizes. Finally, a number of the software components of the Nokia 770 and N800 are not open source. --gopi<br />
<br />
To add up on that, according to Nokia, Maemo is designed to bring the "Desktop" experience to an Internet Tablet. A lot of Desktop paradigms just won't work on a phone. However, we really share a lot of the base-technology (gtk, dbus, eds, gconf, to name a few) with Maemo, so we are definitely not a reinvent-the-wheel team.<br />
<br />
=== Q: Will it be possible to use popular VoIP applications such as Skype on the OpenMoko platform? ===<br />
<br />
A: Perhaps. Hardware issues mean that it won't work well on the Neo1973. (the typical latency of GPRS is far too high). Also, Skype is a closed source application, which does not provide binaries that would be suitable to run on OpenMoko. Skype's vendor could of course choose to provide binaries for OpenMoko phones. However, many telephone providers' terms of service agreements preclude running VoIP over their baseline GSM service.<br />
<br />
=== Q: Same question for Instant Messaging applications such as MSN Messenger? ===<br />
<br />
A: Very probably. MSN is closed source and will only run where Microsoft wants you to run it. But there are many Open Source IM clients, many of which have a plugin architecture and so support the use of more than one IM protocol, even simultaneously. One example is [http://www.pidgin.im Pidgin, formerly called GAIM]. GPRS does induce a certain amount of latency but that should not be a problem for simple, text-oriented chat between parties. And the GTA02's WiFi will make it even better.<br />
<br />
==Neo1973 Hardware== <br />
<br />
=== Q: Is there description of [[:Category:Neo1973 Hardware | Neo1973 Hardware]] ? ===<br />
<br />
A: See [[:Category:Neo1973 Hardware | Neo1973 Hardware]] and [[Disassembling Neo1973]]<br />
<br />
=== Q: What are the dimensions? ===<br />
<br />
A: 120.7 x 62 x 18.5 mm, It would fit entirely in a coke can. (4.75 * 2.4 * 0.72 ")<br />
<br />
=== Q: How heavy is it? ===<br />
<br />
A: 185g, (6.5 ounces).<br />
<br />
=== Q: Does it have a camera? ===<br />
<br />
A: No, see [[:Category:Neo1973 Hardware | Neo1973]] for details on what it does include (and [[Wish List - Hardware]] for what some want in the future.) See also [[FAQ#USB]].<br />
<br />
=== Q: Does it have Wifi? ===<br />
<br />
A: The currently available [[Neo1973]] does not have WiFi. There was no suitable Wifi device available when it was designed. The next version will have WiFi. See also [[FAQ#USB]].<br />
<br />
=== Q: Does it have bluetooth? ===<br />
<br />
A: Yes! Bluetooth 2.0.<br />
<br />
=== Q: Does it come with a stylus? ===<br />
<br />
A: Yes, but there's no holder for it on the phone.<br />
<br />
<br />
=== Q: Where are the buttons? ===<br />
<br />
[[Neo1973 Power Button|The power button]] is a small circular button, just next to the USB connector. <br />
[[Neo1973 AUX Button|The Auxiliary button]] is a rectangular button on the top left of the edge of the phone. (on black phones it looks just like an IRDA port).<br />
<br />
=== Q: How do I input text? ===<br />
<br />
A: Use provided keyboard app.<br />
<br />
A: Use Bluetooth keyboard.<br />
<br />
A: For more methods and ideas see [[Wishlist:Text_Input]].<br />
<br />
=== Q: Can I record calls and/or play audio files in calls? ===<br />
<br />
A: Yes, audio path from GSM to/from mic and speakers is completely controllable by user. For example recording calls (both sides) and implementing an [[Answering Machine]] is possible. Also using text->speech should be possible or modifying outgoing voice. Currently there is no software bundled in phone to do this.<br />
There are only 2 A/D inputs and three D/A outputs (one dedicated to the earpiece). This means that stereo audio playback cannot happen at the same time as the [[Answering Machine]] functionality, amongst other things. See the audio page. [[Neo1973_Audio_Subsystem|Neo1973 Audio Subsystem]]<br />
<br />
=== Q: What is the battery life? ===<br />
<br />
A: There has been no word on this so far, but see [[Neo1973 Power Management#Approximate_power_draw_of_various_subsystems|these estimates]] for a rough idea. More information about the battery [[Neo1973 Battery|here]].<br />
<br />
=== USB ===<br />
<br />
==== Q: What can I do with the USB port on the Neo1973? ====<br />
A: Charge the phone, communicate with it over USB-serial, or USB-networking.<br />
<br />
A: Plug external devices, such as wifi, cameras, or mass-storage devices in. The "Mass Market" version of the phone will have wifi integrated.<br />
<br />
==== Q: What can't I do with the USB? ====<br />
<br />
The only limitation on current hardware seems to be no usb 2.0 support, which means slower communication with 2.0 devices.<br />
<br />
==== Q: Why is only USB 1.1 provided? ====<br />
<br />
A: The processor has USB 1.1 built in. One with USB2 built in would have been more expensive.<br />
<br />
==== Q: Can the Neo charge and use devices on a USB hub at the same time? ====<br />
<br />
A: <br />
*When the Neo is connected to a device port on a USB hub, it will start charging. If the hub is a powered hub, then it will charge fast (3h), otherwise around 12h.<br />
<br />
*If you plug the Neo into the host port of a USB hub you can use devices on that hub but the Neo will not charge. (Some/many USB hubs will not accept an unpowered host as valid, hence the need for the below cable.)<br />
*This is because the host socket on USB hubs is not powered.<br />
<br />
FIC product development is looking into providing something that<br />
conveniently solves this problem.<br />
<br />
The USB port on the Neo is not a properly compliant USB host port, all USB host ports must provide 5V - though powered devices or hubs may not draw any current from this, they may refuse to work. (The Belkin Tetrahub is an example of a hub that will not work.)<br />
<br />
One solution is a three headed cable.<br />
<br />
One end plugs into the Neo. One end plugs into a device port of a powered hub, or the Neo charger. One end plugs into the host port of a hub.<br />
<br />
The Charger/USB device plug only has +5V and 0V connected in the simple cable, which are connected to the other ends.<br />
<br />
For a more complex cable, when the host socket is not plugged in, the cable acts as a simple USB cable.<br />
<br />
==== Q: What are the details of the USB port on the [[Neo1973]]? How does it compare to USB On-The-Go? ====<br />
<br />
A: The [[Neo1973]] will have mini-USB-B, and will be able to function as either a host or a device. It will NOT be USB On-The-Go. OTG is a complex specification, and it comprises way more than just<br />
a AB socket, but also electrical and software components which cannot be provide by the S3C2410.<br />
<br />
You will need a special Mini-B to regular-B cable (note that this won't actually comply with the USB standard: a compliant cable has to have an A or Mini-A plug on one end, and B or Mini-B on the other).<br />
<br />
=== Q: Are there any LEDs on the Neo 1973? ===<br />
<br />
A: The [[Neo1973]] P1/P2 will have no LEDs besides the screen backlight.<br />
<br />
=== Q: Will a JTAG port be made available? ===<br />
<br />
A: Included with purchase of The "Hacker's Lunchbox" (Advanced version).<br />
<br />
There are [[Neo1973_Hardware#Changes_from_GTA01Bv3|exposed I2C, SPI and debug board connectors]] inside case in all versions and [[Debug Board|Debug Board v2]] (JTAG and serial console) in Advanced version. [[Connecting Neo1973 with Debug Board v2]] explains how to connect it to the phone.<br />
<br />
=== Q: Will the JTAG interface that comes with GTA01 be compatible with GTA02? ===<br />
<br />
A: Yes<br />
<br />
=== Q: What can we expect in future versions? ===<br />
<br />
A: A faster CPU, faster GSM (EDGE?) perhaps even powered USB port, USB2, wifi, and camera. No details have been released yet. More details of hardware upgrades should be available sometime in May. There will also be 5 more OpenMoko devices - some not phones in the traditional sense - announced by FIC in September.<br />
<br />
==Networking/Connectivity==<br />
<br />
=== Q: What kind of connectivity? ===<br />
<br />
A: Tri-band GSM (commonly known as "European tri-band", 900/1800/1900 MHz), GPRS Class12/CS4 2.5G (Not EDGE), Bluetooth 2.0 EDR, USB in all versions. WiFi: Atheros AR6K in [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]]. (No 3G in year 2007 models)<br />
<br />
=== Q: Can I bridge to an Ethernet (wired or unwired) network via a suitable Bluetooth enabled router? ===<br />
<br />
A: Yes - see [http://gentoo-wiki.com/HOWTO_Configure_a_bluetooth_network_access_point this howto for how to configure a linux computer to act as such a router] and [[Bluetooth Support]].<br />
<br />
=== Q: What providers provide the GSM required for Neo1973? ===<br />
<br />
A: See [[Neo1973 compatible cellphone providers]]<br />
<br />
=== Q: Will OpenMoko "Just Work" with Mac OS X? ===<br />
<br />
A: There has been some discussion of this on the mailing list. There is motivation, and there are interested developers. <br />
Not being a Mac OS X user, I don't know enough<br />
to summarize the discussion to answer this question. Can someone please fill in?<br />
<br />
A: For IP over USB cable connectivity, it is planned to improve/adapt the AJZaurusUSB driver, allowing ssh into the OpenMoko.<br />
<br />
A: It is expected that (Bluetooth/UB) SyncML based interoperation for<br />
contacts and events can easily be achieved by a patch<br />
to the Apple iSync configuration tables.<br />
<br />
A: There is an open source implementation of Cocoa (GNUstep) that aims to run MacOS X compatible applications (sort of<br />
PPC/x86/ARM universal binaries) on OpenMoko devices: mySTEP.<br />
<br />
==Misc==<br />
<br />
=== Q: On the lists on lists.openmoko.org, should replies be added above or below the original text? ===<br />
<br />
A: Please reply UNDER post.<br />
<br />
=== Q: How can I find out if a question or topic has already been discussed on the mailing lists? ===<br />
<br />
A: By searching the mailing list archives. For example, using Google searches:<br />
<br />
site:openmoko.org text<br />
<br />
For example, to search for accelerometer:<br />
<br />
site:openmoko.org accelerometer<br />
<br />
If you only want to read the "official" mails from FIC people or from OpenMoko people:<br />
<br />
site:openmoko.org text "at fic.com.tw"<br />
site:openmoko.org text "at openmoko.org"<br />
<br />
For example to search for "release date" from FIC people:<br />
<br />
site:openmoko.org "release date" "at fic.com.tw"<br />
<br />
Alternatively you can use the [http://www.google.com/coop/cse?cx=018430699993342716089%3Aszsaurhronw custom OpenMoko search engine] that is using [http://www.google.com/coop/ Google Co-op].<br />
<br />
=== Q: how many dead pixels may the LCM have before calling it defect? ===<br />
<br />
A: the answer for the display used in GTA01 and GTA02 is '2'<br />
<br />
=== Q: Can I has some money for a Neo1973? ===<br />
<br />
A: No.<br />
<br />
{{Languages|FAQ}}<br />
<br />
[[Category:Information]]</div>Sinhttp://openmoko.org/wiki/Wish_List_-_HardwareWish List - Hardware2007-11-30T07:34:06Z<p>Sin: /* Rugged version */</p>
<hr />
<div>This page details hardware features which some would like to go into future phones similar to the [[Neo1973]].<br />
<br />
Related pages are:<br />
*[[Wishlist - Hardware - Novel Devices]] - openmoko will run on a large number of devices in the future, some of which may be DVD players, cameras, or convergance devices. <br />
*[[Wishlist:Unlikely]] - Hardware that is unlikely to appear in any OpenMoko device, due to it being impossible to fabricate with near-term technology, or for other reasons.<br />
*[[Wishlist:Accessories]] - Accessories that people would like, that connect easily to the phone - initially primarily for the Neo1973 <br />
*[[Wishlist:Expansion]] - add-ons to the phone, maybe involving hardware changes, and software and hardware protocols to implement these.<br />
<br />
This page is rather long. Before adding a new idea, please read through this page and the above pages, to make sure your idea has not been suggested before.<br />
==Processor==<br />
===A FPGA===<br />
A FPGA is a general purpose reconfigurable logic device.<br />
See [[Wish List - Hardware:FPGA]] for more details.<br />
<br />
===Samsung S3C2443===<br />
*[http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&partnum=S3C2443&&ppmi=1427 Samsung S3C2443] Up to 533 MHz, can act as a USB 2.0 device.<br />
<br />
==Internal Memory==<br />
===RAM===<br />
128MB Dedicated for open files, running software etc., not for storage, or 256MB at all would be really nice and enough for any future software.<br />
<br />
===ROM===<br />
Enough to Hold O/S and a fair number of applications and their settings. Persistent Storage with XIP capability. About 128 MB.<br />
<br />
===Storage===<br />
An internal Micro SDHC should be used for users' files and additional software<br />
<br />
==Wireless data networking==<br />
<br />
===WiMAX support===<br />
[http://en.wikipedia.org/wiki/Wimax WiMAX] is a high-speed data service, similar to wifi, though longer range and newer. Where service is available, this would complement WiFi. Unfortunately, unlike wifi, frequencies vary worldwide, so global usage may be complex. In South Korea, 2.3Ghz is available for WiMAX, known as WiBro. WiMAX Forum sets heart on 2.5 GHz for global use.<br />
----<br />
Two campuses of the University of California have just completed a deal with a WiMAX service provider to lease UC's ITFS/EBS spectrum to provide WiMAX in the SF Bay Area. Bidding was aggressive between Nextwave, Sprint-Nextel, and Clearwire. Other UC campuses have awarded other contracts throughout California to various of the three contenders. The point here is: these three companies are competing aggressively for spectrum in the 2.5-2.7 GHz range, and it's not limited to CA. At a National ITFS Association meeting in 2005, representatives from Intel said they would be ready to release a WiMAX chipset compatible with these frequencies in 2007, for inclusion in laptops. I assume the folks at [[FIC]] know much more about it that I do! Based on these and other clues, I think WiMAX is coming in the 2.5-2.7 GHz band in the near future... I'll be surprised if I do not see some offerings by early 2009. <br />
<br />
-[[User:Tzf|Tzf]] 21:54, 24 November 2007 (CET)<br />
<br />
===Emerging Protocols===<br />
*[http://en.wikipedia.org/wiki/Near_Field_Communication Near Field Communication] has a few centimeter range, useable for keys, ID badges, pairing bluetooth devices and similar uses. Mentioned in newer bluetooth and SD standards. (No products.)<br />
*[http://en.wikipedia.org/wiki/ZigBee ZigBee] is designed for connecting sensors and switches in buildings, with many options including mesh networks and aggressive power saving compared to bluetooth. (Almost no products available.)<br />
*The [http://en.wikipedia.org/wiki/ANT_%28network%29 ANT network] is for connecting worn devices. Similar to ZigBee, but much simpler and maybe lower power. ([http://www.thisisant.com/?section=9 Short list] of products.)<br />
<br />
==Camera==<br />
<br />
* A camera that can take reasonable quality video and pictures is something many want. Applications vary from simple snapping, to gesture interfaces, video conferencing, barcode reading, buisness card reading, healthcare, servicing, and more.<br />
<br />
* Some people can't take cameras into work - a model without the camera, or some way of removing the camera would be useful or leave the camera chip in place and have a removable lens assembly and replacement backcover.<br />
*See [[Hardware:Neo1973:Alternate_Cases:Camera | Alternate Cases:Camera]] for phone casing suggestions.<br />
<br />
* See [[Wishlist:Camera]] for a more detailed wishlist.<br />
<br />
==Display==<br />
===Multitouch screen===<br />
<br />
''Main article: [[Wishlist:Spell_weaving|Spell weaving]]''<br />
<br />
See also [http://pogue.blogs.nytimes.com/2007/03/27/the-multi-touch-screen/ this page] containing a link to a video demonstration.<br />
<br />
A history of multitouch implementations is [http://billbuxton.com/multitouchOverview.html here] ([http://google.com/search?q=cache:billbuxton.com/multitouchOverview.html google cache version])<br />
<br />
*Use examples: [http://www.youtube.com/watch?v=UcKqyn-gUbY&mode=related&search= Multi-touch interface (from Adobe TED)], [http://www.youtube.com/watch?v=1ftJhDBZqss&mode=related&search= Multi Touch (new touchscreen technology)]<br />
<br />
===Bigger and better screen===<br />
2.8" widescreen (like in [http://etencorp.com E-ten] PDA/smartphones), or 3.5" widescreen (like in [http://www.expansys.ie/d.aspx?i=134944 Fujitsu Siemens LOOX N560]).<br />
<br />
262k or 16.7M colurs for displaying images and especially videos.<br />
<br />
OLED for better contrast, more rich colours, and less energy consumption.<br />
<br />
Maybe the [http://www.sharpsme.com/Page.aspx/europe/en/part/LS037V7DW01/ LS037V7DW01] by Sharp could be a solution. It has nearly the same specs as the currently used, but 3,7" -- [[User:Wedge | Wedge]]<br />
<br />
===Distance sensing touchscreen===<br />
{{Main|Hardware:NearlyTouchScreen}}<br />
TouchKo's (now Wacom Company Ltd.) spatial capacitive "touchscreen", can sense fingers at a small distance, so you do not get your display greasy, and can unlike some touchscreens, be operated with gloves.<br />
<br />
===<s>Video acceleration</s>===<br />
Hardware acceleration for video playback and 2D/3D accelleration will be present in [[Neo1973 GTA02]].<br />
<br />
===EPD===<br />
Or electronic paper display, EPD is used in many new devices such as the new Motorola motofone, sonys new e-reader and Irex's iliad. The technology provides thin, lightweight, power saving screens using new eink technology. This technology could cut the weight of the phone and its power usage. For more info see: [http://www.eink.com eink's website].<br />
<br />
Pro: laserprinter like quality, glossy, very stable image, easy on the eyes. Electronics are similar to TFT. Very low power consumption. <br />
<br />
Con: Black and grey only (like a newspaper, but glossy), although there were already color prototypes in 2005. low framerate (5fps). Can reflect light (like paper), backlight is impossible.<br />
<br />
===Transreflective===<br />
It would be nice to have (the option of) a transreflective display, which while being less bright, is readable without needing to power the backlight. Then again, it depends on how much power the backlight uses compared to everything else...<br />
<br />
==="Slightly" Larger Screen===<br />
43mm x 57mm (2.8inch diagonal) is tiny. A 53mm x 71mm (3.5 inch diagonal) like on the TD035STEE1 would be a nice improvement. A widescreen format at about 53mm x 82.5mm instead of the 3:4 aspect ratio would be even cooler (if one could be found).<br />
<br />
===Second Display===<br />
A 32x32 OLED display possibly on the back for camera framing or on an edge so it can be viewed like a pager.<br />
This could be used to display any number of alerts (from any installed software) the alerts could have a dynamic prioritisation which means during the work day a message from the boss has high priority but lower at home (could be GPS/Time controlled?) multiple alerts shrink the icons to a 3x3 grid higher priority messages get more space.<br />
<br />
===Micro Projector===<br />
[http://www.engadget.com/media/2006/02/digismartphone2.jpg Like the one shown here], new cellphones are now coming out with a small, low power projector. This can be used to show movies from your cell phone with 0.5m high image on a while wall for example...<br />
<br />
==Input devices==<br />
<br />
===No Dependence on Stylus===<br />
The Neo's basic functionality should be completely usable without a stylus, Like the iPhone but with stylus use for precision work.<br />
<br />
===A laser projection keyboard===<br />
Similar to [http://www.thinkgeek.com/computing/input/8193/ this], except the device would be integrated into the phone itself. Setting the Neo up on a stand on a flat surface (perhaps a stand could be built into the back of the Neo itself, or into a case) would turn the Neo into a micro-laptop. There may be several issues with the inclusion of this technology, including patents, the space required to project the laser grids, and the power consumption. If possible, however, it would make text input a breeze.<br />
<br />
===Just a few more Buttons===<br />
<br />
2 buttons more, 3 buttons total, mounted sideways would be enough. You could use them for play/pause and loudness controll while the phone remains in your pocket (display locked, ...), reading mails, rss, ebooks,... without wasting display space and so on.<br />
<br />
With 5 buttons in total you could possibly emulate a keyboard (2^5 = 32 combinations) for those who know how to play a flute. Useable onehanded, not wasting display space and faster than t9. (It's not faster than T9 - I've used this system with the microwriter agenda --[[User:Speedevil|Speedevil]] 00:00, 2 July 2007 (CEST)) Hopefully this is not patented already.<br />
<br />
===D-Pad and Buttons===<br />
*Adding a D-pad (to the bottom of the phone) and 2 to 4 buttons (to the top) would provide some tactile input controls, in addition to the touchscreen. They could be used as shortcut keys in the menu, or playback control when playing media. When the phone is held sideways, they can be used as games controls. (With touchscreen alone, gameplay options are limited)<br />
<br />
Game buttons would be best on both sides of the screen. The larger the buttons, the better. 2x 4 buttons in up-down-left-right configuration + some extra buttons separately a bit lower on the device would be good for many for emulation games. <br />
<br />
Here is a concept drawing of a possible neo1973 gaming version: <br />
(This has a 4-way direction pad, 8 way may be better for gaming)<br />
<br/><br />
[[Image:Neogame90.jpg]]<br />
<br/><br />
Shoulder buttons would be a great addition, too. It would be interesting if there was a total 4 of them, one for every corner. It would make the phone very flexible for rotating and 2 to 6 players playing on one device.<br />
<br/><br />
:''Note'' : The [http://en.wikipedia.org/wiki/Tapwave_Zodiac Tapwave Zodiac] Palm PDA / Game console hybrid had a similar setup - with an analog stick on the left (also used for quick selection using a radial main menu when working as a PDA), 4 buttons on the right (also configurable for shortcuts when using the device as PDA), and 2 shoulder buttons. Also it had and still has an enthusiastic scene of homebrew development (almost any console emulator for PalmOS can also take advantage of the additional buttons and graphic power of the device). If we also take into account the success encountered by the [http://en.wikipedia.org/wiki/GP32 GP32] in the past and the [http://en.wikipedia.org/wiki/GP2X GP2X] currently on the homebrew scene, it's not unreasonable to plan a future OpenMoko device with both a SmartPhone/PDA functionnality ''and'' hand-held console targeting homebrew development.<br />
<br />
===Thumb keyboard or keyboard attachment accessory===<br />
*Could be slide out or clamshell (hinge on long side) design with an external OLED. The keyboard should be protected when not in use.<br />
*Could be a clip on keyboard that attaches to the serial port or communicates by bluetooth (not preferred for permanent keyboard users).<br />
*Cheap clippable miniusb keyboard<br />
*One of the layouts proposed in [[Hardware:Keyboards]]<br />
* What about virtual keyboard? [[http://www.extremetech.com/article2/0,3973,539778,00.asp Keyboard]]<br />
<br />
===Analogue Controllers===<br />
<br />
====Trackball====<br />
A trackball would provide an efficient mouse-like interface in a very compact package. As exemplified in the newer Blackberry&reg; models.<br />
Maybe instead an optical sensor as are used in mice could be used so that the whole phone can be moved over a surface just like a mouse. (It could function as a Bluetooth mouse for other devices like laptop computers: see [[Bluetooth_Support#Acting_as_HID_device]]. Adding one other two-axis analogue input (possibly just the screen) would make the Neo usable as a TrackPoint or scroll-and-tilt mouse.) The same sensor might be usable as a barcode reader.<br />
<br />
====Analog Joystick====<br />
A joystick, or [http://www.extremetech.com/article2/0,1697,1772689,00.asp Rollermouse]-like device would provide additional control, compared with touchscreen only.<br />
*A standard [http://en.wikipedia.org/wiki/Pointing_stick pointing stick (ie. TrackPoint)] might serve well. As a fairly standard part, might they be quite inexpensive?<br />
<br />
====Dual analogues====<br />
Dual analogue controllers (one trackball or joystick above, one below the screen, most likely) might even be feasible. That might be overkill since the accelerometers or touchscreen can be used to provide a second analogue input. But it would be nice to have four axes of analogue control without having to tilt the screen away from you or partly cover it with your hand.<br />
<br />
===TV/radio receiver===<br />
[[Digital Television]], [[Digital Radio]] or even normal analogue TV/radio is widely available in the world, though unfortunately in various different forms. In markets where one standard is widespread, and hardware is suitable, it would be a great extension of the phone to a general entertainment device for when you're away from home. Multi standard devices would be ideal, but may not be small, low-power, or cheap.<br />
A good start would be an FM tuner, since it's one of the most widely used formats of radio broadcasting in the world.<br />
<br />
Here's a selection of chips, though it's not clear if the drivers are open source. http://www.sigmatel.com/products/portable/wireless/fmtuner.aspx#fragment-14<br />
http://www.st.com/stonline/products/families/automotive/am_fm_tuners.htm<br />
<br />
===Accelerometer=== <br />
This enables the phone to sense which direction 'down' is, and to sense any movements the phone makes.<br />
<br />
See [[Accelerometer Fundamentals]] for more information on accelerometers as they may be used in phones.<br />
<br />
In some cases integrated gyroscopes may also be needed. A [[#Digital compass]] can even be of more use since it gives absolute rotation so slow rotations could also be measured. A 3D compass would be nicest, but a simple 2D compass already is a helpful addition to the accelerometers.<br />
<br />
*[[Wishlist:3D Viewport|3D Viewport]]<br />
*[[Wishlist:Computer Mouse|Computer Mouse]]<br />
*[[Wishlist:Determine Position|Determine Position]]<br />
*[[Wishlist:Dynamic Screen Orientation|Dynamic Screen Orientation]]<br />
*Change media player playlist when jogging vs walking. <br />
*Attempt to use to stabilise any future camera.<br />
<br />
This feature is scheduled for inclusion in the phase 2 Neo1973, currently slated for release in December 2007.<br />
<br />
===Side-Mounted Touch Strip===<br />
Add a "touch strip" sensor onto the side of the phone which can be used to scroll. By having it on the side you can use your thumb to scroll comfortably while holding the phone one-handed. An 8-element capacitive sensor would work wonderfully and be easy to fab using either a Quantum QT411 (http://www.qprox.com/products/qslide_qt411.php) or Analog Devices AD7143 (http://www.analog.com/en/prod/0,2877,AD7143,00.html) controller. The Analog Devices chip seems better suited due to it's smaller allowable element size.<br />
*With the AD7143 you can have an 8-element (128-position) 25mm long strip - Perfect!.<br />
*With a few OLED screens beneath the strip it could be used as dynamic configurable buttons/alerts eg. zoom/flash/shutter with a camera application and SMS/Email/Voicemail alerts in standby<br />
<br />
===Heart Rate Compatibility=== <br />
<br />
An RF interface to receive data from popular heart rate straps (Polar, Garmin, Sigma, Suunto, etc.). This would go along well with the existing GPS functionality and possible future Accelerometer functionality to make for a full-blown workout tool.<br />
<br />
Software can be written to track heart rate along a running, cycling, skiing, swimming loop, to monitor max and min heart rate, to match heart rate data to GPS coordinates and print map data w/ relevant data.<br />
<br />
===Digital compass=== <br />
A digital compass is useful for orienting maps to the terrain and other location/direction/orientation based applications (... is 300 meter that way) when the user is standing still (regardless of GPS reception) and for following a bearing when GPS reception is poor or speed is low. Also could be used to make the accelerometer data more exact.<br />
<br />
Very small [[I2C]] sensors like [http://www.ssec.honeywell.com/magnetic/hmc6352.html Honeywell's HMC6352 2-Axis Digital Integrated Compass] (6.5 x 6.5 x 1.5 mm) are very appropriate for this.<br />
<br />
*[[Wishlist:Auto Align Map]]<br />
<br />
See [[Wishlist - Hardware: Digital compass]] for more information<br />
<br />
===Thermometer===<br />
An electronic thermometer might become handy for some users.<br />
<br />
There are very small [[I2C]] devices available, that could easily integrate to the existing bus. For example [http://focus.ti.com/docs/prod/folders/print/tmp100.html this one from ti].<br />
(Could just be cheap and use the thermometer from the battery, thats how they did it in the nokia 5140's). Also is integrated in a barometer/altimeter like the SMD500 mentioned in [[Wish List - Hardware - Atmospheric]].<br />
<br />
===Barometer and Variometer (Altimeter)===<br />
<br />
A Barometer measures air pressure. This can be used to give weather information, and also as a variometer, to sense relative altitude. Variometers are commonly used in flying microlight and ultralight aircraft, to get accurate relative altitude.<br />
<br />
These are also common on high end GPS units. This is a great feature for walkers as you can tell how far you have got on any ascent/decent.<br />
<br />
See [[Wish List - Hardware - Atmospheric]] for more information.<br />
<br />
===Finger print sensor===<br />
A fingerprint sensor gives easy and fast access to the phone, could lock the touchscreen etc. An example of this device can be found at [http://www.sonystyle.com/is-bin/INTERSHOP.enfinity/eCS/Store/en/-/USD/SY_BrowseCatalog-Start?CategoryName=cpu_VAIONotebookComputers_UX_Series&Dept=computers Sony UX17].<br />
<br />
Most fingerprint sensors in the embedded market include a navigation mode, where they work similar to either a touch-stick or touch-pad of a laptop.<br />
<br />
===Barcode Scanner===<br />
*less cpu intensive and more reliable than camera+ocr<br />
*though, bluetooth-enabled readers are already available.<br />
<br />
===Light Sensor===<br />
Ability to sense ambient light, and act accordingly. i.e if it's 3am and LightValue<.1 then Ring Quietly.<br />
<br />
===Wheel===<br />
A navigation wheel like on a sony/ericsson 810i would be nice.<br />
<br />
===Proximity Sensor===<br />
Switch off backlight when you place the phone to your ear. Prevent accidental activation of speakerphone or other sounds when the phone is near the ear (prevent hearing damage). Possibly switch the speakerphone on or off automatically depending on if the phone is by your head or not.<br />
<br />
=== Make ''all'' unlocking of phone, password protected===<br />
<br />
When my (current non-neophone) phone is in my pocket and I have it locked, it sometimes accidentally unlocks itself since only two keystrokes in the correct order are necessary to unlock it. When it's unlocked and still in my pocket it sometimes calls someone without my knowledge. All phones I've seen today have a press-just-one-button bypass to answer an incoming call even when the phone is locked. I suggest making the locking mechanism let the user configure it so that the user has to enter a password even for answering incoming calls. The likeliness of the phone accidentally runbbing against my car keys, hitting a ten character long password, unlocking the phone without my knowledge and consent is low enough even for us most unlucky users.<br />
<br />
==Expansion==<br />
===Positioning of Buttons, Connections and ports===<br />
<br />
Ideally any cable ports such as charging, USB, audio, docking should not get in the way of your hand or fingers when holding it in it's normal orientation. For the sake of SDIO cards an external SD slot should be on the top edge. IR for remote control software and ease of inter-device communication should be on the corner so that it is facing away from you for both orientations. Buttons obviously are positioned for finger control. An example of how '''not''' to do this would be the HTC Universal<br />
<br />
===Storage===<br />
<br />
====MMC/SD/SDIO slot (rather than?) miniSD or microSD====<br />
*Cheaper, more durable cards in a widely accepted format.<br />
*Much much larger storage capacity, [http://blog.scifi.com/tech/archives/2007/08/23/toshiba_unleash_1.html even 32GB]<br />
*Cards are harder to lose<br />
*Wider selection of accessories, including SDIO accessories.<br />
*Make externally available so that larger length SDIO cards can be used (thinking about SDIO WLAN here)<br />
*[http://en.wikipedia.org/wiki/Secure_Digital_card#SDHC SDHC] compatible. It seems to already have the right hardware for it - see [[Neo1973_Hardware#microSD-Card]].<br />
<br />
====Two SD slots====<br />
*Micro SDHC for /home partition. Keep like current design underneath SIM card<br />
*Hot swappable externally accessible normal size SDHC/SDIO slot<br />
<br />
=== Internal Communication Bus ===<br />
*A standard and/or documented internal communication bus of some sort could simplify adding new hardware modules.<br />
*Serial USB or I2C connector internal to case towards the top<br />
*Several digital I/O pins that operate at TTL levels<br />
*A few analogue I/O pins attached to a A/D converter<br />
*Documentation of Debug board connector could provide some of this functionality.<br />
<br />
===Local Communication===<br />
<br />
====USB====<br />
* 5V Powered, to avoid having to carry around a hub for when you want to occasionally plug in a memory stick. Many powered hubs will not recognize a totally unpowered host. Provide a maximum current to drive a basic USB keyboard/memory stick/mouse/webcam/astrowebcam. This could be done by adding a small cheap power converter like the [http://www.national.com/pf/LM/LM2753.html LM2753]<br />
* USB 2.0 <br />
* Standard type A socket for quick & easy insertion of memory sticks etc.<br />
* OTG, to be able connect usb keyboard like [http://www.mobile-review.com/pda/review/cherry-kb-en.shtml Cherry G84-4321 SUNRG]<br />
* Bootable USB device emulation: the possibility to boot any computer on a bootable flagged partition of the transflash.<br />
* Protection against incorrectly wired USB ports: some USB ports are wired incorrectly; if the +5V and GND are swapped, the device would get -5V when it's expecting +5V, which could burn some chips. A reverse-biased diode between +5V and GND, D+ and GND, D- and GND, and (if used) ID and GND, with a low enough forward voltage drop (to limite the negative voltages to what the chips can withstand), would protect the device by tripping the port's short circuit protection.<br />
<br />
====Wireless USB support====<br />
[http://en.wikipedia.org/wiki/Wireless_USB Wireless USB] is the wireless version of USB offering data-rates up to 480 Mbit/s over short distances (<3 meter). Chipsets suitable for a phone are likely to take some time to be available.<br />
<br />
====SIR/FIR transceiver (Serial Infrared) / IR remote control====<br />
*An infrared transceiver is cheap, small, and useful for sync with many laptops and mobile phones. <br />
*Replace/emulate all IR-based remote controls used for your tv, vcr, etc on your neo cell phone.<br />
** replaces multiple 'dumb' devices with a single intelligent device (your neo) that you will probably carry with you at all times anyway. <br />
**Command sets should be retrieved from a database or learned from other less intelligent remote control devices with macros. <br />
**reduces clutter, particularly in the living room.<br />
**inceases the neo's practical status as an 'always-have' device. <br />
<br />
Other uses.<br />
*Detecting reflections from inside of a caddy, and switching from active mode.<br />
*FIR would be a nice option, as it's some 40 times faster than SIR.<br />
<br />
===Other===<br />
<br />
====Video Out====<br />
*Through a docking port<br />
**S-Video/Composite Out<br />
**DVI Out<br />
<br />
==Output devices==<br />
<br />
===LED===<br />
*The Neo1973 GTA02 will have LEDs of some sort behind at least one button. [http://lists.openmoko.org/pipermail/community/2007-July/008458.html]<br />
*A blinking LED would be a cheap, low power way to inform the user of new SMS/Email....<br />
**An alternative to this would be for one small part of the LCD to be separately backlit.<br />
**This requires the CPU and LCD to be somewhat active, to keep the LCD refreshed, but gives much more information.<br />
**A Small OLED Screen could be used and display much more information than a LED with minimal power usage.<br />
<br />
*For example a multicolor LED which pulses yellow for GSM/GPRS transmit, blue for Bluetooth/Wifi, green to indicate non-urgent information - missed call etc, red to indicate battery low or other urgent notices.<br />
<br />
**The LED and button ideas could be combined: illuminated buttons.<br />
**It must be possible to completely disable the LED to save power or other personal preferences.<br />
<br />
=== Flashlight ===<br />
For finding keys, or any other application. May also optionally pulse in time with ring, to make phone more visible.<br />
This is really well done in Nokia 5500.<br />
<br />
-I second this one. The most used feature in my Nokia 5140 after the calling and sms features is the flashlight. It's just one simple LED, but powerful enough to see with if it's really dark. If it ain't dark, you won't need the light anyway. :)<br />
<br />
Also, Who hasn't lost their keys and opened up their cell phone to use as a flashlight?<br />
<br />
=== FM transmitter ===<br />
Small FM transmitter to output to car, and other nearby radios.<br />
<br />
Fix the biggest flaw in the iPod before Apple does!<br />
<br />
=== Infrared Transmitter w/ universal remote software ===<br />
Infrared LED on top of device with universal remote software so you can control televisions, DVDs etc.<br />
[http://www.novii.tv/ Here] is an example of universal remote software.<br />
===HAC Compliance===<br />
[http://quux.wiki.zoho.com/WhereAreHACphones.html Here] is some summary/discussion of how hearing aid compliance rules work in the US. Specifically it would be nice to see the phone include a [http://www.hearingresearch.org/Dr.Ross/telecoil_and_telephones.htm telecoil], which allows the phone to connect wirelessly to many standard hearing aids.<br />
<br />
==Mobile Communication options==<br />
<br />
===Generic Access Network / Unlicensed Mobile Access===<br />
This technology requires cooperation from the cellular provider, but [http://en.wikipedia.org/wiki/Unlicensed_Mobile_Access UMA/GAN] is already offered by T-Mobile in the United States, and perhaps others in other countries. Allowing the user to roam from GSM to wifi, this technology can save the end user a significant amount of money, and also allow the user to deploy coverage where there was none before. There are only a few UMA capable phones currently, but it would be great if this could be made to work on a phase 2 type OpenMoko device.<br />
<br />
Note that this features requires more advanced access to the GSM modem. <br />
Special messages needs to be exchanged with the network.<br />
<br />
===Faster/better mobile connectivity.===<br />
[http://en.wikipedia.org/wiki/Gsm GSM]/[http://en.wikipedia.org/wiki/GPRS GPRS] is at best slow. An incremental improvement would be a radio with [http://en.wikipedia.org/wiki/EDGE EDGE ] support. EDGE is an evolved GSM standard and, like GPRS, it operates on the same frequency as voice. This means a quad-band EDGE radio will have near-complete worldwide coverage. <br />
<br />
[http://en.wikipedia.org/wiki/UMTS UMTS] - which is widespread in Europe and being deployed in the US, [http://en.wikipedia.org/wiki/HSDPA HSDPA] (asia) and any other mobile standards would be nice for faster data connectivity and coverage.<br />
It is unlikely that all of these will be supported initially, but it is a goal. These faster standards operate in different frequencies from GSM/GPRS/EDGE. Which frequency exactly will depend on the carrier and country. For UMTS in the US, AT&T uses 850/1900 MHz but T-Mobile will use 2100/1700 MHz for example.<br />
<br />
Until that goal is reached, it is likely that some phones will be brought out for various specific markets - Europe, Asia, US.<br />
<br />
===Ability to use multiple SIMs/networks===<br />
* External SIM sockets are widely available in China, a dual external socket would be a very good solution.<br />
* [http://www.fonefunshop.co.uk/dualsim/digital.htm Dual SIM card kit] - two SIMs are trimmed and combined, software supportwould be needed, and both can't be used at once...<br />
* Some networks support multiple numbers on one SIM. Unfortunately this won't allow split networks.<br />
* A second/dual GSM module would allow full use of both sims at all times.<br />
* As a hack, [http://wiki.openmoko.org/wiki/Wish_List#Bluetooth_powered_Multi-SIM_support use another mobile via BT].<br />
** As many as three SIM slots would be genuinely useful, especially for a 3G phone - some 3G data tariffs are only available on data-only SIMs. A user could quite reasonably have one SIM for data, once SIM for his personal voice calls, and a third SIM for his business number.<br />
<br />
===PMR446/FRS Radio===<br />
* Include a PMR/FRS Radio.<br />
* A two-way walkie talkie lets you use the phone to communicate with friends without requiring a GSM connection (crowded networks at festivals, at locations with no GSM coverage).<br />
<br />
===[[DECT]]===<br />
* Include a [[DECT]] GAP/CAT-iq transceiver so you can use your home and/or office PSTN line<br />
** Ability to use Alcatel phonebook stuff (like provided by the eventphone.de phone equipment) would be very nice too<br />
<br />
===[[SIP phone]]===<br />
Make stripped down (and thus cheaper) version of the Neo1973 phone for use as a SIP phone. Remove GPS, GSM, accelerometers, stylus.<br />
<br />
Addition of an centimeters-precise location system [http://en.wikipedia.org/wiki/Real_Time_Location_Systems RTLS] would be nice, as it will allow highly sensible indoor context detection. Imagine putting the phone next to your mirror (where you shave daily) and watch it automatically switch to news radio channel. Or put it next to your bed and see it automatically switch to "sleeping" mode, when only calls from predefined numbers are accepted.<br />
<br />
=='''Casing'''==<br />
See also: [[Alternate Neo1973 case designs]] for a list of cases being considered for design/manufacture by the community.<br />
<br />
=== [[Hardware:Neo1973:Alternate_Cases:Expansion_Module_Casing | Expansion Module Casing]] ===<br />
Longer case (150-160mm+) with space in the top to put expansion modules, including test & hobby hardware. Would require use of a standard internal power & communications bus. Could be left empty with blank cover or house cameras, solar panels, a crank powered charger, special transmitters/recievers, or anything else imaginable.<br />
<br />
[http://www.likeasecret.com/Neo1973/Neo1973-Exp.mov Neo1973 Expansion Module Quicktime rendering]<br /><br />
[[Image:Neo1973-Exp.png]]<br />
<br />
=== Expansion Back Casing ===<br />
Replacement backs with additional features ranging from solar power, larger batteries, extra hardware, ...<br />
<br />
===[[Hardware:Neo1973:Alternate_Cases:Expansion_Front_Casing|Expansion Front Casing]]===<br />
Replacement fronts with e.g. extra buttons.<br />
<br />
=== Space efficient Lanyard ===<br />
The hole at the bottom of the phone takes a lot of space. A [http://en.wikipedia.org/wiki/Kensington_Security_Slot Kensington Security Slot] could be used instead.<br />
<br />
=== Rugged version ===<br />
We need something you can drop from 4 feet in to a puddle of dirty water on construction site. Sunlight readable display, maybe aluminium case. The big ugly pseudo military version.<br />
<br />
=== Transparent ===<br />
Make a transparent, see-through casing. Why do we need a closed casing for open hardware and open software? Show the world it is a truly Free/Open source phone.<br />
<br />
=== Blank ===<br />
Even though the transparent case would work too, I would like to see a blank case of pure black or white so people could have the option of air-brushing,painting or even drawing on the case.<br />
<br />
==Misc==<br />
===Galileo/GLONASS/GPS receiver===<br />
*A multi-standard satellite positioning module would be nice eventually, it does not seem to be near-term due to chipset availability problems. Galileo is the to be launched (2011) European positioning system. GLONASS is the already existing Russian one.<br />
<br />
===X10 RF Remote===<br />
Many PC-based media centers are being equipped with an RF (433 MHz) / X10-based remote control. The [http://en.wikipedia.org/wiki/X10_(industry_standard) X10] protocol also facilitates home automation to control lamps, switches, etc.<br />
The advantages of using RF for control instead of Infra-red this that it also works when furniture, walls, or doors are blocking the path between RF remote and the equipment or device. [http://www.lirc.org/ Lirc] supports X10-based RF remotes (but expects having an USB RF receiver attached to the media center).<br />
<br />
===RFID tag/RFID Reader===<br />
* Implementation/Cooperation with: [http://www.rfidguardian.org/ RFID-Guardian]<br />
*An enable-able tag would be of use - for example being able to use the phone to open doors, or cars. Unfortunately, it's moderately hard to do secure programmable tags that are compatible with existing systems, for obvious reasons.<br />
* Say you have RFID tags on your personal belongings: cellphone, keys... Neo could be programmed to remember the last recorded GPS location before it lost contact with the respective RFIDs. It'd be trivial to check where you left your cellphone, get directions from a map...or beep when the phone gets out of RFID range.<br />
<br />
*I agree with this idea, a great idea and you have to do it (Jackcday)<br />
<br />
===NFC chip===<br />
*A Near Field Communication chip, with this chip it will be possible to pay with your phone (like a credit card)in the near future, see [http://www.nokia.com/A4305081 Nokia]for details<br />
*NXP is a chip fabricator which provides NFC chips [http://nxp.com NXP] direct link>> www.nxp.com/#/pip/cb=[type=product,path=/53420/53424]|pip=[pfp=53424][0] their chips also support the above RFID reading<br />
<br />
===Less weight===<br />
* Work on the weight of the Neo1973 and following devices. At the present time the Neo1973 is just a moderate / normal business or multimedia phone. The ordinary "user" may want something lighter. Take a look at the following table, that's the Neo1973 compared with other common bussiness or multimedia phones.<br />
{|border="1"<br />
| Neo1973 || Fujitsu-Siemens LOOX N560 || E-Ten Glofiish X500+ || Sony Ericsson P990i || iPhone || Nokia E65 <br />
|- <br />
| 184 g || 160 g || 146 g || 150 g || 135 g || 115 g <br />
|-<br />
|}<br />
<br />
===Make it smaller===<br />
* To stay within physical matters: Maybe the Neo1973 is also just a normal business/multimedia phone when looking at the size. It would be great the shrink it a bit. Especially the thickness of 18.5 mm could be worked on!<br />
<br />
===Standard 3.5mm headphone jack===<br />
The Neo1973 uses a 4-conductor 2.5mm jack for stereo headphones and a microphone. A 2.5mm jack is the most common for headsets. <br />
<br />
There is an emerging convention used in the Nokia N800 and some other devices. A 4-conductor 3.5mm jack that can use a microphone with special headsets, but can also be used with off-the-shelf 3.5mm stereo headphones. Adapters to 2.5mm are of course available and this 3.5mm jack is much more robust.<br />
<br />
Neglecting space limitations, multiple sockets - 2.5mm and 3.5mm would be nice. Probably not practical in a phone. Other expanded plugs might allow remote controls.<br />
<br />
Other uses might be better met using bluetooth, or USB audio.<br />
<br />
===Laser Pointer===<br />
Include a built in laser pointer. Everything is better with lasers.<br />
<br />
===Completely free hardware===<br />
Consider selling one device with absolutely no non-free components in it, even if that means dropping the GSM support. I believe having one such device available would be good, because then it could be recommended by organizations like the FSF which typically never recommends anything if it has even a little non-free code in it.<br />
<br />
=== Consider economy / inexpensive / less featured edition ===<br />
Some people want less features, because they do not need them. Leaving out some features either lets the phone get smaller or possibly enhances battery live.<br />
<br />
One big suggestion in this area is a b/w lower res display instead of the big color display.<br />
<br />
=== Inductive Charger ===<br />
<br />
It would be nice if it was possible to charge the phone without having to connect a cable. I'd like to have a simple docking station with an inductive charger like the type that's used for electric toothbrushes [http://home.howstuffworks.com/question292.htm ]. The charger itself could get its power from a standard wall-wart power supply, or it could be USB/Firewire powered.<br />
<br />
=== Solarpanel/dynamo Charger===<br />
<br />
It would be very nice to be able to charge the phone outside of the electric grid (for example on hikes and boating trips). A combined solarpanel and muscle empowered (rotational etc.) charger would do the trick nicely.<br />
<br />
=== Plastic Solar/Back side on the Neo===<br />
<br />
Sollar cells from Plastic, on the reverse side of the Neo 1973<br />
modified and intergreated in the batery backcover/flap,<br />
like an energy source when the display is in standby mode.<br />
Thats can be use also as alternate charge method's and also helps in emergency.<br />
<br />
==Related Hardware==<br />
See [[Related Hardware]]<br />
<br />
[[Category:Hardware ideas| ]]<br />
[[Category:User]]</div>Sinhttp://openmoko.org/wiki/Wishlist/BuiltInScriptingLanguageWishlist/BuiltInScriptingLanguage2007-11-25T01:28:17Z<p>Sin: /* Python */</p>
<hr />
<div>{{Wishlist}}<br />
Many different scripting languages will be optionally available in the repository.<br />
However, developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.<br />
<br />
All core applications and scripting languages must fit into the internal memory, along with some space for user data. Otherwise it is very difficult for the user to swap the SD.<br />
<br />
People have already started to write for the Neo at least in shell script and [[Python]].<br />
<br />
== Feature matrix ==<br />
Since there are a lot of options, the main features of the candidates should be collected in a matrix. <br />
Fill in and add to this if possible.<br />
{| class="wikitable" style="background:#efefef;" cellspacing="0" cellpadding="3" border="1" <br />
! align="center" |'''Language'''<br />
! align="center" |'''Current Status'''<br />
! align="center" |'''Disk Footprint'''<br />
! align="center" |'''Memory Footprint'''<br />
! align="center" |'''Compilable'''<br />
! align="center" |'''Scriptable'''<br />
|-style="background: #DDFFDD;"<br />
! align="center" |Java<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT / gcj<br />
|align="center" |?<br />
|-<br />
!align="center" |Python<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Pyrex / PyPy JIT<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |C#/mono<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |JIT<br />
|align="center" |N<br />
|-<br />
!align="center" |Perl<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Haskell<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |Y<br />
|align="center" |Y<br />
|-<br />
!align="center" |LUA<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |JIT(Lua-JIT)<br />
|align="center" |Y<br />
|-style="background: #DDFFDD;"<br />
!align="center" |Ruby<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|align="center" |?<br />
|-<br />
!align="center" |Scheme<br />
|align="center" |Mature/Active<br />
|align="center" |Light<br />
|align="center" |Light<br />
|align="center" |Y<br />
|align="center" |Y<br />
|}<br />
<br />
== Discussion ==<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]<br />
<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:<br />
<br />
''It's true that you have the ability to add anything to the phone.''<br />
<br />
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''<br />
<br />
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''<br />
<br />
...<br />
<br />
''Choice is good.''<br />
<br />
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''<br />
<br />
<br />
''> So having lua on my system would be more or less pointless as I don't use it myself.''<br />
<br />
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''<br />
<br />
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''<br />
<br />
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]<br />
<br />
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc. So that when a developer writes an application, it will be known to be able to run on all shipped devices. So, in this light, it may be benificial to included a standard interpreted language that can be a known<br />
target. ''<br />
<br />
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn & code for a specific gui accessible only from a compiled language. And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all). Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform. But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''<br />
<br />
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''<br />
<br />
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''<br />
<br />
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]<br />
<br />
''That's all well and good when everyone has SPACE for every scripting language known to man. But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''<br />
<br />
''I'm all for allowing people to use whatever scripting language they want. But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card. I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''<br />
<br />
Bryan Larsen adds:<br />
<br />
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas. Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users? I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''<br />
<br />
For all these reasons, a choice should be made, and it should be made quickly. A scripting language should be chosen and "blessed"; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.<br />
<br />
== Factors to Consider ==<br />
<br />
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.<br />
# '''How big is the run time environment?''' This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM. We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language. It's also presumed that a stripped down, precompiled standard library will be included.<br />
# '''Is it easy to learn?''' Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?<br />
# '''How advanced is it?''' We want to include a language that people will use. Specifically I'm going to look for "closures" and "meta-programming" as a measure of how "advanced" the language is. These are very arbitrary choices, but they are something I've found useful. If you have any other pet measures, let me know!<br />
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?''' These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.<br />
# '''How does it perform?''' Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.<br />
# '''Is it embeddable?''' Traditionally in the Unix world, applications were small tools bound together by scripts and pipes. Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications. This model is also used in the Unix world, Emacs being the classic example. A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts. If the scripting language chosen is easily embeddable, all three models become available on OpenMoko. It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.<br />
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?<br />
<br />
== The Languages (already included) ==<br />
<br />
=== BASH / Shell scripts ===<br />
<br />
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]<br />
# Shell is a very popular scripting language.<br />
# There will be a shell of some form available on OpenMoko, therefore it is "free".<br />
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.<br />
# Shell is a full language, but can hardly be compared to languages designed monolithically. :)<br />
# [[D-Bus#Command_line]] is usable from the command line. GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].<br />
<br />
=== AWK ===<br />
<br />
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]<br />
<br />
=== SED ===<br />
<br />
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]<br />
<br />
=== Javascript ===<br />
<br />
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.<br />
# Javascript will be available on whichever web browser is included in the project, therefore it is "free".<br />
# Javascript has a straightforward C-style syntax. Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.<br />
# Closures are very popular in Javascript. Metaprogramming is possible; JSON is an example of a form of such.<br />
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.]. [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.<br />
<br />
<br />
<br />
== The Languages (not included) ==<br />
<br />
''Warning: opinions ahead''<br />
<br />
=== Lua ===<br />
<br />
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil. A good intro is this [http://www.linuxjournal.com/article/9605 recent LJ article]<br />
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (<50Kb RAM).<br />
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].<br />
# It has first class closures and coroutines (a.k.a. greenthreads). A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability. [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed. <br />
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page. Specifically the [http://luaforge.net/projects/lua-gtk/ Lua-gtk project]<br />
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua&lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=lua Perl's].<br />
# It is very easy to embed: it's designed for seamless integration with C, in both Lua->C and C->Lua directions.<br />
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.<br />
<br />
=== Python ===<br />
<br />
# [[Python]] is an extremely popular scripting language.<br />
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB. (claim unverified). I suspect that 3MB is a more usable number.<br />
# Designed as an educational language, it is easy to learn. <br />
# It has closures, although they were a late addition to the language. Metaprogramming is very difficult. <br />
# Bindings are available for GTK2 and [[D-Bus#Python]]. GTK bindings are part of the Gnome project.<br />
# [[Manually using Bluetooth]] has parts in Python<br />
# Performance is good. Psyco can make it extremely good, but that is unlikely to be available to OpenMoko. The PyPy JIT is on it's way.<br />
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. PyPy already is somewhat usable and [http://mark.dufour.googlepages.com/ Shed Skin] looks promising.<br />
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] (footprint <200k) is proof of concept, but currently unmaintained.<br />
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1MB (i think ~700KB), with a footprint of about 150kb. There are well working programs for it like [http://p7.hostingprod.com/@s60freeware.com/s60blog/2006/06/easyedit_a_text_editor_for_the.html EasyEdit]<br />
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko<br />
# Python is the only language besides C / C++ mentioned in GNOME Mobile & Embedded Initiative Mobile Platform<br />
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].<br />
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.<br />
<br />
=== Ruby ===<br />
<br />
# Ruby is a popular scripting language. <br />
# Size is unknown, although comparable to Python, I suspect. <br />
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python. <br />
# It has closures. Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive. <br />
# Bindings are available for GTK2 and D-BUS.<br />
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.<br />
<br />
=== Perl ===<br />
<br />
# Perl is an extremely popular scripting language. <br />
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.<br />
# It is not generally considered an easy language to learn. This is probably mostly due to the idiosyncrasy of typical Perl programs. Perl is generally easier to write than to read or maintain, most other languages are the other way around. <br />
# Perl has first class closures. Perl's metaprogramming abilities lie between that of Python and Ruby.<br />
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.<br />
# Bindings are available to GTK2 and D-BUS. Gtk bindings are part of the GNOME project.<br />
<br />
=== Lisp/Scheme/Guile ===<br />
<br />
# There are a lot of Lisp variants available. It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.<br />
# Lisp variants have been run on 16K computers. Usable variants are substantially larger, but will be significantly smaller than Python.<br />
# Lisp syntax is very simple, and hated by many. :)<br />
# Modern lisp variants are more "powerful" than every other language listed here.<br />
# GTK2 and D-BUS bindings are available<br />
# [http://galinha.ucpel.tche.br/platforms#openmoko Chicken Scheme interpreter] and runtime library packaged for OpenMoko<br />
<br />
=== Java ===<br />
<br />
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C. A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)<br />
# A full J2ME implementation takes about 2 Megabytes of space. [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here. I could be very wrong)]. However since it's likely to be included in the phone for other reasons it can be considered "free". Also, there's the very small, no-JIT [http://jamvm.sourceforge.net/ JamVM] as an alternative.<br />
# Java is very C-like.<br />
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? <br />
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.<br />
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there. <br />
# The Java API greatly reduces plumbing work and helps simplify application development greatly. In addition, we can add to it providing additional APIs for the mobile device and then these would be available to all of the applications.<br />
# The JVM has built in support for adding scripting languages, so regardless which we choose, it _should_ be on Java Virtual Machine. Studies have shown that many features of the scripting languages actually run faster on the JVM. Currently there are many scripting languages that we can use, including: javascript, ruby, python, and javafx. This would be a huge win for the device.<br />
# JavaFX is a Multimedia based scripting language that adds wow to devices<br />
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.<br />
# Using gcj, java can be compiled to native binaries. However, this means no multiple languages on one JVM and nullifies it's value in this list.<br />
<br />
=== JRuby ===<br />
<br />
# JRuby is a version of ruby that runs on the JVM. Jython is also available although it appears that JRuby is being more actively supported by Sun.<br />
# If a JVM is on the phone, then JRuby is "free".<br />
# JRuby can use the Java bindings to GTK2.<br />
<br />
=== Mono/C# ===<br />
<br />
# Not a scripting language, but offers garbage collection and other nice features.<br />
# Already used in a similar setup on Nokia 770/800.<br />
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).<br />
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib. (not all classes are needed))<br />
# With IKVM, it can run many java apps.<br />
# IronPython and IronRuby would be great boons.<br />
<br />
=== [http://squirrel-lang.org/ Squirrel] ===<br />
<br />
# A scriptable language with the interval VM architecture modeled after Lua but with a C like syntax.<br />
# gtk+ binding available<br />
# A little more resource hungry than Lua, but otherwise using less resources than Python or Perl or Java<br />
# Used in actual shipping games but also in other apps on Windows and GNU/Linux<br />
<br />
== Summary ==<br />
<br />
If the space is available, the most popular choices will be Ruby and Python. Python is currently more popular, however Ruby is gaining ground fast. The choice between the two is political. Neither is wrong; you'll offend people making either choice. However, "both" is a very expensive option, so a choice will have to be made.<br />
<br />
If the space is more limited, Lua and Scheme are probably the best choices. Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice. This may be unfortunate, but it is so.<br />
<br />
If an appropriate amount of manpower is available to bring the bindings up to snuff, the "free" choice of Javascript may be the best choice of all.<br />
<br />
JRuby is also an interesting choice. It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.<br />
<br />
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)<br />
<br />
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007<br />
<br />
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile & Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)</div>Sinhttp://openmoko.org/wiki/JavaJava2007-11-25T01:25:14Z<p>Sin: /* J2ME implementations */</p>
<hr />
<div>== Introduction ==<br />
There are two main types of Java platforms that can be made available on OpenMoko devices such as the Neo1973.<br />
* Java Standard Edition (J2SE)<br />
* Java Micro Edition (J2ME)<br />
* Hybrid Solutions<br />
<br />
=== Java Standard Edition (J2SE) ===<br />
<br />
This is the incarnation of the desktop version of Sun's Java platform. The majority of its codebase was recently opensourced under the GPL+exception license; the closed bits are quickly being replaced by unencumbered alternatives.<br />
<br />
When people talk of Java applications, they're usually referring to software targetted to this platform. Application memory footprints on desktop applications usually include the VM and base libraries into account, rather than just the application itself (this isn't the case in J2ME).<br />
<br />
=== Java Micro Edition (J2ME) ===<br />
<br />
This is the 'lite' edition of the Java platform. Modular and optimised for embedded devices, this platform provides a much more restricted set of language and library features.<br />
<br />
J2ME applications are usually referred to as MIDlets (Sun's name for these applications).<br />
<br />
When talking about games, and mobile phone games in general, people are normally referring to this platform. J2ME games and applications are expected to function within the strict memory capabilities of the corresponding platform (application descriptors allow the runtime environment to know for which they are intended).<br />
<br />
Memory footprints of MIDlets written for J2ME are typically quoted exclusive of the VM or base libraries - this is because they are often delivered to Java-enabled devices over the network. Footprint sizes average 10-64KB, with recent devices supporting up to 1MB MIDlets.<br />
<br />
MIDlet are delivered as two files:<br />
* a .jad MIDlet metadata descriptor<br />
* a .jar MIDlet container, containing executable bytecode and any required resources<br />
<br />
=== Hybrid Solutions ===<br />
<br />
Other approaches include mixing and matching J2SE and J2ME in various ways. Standard methods include providing a compatibility layer on top of J2SE (like [http://www.microemu.org/ microemu]) to allow it to run J2ME and expanding J2ME to provide more J2SE features.<br />
<br />
Another possible approach would be to have every application compiled to native with gcj when installed and then run without a JVM, with a much faster startup. This may be risky and needs a specialized installer.<br />
<br />
== Implementations ==<br />
<br />
=== J2SE implementations ===<br />
* [http://www.cacaojvm.org/ Cacao] is a Java Virtual Machine (JVM) which uses Just-In-Time (JIT) compilation to execute Java methods natively.<br />
* [http://jamvm.sourceforge.net/ JamVM] is a JVM with a very small footprint (<160k).<br />
* [http://en.wikipedia.org/wiki/Icedtea Icedtea] is basically OpenJDK with some improvements<br />
<br />
=== J2ME implementations ===<br />
* [https://phoneme.dev.java.net/ PhoneME] is basically the code base of Sun's commercial Java ME implementation without those components that Sun can't --or won't-- release to the open source community. It is licensed under GPL2. There are actually two versions of PhoneME:<br />
*;PhoneME Feature: is an implementation of the CLDC (Connected Limited Device Configuration) and MIDP2 (Mobile Information Device Profile) as is common on feature phones (e.g. 'normal', non-smart phones).<br />
*;PhoneME Advanced: is an implementation of the more complex CDC (Connected Device Configuration), designed for more advanced handsets.<br />
* [http://midpath.thenesis.org MIDPath] is a Java library which provides a MIDP2 implementation and can be used together with the CLDC version of the Cacao to provide an alternative implementation of CLDC/MIDP.<br />
* [http://www.microemu.org/ Microemu]: a J2ME emulator that runs on top of J2SE. If the overhead is small enough, it should be the 'cheapest' solution.<br />
<br />
== Status on OpenMoko ==<br />
[http://java-pkg.projects.openmoko.org/ Java-pkg] is a [http://projects.openmoko.org/ projects.openmoko.org] [http://projects.openmoko.org/projects/java-pkg/ project] whose aim it is to "Get Java going on OpenMoko, and once it's running, maintain it. There are two sub-projects, one for JME and one for JSE. Priority is currently given to JME CDC profile." There is currently a work-in-progress recipe for PhoneME Advanced in their SVN, which doesn't fully build, as well as a working recipe for PhoneME Feature, which only works directly on the Neo1973 framebuffer (e.g. you'll have to stop Xfbdev).<br />
<br />
<br />
[http://www.jalimo.org Jalimo] is a project, to feature the integration of free java for free platforms. They already<br />
have [http://www.jalimo.org/wiki/doku.php?id=packages#openmoko_2007.2 packages for Openmoko 2007.2], covering cacao, gnu classpath (with swing support) and the java-gnome bindings, which allow writing openmoko GTK applications in Java.<br />
<br />
== Licensing ==<br />
<br />
=== VM Licensing ===<br />
<br />
=== MIDlet Licensing ===<br />
<br />
== Links ==<br />
<br />
Google should be your first port of call for most things Java as it would be impossible to give a comprehensive list of all the useful information out there. That being said, below is a selected list of further information resources.<br />
<br />
=== J2SE Links ===<br />
<br />
In 2006/7 Sun [[http://www.deviceforge.com/news/NS9280947932.html acquired the assets of Savaje]], which included a port of J2SE to ARM Linux. This was used to build the "JavaFX" modules and, in fact, it runs on the Neo1973 already. They used it to show JavaFX at the JavaOne 2007: http://java.sun.com/javaone/sf/media_shell.jsp?id=193609 See also http://blogs.sun.com/jonathan/entry/when_not_where<br />
<br />
=== J2ME Links ===<br />
<br />
[[Category:Software]]<br />
[[Category:Developer software]]<br />
[[Category:Unimplemented]]</div>Sinhttp://openmoko.org/wiki/JavaJava2007-11-25T01:23:04Z<p>Sin: /* J2SE implementations */</p>
<hr />
<div>== Introduction ==<br />
There are two main types of Java platforms that can be made available on OpenMoko devices such as the Neo1973.<br />
* Java Standard Edition (J2SE)<br />
* Java Micro Edition (J2ME)<br />
* Hybrid Solutions<br />
<br />
=== Java Standard Edition (J2SE) ===<br />
<br />
This is the incarnation of the desktop version of Sun's Java platform. The majority of its codebase was recently opensourced under the GPL+exception license; the closed bits are quickly being replaced by unencumbered alternatives.<br />
<br />
When people talk of Java applications, they're usually referring to software targetted to this platform. Application memory footprints on desktop applications usually include the VM and base libraries into account, rather than just the application itself (this isn't the case in J2ME).<br />
<br />
=== Java Micro Edition (J2ME) ===<br />
<br />
This is the 'lite' edition of the Java platform. Modular and optimised for embedded devices, this platform provides a much more restricted set of language and library features.<br />
<br />
J2ME applications are usually referred to as MIDlets (Sun's name for these applications).<br />
<br />
When talking about games, and mobile phone games in general, people are normally referring to this platform. J2ME games and applications are expected to function within the strict memory capabilities of the corresponding platform (application descriptors allow the runtime environment to know for which they are intended).<br />
<br />
Memory footprints of MIDlets written for J2ME are typically quoted exclusive of the VM or base libraries - this is because they are often delivered to Java-enabled devices over the network. Footprint sizes average 10-64KB, with recent devices supporting up to 1MB MIDlets.<br />
<br />
MIDlet are delivered as two files:<br />
* a .jad MIDlet metadata descriptor<br />
* a .jar MIDlet container, containing executable bytecode and any required resources<br />
<br />
=== Hybrid Solutions ===<br />
<br />
Other approaches include mixing and matching J2SE and J2ME in various ways. Standard methods include providing a compatibility layer on top of J2SE (like [http://www.microemu.org/ microemu]) to allow it to run J2ME and expanding J2ME to provide more J2SE features.<br />
<br />
Another possible approach would be to have every application compiled to native with gcj when installed and then run without a JVM, with a much faster startup. This may be risky and needs a specialized installer.<br />
<br />
== Implementations ==<br />
<br />
=== J2SE implementations ===<br />
* [http://www.cacaojvm.org/ Cacao] is a Java Virtual Machine (JVM) which uses Just-In-Time (JIT) compilation to execute Java methods natively.<br />
* [http://jamvm.sourceforge.net/ JamVM] is a JVM with a very small footprint (<160k).<br />
* [http://en.wikipedia.org/wiki/Icedtea Icedtea] is basically OpenJDK with some improvements<br />
<br />
=== J2ME implementations ===<br />
* [https://phoneme.dev.java.net/ PhoneME] is basically the code base of Sun's commercial Java ME implementation without those components that Sun can't --or won't-- release to the open source community. It is licensed under GPL2. There are actually two versions of PhoneME:<br />
*;PhoneME Feature: is an implementation of the CLDC (Connected Limited Device Configuration) and MIDP2 (Mobile Information Device Profile) as is common on feature phones (e.g. 'normal', non-smart phones).<br />
*;PhoneME Advanced: is an implementation of the more complex CDC (Connected Device Configuration), designed for more advanced handsets.<br />
* [http://midpath.thenesis.org MIDPath] is a Java library which provides a MIDP2 implementation and can be used together with the CLDC version of the Cacao to provide an alternative implementation of CLDC/MIDP.<br />
<br />
== Status on OpenMoko ==<br />
[http://java-pkg.projects.openmoko.org/ Java-pkg] is a [http://projects.openmoko.org/ projects.openmoko.org] [http://projects.openmoko.org/projects/java-pkg/ project] whose aim it is to "Get Java going on OpenMoko, and once it's running, maintain it. There are two sub-projects, one for JME and one for JSE. Priority is currently given to JME CDC profile." There is currently a work-in-progress recipe for PhoneME Advanced in their SVN, which doesn't fully build, as well as a working recipe for PhoneME Feature, which only works directly on the Neo1973 framebuffer (e.g. you'll have to stop Xfbdev).<br />
<br />
<br />
[http://www.jalimo.org Jalimo] is a project, to feature the integration of free java for free platforms. They already<br />
have [http://www.jalimo.org/wiki/doku.php?id=packages#openmoko_2007.2 packages for Openmoko 2007.2], covering cacao, gnu classpath (with swing support) and the java-gnome bindings, which allow writing openmoko GTK applications in Java.<br />
<br />
== Licensing ==<br />
<br />
=== VM Licensing ===<br />
<br />
=== MIDlet Licensing ===<br />
<br />
== Links ==<br />
<br />
Google should be your first port of call for most things Java as it would be impossible to give a comprehensive list of all the useful information out there. That being said, below is a selected list of further information resources.<br />
<br />
=== J2SE Links ===<br />
<br />
In 2006/7 Sun [[http://www.deviceforge.com/news/NS9280947932.html acquired the assets of Savaje]], which included a port of J2SE to ARM Linux. This was used to build the "JavaFX" modules and, in fact, it runs on the Neo1973 already. They used it to show JavaFX at the JavaOne 2007: http://java.sun.com/javaone/sf/media_shell.jsp?id=193609 See also http://blogs.sun.com/jonathan/entry/when_not_where<br />
<br />
=== J2ME Links ===<br />
<br />
[[Category:Software]]<br />
[[Category:Developer software]]<br />
[[Category:Unimplemented]]</div>Sin