Code Monkey home page Code Monkey logo

appinventor-sources's Introduction

Welcome to MIT App Inventor

Introduction

Learn more about MIT App Inventor.

This code is designed to be run in Google's App Engine. MIT runs a public instance that all are welcome to use to build App Inventor Applications. You do not need to compile or use this code if you wish to build MIT App Inventor applications.

We provide this code for reference and for experienced people who wish to operate their own App Inventor instance and/or contribute to the project.

This code is tested and known to work with Java 8.

Contributors

The best way to go about integrating changes in App Inventor is to start a conversation in the Open Source forum about whatever you intend to change or add.

We use very brief and informal design documents with descriptions of the proposed changes and screenshots of how the functionality would look like and behave, in order to gather as much feedback from the community, as early as possible. We generally use shared Google docs for this (with permissions to add comments), but any format that is accessible from a web browser (and allows comments) would do.

If you have skipped this step and have gone ahead and made your changes already, feel free to open a pull request, but don't be too surprised if we ask you to go back and document it in a design document. Remember that the main goal of doing this is to gather as much feedback, as early as possible. We will also possibly ask you to put an instance with your changes on appspot, and provide a modified Companion app (if that applies) so that reviewers can play with the changes before looking at the source.

Check out our open source site to find a lot more information about the project and how to contribute to it.

Setup Instructions (Vagrant)

The easiest way to get a development environment up and running is to use the provided Vagrantfile. Install Vagrant and open a terminal in the root directory of this repository. Run the following commands

vagrant plugin install vagrant-vbguest  # optionally for virtualbox users, and only once
vagrant up                              # initializes the VM

It may take a few minutes for Vagrant to initialize as it will pull down a virtual machine image from the Internet and configure it with all of the App Inventor dependencies. Subsequent start-ups will be faster. Next, enter the virtual machine by running:

vagrant ssh

This should open up a terminal within the virtual machine in the directory /vagrant/appinventor. This directory is the same as the appinventor directory in this repository, shared between your host machine and the virtual machine. Any changes made on one side will be visible in the other. This allows you to edit files on your host machine with your preferred editor, while keeping the build environment relegated to the virtual machine.

Before you can build App Inventor, you will need to also obtain the dependencies as described below using git submodule command:

git submodule update --init

Now, you are ready to build App Inventor, you may now run:

ant

and to run App Inventor:

start_appinventor

Press Ctrl+C to quit the server. Enter exit at the prompt to leave the virtual machine. To reclaim resources when you are not actively developing, you can run vagrant halt to stop the virtual machine. To completely remove the virtual machine, run vagrant destroy. If you destroy the VM, you will need to start these instructions from the top.

Note 1: For macOS users, if you are using VirtualBox and get any error while initializing the VM it may be due to security restrictions in System Preferences, consider reading this article.

Note 2: If it seems like none of the dependencies are installed in the VM, run vagrant provision.

For better performance, consider using the manual instructions.

Setup Instructions (iOS Support)

Building MIT App Inventor Companion for iOS requires an Apple Macintosh computer running macOS 12 or later with Xcode 14 or later installed. While earlier versions may work we provide no support for building on versions below the ones stated. To install on a device, you must have a valid Apple Developer account license and have added the relevant mobile provisioning profiles from the Developer portal to your Xcode organizer (see Apple's website on instructions on how to do this).

To build the MIT App Inventor companion, you will need to create a file called AICompanionApp.xcconfig in the components-ios directory that sets your development team. The easiest way to do this is to copy the AICompanionApp.xcconfig.sample file and edit it. Alternatively, create a file with the following line:

DEVELOPMENT_TEAM = ID

where ID is the development team ID shown in the Apple Developer Portal. This ID is unique to your developer account (individual or organization).

Setup Instructions (Manual)

This is a quick guide to get started with the sources. More detailed instructions can be found here, a slide show can be seen here, and all the documentation for the project is available in our site.

Dependencies

You will need a full Java JDK (version 8, OpenJDK preferred; JRE is not enough) and Python to compile and run the servers.

You will also need a copy of the Google Cloud SDK for Java and ant.

If you want to make changes to the source, you are going to need to run an automated test suite, and for that you will also need phantomjs. Have a look at the testing section for more information.

Note 1: If you are working on a 64-bit linux system, you need to install 32-bit version of: glibc(to get a 32-bit version of ld-linux.so), zlib and libstdc++.

If you are on a Debian-based distribution(Ubuntu), use:

$ sudo apt-get install libc6:i386 zlib1g:i386 libstdc++6:i386

If you are on an RPM-based distribution(Fedora), use:

$ sudo dnf install glibc.i686 zlib.i686 libstdc++.i686

Note 2: Certain Java 8 features, such as lambda expressions, are not supported on Android, so please don't use them in your changes to the source code.

Forking or cloning

Consider forking the project if you want to make changes to the sources. If you simply want to run it locally, you can simply clone it.

Forking

If you decide to fork, follow the instructions given by github. After that you can clone your own copy of the sources with:

$ git clone https://github.com/YOUR_USER_NAME/appinventor-sources.git

Make sure you change YOUR_USER_NAME to your user name.

Configuring a remote pointing to this repository is also a good idea if you are forking:

$ cd appinventor-sources
$ git remote add upstream https://github.com/mit-cml/appinventor-sources.git

Finally, you will also have to make sure that you are ignoring files that need ignoring:

$ cp sample-.gitignore .gitignore

Checkout dependencies

App Inventor uses Blockly, the web-based visual programming editor from Google, as a core part of its editor. Blockly core is made available to App Inventor as a git submodule. The first time after forking or cloning the repository, you will need to perform the following commands:

$ git submodule update --init

For developers who will be working on Blockly within the context of App Inventor, the preferred checkout procedure is to perform a git submodule init, edit the .git/config file to use the read/write SSH URL for MIT CML's Blockly fork instead of the public read-only HTTPS URL assumed by default (to support pushing changes). After changing .git/config, a git submodule update will pull the repository.

If you need to switch back to a branch that does contains the Blockly and Closure Library sources in the tree, you will need to run the command:

$ git submodule deinit --all

to clear out the submodules before switching branches. When switching back, you will need to repeat the initialization and update procedure above.

Troubleshooting common installation issues

Run this command to run a self-diagnosis of your environment. This command tries to figure out common installation issues and offers you a solution to fix them yourself. Make sure this passes all the checks before you proceed further.

Linux and macOS

./buildtools doctor

Windows

buildtools doctor

Compiling

Before compiling the code, an auth key is needed. You can create one by running the following commands:

$ cd appinventor
$ ant MakeAuthKey

Once the key is in place, type the following to compile (from the appinventor folder):

$ ant

You will see a lot of stuff in the terminal and after a few minutes (it can take from 2 to 10 minutes, depending on your machine specs) you should see a message saying something like Build Successful.

Notes on compiling for iOS

If you are compiling on a Mac and are not interested in building the companion for iOS, you must set the property skip.ios to true, for example:

ant -Dskip.ios=true

iOS builds will automatically be skipped on other operating systems.

We generally use Xcode for iOS development. Open the AppInventor.xcworkspace file to view the Xcode workspace. This workspace includes three projects:

  • SchemeKit: A Scheme implementation for iOS built on Picrin with additions to support foreign function calls to Objective-C and Swift. This also implements some basic types from App Inventor including YailList and YailDictionary.
  • AIComponentKit: App Inventor component implementations, mostly written in Swift.
  • AICompanionApp: The App Inventor companion written in Swift.

In Xcode you can run the AICompanionApp on your device by selecting the AICompanionApp target's Debug scheme and pressing the Run button.

For more information about iOS support, please see README.ios.md.

Running the Server(s)

There are two servers in App Inventor, the main server that deals with project information, and the build server that creates apk files. More detailed information can be found in the App Inventor Developer Overview document.

Running the main server

$ your-google-cloud-SDK-folder/bin/java_dev_appserver.sh --port=8888 --address=0.0.0.0 appengine/build/war/

Make sure you change your-google-cloud-SDK-folder to wherever in your hard drive you have placed the Google Cloud SDK.

Running the build server

The build server can be run from the terminal by typing:

$ cd appinventor/buildserver
$ ant RunLocalBuildServer

Note that you will only need to run the build server if you are going to build an app as an apk. You can do all the layout and programming without having the build server running, but you will need it to download the apk.

Accessing your local server

You should now be up and running; you can test this by pointing your browser to:

http://localhost:8888

Before entering or scanning the QR code in the Companion, check the box labeled "Use Legacy Connection".

Running tests

The automated tests depend on Phantomjs. Make sure you install it and add it to your path. After that, you can run all tests by typing the following in a terminal window:

$ ant tests

Building Release Code

Release builds with optimizations turned on for the web components of the system can be done by passing -Drelease=true to ant, e.g.:

ant -Drelease=true noplay

The release configuration sets the following additional options:

  • Blockly Editor is compiled with SIMPLE optimizations (instead of RAW)
  • App Engine YaClient module is compiled without <collapse-all-properties/> to create per-language/browser builds
  • App Engine YaClient module is compiled with optimization tuned to 9 and with 8 threads

Hot-reloading GWT code with 'Super Dev Mode'

  1. Run ant devmode
  2. Run the main server.
  3. Open http://localhost:9876 (GWT CodeServer) and drag the two bookmarklets (Dev Mode On & Off) to the bookmarks bar.
  4. Open http://localhost:8888 (App Engine server)
  5. To see changes "live":
    1. Save your changes in file.
    2. Click on the "Dev Mode On" bookmarklet.
    3. A popup will be shown with a button to compile ode module.
    4. Press that button to compile. (That button is actually a bookmarklet. So you can drag this button to the bookmarks bar as well. This will come handy for subsequent compilations)
    5. After that, GWT CodeServer will compile the module incrementally.
    6. Refresh the page and that's it! The changes are live.

Logs can be found at http://localhost:9876/log/ode and SourceMaps at http://localhost:9876/sourcemaps/ode

Need Help?

Join our community.

appinventor-sources's People

Contributors

afmckinney avatar barreeeiroo avatar bartmathijssen avatar beksomega avatar conorshipp avatar e-hon avatar ellelili2025 avatar ewpatton avatar fturbak avatar halatmit avatar jisqyv avatar josmas avatar karuto avatar kgarner7 avatar kkashi01 avatar klaverty avatar lizlooney avatar mark-friedman avatar marksherman avatar nicholec avatar pavi2410 avatar preetvadaliya avatar ram8647 avatar robinbattle avatar sharonperl avatar susanratilane avatar weihuali0509 avatar wolberd avatar wxbit avatar ylwu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

appinventor-sources's Issues

SoundRecorder component issue causing app to crash

There's currently an issue with the SoundRecorder component which causes the app to crash. The issue happens if the Microphone is already in use when the SoundRecorder.Start block is executed

To demostrate this add 2 SoundRecorder components to the same app start both recorder and the app will crash.

Possible Solution

- Add code to check the mic is not in use when the SoundRecorder.Start block is executed

Project that signals error when trying to delete it

See thread for the project source:
https://groups.google.com/forum/#!category-topic/mitappinventortest/MzUuDPUDpD8

Load this project. Then go to the projects page, mark it, and press delete. This produces an error (FF or Chrome). I don't see anything shown in the JS console. If you then press delete a second time, the project is deleted.

Notes
Dec 1
I tried to delete a project by ticking the box before the project and clicking on the delete project button.
When i clicked the delete project button, the page gives an error message. The second time i tried i didn't get the error message.

July 1
This error still exists in chrome (didn't try FF). Pressing Delete generates the error:

notes = Browser: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit?/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36
foundIn = nb134b
faultData = com.google.gwt.event.shared.UmbrellaException?: Exception caught: (TypeError?) : Cannot read property 'ReplMgr?' of undefined
projectId = -1

Spinner AfterPicking invoked even when no item selected

Spinner AfterPicking immediately invoked even if it has not been opened.

Steps:
Drop Spinner component onto designer
For its ElementsFromString, enter csv values such as a,b,c,d,e
Add in a label; e.g. Label1
From BlocksEditor, Select, Spinner1.AfterPicking handler
In there, set Label1.Text to Spinner1.Selection.

Connect the companion and you'll notice that immediately Label1.Text will be set to a

Add fontsize property to ListView

This should be simple. Look at ListView.ItemsToColoredText and include AbsoluteSizeSpan similar to ForegroundColorSpan. Set dp flag to true. Or do we really want RelativeSizeSpan?

proposal: "Initial Properties" in Designer

In the Designer view, a panel is named "Properties." Values displayed are initial values rather than current values, as they should be. Pedagogically, it is not obvious to new programmers that a program/environment must set an initial value for a variable and must also keep track of the current value. I think it would be more clear to learners if this panel was labeled "Initial Properties" in the Designer view. "Initial Values of Properties" is more correct but longer and maybe less clear for a beginner. Changing it has the downside of making tutorial materials mismatch the web interface, but I think it is worth it, especially since all tutorial materials drift into outdated-ness anyway from other changes.

Do folks want this kind of proposal opened as a github issue or as a new topic in the app-inventor-open-source-dev Google group or both?

checkbox.setChecked is deprecated

in file: BooleanPropertyEditor.java

This file defines the boolean checkbox property (such as visibility or enabled) in the designer palette.

It uses checkbox.setChecked() and checkbox.isChecked() which are deprecated.

Full file location: ./appengine/src/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java

Bad behavior on user sign out

This is an old issue that turns up now and again (intermittent).

From bug report
Hi all, I found a bad piece of user experience in the newest build of AI2, but not sure if this counts as a bug. I tried with numerous different accounts and encountered the same thing:
After I clicked "sign out" at the top right corner, the page refresh and I got redirected to a blank AI2 page, nothing was loaded besides the gray-textured background. Checked the Chrome JavaScript? console and saw this line of error:

Refused to execute script from '​http://ai2-test.appinventor.mit.edu/ode/ode.nocache.js' because its 
MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

It may be worth discussing that what should users see after they clicked "sign out." Maybe the AI homepage http://appinventor.mit.edu/? This page doesn't require user to log in to see.

newblocks: AI Companion does not update design or code changes

added 2 new buttons in the Designer window, then switching back to the Blocks window. The new blocks are shown in the Blocks window successfully. But the AI Companion app does not display the new components on the screen....

Additionally changing some logic in the Blocks window does not always update the logic on the connected device...
I used a web component and changed the Web.Url using the join block in the Blocks window, the updated url was not used but the previously defined url...

I had to stop the AI Companion manually and reconnect the Companion to be able to see the updated design and to get the updated logic...

I also get often an Error 1801: Security Error Receiving blocks from browser.

Assets are copied to the incorrect folder

When a new apk is builded, all assets of the application go to assets/ folder inside "project".apk

According to Android Developers Documentation, drawables (images) must be saved in res/drawable/ folder, which App Inventor doesn't do.

newblocks: MIT NewBlocks Companion does not like to connect anymore

MIT NewBlocks Companion doesn't like to connect anymore with my project (project name=couch_nb2)... I could successfully connect to a very simple project.

As you probably can see from the log, the backup of the project (couch_nb1) will be displayed correctly, but not the new version (couch_nb2)... I will restart from the backup of that project now...

Btw: a reset button in the Companion app would be nice (similar to the classic version).
I currently have to go to Settings - Applications - Manage applications on the device,
then select the MIT NewBlocks Companion app and click "Clear data" and "Force stop" in case there is an issue..

Taifun


[INFO] DesignToolbar: switching to existing project couch_nb1 with id 5348024557502464
[INFO] Setting currentScreen to Screen1
[INFO] ProjectEditor: got selectFileEditor for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm selectedFileEditor is src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm
[INFO] YaFormEditor: got onShow() for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm
[INFO] Ode: Setting current file editor to src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm
[INFO] Saving global settings: {"GeneralSettings":{"CurrentProjectId":"5348024557502464"},"SimpleSettings":{}}
[INFO] Adding blocks editor as a listener for Screen1
[INFO] AssetManager: Loading assets for 5348024557502464
[INFO] initBlocksArea: killed running timer.
[INFO] BlocklyPanel: Got initBlocksArea call for 5348024557502464_Screen1
[INFO] Restoring 20 previous blockly components for form 5348024557502464_Screen1
[INFO] Replaying 0 ops waiting in queue
[INFO] Loading blocks area content for 5348024557502464_Screen1
[INFO] Adding asset fileId = assets/icon.png
[INFO] Got blocks area changed for 5348024557502464_Screen1
[INFO] Setting currentScreen to Screen1
[INFO] ProjectEditor: got selectFileEditor for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.bky selectedFileEditor is src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm
[INFO] YaFormEditor: got onHide() for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.scm
[INFO] Setting current file editor to null
[INFO] YaBlocksEditor: got onShow() for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.bky
[INFO] Ode: Setting current file editor to src/appinventor/ai_taifunbaer/couch_nb1/Screen1.bky
[INFO] Saving global settings: {"GeneralSettings":{"CurrentProjectId":"5348024557502464"},"SimpleSettings":{}}
[INFO] showDifferentForm changing from 5348024557502464_Screen1 to 5348024557502464_Screen1
[INFO] Starting timer for 5348024557502464_Screen1
[INFO] Got blocks area changed for 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] AssetManager: formName = 5348024557502464_Screen1
[INFO] ViewerBox: switching the content in the viewer box
[INFO] YaProjectEditor: got onUnload
[INFO] ProjectEditor: got onUnload for project 5348024557502464
[INFO] YaProjectEditor: got onHide
[INFO] AssetList: switching projects from 5348024557502464 to 0
[INFO] AssetList: refreshing for project 0
[INFO] YaBlocksEditor: got onHide() for src/appinventor/ai_taifunbaer/couch_nb1/Screen1.bky
[INFO] Setting current file editor to null
[INFO] BlocklyEditor: prepared for reinit for form 5348024557502464_Screen1
[INFO] ProjectEditor: got onLoad for project 6473924464345088
[INFO] YaProjectEditor got onShow() for project 6473924464345088
[INFO] AssetList: switching projects from 0 to 6473924464345088
[INFO] AssetList: refreshing for project 6473924464345088
[INFO] DesignToolbar: switching to existing project couch_nb2 with id 6473924464345088
[INFO] Setting currentScreen to Screen1
[INFO] ProjectEditor: got selectFileEditor for src/appinventor/ai_taifunbaer/couch_nb2/Screen1.bky selectedFileEditor is src/appinventor/ai_taifunbaer/couch_nb2/Screen1.bky
[INFO] YaBlocksEditor: got onShow() for src/appinventor/ai_taifunbaer/couch_nb2/Screen1.bky
[INFO] Ode: Setting current file editor to src/appinventor/ai_taifunbaer/couch_nb2/Screen1.bky
[INFO] Saving global settings: {"GeneralSettings":{"CurrentProjectId":"6473924464345088"},"SimpleSettings":{}}
[INFO] showDifferentForm changing from 6473924464345088_Screen1 to 6473924464345088_Screen1
[INFO] timerForm changed, killing running timer.
[INFO] Starting timer for 6473924464345088_Screen1
[INFO] Got blocks area changed for 6473924464345088_Screen1
[INFO] AssetManager: Loading assets for 6473924464345088
[INFO] initBlocksArea: killed running timer.
[INFO] BlocklyPanel: Got initBlocksArea call for 6473924464345088_Screen1
[INFO] Restoring 24 previous blockly components for form 6473924464345088_Screen1
[INFO] Replaying 0 ops waiting in queue
[INFO] Loading blocks area content for 6473924464345088_Screen1
[INFO] Adding asset fileId = assets/icon.png
[INFO] Got blocks area changed for 6473924464345088_Screen1
[INFO] Starting timer for 6473924464345088_Screen1
[INFO] Got blocks area changed for 6473924464345088_Screen1
[INFO] AssetManager: formName = 6473924464345088_Screen1

customtinyweb.zip should be updated for python27

The instructions to use Tiny Web DB are to extract the following zip archive, change the first line, and then upload it to Google App Engine with appcfg.py.

appinventor/docs/learn/reference/other/tinywebdbassets/customtinywebdb.zip

When the customtinyweb folder was uploaded to Google App Engine, the following warning message was displayed:

WARNING: This application is using the Python 2.5 runtime, which is deprecated! It should be updated to the Python 2.7 runtime as soon as possible, which offers performance improvements and many new features. Learn how simple it is to migrate your application to Python 2.7 at https://developers.google.com/appengine/docs/python/python25/migrate27.

I believe that the app.yaml file needs only minor modifications to eliminate this warning message.

Once this issue is fixed, customtinywebdb.zip should also be updated at

http://beta.appinventor.mit.edu/learn/reference/other/tinywebdbassets/customtinywebdb.zip

Opening the Blocks Editor results in Java IOException

I downloaded the latest appinventor source code, built the code with ant 1.8.2 and ran the code using the Google App Engine 1.7.6 SDK. When clicking the "Open the Blocks Editor" button on the main page, the AppInventorForAndroidCodeblocks.jnlp downloads fine, but when launching the jnlp, I get the following exception:

java.io.IOException: Cannot find cached resource for URL: http://localhost:8888/ode2/webstartfile/v134-12-g8ab33ab_d86rk7uo6epiii2ci8yymkt1jajdg5ot3psi0tgmzq99hdwdttz8j900knmj04cw62ga03zjeacg9a0urn1l10u1w73r56k3yp9ih2qhg70cv5hxflj9uhj3cjaq6pc2ng3swu4gnv/BlocksEditor.jar
at com.sun.deploy.cache.Cache.getCachedResourceFilePath(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getCachedResourceFilePath(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.getSignedJNLPBits(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.getSignedJNLPFile(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedLaunchDescHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedLaunchDesc(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedLaunchDesc(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:724)

newblocks: App Inventor classic projects are currently not compatible with App Inventor newblocks

I uploaded an old project from App Inventor classic to save some time to not have to redo the design and just to redo the blocks... Trying to package the project results in Server error: could not save one or more files. Please try again later!

Packaging a very simple project created with App Inventor newblocks (e.g. just 1 button) works fine. Probably this error occurs only after uploading a project from App Inventor classic?

I just tried it again with an empty project (only Screen1 without other components) from App Inventor classic: same error, which means, App Inventor classic projects are currently not compatible with App Inventor newblocks


debug info:
Clear
[INFO] AssetManager: formName = 5101733952880640_Screen1
[INFO] AssetManager: formName = 5101733952880640_Screen1
[INFO] AssetManager: formName = 5101733952880640_Screen1
[ERROR] Got exception: 500 The call failed on the server; see server log for details


server log:
INFO: Appstats available: /appstats/details?time=1368290004128
11.05.2013 10:33:24 com.google.apphosting.utils.jetty.AppEngineAuthentication$Ap
pEngineAuthenticator authenticate
INFO: Got /favicon.ico but no one was logged in, redirecting.
11.05.2013 10:33:24 com.google.appengine.tools.appstats.AppstatsFilter doFilter
INFO: Appstats available: /appstats/details?time=1368290004491
11.05.2013 10:33:24 com.google.appinventor.server.IdMap get
INFO: IdMap.get called for [email protected] but no valid map exists.
11.05.2013 10:33:25 com.google.appengine.tools.appstats.AppstatsFilter doFilter
INFO: Appstats available: /appstats/details?time=1368290004970
//OK['T6UcJAh',[],0,7]
11.05.2013 10:33:30 com.google.appengine.api.datastore.dev.LocalDatastoreService
$PersistDatastore persist
INFO: Time to persist datastore: 63 ms
11.05.2013 10:34:00 com.google.appinventor.server.IdMap get
INFO: IdMap.get called for [email protected] but no valid map exists.
11.05.2013 10:34:00 com.google.appengine.tools.development.ApiProxyLocalImpl log

SCHWERWIEGEND: javax.servlet.ServletContext log: Exception while dispatching inc
oming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstr
act long com.google.appinventor.shared.rpc.project.ProjectService.save(java.util
.List)' threw an unexpected exception: java.lang.IllegalStateException
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:
389)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:5
79)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(Remot
eServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(Remot
eServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(Ab
stractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511
)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1166)
at com.google.appinventor.server.OdeAuthFilter.doMyFilter(Unknown Source
)
at com.google.appinventor.server.OdeAuthFilter.doFilter(Unknown Source)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsF
ilter.java:141)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocke
tFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilte
r(ResponseRewriterFilter.java:123)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFil
ter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(Serve
BlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(Stat
icFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at com.google.appengine.tools.development.DevAppServerServersFilter.doDi
rectRequest(DevAppServerServersFilter.java:369)
at com.google.appengine.tools.development.DevAppServerServersFilter.doDi
rectServerRequest(DevAppServerServersFilter.java:352)
at com.google.appengine.tools.development.DevAppServerServersFilter.doFi
lter(DevAppServerServersFilter.java:115)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
88)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav
a:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1
82)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7
65)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)

    at com.google.appengine.tools.development.DevAppEngineWebAppContext.hand

le(DevAppEngineWebAppContext.java:94)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
at com.google.appengine.tools.development.JettyContainerService$ApiProxy
Handler.handle(JettyContainerService.java:421)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:54
2)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnectio
n.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j
ava:582)
Caused by: java.lang.IllegalStateException
at com.google.common.base.Preconditions.checkState(Preconditions.java:13
3)
at com.google.appinventor.server.storage.ObjectifyStorageIo$31.run(Unkno
wn Source)
at com.google.appinventor.server.storage.ObjectifyStorageIo.runJobWithRe
tries(Unknown Source)
at com.google.appinventor.server.storage.ObjectifyStorageIo.uploadRawFil
e(Unknown Source)
at com.google.appinventor.server.storage.ObjectifyStorageIo.uploadFile(U
nknown Source)
at com.google.appinventor.server.project.CommonProjectService.save(Unkno
wn Source)
at com.google.appinventor.server.ProjectServiceImpl.save(Unknown Source)

    at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(R

untime.java:115)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:5
61)
... 45 more

11.05.2013 10:34:00 com.google.appengine.tools.appstats.AppstatsFilter doFilter
INFO: Appstats available: /appstats/details?time=1368290040090

New math convert unit blocks

A request that has been asked a number of time is for a way to convert decimal values to hexdecimal. I have created a few maths blocks that allow Unit Conversion such as:

  • Decimal to Hexdecimal
  • Hexdecimal to Decimal
  • Decimal to Binary
  • Binary to Decimal

change the name of number->string in Kawa

IN runtime.scm we define our own version of number->string that shadows the Kawa version. We should not shadow it. That confusion caused problems for the open source group.

Slashes in picture filenames handed differently in live development vs. packaged mode

See Lyn's report on the poweruser forum at

https://groups.google.com/forum/#!topic/aipowerusers/WQQQB3d5Ty4

This is a bug, but also look at the documentation on specifying media files and see if that needs to be updated.

Taifun's comment:
see also Accessing Images and Sounds, however in the documentation is an error (this already has been reported)
this is wrong:
/sdcard/Music/Blondie/The Best of Blondie/Heart of Glass.mp3
and should be (URL encoded)
file:///mnt/sdcard/Music/Blondie/The Best of Blondie/Heart of Glass.mp3
file:///mnt/sdcard/Music/Blondie/The%20Best%20of%20Blondie/Heart%20of%20Glass.mp3

Cenceling a notifier input shoud hide the keyboard

From the forum:
https://groups.google.com/forum/#!category-topic/mitappinventortest/TTCdAVr72eM

My app uses a text box notifier to enter some text. If you enter text, the keyboard nicely hides itself as the notifier closes.

If you hit the Cancel button, however, the keyboard remains and you must manually force it to go away. Is there a way to make it go away automatically when the Cancel button of the text notifier is pressed? I could not find a way to invoke that method (I tried putting a hidden textbox on the screen and using that textbox's HideKeyboard method but that did not work).

Misplaced label and text box

User report
When you put a label above a text box, the bottom of the label's text gets hidden under the text box.

Notes
Try to reproduce this first; it might be an issue with particular phones.

Usb connection in AI2 not working

I am getting an error when starting python aiDaemon.py

below is the error:

C:\AI\appinventor-sources\appinventor\misc\emulator-support>python aiDaemon.py
File "aiDaemon.py", line 53
print "Device = %s" % device
^
SyntaxError: invalid syntax

I am running windows 7 64bit and have python 2.7.5 installed.

Any idea why this is?

Change designer selections for "visible"

They currently say "visible" and "hidden", although the actual values are true and false. Probably should change this to a checkbox, like the other boolean properties.

newblocks: deleting a web component results in error next time project will be opened

create a project with 2 buttons and 2 web components
1
then rename Web2 by Web1
2
then delete Web2 and reopen the project, you will get this error
The blocks area did not load properly. Changes to the blocks for screen 5136918324969472_Screen1 will not be saved.
In the debugging window you will get:
[ERROR] Error loading blocks for screen 5136918324969472_Screen1: : Error: "Web2_Get" is an unknown language block.

Problem with special characters

Hi, I have the same problem as this issue:

#38

Is it not working yet? The special characters like é á à ç don't appear in the notifiers

Thank you

useFront property of camera no longer works

This property relied on an undocumented feature of the android camera system, so there was a well-known risk that it may stop working someday. That day came faster than anticipated.

It appears that the feature has been removed from nearly all androids, including older ones. My guess is a google play services update was pushed out that removed it, even to old 2.3 devices.

Leaving the useFront feature may cause more confusion than anything else. In current testing I, and some others on the forums, can't find a single remaining device where it works.

What I do not know is the right way to remove it. There exist projects that use it, is there a mechanism to check projects on load to nudge the components to updated versions? I believe there is, I just don't know enough about it to complete this recommendation alone.

Build Error with AI2 Apps That Include Media

Build failed! Can not contact the BuildServer at newblocksbuildserver.appinventor.mit.edu

AI2 does not seem to be able to package apps that include media. If I remove the media file (400KB mp4), the build succeeds. If I add the file back, the build fails. I have tried multiple mp4 files of various sizes and it seems that they all cause the Package process to fail.

Thanks for any information you can provide.

r

Logout in sdk leads to server error screen

Downloaded and compiled appinventor code with 1.8.0 sdk (by changing the build.xml) and ran using the sdk. When logging out, it should redirect back to the login screen, but instead goes to /ode/userinfo and shows a server error screen.

Many property setters should use dropdowns for their inputs

There are many examples of properties that can take on specific values. For example,
screen.AlignVertical can take only the arguments: left, center, or right, and the designer provides a dropdown that has only those options. In the blocks, however, the setter takes a numeric input. The user needs to know which number corresponds to the desired value, and the implementation code must check whether the number is legal.

Instead, we could make the setter block use a dropdown for selecting the input.
Implement this system and change the component property code to make use of this.

suggestion: My Projects list with case-insensitive sort

My Projects lists your project files using a case-sensitive sort, so that all projects with upper-case first letters are listed first, followed by projects with lower-case first letters.

Once you have more than a screenful of projects, this is confusing. I don't expect to have to search all the way down for my lower-case projects (I'm fairly inconsistent as to whether I use an upper or lowercase first char.)

It would be better for My Projects to intermingle upper- and lower-case project files, using a case-insensitive sort.

Prevent AIA files from being uploaded to projects as media assets

It is possible for beginners who are trying to load a template AIA source file to upload them into an existing project as media assets. Beginners may be susceptible to this mistake if they had recently learned how to upload media assets, which is commonly a 1st or 2nd session event.

This mistake was observed during a teacher training.

I propose a feature that checks media uploads. If the user attempts to upload the AIA, refuse, and guide the user towards a web page describing how to use AIA files.

newblocks: deleting a label results in "An internal error has occurred" (UmbrellaException)

create a button and a label and these blocks:

unbenannt

Then go to the designer window and delete the label component:

Deleting this component will delete all blocks associated with it in the Blocks Editor. Are you sure you want to delete?

An internal error has occurred. Click ok for more information.

[INFO] Setting currentScreen to Screen1
[INFO] ProjectEditor: got selectFileEditor for src/appinventor/ai_taifunbaer/bug32/Screen1.scm selectedFileEditor is src/appinventor/ai_taifunbaer/bug32/Screen1.bky
[INFO] YaBlocksEditor: got onHide() for src/appinventor/ai_taifunbaer/bug32/Screen1.bky
[INFO] Setting current file editor to null
[INFO] YaFormEditor: got onShow() for src/appinventor/ai_taifunbaer/bug32/Screen1.scm
[INFO] Ode: Setting current file editor to src/appinventor/ai_taifunbaer/bug32/Screen1.scm
[INFO] Saving global settings: {"GeneralSettings":{"CurrentProjectId":"1394001"},"SimpleSettings":{}}
[INFO] Adding blocks editor as a listener for Screen1
[INFO] Got blocks area changed for 1394001_Screen1
[INFO] ProjectEditor:clearLocation: clearing Label1
[INFO] ProjectEditor:recomputeLocationPermission: False
[INFO] Got blocks area changed for 1394001_Screen1
[ERROR] com.google.gwt.event.shared.UmbrellaException: Exception caught: (TypeError)
stack: Blockly.Block.prototype.dispose@http://ai2.appinventor.mit.edu/blockly-all.js:725
Blockly.Component.remove@http://ai2.appinventor.mit.edu/blockly-all.js:1188
LD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1772
oD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2716
vE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1363
KE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
Wx@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2165
iv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2478
xv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
ww@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
OJ@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
qkb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3220
lnb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3022
anb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2766
ag@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:815
Vjb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2612
cg@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2372
ng@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
CQb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2203
cSb/XRb<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3192
Ueb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1355
Xeb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2765
Web/<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2157

fileName: http://ai2.appinventor.mit.edu/blockly-all.js
lineNumber: 725
columnNumber: 103: this.workspace is null

Unknown.AQ(Unknown Source)
Unknown.ynb(Unknown Source)
Unknown.Bnb(Unknown Source)
Unknown.anb(Unknown Source)
Unknown.ag(Unknown Source)
Unknown.Vjb(Unknown Source)
Unknown.cg(Unknown Source)
Unknown.ng(Unknown Source)
Unknown.CQb(Unknown Source)
Unknown.cSb/XRb<(Unknown Source)
Unknown.Ueb(Unknown Source)
Unknown.Xeb(Unknown Source)
Unknown.Web/<(Unknown Source)
Unknown.anonymous(Unknown Source)
Caused by com.google.gwt.core.client.JavaScriptException: (TypeError)
stack: Blockly.Block.prototype.dispose@http://ai2.appinventor.mit.edu/blockly-all.js:725
Blockly.Component.remove@http://ai2.appinventor.mit.edu/blockly-all.js:1188
LD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1772
oD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2716
vE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1363
KE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
Wx@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2165
iv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2478
xv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
ww@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
OJ@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
qkb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3220
lnb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3022
anb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2766
ag@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:815
Vjb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2612
cg@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2372
ng@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
CQb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2203
cSb/XRb<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3192
Ueb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1355
Xeb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2765
Web/<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2157

fileName: http://ai2.appinventor.mit.edu/blockly-all.js
lineNumber: 725
columnNumber: 103: this.workspace is null
    Unknown.Blockly.Block.prototype.dispose(Unknown Source)
    Unknown.Blockly.Component.remove(Unknown Source)
    Unknown.LD(Unknown Source)
    Unknown.oD(Unknown Source)
    Unknown.vE(Unknown Source)
    Unknown.KE(Unknown Source)
    Unknown.Wx(Unknown Source)
    Unknown.iv(Unknown Source)
    Unknown.xv(Unknown Source)
    Unknown.ww(Unknown Source)
    Unknown.OJ(Unknown Source)
    Unknown.qkb(Unknown Source)
    Unknown.lnb(Unknown Source)
    Unknown.anb(Unknown Source)
    Unknown.ag(Unknown Source)
    Unknown.Vjb(Unknown Source)
    Unknown.cg(Unknown Source)
    Unknown.ng(Unknown Source)
    Unknown.CQb(Unknown Source)
    Unknown.cSb/XRb<(Unknown Source)
    Unknown.Ueb(Unknown Source)
    Unknown.Xeb(Unknown Source)
    Unknown.Web/<(Unknown Source)
    Unknown.anonymous(Unknown Source)
Caused by com.google.gwt.core.client.JavaScriptException: (TypeError)
stack: Blockly.Block.prototype.dispose@http://ai2.appinventor.mit.edu/blockly-all.js:725
Blockly.Component.remove@http://ai2.appinventor.mit.edu/blockly-all.js:1188
LD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1772
oD@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2716
vE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1363
KE@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
Wx@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2165
iv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2478
xv@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
ww@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
OJ@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3217
qkb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3220
lnb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3022
anb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2766
ag@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:815
Vjb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2612
cg@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2372
ng@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3214
CQb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2203
cSb/XRb<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:3192
Ueb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:1355
Xeb@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2765
Web/<@http://ai2.appinventor.mit.edu/ode/3DF024A8CA9AE7A6F4338CD94E14A39B.cache.html:2157

fileName: http://ai2.appinventor.mit.edu/blockly-all.js
lineNumber: 725
columnNumber: 103: this.workspace is null
    Unknown.Blockly.Block.prototype.dispose(Unknown Source)
    Unknown.Blockly.Component.remove(Unknown Source)
    Unknown.LD(Unknown Source)
    Unknown.oD(Unknown Source)
    Unknown.vE(Unknown Source)
    Unknown.KE(Unknown Source)
    Unknown.Wx(Unknown Source)
    Unknown.iv(Unknown Source)
    Unknown.xv(Unknown Source)
    Unknown.ww(Unknown Source)
    Unknown.OJ(Unknown Source)
    Unknown.qkb(Unknown Source)
    Unknown.lnb(Unknown Source)
    Unknown.anb(Unknown Source)
    Unknown.ag(Unknown Source)
    Unknown.Vjb(Unknown Source)
    Unknown.cg(Unknown Source)
    Unknown.ng(Unknown Source)
    Unknown.CQb(Unknown Source)
    Unknown.cSb/XRb<(Unknown Source)
    Unknown.Ueb(Unknown Source)
    Unknown.Xeb(Unknown Source)
    Unknown.Web/<(Unknown Source)
    Unknown.anonymous(Unknown Source)

[INFO] Got blocks area changed for 1394001_Screen1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.