App Inventor apps on the Android Market

I know people are putting their App Inventor apps on the Android Market, but I haven’t seen a list out there. In order to start one, I did some minimal research. I’ve listed three I found here. If you know of others, please comment and we’ll build up a list.

The 1 Touch “Love You” app has over 100,000 downloads and 2,000 ratings at an average of 4 stars. It lets you send “love you” like SMS messages with a single click. The TextbooksRUs app lets you scan texts to check their price. Big Daddy Slingo is an Android version of a popular game.

App Inventor Panel at O’Reilly OSCON conference

OSCON 2011II’ll be speaking in an OSCON session on App Inventor this Thursday at 4:10 pm in Portland 252. My co-speakers are Debby Wallach of the Google App Inventor team, and professors Eni Mustafaraj of Wellesley, and Ralph Morelli from Trinity.

OSCON is the O’Reilly Open Source Convention.

I’ll also be interviewed Thursday by O’Reilly at 11:15, location to be determined. You can check out the interview on O’Reilly’s stream at radar.oreilly.com.

I’ll be around from Wednesday afternoon through Friday morning and would love to meet App Inventor enthusiasts or give demos to those interested. Shoot me an email at wolber at usfca dot edu, or comment here?

Android Games Built by Middle School Students at BAYCAT SF


App Inventor was used in the summer program BAYCAT–The Bay View- Hunters Point Center for Arts and Technology in San Francisco.  In just a few weeks, these students learned the basics of app building and created a game. One is a fashion app where you can drag clothes into a virtual closet. Another lets you grab for dollars before the police officer snatches you. Another lets you skateboard while boulders fall from the sky, while two others are fun soccer games. The students learned some complex programming, with if-else blocks, timer events, and the like, and they also had to work with Photoshop and other tools to build their user interfaces. Impressive work!

Congrats to the students and to their wonderful volunteer instructor, USF grad student Roderick Lisam.

Google: The Time is Ripe to Flood Schools with Android Devices

I just gave an App Inventor workshop at the CS4HS seminar at the University of Illinois in Chicago– 30 high school teachers from the Chicago area were hosted by UIC professor Dale Reed and sponsored by Google.

One thing I learned is that the kids of Chicago are in good hands, at least the ones lucky enough to learn from these  teachers.

The other thing I learned is that App Inventor is striking a chord with high school teachers. Many have been teaching Java, at least for Advance Placement (AP) courses and they know how few students thrive with that as a beginning language. They see how visual blocks languages like App Inventor and Scratch can work for a much larger subset of the population. They also see the potential for App Inventor to leverage the students’ intense fascination with the tiny computing devices they carry around  in their pockets.

The BIG QUESTION, however, the first one I hear from every high school and university teacher, is

WHERE CAN I GET SOME PHONES?

How can I teach App Inventor if only a few of my students have Android devices?

One answer is that you can develop apps without a phone, using the Android emulator that comes with the free App Inventor software.  If you can scrape together a few phones for your class, or leverage those that your students bring, the emulator-based solution is workable and one I encourage teachers to take.

But there is a much better solution, one with much broader implications, but one which would require some great vision by the folks at Google and perhaps a T-Mobile.  The solution involves giving every student who signs up for  a high school Computing 1 course a device –phone or tablet.  Let them live with it and program it as part of their life. The number of citizens with the ability to create technology would explode explode! The students will learn what software is, they’ll learn problem-solving and logic, and they’ll learn entrepreneurship– how to formulate ideas and create things of use to society.

We’re not talking incremental change, but historical– and at a time when everyone from the Labor Bureau to the White House has identified a need for more programming-savvy citizens.

Why Google? Couldn’t it be some other deep-pocketed organization?

Yes, but right at this moment in history Google has a motive that can make it work. This scheme can win them the multi-billion dollar battle between Android and the iPhone. App Inventor only works for Android and there’s not yet an iPhone equivalent that is even close. This will change, soon, but App Inventor has the momentum, and so does Android in terms of casual “end-user” programming of mobile devices. Partner with a service-provider like T-Mobile, give the high school students a free device and a semester or two of free service, and suddenly you’ve got thousands of young new clients buying Android devices and service for the next 80 years.

USF students create App-Inventor-Compatible Yelp API


App Inventor provides a component, TinyWebDB, which can be used to talk to web data sources (APIs) that follow a specific protocol. You can use APIs bring in book data from Amazon, stock information from Yahoo Finance, and data from blogs (see appinventorapi.com for samples) There’s also a new Web component in App Inventor that provides another method for talking to APIs.

Last semester, Jackie Tong, a University of San Francisco student taking our App Inventor course, created an”App-Inventor-Compatible” API to Yelp’s recommendation data. The API gives access to simple search on Yelp.

You can access Jackie’s API directly from your App Inventor apps. Just add a TinyWebDB component and set the sourceURL to cs1072spr11.appspot.com.

 

You can also download the source code to modify it and add new Yelp commands. She wrote the code in Python and using App Engine, and she’s been kind enough to share the code at:

http://www.cs.usfca.edu/~wolber/appinventor/yelpTinyWebDBJackie.zip

Jackie was a beginning computer science student. She is exceptional, but her work shows that even beginners can create APIs using Python and App Engine, and thus, with App Inventor, can create web enabled Android apps.

Articles about App Inventor and Do-it-yourself Programming

Here’s a collection of articles about App Inventor and where it fits in the world. Know of others? Please add to comments.

Recent Articles
Howard Wen, The Ascendance of App Inventor: David Wolber on why App Inventor isn’t just for novices, O’Reilly Rader Interview.
Hal Abelson, Mobile Ramblings, Educase
Clive Thompson, Coding for the Masses, Wired Magazine.
Igor Lansorena, Man Proposes using Harry Potter app ceated with app Inventor, EITB news
Hal Abelson, Hal Abelson Q&A, Code Quarterly (see near bottom for discussion of App Inventor)

Articles Near time of App Inventor Launch (July 2010)

Steve Lohr, Google’s Do it Yourself App creation Software, NY Times.
Jason Kincaid, It’s Alive! Taking Android’s App Inventor For A Spin Tech Crunch
Mike Loukides, App Inventor and the Culture Wars, O’Reilly Radar.

Article not directly about App Inventor but related

Clay Shirky, Situated Software (discusses situational software that has utility for a single person or group).

App Inventor has a new Component: the WEB

The App Inventor team just released a new component, and its a whopper: the WEB. Before this component, you had to create and deploy server code, using Python, Java, etc,  in order for your app to get data from the web. Now you can call APIs directly from your App Inventor blocks!  Suddenly, App Inventor programmers have a lot more power to create web-enabled apps that mash data from various sources.

As a first example, check out this App Inventor app that accesses stock quotes from the Yahoo Finance API:

stock quote app in emulator

Designer view for stock quote app

The blocks for stock quote app (click to enlarge)

The app just sets the Web component’s Url property to the base URL of Yahoo Finance, then adds on the stock symbol input by the user in the StockSymbolTextBox.

The call to Web1.Get then invokes the web request. The event Web1.GotText is triggered when the data arrives back from the Yahoo Finance. The data, in this case the stock info in comma-separated form, is returned in the argument responseContent. The app uses the list function listfromcsvrow to get the csv values into list form, then grabs the second item which is the stock’s current value.

The Yahoo Finance API is especially easy to use because it doesn’t require any password or key. You can get different information out, such as the one-day change in the stock, and you can send different parameters in the URL to ask for different data. Check out this site for a nice spec of the Yahoo Finance API.

There are lots of APIs out there, some of which have simple interfaces like Yahoo Finance, and some which require more work. I’ll be exploring more of these in future posts.

This app is a simple one, but if you want to download it to your phone, just scan the following QR code:

Who’s Teaching App Inventor

A map of App Inventor teachers

I’ve updated the App Inventor teacher map with a number of folks who contacted me and I did a bit of categorizing. Though the map is far from complete, we have courses from middle school, high school, high school summer and after-school programs, university cs courses, and a Health Sciences course. Here’s a quick run-down, see the map for more details on each course/teacher.

Middle School

Chris Craft, Cross Roads Middle School, Columbia, SC

High School Programs

Lashell Hatley, Youth Lab, Washington D.C.
Elisabeth Soep, Youth Radio Mobile Action Lab, Oakland CA
Jeff Gray, University of Alabama Summer Computer Camp
Kris Roy, Valdosta State University Summer Camp, Valdosta, GA
Anu Tewary, Technovation Challenge, CA and NY
Steve Keinath, Jackson Area Career Center, Jackson, MI

High School Courses

Stacey Roshan, Bullis School, Potomac, MD
Jeremy Scott, George Heriot’s School, Edinburgh, Scotland.
Peter Beens, Beamsville, Ontario, Canada
Keith Jiang, Taiwan

University CS Courses

Ellen Spertus, Mills College
David Wolber, University of San Francisco
Ralph Morelli, Trinity College
Hal Abelson, MIT
David Jantzen, Cal Poly SLO
Ruud Greven, Saxion University of Applied Sciences, Enschede, Netherlands

University, Health Sciences
Randy Hutchison, Furman University,  Greenville, SC

 

Youth Radio’s Mobile Action Lab

Youth Radio's Mobile Action Lab

Youth Radio is an Oakland, CA organization which promotes young people’s intellectual, creative, and professional growth through education and access to media. They’ve won a MacArthur Digital Media and Learning Award and now they’re adding mobile apps to their game and and using App Inventor to make it happen.

Here’s a clip about them:

Storing Multiple Timestamps in TinyWebDB

Here are a couple of question from a reader of my appinventorapi.com blog, which focuses on app inventor apps that store/retrieve data from a web database or API. The second question specifically asks about storing multiple timestamps, e.g., if you were tracking your user’s activity or location. In general, it asks about how to store lists of data in a web database:

1. How can I check if a value is already stored in a TinywebDB ?

The only way to check for a value in the web db is to call TinyWebDB.getValue(tag). If there is no data value for the tag you send, the result in TinyWebDB.GotValue will be the empty string. You can check this by checking if the length of result is greater than 0.

2. Is it possible to store multiple arguments for one Tag at different time intervals ?(e.g.I save TAG 1, 2 and 3 right now it saves as an argument the current time of the system, then a few minutes or hours later I Save TAG 1,2 and 3 again and it puts a new a timestamp without overwriting the previous stored valued is this possible ? so at the end of the day if I check the Database I can have something like this Tag 1 (Time1, Time2, Time3, etc) for each stored value

Tinywebdb only stores one value for each tag. You can store a list as a value, however. So you could store different timestamps in a list, and store the entire list as a value of some tag. To implement this scheme, you need to load the list into your app using GetValue. Then call add item to list to add a new item (time stamp) to the list, then remember to call TinyWebDB.StoreValue to put the updated list back into the database.

For examples of storing lists of data using tinywebdb, check out the MakeQuiz/TakeQuiz sample chapter (ch 10), as well as the Database chapter (ch 22)