Nell/DemoScript
Demo script, "week 1"
We see the outside of a book. When you touch the cover, the book opens. There are "staves" (for drawing letters) on the top half of the left hand page. "Nell" is in the bottom right corner of the right hand page. If you draw a letter with your finger inside the stave (in upper or lower case; printed, not cursive), it gets recognized and printed immediately as text in the right hand page, and spoken aloud by Nell.
Nell writes her own text on to the right hand page, saying "Hello! It is a pleasure to meet you!". She speaks the reply as well as writing it.
After this, Nell will continue printing and speaking any letters that you write on the left hand side of the page. The book is in "attract mode" -- you also get lights/sound rewards for initially touching the left hand page, and for fingerpainting. But it guides you toward writing letters; eventually the 'attract' effects go away and the raven flies down into the right-hand page and speaks to you, telling you that its name is RAVEN and asking you if you can spell that word.)
When you draw an "R", something special happens -- the drawing becomes a Raven (in the style of drawastickman), and Nell says "You drew an R! You are quick to learn, and very good with letters. R is for RAVEN! The RAVEN is RUNNING on the RED RUG!" while these things happen in animation. It is very cute.
Demo script, draft 1
1) First thing seen is a login screen, with pictures of all the avatars of the users of the machine. The kid, plus their siblings, parents, and alter-egos. We click on the 'new' button.
We then see a randomly generated avatar, in their "closet". You can swap out features and colors to make it look like you. (We don't ask you to type the name of your avatar yet, because we don't want to presume typing and literacy ability yet, but we could ask you to speak a name.)
When you exit the "closet" and achievement message pops up: you've customized your avatar! You might want to...
Exiting the closet also brought you to your "map". These are hex tiles with paths and "stuff". The map has a single tile, your "closet", and paths leading off in all directions but fading out. You choose a direction.
(You might also create a 'friend' who appears beside your avatar; you can switch between friends and maybe there are different tiles available. You might also add a friend from somewhere else...)
2) Touching the south tile, your character moves to it and a basic literacy app opens. Another achievement pops up, congratulating you on trying the alphabet book and suggesting you try to....
This book is a simple alphabet book. There are pictures of an Apple for A, etc. When you touch the apple, it says and shows its name. You can trace the A in the name, and it shows your traced version on top of the correct letter (and an achievement bubble pops up). There are pictures of other things, one of which also begins with A. When you touch the other thing which begins with A, you move on to B (and an achievement bubble pops up). There's a task bar marked "alphabet" which is gradually filling up. (This should perhaps be a shorter tinkerbook-style lesson, that you can actually finish in the brief demo.)
You back out of the literacy app, and you're back on the map. Your avatar suggests continuing through the new alphabet-ville tile to explore a newly available unexplored tile. You touch there and..
3) You're in "Castle TurtleArt". Your avatar suggests trying to draw a square. When you assemble the tiles to accomplish this, an achievement bubble pops up, and you're given another suggested task. After a few of these, you back and and find yourself on your map again.
4) This time you try going northeast. A sugar app opens. Southwest: wikipedia. Southeast: a web browser. Then you drag and rearrange your tiles to put wikipedia and the web browser near your home. You check out your stats, change your clothes, and check the list of new things to do. You can also flick to a journal to see the things you've worked on today.
Implementation plan
Oct 1-14
Bring up Firefox (Mobile?)
cjb: https://nightly.mozilla.org/ has nightly builds of the desktop, Mobile-Android and Mobile-Linux (fennec) clients. The Fennec client for i686 works on my desktop at home, but the ARM download segfaults immediately on XO-1.75, because (unlike the i686 version) it's linked against maemo/libhildon.
I first tried building on koji2, since the linking step needs about 2G RAM, but building armv7 binaries on an armv5 host isn't supported -- for example, configure will try to run conftest binaries it generates, and they'll fail with SIGILL.
Then I tried cross-compiling, but ran into a bunch of cases where system libraries were being linked to instead of host libraries. I don't think cross-compiling Firefox is well tested/supported.
Then I moved to native compiling on an XO, using 3G swap on a USB stick. The build takes several hours, but it eventually worked. Here is my mozconfig file:
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-arm ac_add_options --enable-application=browser #ac_add_options --enable-application=mobile ac_add_options --disable-crashreporter ac_add_options --disable-necko-wifi ac_add_options --disable-tests # You'd think defining the autoconf macros or the CFLAGS would work, but there are occasions # where gcc's invoked outside of a normal shell profile. ac_add_options --with-arch=armv7-a ac_add_options --with-fpu=vfpv3-d16 ac_add_options --with-float-abi=softfp export CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" export CXXFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp" ac_add_options --with-arm-kuser
I also needed this ugly patch, which I haven't fully investigated. Without it, there is an error linking to an undefined arm_private::neon_enabled. Our CPU does not support NEON.
diff -r d0700bfeda63 xpcom/glue/arm.h --- a/xpcom/glue/arm.h Mon Oct 03 18:08:17 2011 -0700 +++ b/xpcom/glue/arm.h Wed Oct 05 12:53:53 2011 +0000 @@ -170,7 +170,8 @@ inline bool supports_neon() { return true; } #elif defined(MOZILLA_MAY_SUPPORT_NEON) \ && defined(MOZILLA_ARM_HAVE_CPUID_DETECTION) - inline bool supports_neon() { return arm_private::neon_enabled; } +// inline bool supports_neon() { return arm_private::neon_enabled; } + inline bool supports_neon() { return false; } #else inline bool supports_neon() { return false; } #endif
After applying these, make -f client.mk produces a build, and make package in objdir produces a tarball of it. These are at:
http://dev.laptop.org/~cjb/firefox/fennec-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2
http://dev.laptop.org/~cjb/firefox/firefox-10.0a1.en-US.linux-gnueabi-armv7l.tar.bz2
Benchmark Firefox, gfx and js performance
cjb: Early sign is that Fennec is slower than Firefox, rendering HTML is pretty snappy, but JavaScript + GUI is very slow. Needs investigation as to where we're spending the CPU time.
Basic tile layout app in three.js
Oct 17-28
Did "Ice Cream Sandwich" come out? If so, consider rebasing
Firefox EGL integration
cjb:
Basic Android NDK GL app for benchmarking
cscott:
Storyboarding, simple app example, cloakroom?
cscott:
Oct 31 - Nov 4
Avatar customization app
cjb:
Zoom/container UI
cscott:
Nell + speech bubbles
cscott:
DEMO 1: 1-app demo: Fri 4 Nov
Compare Firefox EGL + three.js perf to basic C-level GL app
Nov 7-11
Hook up accelerometer to Device Orientation API
cjb:
Music demo -- record samples
cjb:
Nov 14-18
App repository/Open Web Apps
cjb: We want to use Firefox's Open Web Apps infrastructure as an app repository. First step is to work out how it works, where it stores files, what formats it uses, whether there are any quotas or restrictions. Then look at modifying the interface code (currently a toolbar on the bottom of the screen) so that we can use our own UI on top of that backend -- start off by just displaying a list of installed apps in a simple <ul> layout.