<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openmoko.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Johan&amp;feedformat=atom</id>
		<title>Openmoko - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Johan&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/Johan"/>
		<updated>2013-05-22T22:07:45Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2008-10-08T17:12:50Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Variometer */ - typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wishlist}}&lt;br /&gt;
[[Category:Hardware_ideas]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS.This kind of measurement is used by the free flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
It could be best to filter and differentiate the analog pressure signal and then digitize. Another possibility is to differentiate the height in software. A robust solution is to compute a linear regression of a sliding window of height samples. The height samples can be computed using integer arithmetic by a pressure-&amp;gt;altitude lookup table followed by interpolation. Maybe it's even possible to add detail based on the accelerometers.&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)] - needs 5V power supply, 11 x 11 x 6 mm&lt;br /&gt;
*[http://www.intersema.com/site/technical/ms5540.php Intersema MS5540B Altimeter/Barometer Module], 2.2 - 3.6V, 3-wire serial interface, 6.2 x 6.4 mm&lt;br /&gt;
*[http://www.bosch-sensortec.com/content/language1/html/3477.htm Bosch SMD500 digital pressure sensor: altimeter and barometer], 2.2 - 3.6V, I2C interface, 5 x 5 x 1.5 mm, included temperature sensor&lt;br /&gt;
*[http://www.vti.fi/en/products-solutions/products/pressure-sensors/scp1000-pressure-sensor/ VTI SCP1000 pressure sensor],2.4 - 3.3V, I2C or SPI interface, 6.1 mm dia x 1.7mm, included temperature sensor&lt;br /&gt;
&lt;br /&gt;
====Hardware solution====&lt;br /&gt;
=====Signal Conditioning=====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
The software solution can simply be done in the variometer application with some very simple math.&lt;br /&gt;
&lt;br /&gt;
=====A/D=====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;br /&gt;
*Possible integration with mapping application&lt;br /&gt;
&lt;br /&gt;
====Server Based Services====&lt;br /&gt;
Auto discovery service&lt;br /&gt;
*Pilots with Openmoko based variometers can choose to publish their status on a central service.&lt;br /&gt;
*Based on location - the system will notify pilots of the presence of others that can participate in group flying.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Freerunner====&lt;br /&gt;
Maybe it is possible to do that on the Freerunner ?&lt;br /&gt;
&lt;br /&gt;
Connection :&lt;br /&gt;
&lt;br /&gt;
*SPI or I2C (or through the debug board connector ?)&lt;br /&gt;
*HID device  (ex: Oak USB Sensor Atmospheric Pressure [toradex.ch])&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_FreeRunner</id>
		<title>Getting Started with your Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_FreeRunner"/>
				<updated>2008-06-23T23:44:45Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Getting Started with your Neo FreeRunner}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:1px solid #cccccc; background:#eeeeee; width:100%;floating=&amp;quot;center&amp;quot;; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:1px solid #222222; width:75% &amp;quot; |  &lt;br /&gt;
 &amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
Thank you for purchasing this Developer release of Neo FreeRunner. The [[Neo FreeRunner]] phone is the second hardware platform to take advantage of Openmoko. This guide will help you know your Neo FreeRunner and how to starte use your Neo FreeRunner.&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:1px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Freerunner box.png|200px|thumb|Neo FreeRunner Package]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Contents =&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]   What Is In The Box&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]   Getting To Know Neo FreeRunner&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]   Turning On Neo FreeRunner&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]   Flashing Neo FreeRunner&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]   Connect To Neo FreeRunner By USB Networking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Is In The Box==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:1px solid #ffffff; background:#ffffff; width:80%; floating=&amp;quot;center&amp;quot;; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffffff;border-left:1px solid #ffffff;border-right:1px ; border-top:2px solid ffffff; border:1px solid #ffffff; &amp;quot; |  &lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:GTA02ALL.png|400px|thumb|Inside package]]&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]  Neo FreeRunner&lt;br /&gt;
: [[Image:Circle２.gif|10px]]  Stylus&lt;br /&gt;
: [[Image:Circle２.gif|10px]]  Battery&lt;br /&gt;
: [[Image:Circle２.gif|10px]]  Charger&lt;br /&gt;
: [[Image:Circle２.gif|10px]]  USB Cable &lt;br /&gt;
: [[Image:Circle２.gif|10px]]  microSD Card 512MB&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting To Know Neo FreeRunner==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;80%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 25px; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 10px; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:menu8.jpg|370px|thumb|AUX Button and phone jack(From left to right)|center]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #ffffff;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu9.jpg|365px|thumb|Power, USB and external GPS Antenna (From left to right)|center]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;80%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 50%; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 50%; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:menu12.jpg|233px|thumb|AUX Back side with battery|center]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #ffffff;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu11.jpg|260px|thumb|Put the SIM card and SD card here|center]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;80%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 50%; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 50%; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:menu13.jpg|233px|thumb|open case from this side |center]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #ffffff;&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu14.jpg|250px|thumb|Opened|center]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Turning On Neo FreeRunner===&lt;br /&gt;
&lt;br /&gt;
You can boot your Neo FreeRunner in following ways:&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]    You can power up into an Openmoko image directly. &lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]    Boot into [[Bootloader|U-Boot]] via [[NAND Flash]].&lt;br /&gt;
&lt;br /&gt;
: [[Image:Circle２.gif|10px]]    Boot into U-Boot via NOR Flash.&lt;br /&gt;
&lt;br /&gt;
These ways allows you to update the kernel and root filesystem.&lt;br /&gt;
&lt;br /&gt;
====Log in Openmoko Image====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 25px; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 10px; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:Menu2.jpg|200px|right|thumb]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #eeeeee;&amp;quot;&amp;gt;&lt;br /&gt;
Press and hold Power button (about 8 seconds) until Openmoko splash screen turns up. You may now release the Power button, and Neo FreeRunner will continue to boot into Openmoko Image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Log in U-Boot in NAND Flash====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 25px; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 10px; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:Menu7.jpg|200px|right|thumb]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #eeeeee;&amp;quot;&amp;gt;&lt;br /&gt;
Press and hold Power button, then press and hold AUX button (about 5~8 seconds ). You can see BOOT MENU for NAND Flash.  Press AUX to select the options, Power to execute.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
====Log in U-Boot in NOR Flash====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align-center&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot; style=&amp;quot;clear: both; border: 1px solid #ffffff; border-collapse: collapse; padding: 0.2em; margin: 0; font-size: 100%; margin: 0 1px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #ffffff&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 25px; padding-left: 0.5em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width: 10px; white-space: nowrap; padding: 4px 1em 0 0.5em; border-right: 1px solid #ffffff;&amp;quot;&amp;gt;[[Image:Menu6.jpg|200px|right|thumb]]&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;padding: 1px 1em 0; background: #eeeeee;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Press and hold AUX button, then press and hold Power button. Release AUX button. You can see BOOT MENU for NOR Flash. ( This options usually used for developer. If you can't log in NAND , you can log in U-Boot in NOR Flash. ) &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note| There are six options you can choose when you log in NOR Flash.&lt;br /&gt;
1. Boot&lt;br /&gt;
&lt;br /&gt;
2. [[Boot from sd card|Boot from MicroSD]]&lt;br /&gt;
&lt;br /&gt;
3. Set console to USB &lt;br /&gt;
&lt;br /&gt;
4. Set console to Serial&lt;br /&gt;
&lt;br /&gt;
5. Reset&lt;br /&gt;
&lt;br /&gt;
6. Power off &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Flashing Neo FreeRunner==&lt;br /&gt;
As Openmoko development continues, Openmoko regularly releases updated versions of the Openmoko root filesystem, the kernel, and the[[Bootloader| U-Boot]]. These may be programmed into the Flash memory of Neo FreeRunner. You can use the USB cable and Openmoko provided tool to flash Neo FreeRunner.&lt;br /&gt;
&lt;br /&gt;
{{note|Openmoko software team build images daily. If you want to use the newest image, you can download image from daily build.  But we recommend you download the most stable image from http://downloads.openmoko.org/releases/Freerunner/. Images here has been tested by test team.}}&lt;br /&gt;
&lt;br /&gt;
===Step1. Download DFU-until===&lt;br /&gt;
&lt;br /&gt;
You can download the flashing tool from: &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
On the GNU/Linux host, you you can use folloing command download U-Boot utility.&lt;br /&gt;
 wget http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
 &lt;br /&gt;
===Step 2. Flashing Kernel===&lt;br /&gt;
&lt;br /&gt;
You can download kernel from &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the terminal of a GNU/Linux host.&lt;br /&gt;
 ./dfu-util -a (partion name) -R -D (download image file name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ex:&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a kernel -R -D uImage-2.6.24+svnr4082-r4055-r3-neo1973.bin&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:0px solid #ffffff; background:#ffffff; width:100%;floating=&amp;quot;center&amp;quot;; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffffff;border-left:1px solid #ffffff;border-right:1px ; border-top:2px solid ffffff; border:1px solid #ffffff; width:75% &amp;quot; |  &lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu15.jpg|thumb|Log in Neo FressRunner in NOR Flash, connect your Neo with Linux Host via USB cable]]&lt;br /&gt;
Before you execute the command , please log in Neo FreeRunner in NOR Flash . Neo FreeRunner needs to boot into U-Boot when flashing.&lt;br /&gt;
&lt;br /&gt;
Then connect your Neo with Linux Host via USB cable. Press Enter execute the command.When flashing succeeds&lt;br /&gt;
&lt;br /&gt;
status(0) = No error condition is present&amp;lt;br&amp;gt;&lt;br /&gt;
Done!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note| The meaning of  parameter you spcified:&lt;br /&gt;
-a  --alt alt Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  --reset Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  --download file Write firmware from&amp;lt;file&amp;gt; into device &amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Step 3. Flashing Root Filesystem ===&lt;br /&gt;
You can download the root filesystem from :&lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the terminal of a GNU/Linux host.&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a rootfs -R -D openmoko-devel-image-fic-gta02.jffs2&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds&lt;br /&gt;
&lt;br /&gt;
status(0) = No error condition is present&amp;lt;br&amp;gt;&lt;br /&gt;
Done!&lt;br /&gt;
&lt;br /&gt;
==Connect To Neo FreeRunner By USB Networking==&lt;br /&gt;
&lt;br /&gt;
Connect Neo FreeRunner to Linux host with USB cable. After booting into Openmoko image, there will be a new interface, usb0, in your Linux host.&lt;br /&gt;
&lt;br /&gt;
=====Manual Method=====&lt;br /&gt;
Type in the following command in the terminal of a GNU/Linux host.&lt;br /&gt;
&lt;br /&gt;
 ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
 ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Press Enter to pass the password.&lt;br /&gt;
&lt;br /&gt;
=====Automatic Method=====&lt;br /&gt;
*Debian and derivatives (Ubuntu, Sidux etc.)&lt;br /&gt;
Edit /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
 auto usb0&lt;br /&gt;
 iface usb0 inet static&lt;br /&gt;
 address 192.168.0.200&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
Restart the networking service and type in the following command in the terminal of GNU/Linux host.&lt;br /&gt;
&lt;br /&gt;
 ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Press Enter to pass the password.&lt;br /&gt;
&lt;br /&gt;
=====Making things even more automatic=====&lt;br /&gt;
If you don't want to remember the IP number of your phone you can create an alias by adding the following line to your /etc/hosts:&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202   openmoko&lt;br /&gt;
&lt;br /&gt;
Now it should immediately be possible to connect your phone using the following command line:&lt;br /&gt;
&lt;br /&gt;
 ssh root@openmoko&lt;br /&gt;
&lt;br /&gt;
====Appendex====&lt;br /&gt;
If you want to know more about FreeRunner, you can get more information in following topics:&lt;br /&gt;
* [[GTA02 Openness]]&lt;br /&gt;
* [[Neo FreeRunner]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
* [[FreeRunner/Buttons and LEDs]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/Speech_synthesis</id>
		<title>Wishlist/Speech synthesis</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/Speech_synthesis"/>
				<updated>2007-08-29T20:57:43Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Idea */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
=Idea=&lt;br /&gt;
&lt;br /&gt;
Openmoko would benefit from a built-in speech synthesis library. &lt;br /&gt;
*[http://espeak.sourceforge.net/ eSpeak] looks like a good candidate, and is around 700k (is this big for speech synthesis libs?)&lt;br /&gt;
*[http://www.cstr.ed.ac.uk/projects/festival/ Festival] is Open Source and sounds OK - it is the code behind weather radio in the US.&lt;br /&gt;
&lt;br /&gt;
=Uses=&lt;br /&gt;
&lt;br /&gt;
* Speak the caller's name while playing the ringtone. The advantage of knowing who's calling without having to set up custom tones for each phone book entry. This works really well on modern Nokias.&lt;br /&gt;
* Auto read sms messages when using a headset (ie when driving)&lt;br /&gt;
* [[Wishlist:Human screening|Human screening]], [[Answering Machine]], or a generic audio menu used by those applications.&lt;br /&gt;
* Paste text into phone call.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
* [[Wishlist:Human screening]]&lt;br /&gt;
* [[Answering Machine]]&lt;br /&gt;
* [[Wishlist-ANARM]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Ideas]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-08-21T18:22:56Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
All core applications and scripting languages must fit into the internal memory, along with some space for user data.&lt;br /&gt;
&lt;br /&gt;
Otherwise it is very difficult for the user to swap the SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature matrix ==&lt;br /&gt;
Since there are a lot of options, the main features of the candidates should be collected in a matrix. &lt;br /&gt;
Fill in and add to this if possible.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;background:#efefef;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot;  &lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Language'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Current Status'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Disk Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Memory Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Compilable'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Scriptable'''&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |Java&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT / gcj&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Python&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Psyco) / Pyrex&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |C#/mono&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |N&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Perl&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Haskell&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |LUA&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Mature/Active&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Lua-JIT)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Ruby&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [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]&lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# 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]&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/Boost/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1mb, with a footprint of about 150kb. It works very well on my nokia 6680.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-08-21T18:12:16Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */  - referenced LJ article on LUA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
All core applications and scripting languages must fit into the internal memory, along with some space for user data.&lt;br /&gt;
&lt;br /&gt;
Otherwise it is very difficult for the user to swap the SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature matrix ==&lt;br /&gt;
Since there are a lot of options, the main features of the candidates should be collected in a matrix. &lt;br /&gt;
Fill in and add to this if possible.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;background:#efefef;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot;  &lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Language'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Current Status'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Disk Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Memory Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Compilable'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Scriptable'''&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |Java&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT / gcj&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Python&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Psyco) / Pyrex&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |C#/mono&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |N&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Perl&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Haskell&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |LUA&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Mature/Active&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Lua-JIT)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Ruby&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [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]&lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/Boost/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1mb, with a footprint of about 150kb. It works very well on my nokia 6680.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-08-21T18:05:55Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Feature matrix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
All core applications and scripting languages must fit into the internal memory, along with some space for user data.&lt;br /&gt;
&lt;br /&gt;
Otherwise it is very difficult for the user to swap the SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature matrix ==&lt;br /&gt;
Since there are a lot of options, the main features of the candidates should be collected in a matrix. &lt;br /&gt;
Fill in and add to this if possible.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;background:#efefef;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot;  &lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Language'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Current Status'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Disk Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Memory Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Compilable'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Scriptable'''&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |Java&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT / gcj&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Python&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Psyco) / Pyrex&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |C#/mono&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |N&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Perl&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Haskell&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |LUA&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Mature/Active&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Lua-JIT)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Ruby&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using '''[http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]'''/[http://pyinline.sourceforge.net/ PyInline]/Boost/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# [http://opensource.nokia.com/projects/pythonfors60/ Example implementation] for Symbian. The runtime environment is under 1mb, with a footprint of about 150kb. It works very well on my nokia 6680.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-21T14:54:54Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* From a Remote Connected Desktop */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= OpenMoko 2007.2 update =&lt;br /&gt;
Press and hold power button, choose Screenshot from menu :)&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 0 # default &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 1 # landscape - from right side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 2 # upside down &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 3 # landscape - from left side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
&lt;br /&gt;
You can grab screen shots manually by using the following command on your Neo:&lt;br /&gt;
&lt;br /&gt;
 # cat /dev/fb0 &amp;gt;myscreenshot_001.raw&lt;br /&gt;
&lt;br /&gt;
You can then convert this on your pc with fb2png by using the following command:&lt;br /&gt;
&lt;br /&gt;
 # fb2png myscreenshot_001.raw myscreenshot_001.png 9 480 640 16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also push a screen capture back onto the display:&lt;br /&gt;
&lt;br /&gt;
 # cat myscreenshot_001.raw &amp;gt;/dev/fb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to show a sequence of screens in an animation you can use convert. Once you have all your screen shots as .pngs try:&lt;br /&gt;
&lt;br /&gt;
 # convert -delay 25 -dispose Background +page myscreenshot_*.png -loop 0 animated_test.gif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The command&lt;br /&gt;
&lt;br /&gt;
 # fbgrab filename.png&lt;br /&gt;
&lt;br /&gt;
directly creates a PNG on the Neo.&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-20T22:25:02Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: local screen shot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 0 # default &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 1 # landscape - from right side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 2 # upside down &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 3 # landscape - from left side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
&lt;br /&gt;
You can grab screen shots manually by using the following command on your Neo:&lt;br /&gt;
&lt;br /&gt;
 # cat /dev/fb0 &amp;gt;myscreenshot_001.raw&lt;br /&gt;
&lt;br /&gt;
You can then convert this on your pc with fb2png by using the following command:&lt;br /&gt;
&lt;br /&gt;
 # fb2png myscreenshot_001.raw myscreenshot_001.png 9 480 640 16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also push a screen capture back onto the display:&lt;br /&gt;
&lt;br /&gt;
 # cat myscreenshot_001.raw &amp;gt;/dev/fb0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to show a sequence of screens in an animation you can use convert. Once you have all your screen shots as .pngs try:&lt;br /&gt;
&lt;br /&gt;
 # convert -delay 25 -dispose Background +page myscreenshot_*.png -loop 0 animated_test.gif&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-20T14:56:02Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 0 # default &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 1 # landscape - from right side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 2 # upside down &amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;xrandr -o 3 # landscape - from left side &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:PTT</id>
		<title>User talk:PTT</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:PTT"/>
				<updated>2007-08-16T16:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Vario */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vario ==&lt;br /&gt;
&lt;br /&gt;
Hi PTT - I like your contributions to the [[Variometer]] page. I did not know about those nifty digital output pressure transducers. &lt;br /&gt;
I am a little concerned about differentiating the digital signal in software - don't think it would make a good vario.&lt;br /&gt;
I guess we have to build it and test.&amp;lt;br /&amp;gt;                  &lt;br /&gt;
[[User:Johan|Johan]] 16:44, 15 August 2007 (CEST)&lt;br /&gt;
:The variometer resolution from flytek variometers is 0.1 m/s, the SMD500 has a resolution of 0.25 m, which would make 0.25 m/s at 1 measurement per second, if averaged over a few seconds this could be increased. Also it may be possible to take measurements at a higher rate, since one measurement takes 34 ms from what I understand from the specs. I bet building and testing is the best way to find out, it wouldn't be that hard with only one chip to be added. [[User:PTT|PTT]] 21:05, 15 August 2007 (CEST)&lt;br /&gt;
I have a Flytec 4020 - I just played with it a bit. It registers vertical speed when you move it 10cm up or down - amazing. That means they must differentiate the analog signal or use very high resolution for the pressure signal. I do not think we want to replace our variometers with Openmoko devices - just have a device to share data within a group of pilots. You are right - we should probably start with a one chip solution and see how good we can get it. [[User:Johan|Johan]] 18:19, 16 August 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:PTT</id>
		<title>User talk:PTT</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:PTT"/>
				<updated>2007-08-15T14:44:07Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: Vario&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vario ==&lt;br /&gt;
&lt;br /&gt;
Hi PTT - I like your contributions to the [[Variometer]] page. I did not know about those nifty digital output pressure transducers. &lt;br /&gt;
I am a little concerned about differentiating the digital signal in software - don't think it would make a good vario.&lt;br /&gt;
I guess we have to build it and test.&amp;lt;br /&amp;gt;                  &lt;br /&gt;
[[User:Johan|Johan]] 16:44, 15 August 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-08-12T03:54:30Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Feature matrix */  - make pretty&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
All core applications and scripting languages must fit into the internal memory, along with some space for user data.&lt;br /&gt;
&lt;br /&gt;
Otherwise it is very difficult for the user to swap the SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature matrix ==&lt;br /&gt;
Since there are a lot of options, the main features of the candidates should be collected in a matrix. &lt;br /&gt;
Fill in and add to this if possible.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;  style=&amp;quot;background:#efefef;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot;  &lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Language'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Current Status'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Disk Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Memory Footprint'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Compilable'''&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |'''Scriptable'''&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
! align=&amp;quot;center&amp;quot; |Java&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Python&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Psyco)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |C#/mono&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |N&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Perl&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-style=&amp;quot;background: #DDFFDD;&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |Haskell&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; |LUA&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |?&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Light&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |JIT(Lua-JIT)&lt;br /&gt;
|align=&amp;quot;center&amp;quot; |Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using [http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG]/Boost, taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
# Jython would make it almost 'free', but it's slower and [http://www.jython.org/docs/differences.html not identical] to CPython.&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo1973_Robustness</id>
		<title>Neo1973 Robustness</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo1973_Robustness"/>
				<updated>2007-08-06T20:27:51Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: out of the box&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of stuff you've done to your neo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+Drops&lt;br /&gt;
!User||Height fell || Horizontal velocity || Surface it hit || Damage?&lt;br /&gt;
|-&lt;br /&gt;
|Speedevil||1m||0||carpet||none&lt;br /&gt;
|-&lt;br /&gt;
|rwhitby||1.3m||0||pavement||none&lt;br /&gt;
|-&lt;br /&gt;
|Johan||1.2m||0||tiled floor || none&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-05T18:46:22Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&lt;br /&gt;
*xrandr -o 0 - default &lt;br /&gt;
*xrandr -o 1 - landscape - from right side &lt;br /&gt;
*xrandr -o 2 - upside down&lt;br /&gt;
*xrandr -o 3 - landscape - from left side&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
{{:Talk:Screen_Grabber}}&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Supported_microSD_cards</id>
		<title>Talk:Supported microSD cards</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Supported_microSD_cards"/>
				<updated>2007-08-04T20:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Let it be known that 4Gb microSDHC cards have been announced by more than one company.  Apparently these will not be supported by default in microSD devices.  Does anyone know if the Neo will support these in theory? [[User:Wasp|Wasp]] 00:06, 16 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
: Also 8GB MicroSD cards have now been announced. Would be really nice to know if it's just a driver issue or something more.&lt;br /&gt;
&lt;br /&gt;
== How to test ==&lt;br /&gt;
&lt;br /&gt;
Can we please define repeatable tests?&lt;br /&gt;
atm I just copy stuff there and back - there is probably more to it.&lt;br /&gt;
Tested the Sandisk 512 and 1024 cards       [[User:Johan|Johan]] 22:27, 4 August 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Supported_microSD_cards</id>
		<title>Talk:Supported microSD cards</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Supported_microSD_cards"/>
				<updated>2007-08-04T19:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: How to test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Let it be known that 4Gb microSDHC cards have been announced by more than one company.  Apparently these will not be supported by default in microSD devices.  Does anyone know if the Neo will support these in theory? [[User:Wasp|Wasp]] 00:06, 16 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
: Also 8GB MicroSD cards have now been announced. Would be really nice to know if it's just a driver issue or something more.&lt;br /&gt;
&lt;br /&gt;
== How to test ==&lt;br /&gt;
&lt;br /&gt;
Can we please define repeatable tests?&lt;br /&gt;
atm I just copy stuff there and back - there is probably more to it.&lt;br /&gt;
Tested the Sandisk 512 and 1024 cards&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T19:22:56Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&lt;br /&gt;
*xrandr -o 0 - defalt &lt;br /&gt;
*xrandr -o 1 - landscape - from right side &lt;br /&gt;
*xrandr -o 2 - upside down&lt;br /&gt;
*xrandr -o 3 - landscape - from left side&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
{{:Talk:Screen_Grabber}}&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T19:21:58Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Screen Grab, Screen Snapshot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&lt;br /&gt;
*xrandr -o 0 - defalt &lt;br /&gt;
*xrandr -o 1 - landscape - from right side &lt;br /&gt;
*xrandr -o 2 - upside down&lt;br /&gt;
*xrandr -o 3 - landscape - from left side&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Locally from the device==&lt;br /&gt;
{{:Talk:Screen_GrabberTalk:Screen_Grabber}}&lt;br /&gt;
&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T19:15:09Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note on Screen orientation''':&lt;br /&gt;
&lt;br /&gt;
'''xrandr -o 1''' turns screen to landscape mode (xrandr -o 0 to go back to ordinary portrait):&lt;br /&gt;
&lt;br /&gt;
*xrandr -o 0 - defalt &lt;br /&gt;
*xrandr -o 1 - landscape - from right side &lt;br /&gt;
*xrandr -o 2 - upside down&lt;br /&gt;
*xrandr -o 3 - landscape - from left side&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T18:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* From a Remote Connected Desktop */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|left|Example Screenshot]]&lt;br /&gt;
:On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
:The xwd file can be read by the Gimp:&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:ScreenShotExample.png</id>
		<title>File:ScreenShotExample.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:ScreenShotExample.png"/>
				<updated>2007-08-04T18:12:55Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: category:Images Guides&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Images Guides]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T18:12:15Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
The xwd file can be read by the Gimp:&lt;br /&gt;
&lt;br /&gt;
[[Image:ScreenShotExample.png|thumb|left|400px|Example Screenshot]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T18:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
The xwd file can be read by the Gimp.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Screen_Shots</id>
		<title>Screen Shots</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Screen_Shots"/>
				<updated>2007-08-04T18:07:39Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: quick howto screen snapshot - from the mailing list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
&lt;br /&gt;
=Screen Grab, Screen Snapshot=&lt;br /&gt;
useful for filing bugs etc:&lt;br /&gt;
==From a Remote Connected Desktop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the device: &amp;lt;pre&amp;gt;xhost 192.168.0.200&amp;lt;/pre&amp;gt;  Where 192.168.0.200 is the IP of your desktop.&lt;br /&gt;
&lt;br /&gt;
On the desktop: &amp;lt;pre&amp;gt;xwd -root -display 192.168.0.202:0 &amp;gt; dump.xwd&amp;lt;/pre&amp;gt;  Where 192.168.0.202 is the device IP.&lt;br /&gt;
&lt;br /&gt;
The xwd file can be read by the Gimp.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wiki_Issues</id>
		<title>Wiki Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wiki_Issues"/>
				<updated>2007-08-04T17:37:16Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Wiki Mods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Wiki Pages==&lt;br /&gt;
===Pages capable of development===&lt;br /&gt;
* [[OpenMoko:Community Portal]]&lt;br /&gt;
* [[Documentation]]&lt;br /&gt;
&lt;br /&gt;
===Redundant Pages===&lt;br /&gt;
* There are several pages concerning OpenMoko compatible service providers:&lt;br /&gt;
** [[Carriers]], most up-to-date, confirmed service providers.&lt;br /&gt;
*** [[Carriers/ATT]]&lt;br /&gt;
*** [[Carriers/TMobile]]&lt;br /&gt;
*** [[Carriers/Fido]]&lt;br /&gt;
*** [[Carriers/Rogers]]&lt;br /&gt;
** [[OpenMoko compatible cellphone providers]]&lt;br /&gt;
** [[Neo1973 compatible cellphone providers]]&lt;br /&gt;
&lt;br /&gt;
* There are several pages concerning the Neo-iPhone comparison:&lt;br /&gt;
** [[IPhone]]&lt;br /&gt;
** [[IPhone (GTA01)]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;There are two pages concerning events&amp;lt;/s&amp;gt; '''DONE'''&lt;br /&gt;
** [[Current events]]&lt;br /&gt;
** &amp;lt;s&amp;gt;[[Community Events]]&amp;lt;/s&amp;gt;&lt;br /&gt;
** [[Community Events/it]]&lt;br /&gt;
&lt;br /&gt;
===Tidy up===&lt;br /&gt;
* [[Wishlist:Text Input]] - tidy up/sort, give short feedback to each method&lt;br /&gt;
&lt;br /&gt;
==Wiki Mods==&lt;br /&gt;
Can we please install/fix the following features for this wiki:&lt;br /&gt;
* '''Math''' - the Tex math markup does not work currently. Test:&lt;br /&gt;
** &amp;lt;math&amp;gt; z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122} &amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt; P_{ind} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Sortable tables do not work [http://meta.wikimedia.org/wiki/Help:Sorting http://meta.wikimedia.org/wiki/Help:Sorting]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi '''Syntax''' Highlighting - makes code much more readable]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:GraphViz GraphViz] works with the commonly known dot language - it allows us to draw '''graphs''' using easy markup.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:AnyWikiDraw AnyWikiDraw] allows us to draw svg '''diagrams''' directly on the wiki page.&lt;br /&gt;
&lt;br /&gt;
==Wiki languages==&lt;br /&gt;
Translating ''this'' wiki into other languages does not make much sense:&lt;br /&gt;
* All translated pages need to be kept up-to-date. The people translating will not see every change made.&lt;br /&gt;
* A partly (and often quite badly) done translation is no good.&lt;br /&gt;
* People who use this wiki are sophisticated users, they are very likely to know English. They will not use localised pages as they do not trust them in matters of being up-to-date.&lt;br /&gt;
* Rather create another wiki/information page with more static information for regular mass-market purchaser that do not care about 20 ways to connect their OpenMoko device with their PC but just about one easy one.&lt;br /&gt;
--[[User:Minime|Minime]] 13:43, 3 August 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Category:Help]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-04T05:18:52Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: usb networking /* Automatic method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
Modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://www.hrw.one.pl/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wiki_Issues</id>
		<title>Wiki Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wiki_Issues"/>
				<updated>2007-08-02T19:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: report wiki problem with sortable tables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Help]]&lt;br /&gt;
Can we please install/fix the following features for this wiki:&lt;br /&gt;
* '''Math''' - the Tex math markup does not work currently.&lt;br /&gt;
* Sortable tables do not work [http://meta.wikimedia.org/wiki/Help:Sorting http://meta.wikimedia.org/wiki/Help:Sorting]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi '''Syntax''' Highlighting - makes code much more readable]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:GraphViz GraphViz] works with the commonly known dot language - it allows us to draw '''graphs''' using easy markup.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:AnyWikiDraw AnyWikiDraw] allows us to draw svg '''diagrams''' directly on the wiki page.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Artwork</id>
		<title>Talk:Artwork</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Artwork"/>
				<updated>2007-07-28T16:51:59Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: great stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;this came up on #openmoko: [http://62.75.157.44/openmoko/] --[[User:Minime|Minime]] 18:05, 28 July 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== great stuff ==&lt;br /&gt;
&lt;br /&gt;
well done - this looks great [[User:Johan|Johan]] 18:51, 28 July 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Speedevil</id>
		<title>User talk:Speedevil</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Speedevil"/>
				<updated>2007-07-27T18:15:08Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: nvm - i like the master wishlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modular phone ==&lt;br /&gt;
&lt;br /&gt;
Your attitude is hindering more than helping.&lt;br /&gt;
&lt;br /&gt;
I appreciate the approach I am suggesting may not produce the same result as the Neo1973, or be appealing to everybody, but it is something I believe has merit - particularly the modularity aspect. Your comment 'it is larger and heavier', and arguments over the price differences of one component (particularly when the price is revealed in a few hours) are not much use, unless they are quantified - they come off as negative and add no real value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I've already said I will produce size comparisons when specs are released and these are now included - these will eventually include weight.&lt;br /&gt;
&lt;br /&gt;
If you have something useful to add, please do. If you do not find the project worthwhile and cannot make the effort to do some research to back up what you say, move along.&lt;br /&gt;
&lt;br /&gt;
Perhaps you could work out the exact weight? Or the size? [[User:Myfanwy|myfanwy]] 14:00, 16 July 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
I misread the date that pricing is released - I simply have doubts that a module with all the features - including GPS - where GPS is stated as an additional to the goliath platform - is going to be under $100, given that all GSM modules even bare that are available globally are &amp;gt;$100.&lt;br /&gt;
I do not think it is unreasonable to point out flaws in a design that may cause problems with its implementation.&lt;br /&gt;
For example, you state in the page &amp;quot;From Sketchup models supplied by Gumstix, the size will be around 120 x 67 x 17mm. This is the smallest cuboid into which the components will fit. The case will add approx. 2mm to this - battery, screen, microSD and other components should fit into voids between the main circuit boards.&amp;quot; which is clearly impossible in the case of the screen, as it has to go on top, and is approximately the same size as the goliath board.&lt;br /&gt;
Consider also that you don't mention that you've missed out sound. As I understand it, the sound connectors on the Goliath board are solely for the GSM unit.&lt;br /&gt;
I would not have commented on the $100 - if you'd have put in any cites at all for that price. But I did look on the community mailing list for gumstix, and found no indications at all. I did not of course read every message.&lt;br /&gt;
&lt;br /&gt;
130*70*26mm (17mm for Goliath,2mm for case bottom, 1mm chassis between the LCD and motherboard, 4mm for screen, 2mm for case over screen) is considerably larger than the Neo. I don't think it's unfair to raise this. It would also not provide a usable phone unless you add some sort of text/number entry solution, again, this is reasonable to raise on a page which is titled &amp;quot;modular phone&amp;quot;.&lt;br /&gt;
The weight of the display alone is 50g, &lt;br /&gt;
&lt;br /&gt;
I will add cites and rational on the talk page for any future edits.&lt;br /&gt;
----&lt;br /&gt;
Hi! - &amp;lt;nowiki&amp;gt;[[Category:InProgress]]&amp;lt;/nowiki&amp;gt; is not needed anymore, because the category [[:Category:In progress]] has now been made - and the [[:template:InProgress]] automatically inserts the &lt;br /&gt;
[[:Category:In progress]]. kind regards, --[[User:Glenn|Glenn]] 18:20, 26 July 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Speedevil</id>
		<title>User talk:Speedevil</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Speedevil"/>
				<updated>2007-07-27T17:49:19Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: Wishlist Labels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Modular phone ==&lt;br /&gt;
&lt;br /&gt;
Your attitude is hindering more than helping.&lt;br /&gt;
&lt;br /&gt;
I appreciate the approach I am suggesting may not produce the same result as the Neo1973, or be appealing to everybody, but it is something I believe has merit - particularly the modularity aspect. Your comment 'it is larger and heavier', and arguments over the price differences of one component (particularly when the price is revealed in a few hours) are not much use, unless they are quantified - they come off as negative and add no real value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I've already said I will produce size comparisons when specs are released and these are now included - these will eventually include weight.&lt;br /&gt;
&lt;br /&gt;
If you have something useful to add, please do. If you do not find the project worthwhile and cannot make the effort to do some research to back up what you say, move along.&lt;br /&gt;
&lt;br /&gt;
Perhaps you could work out the exact weight? Or the size? [[User:Myfanwy|myfanwy]] 14:00, 16 July 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
I misread the date that pricing is released - I simply have doubts that a module with all the features - including GPS - where GPS is stated as an additional to the goliath platform - is going to be under $100, given that all GSM modules even bare that are available globally are &amp;gt;$100.&lt;br /&gt;
I do not think it is unreasonable to point out flaws in a design that may cause problems with its implementation.&lt;br /&gt;
For example, you state in the page &amp;quot;From Sketchup models supplied by Gumstix, the size will be around 120 x 67 x 17mm. This is the smallest cuboid into which the components will fit. The case will add approx. 2mm to this - battery, screen, microSD and other components should fit into voids between the main circuit boards.&amp;quot; which is clearly impossible in the case of the screen, as it has to go on top, and is approximately the same size as the goliath board.&lt;br /&gt;
Consider also that you don't mention that you've missed out sound. As I understand it, the sound connectors on the Goliath board are solely for the GSM unit.&lt;br /&gt;
I would not have commented on the $100 - if you'd have put in any cites at all for that price. But I did look on the community mailing list for gumstix, and found no indications at all. I did not of course read every message.&lt;br /&gt;
&lt;br /&gt;
130*70*26mm (17mm for Goliath,2mm for case bottom, 1mm chassis between the LCD and motherboard, 4mm for screen, 2mm for case over screen) is considerably larger than the Neo. I don't think it's unfair to raise this. It would also not provide a usable phone unless you add some sort of text/number entry solution, again, this is reasonable to raise on a page which is titled &amp;quot;modular phone&amp;quot;.&lt;br /&gt;
The weight of the display alone is 50g, &lt;br /&gt;
&lt;br /&gt;
I will add cites and rational on the talk page for any future edits.&lt;br /&gt;
----&lt;br /&gt;
Hi! - &amp;lt;nowiki&amp;gt;[[Category:InProgress]]&amp;lt;/nowiki&amp;gt; is not needed anymore, because the category [[:Category:In progress]] has now been made - and the [[:template:InProgress]] automatically inserts the &lt;br /&gt;
[[:Category:In progress]]. kind regards, --[[User:Glenn|Glenn]] 18:20, 26 July 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Wishlist Labels ==&lt;br /&gt;
&lt;br /&gt;
Regarding your change here: [[Variometer]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Does the category hardware_ideas not imply Wishlist&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist_-_Hardware_-_Novel_Devices</id>
		<title>Wishlist - Hardware - Novel Devices</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist_-_Hardware_-_Novel_Devices"/>
				<updated>2007-07-26T20:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* HMD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details hardware some would like in future OpenMoko devices that are very different from the [[Neo1973]]. DVD/media players, cameras, ...&lt;br /&gt;
&lt;br /&gt;
=== Hard Drive ===&lt;br /&gt;
Providing a hard drive, will allow storing music, movies, etc. Add USB storage device capability to use the device as an external hard drive.&lt;br /&gt;
&lt;br /&gt;
=== OpenMoko-branded modem card ===&lt;br /&gt;
&lt;br /&gt;
A 3G modem card for use with other computing hardware, in particular PCs. Probably an internal expansion card such as an ExpressCard or Compact Flash card, with an alternative external (USB) unit for computers without internal slots. (In fact, a PCI-factor internal card for desktop computers might be reasonable too; see below.)&lt;br /&gt;
&lt;br /&gt;
There are already CardBus and external USB 3G modems available. In hardware terms, OpenMoko's modem could well be a simple rebranding of one of these existing products. But, at least in some areas, the 3G modem products available to end-users tend to be tied to a particular telco and bundled with that telco's software. They also have a mysterious tendency not to actually allow voice calls over the modem, even when the modem hardware appears to be quite capable of it. An OpenMoko modem that simply provided open drivers, no lock to a particular telco, good support for various operating systems, and simple support for voice and video calls over the modem, all out of the box, would already have some fairly unique selling points. (Since video conferencing is now taking off on personal computers, hardware that allows your desktop computer to make video calls to 3G mobile phones might well have a market, which is one reason why a PCI-factor card might not be so crazy.)&lt;br /&gt;
&lt;br /&gt;
But more than that, any software or services that OpenMoko develops to overcome the tricky problems of juggling and integrating different Internet and phone connections and different email, IM, VoIP and telephone-number identities on Internet-enabled phones would be available to users of the OpenMoko modem too. That would be a powerful selling point for the modem if and when OpenMoko has compelling solutions to these problems. In fact, the increased integration with PCs would make all OpenMoko devices more attractive. (&amp;quot;Whenever I'm logged in to my laptop all my calls go there, even when I'm not in range of WiFi.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Since [[FIC]] already has well-established relationships in the PC world, it could presumably make good use of those connections in selling the modems.&lt;br /&gt;
&lt;br /&gt;
* Obviously the OpenMoko modem faces much the same problems with getting reasonably open access to 3G hardware that are delaying 3G for the [[Neo1973]] series &lt;br /&gt;
&lt;br /&gt;
* Naturally a 3G Neo1973 or other OpenMoko phone would (or should) be able to provide many of the same advantages when acting as a modem for a PC. But there will still be a place for dedicated modems, if only because yoking a full mobile phone to your computer isn't always the best solution &lt;br /&gt;
&lt;br /&gt;
* Just like full phones, modems would benefit from support for multiple SIMs (see [[Wish_List_-_Hardware#Ability_to_use_multiple_SIMs.2Fnetworks]]) if they're going to be used for (non-VoIP) voice&lt;br /&gt;
&lt;br /&gt;
* Bonus points if the hardware provides a POTS landline connection and the software can juggle it along with 3G and Internet connections...&lt;br /&gt;
&lt;br /&gt;
=== PCMCIA slot ===&lt;br /&gt;
Extensibility would be nice. Standard pcmcia would be great for allowing wireless too. And pcmcia cards tend to be very low power.&lt;br /&gt;
*1. can be used for a spare battery (is this possible?)&lt;br /&gt;
*3. i can use my [http://www.echoaudio.com/Products/CardBus/IndigoIO/index.php Echo Audio Indigo I/O]&lt;br /&gt;
*2. can be used for different cards around&lt;br /&gt;
&lt;br /&gt;
This is certain not to happen in a production phone, it's simply far too large, and requires complex support in hardware, which does not exist in most system on a chip devices as are used in phones. &lt;br /&gt;
Even for the [[Expansion_Back]] it would be too large. --[[User:Speedevil|Speedevil]] 06:05, 28 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Cameras &amp;amp; Imaging ==&lt;br /&gt;
=== Interchangeable Camera Lenses ===&lt;br /&gt;
A camera phone with a [http://en.wikipedia.org/wiki/Lens_mount lens mount] would allow swappable camera lenses and filters.  Camera phones are usually stuck with tiny fixed lenses that don't allow focusing.  Imaging being able to swap out the default lens with one that provides a better focus... or even a zoom!  &lt;br /&gt;
&lt;br /&gt;
The C-Mount or [http://en.wikipedia.org/wiki/T-mount T-Mount] would be a good choice.  Both are standard lens mount with many supporting lenses.  Minolta, Canon, Nikon, Olympus, &amp;amp; most other lens manufacturers also have [http://www.bhphotovideo.com/c/shop/300/Lens_Adapters_Mounts.html mount adapters] for their proprietary lenses. Then share lenses between your camera &amp;amp; cell phone.  The mount hole would need to be about 1 inch in diameter and go about 1/4 inch into the camera-phone (with the focal plane array chip at the bottom of this hole).&lt;br /&gt;
&lt;br /&gt;
 '''Added bonus If you work somewhere that doesn't allow cameras:'''&lt;br /&gt;
 The lens could be removed and a blank insert could be screwed in.&lt;br /&gt;
 The camera capability would be physically disabled!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Business Card Reader ===&lt;br /&gt;
This is probably technically difficult if not impossible, maybe you could do it with the embedded camera hardware &amp;amp; software&lt;br /&gt;
&lt;br /&gt;
I want to be able to place a business card face down on the the screen, and have the device automatically read the card and enter the info in the contacts.&lt;br /&gt;
* There is no simple way of reading something placed on the screen, for the basic reason that the screen is in the way.&lt;br /&gt;
* Of course you could always just take a picture of the card with a camera-phone.  Then store it as it is or image recognition software could do character recognition &amp;amp; extract the information.&lt;br /&gt;
&lt;br /&gt;
=== Solar Panels ===&lt;br /&gt;
My old pocket calculator had solar panels, why not my phone?&lt;br /&gt;
See also: [[Expansion_Back#Ideas which require slight modifications of the phone.]]&lt;br /&gt;
&lt;br /&gt;
=== Fuel Cell ===&lt;br /&gt;
Some people want to put them in laptops &amp;amp; fuel cells are the way of the future.&lt;br /&gt;
===Cork Screw===&lt;br /&gt;
Every multi-tool has to have a cork screw&lt;br /&gt;
&lt;br /&gt;
===TV Out===&lt;br /&gt;
With help of mouse and keyboard, a TV output may be very useful.&lt;br /&gt;
Or to watch photos taken with a digital camera on holidays.&lt;br /&gt;
Or for showing a slide presentation off.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Larger Screen ===&lt;br /&gt;
&lt;br /&gt;
A model with a larger screen would be of use to many, especially with multi-touch. Higher resolution is probably less important than size until the DPI drops below 150 or so.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tiny Video Projector - &amp;quot;Beamer&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
At the [http://www.sid.org/conf/sid2007/sid2007.html DisplayWeek2007] several embeded video projectors for phones were presented. &lt;br /&gt;
 Those projecting devices are not much bigger than a cell phone. A LED-laser projects a sharp image at variable distance&lt;br /&gt;
Could such a device be connected by bluetooth?&lt;br /&gt;
 [http://www.explay.co.il/ Explay] uses two a red and a green laser-LED as well as a conventional blue LED in its &amp;quot;oio&amp;quot;.&lt;br /&gt;
 Blue laser-LED are to expensive for customer products. The light passes a transmissive WVGA-LCD(640x480) and goes on to the screen. Its frequency is 60Hz and the projecting distance can be varied from 20cm(8inch) to 2m(80inch) with a sharp picture. It consumes about 5W and its light power is about 6 lumen.&lt;br /&gt;
 As the sharpness does not depend on distance, one can project the image on screens that are not plane. Like someones t-shirt.&lt;br /&gt;
&lt;br /&gt;
 [http://www.microvision.com/ Microvistions] PicoProjektor however uses soley laser-LEDs. It is also 60Hz though 800x600px or 800x640.&lt;br /&gt;
&lt;br /&gt;
 Potential problems might become the approval of a laser class 3 device.&lt;br /&gt;
&lt;br /&gt;
 Final prices could be about $300.&lt;br /&gt;
Taken from: http://www.heise.de/newsticker/meldung/90141 (german)&lt;br /&gt;
&lt;br /&gt;
===HMD===&lt;br /&gt;
Possibility to use something like [http://www.aeinnovations.com/projects/ver0/ Eyeglass Mounted Display].&lt;br /&gt;
&lt;br /&gt;
Or a HUD for use in a car windscreen. Needs a small projector attached to the phone. The phone is placed in front of the steering wheel on the console and displays information projected against the windscreen.&lt;br /&gt;
&lt;br /&gt;
===Multi I/O adapter===&lt;br /&gt;
*VGA, standard Jack (line in &amp;amp; out), standard USB&lt;br /&gt;
&lt;br /&gt;
===Credit Card Swiper/Reader===&lt;br /&gt;
*A credit card swipe function on the device, so that business operators can use the device to accept payments. In some markets a 'chip+pin' card reader may be an alternative. Existing devices are very expensive. Transaction information is sent over the internet, transaction &amp;quot;hub&amp;quot; services like 1stData could receive the data and reply with email receipts to the merchant, who could then forward the receipt to customer's email, or print a receipt on a bluetooth printer.&lt;br /&gt;
&lt;br /&gt;
===Modular hardware design / interchangeable components===&lt;br /&gt;
It would be great to have several interchangeable components on the 'bus' of the device. Imagine opening the case and being able to add GPS to an empty internal bay or swap an Accelerometer for 3G support.  &lt;br /&gt;
Similar to the PCI hardware model of desktop PCs -- let savvy users swap and upgrade internal components by intentionally designing swappable components on some standardized bus.&lt;br /&gt;
&lt;br /&gt;
 Unfortunately, this is a big problem for compact devices.&lt;br /&gt;
 To take the above examples. An accelerometer module may be 5mm*5mm*2mm. a 3G module 50mm*30mm*10mm, a GSM module 30mm*40mm*5mm and a GPS module 20mm*15mm*5mm. &lt;br /&gt;
 Apart from the wasted space problems, this means also that each module has to be custom-built for FIC. &lt;br /&gt;
 Then there is a second part - you have to have connectors and some way to clamp the module in place.&lt;br /&gt;
 &lt;br /&gt;
 This adds yet more weight and volume.&lt;br /&gt;
 --[[User:Speedevil|Speedevil]] 12:03, 29 June 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Unsorted==&lt;br /&gt;
&lt;br /&gt;
== Different Shapes &amp;amp; Styles ==&lt;br /&gt;
The current shape is great and many people love it (and I myself plan on getting one).  Still, different strokes for different folks &amp;amp; we're allowed to muse about other options.&lt;br /&gt;
&lt;br /&gt;
===Dump the '''''egg-shaped''''' case design and go '''''rectangular''''' for more screen space===&lt;br /&gt;
*I'm all for devices that look great and have great features - aside from that I really like the current design. Thus I'd like to comment that the design change request is probably not the majority's opinion. [[User:Abraxa|Abraxa]] 00:00, 18 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
There will be many OpenMoko devices, of different designs. --[[User:Speedevil|Speedevil]] 06:19, 28 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Clamshell===&lt;br /&gt;
Nuff said&lt;br /&gt;
&lt;br /&gt;
===Twisting top===&lt;br /&gt;
Perfect for a multi-directional camera phone (for easier self photos &amp;amp; video conferencing)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Image:Kg920phone.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alcohol Sensor===&lt;br /&gt;
Alcohol sensor adjacent to microphone.  It doesn't have to be accurate, just has to detect any amount of alcohol on the speaker's breath.  I understand this is a very narrow market, but alcohol is on every parent's mind.&lt;br /&gt;
&lt;br /&gt;
I think those who drive cars might profit from this feature too. --[[User:Cedel|cedel]] 16:02, 20 February 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
:Although this is a good idea, you have to be very careful about liability here. If it gives a false positive (i.e. you're not over the limit), and you have an accident, the OpenMoko team might be liable.&lt;br /&gt;
&lt;br /&gt;
===Bottle opener===&lt;br /&gt;
* including a bottle opener is very hard, but could be useful.&lt;br /&gt;
* [http://www.bokonzept.de/php/images/462.jpg example]&lt;br /&gt;
* It definitely is useful. A metal reinforced corner might be enough. While it is possible to open bottles with most cell phones, they don't look too good after opening a few cases.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware ideas]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Neo_1973_GTA01_Power_Management</id>
		<title>Talk:Neo 1973 GTA01 Power Management</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Neo_1973_GTA01_Power_Management"/>
				<updated>2007-07-26T05:42:23Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: 5V power supply question&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The SPI connected LCM asic (JBT6K74-AS(PI)) doesn't do any kind of drawing. It mainly controls the power states and the format in which data is shifted out to the LCD (timing), but also includes gamma correction and there are two unexplained parts called &amp;quot;built-in oscillator&amp;quot; and &amp;quot;booster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Built in oscillator and booster probably together provide the required voltages to supply the LCD, which will typically require at least one supply other than 3.3V.&lt;br /&gt;
--[[User:Speedevil|Speedevil]] 01:27, 26 July 2007 (CEST) &lt;br /&gt;
== 5V supply ==&lt;br /&gt;
&lt;br /&gt;
I need a 5V supply for [http://www.freescale.com/files/sensors/doc/data_sheet/MPX4100A.pdf this] and [http://datasheets.maxim-ic.com/en/ds/MAX1464.pdf this] - total power draw should be 730 mW (max).&amp;lt;br/&amp;gt;&lt;br /&gt;
Some advice (best practice) would be appreciated on where to do this and how?&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:Johan|Johan]] 19:24, 25 July 2007 (CEST)&lt;br /&gt;
----&lt;br /&gt;
You've misread the maxim parts datasheet.&lt;br /&gt;
&lt;br /&gt;
Maximum power is an absolute maximum rating, it's not a normal operating condition.&lt;br /&gt;
&lt;br /&gt;
You have to really abuse it to get it to dissipate that much power - for example supplying lots of current into the input pins trying to take them beyond the supply rails.&lt;br /&gt;
The actual power draw is low single digit milliamps at 5V, maybe 25mW or so when active.&lt;br /&gt;
&lt;br /&gt;
I would suggest that rather than the complex sensor conditioner, you simply use a 3.3V ADC.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
OK - thats good news. We still need 5V for the transducer though don't we?&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-25T21:13:51Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */  example implementation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   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.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# [http://www.freepoc.org/viewapp.php?id=32 Example Implementation] for Symbian.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using [http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-25T20:50:34Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   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.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn. Reference the [http://www.lua.org/pil/ online book].&lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using [http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-25T20:49:10Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */  - added a reference to the Lua bindings and libraries page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   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.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2. Reference the [http://lua-users.org/wiki/LibrariesAndBindings Lua Libraries and Bindings] page.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# Well [http://www.lua.org/pil/ documented]&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# By using [http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ Pyrex]/[http://scipy.org/Weave Weave]/[http://www.swig.org/ SWIG], taxing algorithms can get C-like performance. Nice benchmarks [http://scipy.org/PerformancePython here]. &lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on one JVM and nullifies it's value in this list.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-25T19:16:30Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */  - added reference to the online book for Lua&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   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.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
# Well [http://www.lua.org/pil/ documented]&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# [http://codespeak.net/pypy/dist/pypy/doc/news.html PyPy], [http://scipy.org/Weave Weave], [http://www.swig.org/ SWIG] could speed up taxing algorithms in certain programs. PyPy could also improve/replace Psycho.&lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on the JVM.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-25T19:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Lua */  - added a reference to the main Lua site&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[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.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   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.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
''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.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''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&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''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 &amp;amp; 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.''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
''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).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
''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. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''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!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; 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.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; 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!&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''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.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# 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]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# 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.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# [http://www.lua.org/ Lua] is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# 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 (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# Bindings are available for GTK2.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# 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.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# [http://codespeak.net/pypy/dist/pypy/doc/news.html PyPy], [http://scipy.org/Weave Weave], [http://www.swig.org/ SWIG] could speed up taxing algorithms in certain programs. PyPy could also improve/replace Psycho.&lt;br /&gt;
# Python can be embedded, although not trivially. [http://www.tucs.fi/magazin/output.php?ID=2000.N2.LilDeEmPy DePython] was a stripped-down version of python made for embedded systems, footprint &amp;lt;200k. Project unmaintained, but could be used as a staring point.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# 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].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# 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.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# 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.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# 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.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# 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.)&lt;br /&gt;
# 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 &amp;quot;free&amp;quot;. Also, there's the very small [http://jamvm.sourceforge.net/ JamVM] as an alternative.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list? &lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
# If we're really lucky, people will realize that Java Virtual Machine belongs on embedded devices and has great performance there.  &lt;br /&gt;
# 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.&lt;br /&gt;
# 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.&lt;br /&gt;
# JavaFX is a Multimedia based scripting language that adds wow to devices&lt;br /&gt;
# The Neo1973 was demoed at JavaOne running the JavaFX Mobile so there is already a lot of reusable work in this area.&lt;br /&gt;
# Using gcj, java can be compiled to native binaries and there's no more need for a JVM. However, this means no multiple languages on the JVM.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# 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]).&lt;br /&gt;
# 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.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
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, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; 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)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Neo_1973_GTA01_Power_Management</id>
		<title>Talk:Neo 1973 GTA01 Power Management</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Neo_1973_GTA01_Power_Management"/>
				<updated>2007-07-25T17:24:54Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: 5V supply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The SPI connected LCM asic (JBT6K74-AS(PI)) doesn't do any kind of drawing. It mainly controls the power states and the format in which data is shifted out to the LCD (timing), but also includes gamma correction and there are two unexplained parts called &amp;quot;built-in oscillator&amp;quot; and &amp;quot;booster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== 5V supply ==&lt;br /&gt;
&lt;br /&gt;
I need a 5V supply for [http://www.freescale.com/files/sensors/doc/data_sheet/MPX4100A.pdf this] and [http://datasheets.maxim-ic.com/en/ds/MAX1464.pdf this] - total power draw should be 730 mW (max).&amp;lt;br/&amp;gt;&lt;br /&gt;
Some advice (best practice) would be appreciated on where to do this and how?&amp;lt;br/&amp;gt;&lt;br /&gt;
[[User:Johan|Johan]] 19:24, 25 July 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_hardware</id>
		<title>Neo 1973 hardware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_hardware"/>
				<updated>2007-07-25T17:05:46Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Power Management */  link to power management page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[OpenMoko]] is a software distribution stack that sits on top of a [[hardware]] platform.  The [[Neo1973]] phone is the first hardware platform to take advantage of OpenMoko.  You can find specifics of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]] by reviewing this introduction page and the pages in the category as shown at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
[[Image:Gta01b v3 top.jpg|thumb|400px|display (top) side]]&lt;br /&gt;
[[Image:Gta01b v3 bottom.jpg|thumb|400px|component (back) side]]&lt;br /&gt;
&lt;br /&gt;
==User experiences of Phase 0 hardware==&lt;br /&gt;
[[Wishlist:Neo1973_P0_Review]]&lt;br /&gt;
&lt;br /&gt;
== Physical Dimensions ==&lt;br /&gt;
* 120.7 x 62 x 18.5 mm (4.75 x 2.44 x 0.728 inch)&lt;br /&gt;
* 184 +/- 5 g (6.5 ounces)&lt;br /&gt;
&lt;br /&gt;
== Main components ==&lt;br /&gt;
=== Processor ===&lt;br /&gt;
The main Processor (CPU) of the Neo1973 is a Samsung S3C2410AL-26 (Capable of running up to 266 MHz)&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=S3C2410 S3C2410.htm]&lt;br /&gt;
* User Manual: [http://www.samsung.com/global/business/semiconductor/productRightMenuDown.do?doc_file=26537 2410UserManual.pdf]&lt;br /&gt;
* BSDL File: [http://www.samsung.com/global/business/semiconductor/productRightMenuDown.do?doc_file=26554 S3C2410_BGA_BSDLJTAGFILE.bsd]&lt;br /&gt;
* GPIO Assignments: https://svn.openmoko.org/trunk/doc/hardware/GTA01Bv3/gpio.txt&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
64MB Samsung NAND flash (K9F1208U0B) attached to S3C2410 NAND controller.&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=158&amp;amp;partnum=K9F1208U0B]&lt;br /&gt;
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/NANDFlash/SLC_SmallBlock/512Mbit/K9F1208U0B/ds_k9f1208x0b_rev03.pdf]&lt;br /&gt;
* Connected to: S3C2410 NAND controller&lt;br /&gt;
&lt;br /&gt;
This is the only flash memory in the device.  The S3C2410 boots directly from nand, using the [[S3C2410 Steppingstone]].&lt;br /&gt;
&lt;br /&gt;
We only use free software, no proprietary flash file systems.  For a full description of how it is used, see [[NAND bad blocks]]&lt;br /&gt;
&lt;br /&gt;
=== RAM ===&lt;br /&gt;
128MB SDRAM (2x Samsung K4M511633C) attached to S3C2410 SDRAM controller&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=136&amp;amp;partnum=K4M511633C]&lt;br /&gt;
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/MobileSDRAM/MobileSDRSDRAM/512Mbit/K4M511633C/ds_k4m511633c.pdf]&lt;br /&gt;
* Connected to: S3C2410 &lt;br /&gt;
&lt;br /&gt;
=== GSM/GPRS ===&lt;br /&gt;
The [[GSM]] (including GPRS) modem is Texas Instruments Calypso based.&lt;br /&gt;
&lt;br /&gt;
* Connected to: S3C2410 UART1 (full-uart, RxD, TxD, CTS, RTS), /dev/ttySAC0 in userspace&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
* Accessible GSM/GPRS antenna jack (if battery cover is removed)&lt;br /&gt;
&lt;br /&gt;
==== CALYPSO digital baseband ====&lt;br /&gt;
Unfortunately we cannot provide many details on the GSM chipset due to very tight NDAs.  However, this is not neccessarily required, since it interfaces using a standard UART serial line with the S3C2410.  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.&lt;br /&gt;
&lt;br /&gt;
==== TWL3014 analog baseband ====&lt;br /&gt;
Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12295&amp;amp;contentId=4703 TWL3014]&lt;br /&gt;
&lt;br /&gt;
==== TRF6151 RF Transceiver ====&lt;br /&gt;
Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12296&amp;amp;contentId=4701 TRF6151] &amp;lt;br&amp;gt;&lt;br /&gt;
Quad-band support&amp;lt;br&amp;gt;&lt;br /&gt;
GPRS Class12/CS4 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Hardware:AGPS|AGPS]] ===&lt;br /&gt;
Hammerhead PMB 2520 AGPS from Global Locate.&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.globalocate.com/SEMICONDUCTORS/SEMI_HAMMER_Frameset.htm Hammerhead]&lt;br /&gt;
* Connected to: S3C2410 UART2 (full-uart, RxD, TxD, CTS, RTS) /dev/ttySAC1 in userspace&lt;br /&gt;
* Driver: Implemented as plugin for the gpsd daemon ([[gpsd]])&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
* Externally-accessible GPS antenna connector of type MMCX&lt;br /&gt;
&lt;br /&gt;
This will not have a working driver till at least mid April.&lt;br /&gt;
&lt;br /&gt;
=== microSD-Card ===&lt;br /&gt;
The Neo1973 has one microSD aka Transflash slot.&lt;br /&gt;
It should support SDHC, but this has not been tested. If this works, cards &amp;gt;2G should work with no problems. As there are no microSD cards over 2G at the moment, it hasn't been tested. MicroSD slot is [[Disassembling_Neo1973#Opening_back_cover|under battery]].&lt;br /&gt;
* Connected to: S3C2410 MMC/SD controller&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c_mci.patch&lt;br /&gt;
* [[Supported microSD cards]]&lt;br /&gt;
* Specifications: [http://www.sdcard.org/confirm/confirm_memorycard.aspx 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)]&lt;br /&gt;
&lt;br /&gt;
=== LCD Module (LCM) ===&lt;br /&gt;
This is a 2.8&amp;quot; diagonal (1.7&amp;quot; x 2.27&amp;quot; - 43mm x 58mm) 480x640 toppoly (tpo) TD028TTEC1 module, using a Toshiba JBT6K74 TFT LCD Driver Chipset.&lt;br /&gt;
* Homepage: [http://www.tpo.biz/ENG/business-eng/Activer-Matrix-VGA.htm Activer-Matrix-VGA.htm]&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-jbt6k74.patch&lt;br /&gt;
* Backlight Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-backlight.patch&lt;br /&gt;
* Connected to: S3C2410 Display Controller and S3C2410 SPI Interface channel 1&lt;br /&gt;
&lt;br /&gt;
==== Touch Screen ====&lt;br /&gt;
* Connected to: S3C2410 TS controller&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_touchscreen.patch&lt;br /&gt;
&lt;br /&gt;
==== Stylus ====&lt;br /&gt;
&lt;br /&gt;
Seemingly identical to [http://cgi.ebay.com/4in1-PDA-Stylus-LED-Light-Torch-Laser-Pointer-Pen-h7_W0QQitemZ280089656134QQihZ018QQcategoryZ48677QQrdZ1QQcmdZViewItem this one on ebay]&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth ===&lt;br /&gt;
Delta DFBM-CS320 Class2 Module, using CSR BlueCore4&lt;br /&gt;
&lt;br /&gt;
* Data Sheet: [http://www.delta.com.tw/product/cp/vco/BT/download/pdf/CS/2.DFBM-CS320.pdf 2.DFBM-CS320.pdf]&lt;br /&gt;
* 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]&lt;br /&gt;
* Driver: Stock Linux Kernel BlueZ&lt;br /&gt;
* Connected to: S3C2410 USB Host controller (OHCI)&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
&lt;br /&gt;
=== Vibrator ===&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-vibrator.patch&lt;br /&gt;
* Connected to: S3C2410 GPIO&lt;br /&gt;
&lt;br /&gt;
=== USB Host ===&lt;br /&gt;
The USB Host controller is inside the S3C2410&lt;br /&gt;
* Driver: Stock Linux kernel ohci_hcd&lt;br /&gt;
&lt;br /&gt;
=== USB Device ===&lt;br /&gt;
The USB Device controller is inside the S3C2410 &lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_udc.patch&lt;br /&gt;
* Please see [[USB Product IDs]] on information about which Vendor/Product IDs we use&lt;br /&gt;
* 1200mAh lithium battery charges when connected to powered host.&lt;br /&gt;
* Mini-AB connector similar to [http://www.cypressindustries.com/shoponline/proddetail.asp?prod=CCMUSBAB-32005-700&amp;amp;cat=34 this one].&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
See also: [[Neo1973 Audio Subsystem]]&lt;br /&gt;
&lt;br /&gt;
==== Wolfson Codec ====&lt;br /&gt;
There's a WM8753 Wolfson Microelectronics CODEC (This is not a 'smart' codec that can interpret MP3/... it is a simple dumb 'sound card'.&lt;br /&gt;
* Product Homepage: http://www.wolfsonmicro.com/products/WM8753/&lt;br /&gt;
* Data Sheet: [http://www.wolfsonmicro.com/uploads/documents/en/WM8753.pdf WM8753.pdf]&lt;br /&gt;
* Connected to: S3C2410 IIS interface (PCM data), S3C2410 I2C (Control)&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/asoc.patch&lt;br /&gt;
&lt;br /&gt;
==== Stereo Amplifier ====&lt;br /&gt;
There's a National Semiconductor [[LM4857]] Stereo Amplifier at the analog audio output of the WM8753&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.national.com/pf/LM/LM4857.html LM4857.html]&lt;br /&gt;
* Data Sheet: [http://www.national.com/ds.cgi/LM/LM4857.pdf LM4857.pdf]&lt;br /&gt;
* Connects to: S3C2410 I2C (Control)&lt;br /&gt;
&lt;br /&gt;
==== Analog wired Headset ====&lt;br /&gt;
There's a four-ring 2.5mm stereo jack which provides connectivity to old-fashioned wired headsets.&lt;br /&gt;
&lt;br /&gt;
The headsets used by Motorola smartphones (A780,A1200, ...) and the V-360 have a compatible configuration.&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth Headset ====&lt;br /&gt;
This one is wired via PCM bus from the CSR Bluetooth chip to the Wolfson codec.&lt;br /&gt;
&lt;br /&gt;
=== Power Management ===&lt;br /&gt;
A Philips PCF50606 is used for [[Neo1973_Power_Management|power management]].&lt;br /&gt;
&lt;br /&gt;
* Data Sheet: [http://www.nxp.com/acrobat/literature/9397/75009763.pdf PCF50606/605]&lt;br /&gt;
* User Manual: [http://www.rockbox.org/twiki/pub/Main/DataSheets/pcf50606.pdf pcf50606.pdf]&lt;br /&gt;
* Connected to: S3C2410 via I2C, client address is 0x08. &lt;br /&gt;
* Driver Source: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-pcf50606.patch&lt;br /&gt;
&lt;br /&gt;
=== Battery ===&lt;br /&gt;
The [[Neo1973 Battery]] is compatible with a Nokia BL5C battery.&lt;br /&gt;
According to [http://lists.openmoko.org/pipermail/community/2007-February/003758.html this] post on the mailinglist.&lt;br /&gt;
[http://wiki.openmoko.org/index.php?title=Image:Neo1973-with-BL5C-battery.png Photo] of the battery inside the Neo1973.&lt;br /&gt;
&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
The Neo1973 features two buttons:&lt;br /&gt;
# [[Neo1973 Power button|The Power Button]]&lt;br /&gt;
# [[Neo1973 AUX button|The &amp;quot;Aux&amp;quot; button]]&lt;br /&gt;
&lt;br /&gt;
=== Alternate cases ===&lt;br /&gt;
A number of alternate case designs have been suggested and requested.&lt;br /&gt;
&lt;br /&gt;
[[Neo1973 case schematics]]&lt;br /&gt;
&lt;br /&gt;
[[Alternate Neo1973 case designs]]&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== GTA01 ===&lt;br /&gt;
This is the most simple, non-bluetooth version of the prototype.&lt;br /&gt;
&lt;br /&gt;
==== GTA01v3 ====&lt;br /&gt;
First generation of prototypes that was given to internal OpenMoko software developers.&lt;br /&gt;
&lt;br /&gt;
Unfortunately not useful at all due to non-working touchscreen.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x0000130&lt;br /&gt;
&lt;br /&gt;
==== GTA01v4 ====&lt;br /&gt;
Second generation of prototypes that was given to [[User:HaraldWelte|Harald]] +[[User:Mickey|Mickey]].&lt;br /&gt;
&lt;br /&gt;
Unfortunately still not useful due to half-working touchscreen.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000140&lt;br /&gt;
&lt;br /&gt;
=== GTA01B ===&lt;br /&gt;
This is the bluetooth-enabled fork of GTA01&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv2 ====&lt;br /&gt;
This is the first produced version of the bluetooth-enabled version.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000220&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv3 ====&lt;br /&gt;
This is the second produced version of the bluetooth-enabled version. It contains mainly GPS-related fixes.&lt;br /&gt;
&lt;br /&gt;
* ATAG_REVISION: 0x00000230&lt;br /&gt;
&lt;br /&gt;
This is the version that is shipped in [[Neo1973#Phase_0_.28GTA01Bv3.29|Phase 0]].&lt;br /&gt;
&lt;br /&gt;
===== GTA01Bv3 Errata =====&lt;br /&gt;
====== PMU unable to resume from suspend ======&lt;br /&gt;
Due to use of wrong GPIO/EINT pin, the PMU cannot wake-up the phone after suspend.  This means, specifically, '''the following events can not bring the phone back from suspend-to-ram''':&lt;br /&gt;
* PMU RTC Alarm&lt;br /&gt;
* Power button press&lt;br /&gt;
* Charger events (charger insertion/removal/error)&lt;br /&gt;
* Low battery&lt;br /&gt;
&lt;br /&gt;
====== Stand-by time extremely low ======&lt;br /&gt;
This is due to a design bug resulting in at least 30mA additional standby current, since we cannot properly switch off the power supply to the S3C2410 PLL's.  There is nothing we can do to change this with post-production fixes.  GTA01Bv4 will address this issue.&lt;br /&gt;
&lt;br /&gt;
====== GSM doesn't resume phone from suspend ======&lt;br /&gt;
The GSM modem currently doesn't signalize a wakeup interrupt to the S3C2410 in case there's some noteworthy event, such as incoming call, loss of network, incoming SMS or the like.&lt;br /&gt;
&lt;br /&gt;
This is a serious issue, but can be fixed with a GSM Modem Firmware update.&lt;br /&gt;
&lt;br /&gt;
====== GSM Sidetone too loud ======&lt;br /&gt;
The local feedback sidetone (see [http://en.wikipedia.org/wiki/Sidetone]) is too loud.  This will be addressed in a GSM firmware update&lt;br /&gt;
&lt;br /&gt;
====== Bad block ======&lt;br /&gt;
Due to an error in the production process, the factory-programmed NAND bad block information has been lost.  This means that some blocks in the flash will wear out rapidly, which might become as bad as rendering the device unusable.&lt;br /&gt;
&lt;br /&gt;
==== GTA01Bv4 ====&lt;br /&gt;
This is the version that will be shipped in [[Neo1973#Phase_1_.28GTA01Bv4.29|Phase 1]]&lt;br /&gt;
&lt;br /&gt;
===== Looks =====&lt;br /&gt;
This is what the GTA01Bv4 PCB looks like without the shielding cans, which will be fitted later.&lt;br /&gt;
[[Image:Gta01b_v4_front.png|thumb|400px|Component side]]&lt;br /&gt;
[[Image:Gta01b_v4_back.png|thumb|400px|Display side]]&lt;br /&gt;
&lt;br /&gt;
===== Changes from GTA01Bv3 =====&lt;br /&gt;
# Fix all Errata items from GTA01Bv3&lt;br /&gt;
# Add I2C, SPI and one irq and wakeup capable GPIO pin to debug port plus have test pads for all these signals (for soldering wires directly on the pcb)&lt;br /&gt;
# Fix a number of production related details and minor hardware details that are not user-visible&lt;br /&gt;
&lt;br /&gt;
===GTA02===&lt;br /&gt;
The [[GTA02#.22Phase_2.22_.28GTA02.2C_.22Mass_Market.22.29|GTA02]] is the device shipped starting October 2007 (&amp;quot;Mass Market launch&amp;quot;).&lt;br /&gt;
It is a new main release with [[Neo1973:_GTA01Bv4_versus_GTA02_comparison|features added]]&lt;br /&gt;
&lt;br /&gt;
===Debug Connector===&lt;br /&gt;
This is the connector used to connect the [[Debug Board]] and possibly other hardware.&lt;br /&gt;
&lt;br /&gt;
Connections are:&lt;br /&gt;
* 39 - GND&lt;br /&gt;
* 38 - STDI&lt;br /&gt;
* 37 - _RESET&lt;br /&gt;
* 36 - STMS&lt;br /&gt;
* 35 - STCK&lt;br /&gt;
* 34 - STDO&lt;br /&gt;
* 33 - GSM_EN&lt;br /&gt;
* 29 - _STRST&lt;br /&gt;
* 19 - X_I2C_SCL (H-TP4703)&lt;br /&gt;
* 18 - X_I2C_SDA (H-TP4704)&lt;br /&gt;
* 17 - SPI_CLK0&lt;br /&gt;
* 16 - SPI_MOSI0&lt;br /&gt;
* 15 - SPI-MISO0 &lt;br /&gt;
* 14 - SS0&lt;br /&gt;
* 13 - EINT3 (H-TP4705)&lt;br /&gt;
* 3 - MODEM_TXD (H-TP4701)&lt;br /&gt;
* 2 - MODEM_RXD (H-TP4702)&lt;br /&gt;
&lt;br /&gt;
Information from [http://people.openmoko.org/roh/Debugport_P1.png].&lt;br /&gt;
&lt;br /&gt;
== Distinguishing hardware revisions ==&lt;br /&gt;
=== Inside the [[Bootloader]] ===&lt;br /&gt;
Every hardware revision has its own u-boot image type.  Thus, the bootloader has the revision hard-coded.&lt;br /&gt;
The hardware revision is passed on to the kernel via the ATAG mechanism (ATAG_REVISION)&lt;br /&gt;
&lt;br /&gt;
=== Inside the [[Kernel]] ===&lt;br /&gt;
The kernel receives the ATAG_REVISION during bootup, and saves its contents in the &amp;quot;system_rev&amp;quot; global variable.&lt;br /&gt;
&lt;br /&gt;
=== From Userspace ===&lt;br /&gt;
The kernel exports the system_rev variable in /proc/cpuinfo as &amp;quot;Revision :&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
== Approval ==&lt;br /&gt;
*[http://www.cetest.nl/ CE] '''(Is this the proper site for CE?)'''&lt;br /&gt;
*[http://www.fcc.gov/ FCC]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973 Hardware}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Hardware| ]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-25T16:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware_ideas]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;br /&gt;
*Possible integration with mapping application&lt;br /&gt;
&lt;br /&gt;
====Server Based Services====&lt;br /&gt;
Auto discovery service&lt;br /&gt;
*Pilots with OpenMoko based variometers can choose to publish their status on a central service.&lt;br /&gt;
*Based on location - the system will notify pilots of the presence of others that can participate in group flying.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-25T16:46:02Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: moved vario to lower category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Category:Hardware_ideas]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;br /&gt;
*Possible integration with mapping application&lt;br /&gt;
&lt;br /&gt;
====Server Based Services====&lt;br /&gt;
Auto discovery service&lt;br /&gt;
*Pilots with OpenMoko based variometers can choose to publish their status on a central service.&lt;br /&gt;
*Based on location - the system will notify pilots of the presence of others that can participate in group flying.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-25T15:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Variometer Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;br /&gt;
*Possible integration with mapping application&lt;br /&gt;
&lt;br /&gt;
====Server Based Services====&lt;br /&gt;
Auto discovery service&lt;br /&gt;
*Pilots with OpenMoko based variometers can choose to publish their status on a central service.&lt;br /&gt;
*Based on location - the system will notify pilots of the presence of others that can participate in group flying.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-25T15:42:25Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Application code */  - notofication service&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Server Based Services====&lt;br /&gt;
Auto discovery service&lt;br /&gt;
*Pilots with OpenMoko based variometers can choose to publish their status on a central service.&lt;br /&gt;
*Based on location - the system will notify pilots of the presence of others that can participate in group flying.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wiki_Issues</id>
		<title>Wiki Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wiki_Issues"/>
				<updated>2007-07-24T17:03:13Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: Wiki Admin Requests&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Help]]&lt;br /&gt;
Can we please install/fix the following features for this wiki:&lt;br /&gt;
* '''Math''' - the Tex math markup does not work currently.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi '''Syntax''' Highlighting - makes code much more readable]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:GraphViz GraphViz] works with the commonly known dot language - it allows us to draw '''graphs''' using easy markup.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:AnyWikiDraw AnyWikiDraw] allows us to draw svg '''diagrams''' directly on the wiki page.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Main_Page"/>
				<updated>2007-07-24T17:00:14Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Administrative / Organizational */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''Welcome to the [[OpenMoko]] public Wiki'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;For other languages see the &amp;lt;/small&amp;gt;[[#bottom|bottom]]&amp;lt;small&amp;gt; of this page.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:FIC-neo1973_small.jpg|200px|right|frontside]]&lt;br /&gt;
OpenMoko is an [http://en.wikipedia.org/wiki/Open_source Open Source] project to create the world's first free mobile phone operating system.&lt;br /&gt;
&lt;br /&gt;
The [[OpenMoko]] project is a community that anyone can join, to help design their ideal phone.&lt;br /&gt;
&lt;br /&gt;
Eventually, phone software won't be tied to any particular phone. You can install any OpenMoko software over the whole range of [[Supported Hardware|supported phones]], and if you upgrade your phone, you don't lose that software. Bugs fixed on any phone are fixed on all. &lt;br /&gt;
&lt;br /&gt;
'''Currently it is not suitable for users.''' The state of the software at the moment is pre-alpha. If you order a Neo1973, DO NOT expect to be able to use it as an everyday phone for several months.&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973]] from [[FIC]] is the first of many phones that OpenMoko will run on; indeed, some people erroneously use the terms Neo1973 and OpenMoko as interchangeable. If you are willing to have the alpha test experience, you can order Neo1973 hardware now from the [https://direct.openmoko.com/ Openmoko Online Shop]. You may wish to see the [[SH1 FAQ|Shipment 1 FAQ]].&lt;br /&gt;
&lt;br /&gt;
Please join us in collaborating on the OpenMoko project through any of the [[Development resources | project resources]] including this OpenMoko wiki. Please see the [[Help:Contents | wiki editing help]] page for information on making contributions to this wiki. A [[Meet the Core Team | core team]] of developers funded by FIC, Inc. leads the project.&lt;br /&gt;
&lt;br /&gt;
An [[introduction]] page is available, with [[Introduction#Photos|photos]] and [[Introduction#Videos|videos]]. Moreover, the usual [[FAQ | Frequently Asked Questions] (FAQ) page might be helpful. Developers may find the [[ChangeLog | change log]] an important resource.&lt;br /&gt;
&lt;br /&gt;
The members of the OpenMoko community would like to thank FIC Inc. for showing leadership and initiating the OpenMoko project.&lt;br /&gt;
&lt;br /&gt;
== OpenMoko Areas of Interest ==&lt;br /&gt;
* [[Basic End-user]] - Information for end users that want basic functionality and no surprises&lt;br /&gt;
* [[Advanced End-user]] - Information for advanced end-users that want advanced and experimental functionality but who are not programmers&lt;br /&gt;
* [[Development resources | Project Resources]] page provides a centralized location of all resources such as [[Development resources#Mailing_Lists|mailing lists]], [[Development resources#IRC | communication tools]], and other software development oriented resources.&lt;br /&gt;
* [[Application Developer]] - Information for application developers, including ideas and specifications for applications, and tools to build them&lt;br /&gt;
* [[System Developer]] - Information for system developers, including bootloader, kernel, and libraries&lt;br /&gt;
* [[Hardware Developer]] - Information for hardware developers, including hardware specs and debug board&lt;br /&gt;
* [[Community Events]] - Information on both [[Community Events#Past Events | past ]] and [[Community Events#Past Events#FIC / OpenMoko at Events | future]] events where FIC or OpenMoko had or will have a presence.&lt;br /&gt;
&lt;br /&gt;
== Developer's Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Hands-on Guides ===&lt;br /&gt;
* [[Getting Started with your Neo1973]]&lt;br /&gt;
* [[MokoMakefile|Building OpenMoko using the MokoMakefile]] &lt;br /&gt;
* [[Building OpenMoko from scratch]]&lt;br /&gt;
** [[Building a hello world application]]&lt;br /&gt;
** Old [[Building OpenMoko from scratch (pre-BBT)]]&lt;br /&gt;
* [[Migration to bad block tolerant builds]]&lt;br /&gt;
* [[Running OpenMoko on PC]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xoo]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xephyr]]&lt;br /&gt;
** [[How to run OpenMoko Apps on PC]]&lt;br /&gt;
** [[OpenMoko under QEMU]]&lt;br /&gt;
** [[Test Openmoko Emulation with chroot image|Test Openmoko Emulation with a prebuilded chroot image]]&lt;br /&gt;
* [[Booting from SD]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Reference Documentation ===&lt;br /&gt;
* All [[:Category:Hardware|Hardware]] related documentation and specifications are found on the [[:Category:Hardware|Hardware page]].&lt;br /&gt;
* The [[Neo1973 Hardware]] page provides an overview of the hardware components used by the [[:Category:Neo1973 Hardware|Neo1973 hardware platform]]. PCB Photographs are also included. A [[Disassembling Neo1973 | photo disassemble story]] may be an interesting starting place.&lt;br /&gt;
* [[:Category:Neo1973 Hardware Debugging | Neo1973 Hardware Debugging]] is assisted with the [[Debug Board | Neo1973 debug board]].   A page discussing [[Connecting Neo1973 with Debug Board v2 | debug board and Neo1973 configurations]] are also provided.&lt;br /&gt;
&lt;br /&gt;
=== Software Reference Documentation ===&lt;br /&gt;
* Architectural&lt;br /&gt;
** [[OpenMokoFramework]] - The OpenMoko Application Framework&lt;br /&gt;
* [[Neo1973 host software]]&lt;br /&gt;
* Device Software&lt;br /&gt;
** Low-Level&lt;br /&gt;
*** [[u-boot]] - The bootloader we use, including documentation for our modifications&lt;br /&gt;
*** [[kernel]] - The Linux kernel we use, including documentation for our modifications&lt;br /&gt;
** Userspace&lt;br /&gt;
*** [[binary compatibility]]&lt;br /&gt;
*** [[gsmd]] - the GSM daemon managing the GSM Modem&lt;br /&gt;
*** [[gpsd]] - the AGPS (Assisted GPS) daemon&lt;br /&gt;
&lt;br /&gt;
=== OpenMoko ===&lt;br /&gt;
* [[OpenEmbedded]] - The distribution-building framework&lt;br /&gt;
* [[Toolchain]] - The toolchain we use for compilation&lt;br /&gt;
* [[OpenMoko]] - The OpenMoko distribution&lt;br /&gt;
** [[OpenMoko2007]] - The first intended release of it&lt;br /&gt;
** [[Userspace root image]]&lt;br /&gt;
&lt;br /&gt;
==== User Interface Related ====&lt;br /&gt;
* [[Look &amp;amp; Feel]]&lt;br /&gt;
* [[Applications]]&lt;br /&gt;
* [[Widgets]]&lt;br /&gt;
** [[Widget Inheritance Graph]]&lt;br /&gt;
* [[Application UI Design Recommendations]]&lt;br /&gt;
&lt;br /&gt;
=== Misc. Development Related ===&lt;br /&gt;
* [[Freshman todo]]&lt;br /&gt;
* [[Templates]]&lt;br /&gt;
* [[PIM Storage]]&lt;br /&gt;
* [[Coding Guidelines]]&lt;br /&gt;
* [[OpenMoko#Setting_up_an_OpenMoko_SDK|How to setup the OpenMoko SDK]]&lt;br /&gt;
* [[License]] - How we license our code&lt;br /&gt;
* [[Development resources]] - Describes resources for developers (lists, svn, ...)&lt;br /&gt;
* [[Neo1973 Phase 0]] -- Information for Phase 0 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P0 Review]] -- Impressions of the Phase 0 hardware device, also the Phase 0 FAQ&lt;br /&gt;
* [[Neo1973 Phase 1]] -- Information for Phase 1 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P1 Review]] -- Impressions of the Phase 1 hardware device&lt;br /&gt;
* [[External Feeds]] -- List of feeds from people blogging about OpenMoko&lt;br /&gt;
&lt;br /&gt;
== Administrative / Organizational ==&lt;br /&gt;
&lt;br /&gt;
* [[Shipping Notes]] - Information to help FIC figure out how to ship products to you, and how much it might cost.&lt;br /&gt;
* [[My Account]] - Ideas for what sort of account-based services FIC should provide with the phone.&lt;br /&gt;
* [[Hear Me FIC]] - Information to help FIC know what the community wants.&lt;br /&gt;
* [[Wiki Issues]] - problems/requests regarding this Wiki&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
* [[WiFi support in OpenMoko]]&lt;br /&gt;
* [[Neo1973 and Windows]] - If you want to commit that offence ;)  (does not work, help!)&lt;br /&gt;
* [[Press Coverage]] - What the press says about the OpenMoko project&lt;br /&gt;
* [[mFAQ]] - The OpenMoko Misinformation FAQ ('''mFAQ''') - What the press '''''incorrectly''''' says about the OpenMoko project&lt;br /&gt;
* [[Wish List]] - A collection of ideas and ideals we'd like to see implemented some day&lt;br /&gt;
* [[Wish List - Hardware]] - A collection of ideas we'd like to see in the next Neo release&lt;br /&gt;
* [[Wishlist:BuiltInScriptingLanguage|Wish List - Built-in Scripting Language]] - Discussion on a suitable scripting language to be included&lt;br /&gt;
* [[Media Content]] - What types of media on the device can we use (that is non-software)?&lt;br /&gt;
* [[Testimonials]] - How did you get to OpenMoko?&lt;br /&gt;
* [[Buying Interest List]] - (Not official and not a pre-order page) Have you put money aside for Neo1973? Put your nick here.&lt;br /&gt;
* [[iPhone]] -  Comparison between Apple iPhone and FIC Neo1973&lt;br /&gt;
* [[Translation]] -  Translation of OpenMoko&lt;br /&gt;
* [[Summer of code]] - Our page with project applications for Googles Summer of Code&lt;br /&gt;
* [[SWAG]] - Where to purchase openmoko swag (T-Shirts!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{Languages|Main_Page}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:Categories| ]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wiki_Issues</id>
		<title>Wiki Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wiki_Issues"/>
				<updated>2007-07-24T16:58:28Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Can we please install/fix the following features for this wiki:&lt;br /&gt;
* '''Math''' - the Tex math markup does not work currently.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi '''Syntax''' Highlighting - makes code much more readable]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:GraphViz GraphViz] works with the commonly known dot language - it allows us to draw '''graphs''' using easy markup.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Extension:AnyWikiDraw AnyWikiDraw] allows us to draw svg '''diagrams''' directly on the wiki page.&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-24T01:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* A/D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (assuming a operating range of 0 - 12000 meter 12 bits would give resolution of 2.9304 m)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (assuming a range of +-20m/s 10 bits would give a resolution of 0.0391 m/s)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wish_List_-_Hardware</id>
		<title>Wish List - Hardware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wish_List_-_Hardware"/>
				<updated>2007-07-24T01:28:28Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* TouchKo's (now Wacom Company Ltd.) spatial capacitive &amp;quot;touchscreen&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details hardware features which some would like to go into future phones similar to the [[Neo1973]].&lt;br /&gt;
&lt;br /&gt;
Related pages are:&lt;br /&gt;
*[[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.  &lt;br /&gt;
*[[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.&lt;br /&gt;
*[[Wishlist:Accessories]] - Accessories that people would like, that connect easily to the phone - initially primarily for the Neo1973 &lt;br /&gt;
*[[Wishlist:Expansion]] - add-ons to the phone, maybe involving hardware changes, and software and hardware protocols to implement these.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Processor==&lt;br /&gt;
===AT91CAP9S500A (ARM9 + FPGA-port)===&lt;br /&gt;
Take a look at this microcontroller, that integrates an ARM9 microcontroller and a dedicated FPGA port: AT91CAP9S500A. It has &amp;quot;only&amp;quot; a max. clock at 200MHz, but can use a FPGA for hardware acceleration, that could be used for video (de)compression, [http://en.wikipedia.org/wiki/AacPlus_v2 aacPlus v2]/[http://en.wikipedia.org/wiki/HE-AAC_v2 HE-AAC v2] sound (de)compression and many other things. HE-AAC v2 is better than [http://en.wikipedia.org/wiki/MP3 MP3].&lt;br /&gt;
*[http://www.atmel.com/dyn/products/product_card.asp?family_id=689&amp;amp;family_name=AT91CAP+Microcontrollers&amp;amp;part_id=4137 AT91CAP9S500A] Quote: &amp;quot;...The AT91CAP9S500A is built around a 12-layer bus matrix, allowing a maximum internal bandwidth of twelve 32-bit buses. Its distributed DMA architecture enables multiple data transfers to take place between the processor, memories and peripherals with minimal processor overhead...&amp;quot;.&lt;br /&gt;
*[http://www.atmel.com/dyn/resources/prod_documents/doc6310.pdf GNU-Based Software Development on AT91SAM Microcontrollers]&lt;br /&gt;
*Maybe this is a good tool?: [http://www.jhdl.org/ BYU JHDL, Open Source FPGA CAD Tools]&lt;br /&gt;
*[http://www.eetimes.com/showArticle.jhtml;?articleID=197002705 02/05/2007, FPGA tool bottleneck stalls HPC] Quote: &amp;quot;...Current FPGA synthesis, placement and routing tools are written for hardware designers, not software programmers simply trying to accelerate an algorithm...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This seems to be a good hardware mix (ARM+FPGA). It does [http://en.wikipedia.org/wiki/Theora Ogg Theora] or [http://en.wikipedia.org/wiki/MJPEG MJPEG] in the FPGA with 1 million gates:&lt;br /&gt;
*http://sourceforge.net/projects/elphel, [http://wiki.elphel.com/index.php?title=10353 board 10353], [http://wiki.elphel.com/index.php?title=Camera_hardware camera hardware], [http://wiki.elphel.com/index.php?title=Main_Page Main page], [http://www.elphel.com/articles/index.html Imaging solutions with Free software and open hardware]&lt;br /&gt;
&lt;br /&gt;
Just another FPGA+microcontroller example: &lt;br /&gt;
*[http://melzer.ch/html/body_alya.html The Alya Project] ([http://home.nikocity.de/andymon/hfg/Alya/alya.html old page])&lt;br /&gt;
*[http://melzer.ch/ALYA.ASM PIC assembler source code], [http://melzer.ch/ALYA.TDF Altera FPGA code]. Schematic: [http://melzer.ch/Schaltplan1.gif], [http://melzer.ch/Schaltplan2.gif], [http://melzer.ch/Schaltplan3.gif]&lt;br /&gt;
*[http://hardware.silicon.com/servers/0,39024647,39166443,00.htm?r=1  20 March 2007 Green supercomputer is 'go' in Scotland]&lt;br /&gt;
&lt;br /&gt;
==Possible FPGA==&lt;br /&gt;
This FPGA is just an example:&lt;br /&gt;
*[http://www.xilinx.com/products/silicon_solutions/fpgas/spartan_series/spartan3an_fpgas/capabilities/index.htm Spartan-3AN FPGA Capabilities] Quote: &amp;quot;...Simple and secure embedded application storage with up to 11Mb of integrated user Flash...Enable simple arithmetic and math functions as well as advanced DSP functions to derive over 330 Giga MACs/sec...Up to 32 18 x 18 embedded multipliers support 18-bit signed or 17-bit unsigned multiplication, and can be cascaded to support wider bits...&amp;quot;&lt;br /&gt;
**XC3S1400AN-4FGG676CES $91&lt;br /&gt;
**XC3S200AN-4FTG256CES $25.87&lt;br /&gt;
&lt;br /&gt;
Tool for FPGAs:&lt;br /&gt;
*[http://www.xilinx.com/ise/logic_design_prod/webpack.htm xilinx.com: ISE WebPACK is the industry´s only FREE, fully featured front-to-back FPGA design solution for Linux, Windows XP, and Windows Vista]&lt;br /&gt;
&lt;br /&gt;
==Wireless data networking==&lt;br /&gt;
&lt;br /&gt;
===WiMAX support===&lt;br /&gt;
[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.&lt;br /&gt;
&lt;br /&gt;
===Emerging Protocols===&lt;br /&gt;
*[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.)&lt;br /&gt;
*[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.)&lt;br /&gt;
*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.)&lt;br /&gt;
&lt;br /&gt;
==Camera==&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
* Some people can't take cameras into work - a model without the camera, or some way of removing the camera would be useful.&lt;br /&gt;
&lt;br /&gt;
* See [[Wishlist:Camera]] for a more detailed wishlist.&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
===Multitouch screen===&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Wishlist:Spell_weaving|Spell weaving]]''&lt;br /&gt;
&lt;br /&gt;
See also [http://pogue.blogs.nytimes.com/2007/03/27/the-multi-touch-screen/ this page] containing a link to a video demonstration.&lt;br /&gt;
&lt;br /&gt;
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])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===TouchKo's (now Wacom Company Ltd.) spatial capacitive &amp;quot;touchscreen&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
How about a TouchKo's (now Wacom Company Ltd.) spatial capacitive &amp;quot;touchscreen&amp;quot;, so you do not grease your display, with your fingers. This also means the device can be operated with gloves.&lt;br /&gt;
*[http://www.touchko.com/capacitive.html touchko.com: Spatial Capacitive: Imagine getting a touch response from your display, without even touching it!], [http://www.touchko.com/ TouchKo] Quote: &amp;quot;... June, 2007, Wacom Company Ltd., acquired TouchKo and will add TouchKo's spatial capacitive and resistive touch technology into its components portfolio...&amp;quot;&lt;br /&gt;
*[http://www.wacom-components.com/english/index.html Wacom Company Ltd.]&lt;br /&gt;
&lt;br /&gt;
I do not know how good or bad it works.&lt;br /&gt;
&lt;br /&gt;
Thought educational example:&lt;br /&gt;
*If the Neo1973 detect a finger have pressed the screen, the Neo1973 should vibrate two short times and reply one of these:&lt;br /&gt;
**&amp;quot;You can touch my screen, but I also understand close proximity finger sign language.&amp;quot;.&lt;br /&gt;
**&amp;quot;Do not touch my screen, I understand close proximity finger sign language.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Video acceleration===&lt;br /&gt;
Hardware acceleration for video playback.&lt;br /&gt;
&lt;br /&gt;
===3D acceleration===&lt;br /&gt;
3D hardware acceleration for 3D games, GUIs, etc. (maybe a PowerVR MBX Lite ?).&lt;br /&gt;
&lt;br /&gt;
===EPD===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
Pro: laserprinter like quality, glossy, very stable image, easy on the eyes. Electronics are similar to TFT. Very low power consumption. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Transreflective===&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Slightly&amp;quot; Larger Screen===&lt;br /&gt;
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.5mminstead of the 3:4 aspect ratio would be even cooler (if one could be found).&lt;br /&gt;
&lt;br /&gt;
==Input devices==&lt;br /&gt;
&lt;br /&gt;
===A laser projection keyboard===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Just a few more Buttons===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===D-Pad and Buttons===&lt;br /&gt;
*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)&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Here is a concept drawing of a possible neo1973 gaming version: &lt;br /&gt;
(This has a 4-way direction pad, 8 way may be better for gaming)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Neogame90.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Thumb keyboard or keyboard attachment accessory===&lt;br /&gt;
*Could be slide out or clamshell (hinge on long side) design with an external OLED. The keyboard should be protected when not in use.&lt;br /&gt;
*Could be a clip on keyboard that attaches to the serial port or communicates by bluetooth (not preferred for permanent keyboard users).&lt;br /&gt;
*Cheap clippable miniusb keyboard&lt;br /&gt;
*One of the layouts proposed in [[Hardware:Keyboards]]&lt;br /&gt;
* What about virtual keyboard? [[http://www.extremetech.com/article2/0,3973,539778,00.asp Keyboard]]&lt;br /&gt;
&lt;br /&gt;
===Analogue Controllers===&lt;br /&gt;
&lt;br /&gt;
====Trackball====&lt;br /&gt;
A trackball would provide an efficient mouse-like interface in a very compact package.  As exemplified in the newer Blackberry&amp;amp;reg; models.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
====Analog Joystick====&lt;br /&gt;
A joystick, or [http://www.extremetech.com/article2/0,1697,1772689,00.asp Rollermouse]-like device would provide additional control, compared with touchscreen only.&lt;br /&gt;
*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?&lt;br /&gt;
&lt;br /&gt;
====Dual analogues====&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===TV/radio receiver===&lt;br /&gt;
[[Digital Television]], [[Digital Radio]] or even normal analogue TV/radio is available widely 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.&lt;br /&gt;
&lt;br /&gt;
===Accelerometer=== &lt;br /&gt;
This enables the phone to sense which direction 'down' is, and to sense any movements the phone makes.&lt;br /&gt;
&lt;br /&gt;
See [[Accelerometer Fundamentals]] for more information on accelerometers as they may be used in phones.&lt;br /&gt;
&lt;br /&gt;
In some cases integrated gyroscopes may also be needed.&lt;br /&gt;
&lt;br /&gt;
*[[Wishlist:3D Viewport|3D Viewport]]&lt;br /&gt;
*[[Wishlist:Computer Mouse|Computer Mouse]]&lt;br /&gt;
*[[Wishlist:Determine Position|Determine Position]]&lt;br /&gt;
*[[Wishlist:Dynamic Screen Orientation|Dynamic Screen Orientation]]&lt;br /&gt;
*Change media player playlist when jogging vs walking. &lt;br /&gt;
*Attempt to use to stabilise any future camera.&lt;br /&gt;
&lt;br /&gt;
This feature is scheduled for inclusion in the phase 2 Neo1973, currently slated for release in October 2007.&lt;br /&gt;
&lt;br /&gt;
===Side-Mounted Touch Strip===&lt;br /&gt;
Add a &amp;quot;touch strip&amp;quot; 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. With the AD7143 you can have an 8-element (128-position) 25mm long strip - Perfect!.&lt;br /&gt;
&lt;br /&gt;
Would it be possible to use the phone as a wiimote ?&lt;br /&gt;
&lt;br /&gt;
===Heart Rate Compatibility=== &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Digital compass=== &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
An electronic thermometer might become handy for some users.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Barometer and Variometer===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
See [[Wish List - Hardware - Atmospheric]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Finger print sensor===&lt;br /&gt;
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&amp;amp;Dept=computers Sony UX17].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Barcode Scanner===&lt;br /&gt;
*less cpu intensive and more reliable than camera+ocr&lt;br /&gt;
*though, bluetooth-enabled readers are already available.&lt;br /&gt;
&lt;br /&gt;
===Light Sensor===&lt;br /&gt;
Ability to sense ambient light, and act accordingly. i.e if it's 3am and LightValue&amp;lt;.1 then Ring Quietly.&lt;br /&gt;
&lt;br /&gt;
===Wheel===&lt;br /&gt;
A navigation wheel like on a sony/ericsson 810i would be nice.&lt;br /&gt;
&lt;br /&gt;
===Proximity Sensor===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Expansion==&lt;br /&gt;
&lt;br /&gt;
===MMC/SD/SDIO slot (rather than?) miniSD or microSD===&lt;br /&gt;
*Cheaper, more durable cards in a widely accepted format.&lt;br /&gt;
*Cards are harder to lose&lt;br /&gt;
*Wider selection of accessories, including SDIO accessories.&lt;br /&gt;
*Make externally available so that larger length SDIO cards can be used (thinking about SDIO WLAN here)&lt;br /&gt;
*[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]].&lt;br /&gt;
&lt;br /&gt;
===Two SD slots===&lt;br /&gt;
*Micro SD for /home partition.&lt;br /&gt;
*Hot swappable mini or normal SD for movie, music etc.&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* 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.&lt;br /&gt;
* OTG (is this maybe supported already ?)&lt;br /&gt;
* Bootable USB device emulation: the possibility to boot any computer on a bootable flagged partition of the transflash.&lt;br /&gt;
&lt;br /&gt;
===Wireless USB support===&lt;br /&gt;
[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 (&amp;lt;3 meter). Chipsets suitable for a phone are likely to take some time to be available.&lt;br /&gt;
&lt;br /&gt;
===SIR/FIR transceiver (Serial Infrared) / IR remote control ===&lt;br /&gt;
*An infrared transceiver is cheap, small, and useful for sync with many laptops and mobile phones. &lt;br /&gt;
*Replace/emulate all IR-based remote controls used for your tv, vcr, etc on your neo cell phone.&lt;br /&gt;
** replaces multiple 'dumb' devices with a single intelligent device (your neo) that you will probably carry with you at all times anyway. &lt;br /&gt;
**Command sets should be retrieved from a database or learned from other less intelligent remote control devices with macros. &lt;br /&gt;
**reduces clutter, particularly in the living room.&lt;br /&gt;
**inceases the neo's practical status as an 'always-have' device. &lt;br /&gt;
&lt;br /&gt;
Other uses.&lt;br /&gt;
*Detecting reflections from inside of a caddy, and switching from active mode.&lt;br /&gt;
*FIR would be a nice option, as it's some 40 times faster than SIR.&lt;br /&gt;
&lt;br /&gt;
==Output devices==&lt;br /&gt;
&lt;br /&gt;
===LED===&lt;br /&gt;
*A blinking LED would be a cheap, low power way to inform the user of new SMS/Email....&lt;br /&gt;
**An alternative to this would be for one small part of the LCD to be separately backlit.&lt;br /&gt;
**This requires the CPU and LCD to be somewhat active, to keep the LCD refreshed, but gives much more information.&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
**The LED and button ideas could be combined: illuminated buttons.&lt;br /&gt;
**It must be possible to completely disable the LED to save power or other personal preferences.&lt;br /&gt;
&lt;br /&gt;
=== Flashlight ===&lt;br /&gt;
For finding keys, or any other application. May also optionally pulse in time with ring, to make phone more visible.&lt;br /&gt;
This is really well done in Nokia 5500.&lt;br /&gt;
&lt;br /&gt;
=== FM transmitter ===&lt;br /&gt;
Small FM transmitter to output to car, and other nearby radios.&lt;br /&gt;
&lt;br /&gt;
===HAC Compliance===&lt;br /&gt;
[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.&lt;br /&gt;
&lt;br /&gt;
==Mobile Communication options==&lt;br /&gt;
&lt;br /&gt;
===Generic Access Network / Unlicensed Mobile Access===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===Faster/better mobile connectivity.===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Gsm GSM]/[http://en.wikipedia.org/wiki/GPRS GPRS] is at best slow. Ideally supporting [http://en.wikipedia.org/wiki/EDGE EDGE ]- which is an evolved form of GPRS. [http://en.wikipedia.org/wiki/UMTS UMTS] - which is widespread in Europe, [http://en.wikipedia.org/wiki/HSDPA HSDPA] (asia) and any other mobile standards would be nice for faster data connectivity and coverage.&lt;br /&gt;
It is unlikely that all of these will be supported initially, but it is a goal.&lt;br /&gt;
Until that goal is reached, it is likely that some phones will be brought out for various specific markets - Europe, Asia, US.&lt;br /&gt;
&lt;br /&gt;
===CDMA EV-DO support===&lt;br /&gt;
While multiple SIM support is really arguable, a SIM (GSM) + RIM (CDMA) support would generally be a great feature.&lt;br /&gt;
EVDO is a 3G standard and it's worth to get supported.&lt;br /&gt;
&lt;br /&gt;
===Ability to use multiple SIMs/networks===&lt;br /&gt;
* External SIM sockets are widely available in China, a dual external socket would be a very good solution.&lt;br /&gt;
* [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...&lt;br /&gt;
* Some networks support multiple numbers on one SIM. Unfortunately this won't allow split networks.&lt;br /&gt;
* A second/dual GSM module would allow full use of both sims at all times.&lt;br /&gt;
* As a hack, [http://wiki.openmoko.org/wiki/Wish_List#Bluetooth_powered_Multi-SIM_support use another mobile via BT].&lt;br /&gt;
** 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.&lt;br /&gt;
&lt;br /&gt;
===PMR446/FRS Radio===&lt;br /&gt;
* Include a PMR/FRS Radio.&lt;br /&gt;
* 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).&lt;br /&gt;
&lt;br /&gt;
===DECT/GAP===&lt;br /&gt;
* Include a DECT/GAP transceiver so you can use your home and/or office PSTN line&lt;br /&gt;
&lt;br /&gt;
==Casing==&lt;br /&gt;
See also: [[Alternate Neo1973 case designs]] for a list of cases being considered for design/manufacture by the community.&lt;br /&gt;
&lt;br /&gt;
===[[Expansion Back]]===&lt;br /&gt;
* Replacement backs with additional features ranging from solar power, larger batteries, extra hardware, ...&lt;br /&gt;
&lt;br /&gt;
===Space efficient Lanyard===&lt;br /&gt;
The hole at the bottom of the phone takes a lot of space. A Kensington Security Slot could be used instead.&lt;br /&gt;
&lt;br /&gt;
=== Ruggedized version ===&lt;br /&gt;
We need something you can drop from 4 feet in to a puddle of dirty water on construction site. Sunlight readable display. The big ugly pseudo military version.&lt;br /&gt;
&lt;br /&gt;
=== Transparent ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
===[[Wishlist:Expansion Front|Expansion Front]]===&lt;br /&gt;
Replacement fronts with e.g. extra buttons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Galileo/GLONASS/GPS receiver===&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
===X10 RF Remote===&lt;br /&gt;
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.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
===RFID tag/RFID Reader===&lt;br /&gt;
* Implementation/Cooperation with: [http://www.rfidguardian.org/ RFID-Guardian]&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
===Less weight===&lt;br /&gt;
* 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 &amp;quot;user&amp;quot; may want something lighter. Take a look at the following table, that's the Neo1973 compared with other common bussiness or multimedia phones.&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|   Neo1973   ||   iPhone   ||    Sony Ericsson P990i   ||  Nokia E65&lt;br /&gt;
|- &lt;br /&gt;
|    184 g    ||    135 g   ||          150 g           ||   115 g&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Make it smaller===&lt;br /&gt;
* 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!&lt;br /&gt;
&lt;br /&gt;
===Standard 3.5mm headphone jack===&lt;br /&gt;
The Neo1973 uses a 4-conductor 2.5mm jack for stereo headphones and a microphone. 2.5mm jacks are the commonest headset format. &lt;br /&gt;
&lt;br /&gt;
Adapters to 2.5mm are of course available, but 3.5mm jacks are much more robust.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Neglecting space limitations, multiple sockets - 2.5mm and 3.5mm would be nice. Probably not practical in a phone.&lt;br /&gt;
Other expanded plugs might allow remote controls.&lt;br /&gt;
&lt;br /&gt;
Other uses might be better met using bluetooth, or USB audio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Laser Pointer===&lt;br /&gt;
Include a built in laser pointer.  Everything is better with lasers.&lt;br /&gt;
&lt;br /&gt;
===Completely free hardware===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Consider economy / inexpensive / less featured edition ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
One big suggestion in this area is a b/w lower res display instead of the big color display.&lt;br /&gt;
&lt;br /&gt;
==Related Hardware==&lt;br /&gt;
&lt;br /&gt;
These are consumer units that the Neo1973  can be considered to be in competition with, based on featureset and price point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===PSP===&lt;br /&gt;
&lt;br /&gt;
Portable Game System&lt;br /&gt;
Price: $170&lt;br /&gt;
&lt;br /&gt;
Interfaces:&lt;br /&gt;
Wifi&lt;br /&gt;
IR&lt;br /&gt;
USB (terminal device only)&lt;br /&gt;
Headset (audio out + mic in)&lt;br /&gt;
Game keys&lt;br /&gt;
Memory Stick&lt;br /&gt;
&lt;br /&gt;
Accessories:&lt;br /&gt;
GPS&lt;br /&gt;
Camera&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
Multimedia: MP3, MP4, jpg, AAC, ATRAC&lt;br /&gt;
Multimedia capability is adequate. Controls are not necessarily intuitive, given that it's a gaming unit, and not a media player, though third party and earphone jack media remote control is available. Memory is provided by removable flash (Sony Memory Stick, proprietary) up to 4Gb in size, which is plenty large enough for movies at full resolution. And the screen! My god, it's full of stars! The PSP screen is pretty much the best screen going, both  in terms of size and clarity, unless the iPhone has done better. Unlike the iPhone and the Neo1973, no touchscreen. UMD is irrelevant to this discussion.&lt;br /&gt;
&lt;br /&gt;
Networking:&lt;br /&gt;
TCP/IP over Wifi. Applications include network firmware update, RSS/Podcast downloading and streaming, internet video viewing using Sony's Location Free Base Station (ala Slingbox),  VoIP, and a web browser.&lt;br /&gt;
&lt;br /&gt;
Flaws:&lt;br /&gt;
No keyboard, and no keyboard support, neither infrared nor USB. And the text entry UI relies on, ahem, cellphone styled number keying. Too much Sony propriety.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sony Mylo===&lt;br /&gt;
&lt;br /&gt;
Personal portable communicator&lt;br /&gt;
$300&lt;br /&gt;
&lt;br /&gt;
Interfaces:&lt;br /&gt;
Qwerty keyboard&lt;br /&gt;
Game style function buttons&lt;br /&gt;
Wifi&lt;br /&gt;
USB&lt;br /&gt;
headset+mic&lt;br /&gt;
Memory Stick&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;br /&gt;
Multimedia: MP3, MP4, jpg, AAC, ATRAC&lt;br /&gt;
Network: Skype VOIP, Yahoo, Google, and Skype IM.&lt;br /&gt;
&lt;br /&gt;
===Palm TX===&lt;br /&gt;
&lt;br /&gt;
PDA&lt;br /&gt;
$300&lt;br /&gt;
&lt;br /&gt;
Interfaces:&lt;br /&gt;
Stylus&lt;br /&gt;
SD Card&lt;br /&gt;
Wifi&lt;br /&gt;
Bluetooth&lt;br /&gt;
Serial port&lt;br /&gt;
IR&lt;br /&gt;
Optional keyboard&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
Multimedia: jpg, mp3, mp4&lt;br /&gt;
Network: Wifi, Bluetooth. Wide range of third party TCP/IP apps available&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[iPhone]]===&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware ideas| ]]&lt;br /&gt;
[[Category:User]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-23T21:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Signal Conditioning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4590 Max1464]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (calc needed)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (calc needed)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Variometer</id>
		<title>Variometer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Variometer"/>
				<updated>2007-07-23T21:25:44Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: /* Signal Conditioning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
===Variometer===&lt;br /&gt;
The variometer signal is simply the derivative of the barometer signal. It gives a much more accurate vertical speed signal than is possible with GPS. It would probably be best to filter and differentiate the analog pressure signal and then digitize. This kind of measurement is used by the flee flying community (hanggliding, paragliding, ballooning). A device that allows teams of pilots to share position and speed (with accurate vertical speed) data would be lots of fun.&lt;br /&gt;
[http://en.wikipedia.org/wiki/Variometer Variometer Reference]&lt;br /&gt;
&lt;br /&gt;
====Hardware====&lt;br /&gt;
&lt;br /&gt;
References to applicable transducers:&lt;br /&gt;
*[http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MPX4100 Freescale MPX4100 (was Motorola)]&lt;br /&gt;
&lt;br /&gt;
====Signal Conditioning====&lt;br /&gt;
&lt;br /&gt;
The absolute pressure signal needs to be:&lt;br /&gt;
#Differentiated&lt;br /&gt;
#Filtered&lt;br /&gt;
&lt;br /&gt;
*Operational amplifiers in the following configuration:&lt;br /&gt;
&lt;br /&gt;
See the signal conditioning example in this [http://www.freescale.com/files/sensors/doc/app_note/AN1326.pdf Application Note]&amp;lt;br \&amp;gt;&lt;br /&gt;
It might be best to use a single chip solution if we can find the right fit e.g.: [http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3482 Max1463]&lt;br /&gt;
&lt;br /&gt;
====A/D====&lt;br /&gt;
We would need two A/D channels:&lt;br /&gt;
#Absolute Pressure - 12 bit minimum (calc needed)&lt;br /&gt;
#Differential Pressure - 10 bit minimum (calc needed)&lt;br /&gt;
&lt;br /&gt;
[http://www.freescale.com/files/sensors/doc/app_note/AN1100.pdf Extending 8 bit sampling to a usable range for pressure sensing]&lt;br /&gt;
&lt;br /&gt;
====Driver Code====&lt;br /&gt;
The driver code samples the input channels and converts the input values from pressure to altitude:&lt;br /&gt;
&lt;br /&gt;
The relationship between static pressure and pressure altitude is defined in terms of the properties of the International Standard Atmosphere. Up to 36,090 ft this can be expressed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
z =\left (1-\left(\frac{P_{ind}}{101.325}\right)^{0.190263} \right ) \times \frac{87.828}{0.00198122}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
*z = pressure altitude (meter)&lt;br /&gt;
*&amp;lt;math&amp;gt;P_{ind}&amp;lt;/math&amp;gt; = static pressure (kPa)&lt;br /&gt;
&lt;br /&gt;
These values are provided to listeners in multiple applications.&lt;br /&gt;
The sample rate should be application adjustable to conserve power.&lt;br /&gt;
&lt;br /&gt;
====Application code====&lt;br /&gt;
Applications can use the altitude data or combine the data with GPS and accelerometer data.&lt;br /&gt;
Commonly Kalman filter/observer techniques are used to combine data from multiple sensor types into a robust(with respect to sensor noise), high accuracy estimate of position and speed in 3 axis.&lt;br /&gt;
&lt;br /&gt;
'''References:'''&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/Levy1997/index.html The Kalman Filter: Navigation's Integration Workhorse]&lt;br /&gt;
*[http://www.cs.unc.edu/~welch/kalman/ Kalman Filter Portal from the University of North Carolina at Chapel Hill]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Kalman_filter Kalman Filter article on Wikipedia]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Variometer Code=====&lt;br /&gt;
Combine measurements as described above.&lt;br /&gt;
Apply knowledge about the aircraft dynamics to increase accuracy:&lt;br /&gt;
*Total Energy compensation&lt;br /&gt;
*Relative Netto Compensation - use accelerometer data to sense when glider is turning in a thermal&lt;br /&gt;
&lt;br /&gt;
'''User Interface'''&lt;br /&gt;
&lt;br /&gt;
*Display speed data in ergonomic manner.&lt;br /&gt;
*Display speed for pilots in group.&lt;br /&gt;
*Visual and audible guidance to pilot with best climb rate (given reasonable proximity)&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_San_Diego</id>
		<title>Openmoko Local Groups: San Diego</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_San_Diego"/>
				<updated>2007-07-22T21:40:39Z</updated>
		
		<summary type="html">&lt;p&gt;Johan: SD user group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please add your contact info here:&lt;br /&gt;
&lt;br /&gt;
* Urivan Flores (saaib_at_ciberlinux.net)&lt;br /&gt;
* Brian Churchwell (bchurchwell_at_hotmail.com)&lt;br /&gt;
* [[User:Johan|Johan Prinsloo]]  (johan_ at _ecohowl dot com)&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Johan</name></author>	</entry>

	</feed>