2014년 11월 27일 목요일

Your Testimonials


Hi All App Inventors!

As we prepare for the release of App Inventor 2, we're seeking testimonials that we can post to our website and share with press outlets.

So, we'd love to hear your stories about how App Inventor has worked for you and/or your students.

C'mon - tell us how great this thing is... ;-)

Seriously, though, these will be really useful to our outreach around App Inventor, and we very much appreciate any time you take to think about and send these to us.

With your story or comments, please also tell us how you'd like the quotes attributed, with your name, name and affiliation, or anonymously...

And you have your choice of replying here (obviously not anonymous), or to my email (below) directly.

--
I just LOVE this tool, it is AMAZING!! Now I don't have to code everything!

--
How about this one?

Here are the results of an informal comparison between Java and App Inventor for making a simple color picker as I posted it in one of my App Inventor support forums a while back:


First, I am a fan of both structured programming languages and object oriented languages. But when I compare solving a problem such as including a color picker in an app, I have to say AI has Java beat - at least if you consider the amount of programming effort required. For example: The Android SDK contains a color picker which I have seen used in apps. It is fairly simple in function, and does not provide for Alpha transparancy or shades of gray. It looks like this:
The Java code for this is as follows (I don't expect you to read or understand it, just notice it's size and complexity, while scrolling to the end...):
/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.graphics;

import android.os.Bundle;
import android.app.Dialog;
import android.content.Context;
import android.graphics.*;
import android.view.MotionEvent;
import android.view.View;

public class ColorPickerDialog extends Dialog {

    public interface OnColorChangedListener {
        void colorChanged(int color);
    }

    private OnColorChangedListener mListener;
    private int mInitialColor;

    private static class ColorPickerView extends View {
        private Paint mPaint;
        private Paint mCenterPaint;
        private final int[] mColors;
        private OnColorChangedListener mListener;

        ColorPickerView(Context c, OnColorChangedListener l, int color) {
            super(c);
            mListener = l;
            mColors = new int[] {
                0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
                0xFFFFFF00, 0xFFFF0000
            };
            Shader s = new SweepGradient(0, 0, mColors, null);

            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mPaint.setShader(s);
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeWidth(32);

            mCenterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mCenterPaint.setColor(color);
            mCenterPaint.setStrokeWidth(5);
        }

        private boolean mTrackingCenter;
        private boolean mHighlightCenter;

        @Override
        protected void onDraw(Canvas canvas) {
            float r = CENTER_X - mPaint.getStrokeWidth()*0.5f;

            canvas.translate(CENTER_X, CENTER_X);

            canvas.drawOval(new RectF(-r, -r, r, r), mPaint);
            canvas.drawCircle(0, 0, CENTER_RADIUS, mCenterPaint);

            if (mTrackingCenter) {
                int c = mCenterPaint.getColor();
                mCenterPaint.setStyle(Paint.Style.STROKE);

                if (mHighlightCenter) {
                    mCenterPaint.setAlpha(0xFF);
                } else {
                    mCenterPaint.setAlpha(0x80);
                }
                canvas.drawCircle(0, 0,
                                  CENTER_RADIUS + mCenterPaint.getStrokeWidth(),
                                  mCenterPaint);

                mCenterPaint.setStyle(Paint.Style.FILL);
                mCenterPaint.setColor(c);
            }
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            setMeasuredDimension(CENTER_X*2, CENTER_Y*2);
        }

        private static final int CENTER_X = 100;
        private static final int CENTER_Y = 100;
        private static final int CENTER_RADIUS = 32;

        private int floatToByte(float x) {
            int n = java.lang.Math.round(x);
            return n;
        }
        private int pinToByte(int n) {
            if (n < 0) {
                n = 0;
            } else if (n > 255) {
                n = 255;
            }
            return n;
        }

        private int ave(int s, int d, float p) {
            return s + java.lang.Math.round(p * (d - s));
        }

        private int interpColor(int colors[], float unit) {
            if (unit <= 0) {
                return colors[0];
            }
            if (unit >= 1) {
                return colors[colors.length - 1];
            }

            float p = unit * (colors.length - 1);
            int i = (int)p;
            p -= i;

            // now p is just the fractional part [0...1) and i is the index
            int c0 = colors[i];
            int c1 = colors[i+1];
            int a = ave(Color.alpha(c0), Color.alpha(c1), p);
            int r = ave(Color.red(c0), Color.red(c1), p);
            int g = ave(Color.green(c0), Color.green(c1), p);
            int b = ave(Color.blue(c0), Color.blue(c1), p);

            return Color.argb(a, r, g, b);
        }

        private int rotateColor(int color, float rad) {
            float deg = rad * 180 / 3.1415927f;
            int r = Color.red(color);
            int g = Color.green(color);
            int b = Color.blue(color);

            ColorMatrix cm = new ColorMatrix();
            ColorMatrix tmp = new ColorMatrix();

            cm.setRGB2YUV();
            tmp.setRotate(0, deg);
            cm.postConcat(tmp);
            tmp.setYUV2RGB();
            cm.postConcat(tmp);

            final float[] a = cm.getArray();

            int ir = floatToByte(a[0] * r +  a[1] * g +  a[2] * b);
            int ig = floatToByte(a[5] * r +  a[6] * g +  a[7] * b);
            int ib = floatToByte(a[10] * r + a[11] * g + a[12] * b);

            return Color.argb(Color.alpha(color), pinToByte(ir),
                              pinToByte(ig), pinToByte(ib));
        }

        private static final float PI = 3.1415926f;

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            float x = event.getX() - CENTER_X;
            float y = event.getY() - CENTER_Y;
            boolean inCenter = java.lang.Math.sqrt(x*x + y*y) <= CENTER_RADIUS;

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    mTrackingCenter = inCenter;
                    if (inCenter) {
                        mHighlightCenter = true;
                        invalidate();
                        break;
                    }
                case MotionEvent.ACTION_MOVE:
                    if (mTrackingCenter) {
                        if (mHighlightCenter != inCenter) {
                            mHighlightCenter = inCenter;
                            invalidate();
                        }
                    } else {
                        float angle = (float)java.lang.Math.atan2(y, x);
                        // need to turn angle [-PI ... PI] into unit [0....1]
                        float unit = angle/(2*PI);
                        if (unit < 0) {
                            unit += 1;
                        }
                        mCenterPaint.setColor(interpColor(mColors, unit));
                        invalidate();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (mTrackingCenter) {
                        if (inCenter) {
                            mListener.colorChanged(mCenterPaint.getColor());
                        }
                        mTrackingCenter = false;    // so we draw w/o halo
                        invalidate();
                    }
                    break;
            }
            return true;
        }
    }

    public ColorPickerDialog(Context context,
                             OnColorChangedListener listener,
                             int initialColor) {
        super(context);

        mListener = listener;
        mInitialColor = initialColor;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        OnColorChangedListener l = new OnColorChangedListener() {
            public void colorChanged(int color) {
                mListener.colorChanged(color);
                dismiss();
            }
        };

        setContentView(new ColorPickerView(getContext(), l, mInitialColor));
        setTitle("Pick a Color");
    }
}

*********************************************
***************** S T O P *****************
*********************************************

Now here are the core blocks to accomplish the same thing with AI:
But, wait - you might be saying, there is a lot of code under the covers to get these blocks to work - that is true but I don't have to deal with it. That is the point.
Productivity, power, ease of use, not to mention the fun of clickng blocks together - those are the things I am looking for. Of course you have to lay out the color wheel
(which I have admittedly just copied a picture of) in the Screen Designer and make menus to access the color picker dialog box, but that is fairly trivial. Here is the dialog box
in the Screen Designer:
Nothing really complicated there.
Here are some pictures of the output:
What do you think?
--
This is a beautiful example!  Thanks for posting it. We couldn't agree with you more.
--
Agreed - this is great - thanks so much, Scott!

--
App Inventor just made hardware control very easy and accessible. Thanks to the developers for the fantastic work!

--
I am trying to pick a color, split it into it's RGB components, and send them out over bluetooth. I have successfully made it as far as choosing the color and changing a button to said color...however I cannot figure out the "split color" block. It will not let me connect a list block to it, and I've run out of ideas. I can't find much info about the split color, any and all help would be greatly appreciated! Here is what I currently have.
Thanks in advance
Design:

Blocks:

 --
instead of hijacking the testimonials thread, it would have been nice to open a new thread ... 

-- 
Hello, I was just shown App Inventor1 earlier this month and quickly adapted to the easy process of programming with blocks.  I must say, this program is truly amazing for anyone to learn.   I remember way back in highschool when they use to teach turing, Qbasic, or Pascal.  Its not always easy for kids to learn and understand logic for the first time, but App Inventor literally puts programming into a visual concept.   Reguardless of the hidden programming behind each blocks, the blocks are a great teaching device for explaining how things really do actually flow in a program.  Anyone can learn this quick....I know i sure did!

Within 3 weeks i have already leaped to App Inventor2.  It took some adjusting, but it was easily adaptable.  This program at the very least will be a huge hit with educators and help rapidly speed up the process of understanding flow and logic.  
With all the available tutorials and the huge community of  supporters, people can learn very quick.   
I have already made 6 involving apps.    4 huge multiple choice quiz's each with 100 questions,  A childrens game pad with 10 different selectable educational games inside, and now a  physical game all with timers, scores, highscores, points,objectives and elimination results. 

-- 
I really love the way AI can assist people in realising an idea into an proper working app. I think a lot of good ideas get stranded in good intentions because people don't know how to turn those good ideas into a good working app.

Although I'm not a teacher, I do work in a school in the Netherlands (Friesland College - Leeuwarden), I think I would be able to get people get started into programming through App Inventor without too much trouble. That is, if they have some insight in programming/scripting and analytical thinking. I sincerely believe that AI is very suited to explain people what object-oriented / event-driven programming is. It is remarkable how fast you can get people started building their first real android app through AI.

I do have some programming skills out of hobbyism: I started off in the late 80's with MBasic/Turbo Basic, Clipper and later Visual Basic. In the last 10 years I have mainly used PHP/MySql for building web-applications.
But never have I encountered a development environment like AI, which makes OO-programming so understandable. The way the blocks works, but also the naming of the blocks/events are very explainable.
Yes, I really love App Inventor, and I really appreciate all the work and effort that you are investing in developing it into the great tool that it already has become.
Thank you, and keep up the good work!

Greetings from the Netherlands,

--
I've just started using the AI and getting on with the tutorials. I really like it. Is is good to see a visual representation of a program.
I've already been able to change the blocks to make the Mole Mash app work differently to reset the timer on hitting the mole. It is so easy with AI. If something doesn't work, just detach the block, and snap another one in.

Thank you for creating this.
All the best,

--
App inventor does all of the heavy lifting.  You can create anything you can imagine with app inventor as long as you can turn your imagination into logic.  Detailed thinking is the key.  Thank you to everyone who provides support and works behind the scenes.  You are all amazing and brilliant!

--
Here is a bit from a write up I recently did for the University of Utah:

"In 2012 the department launched a course on the development of mobile health apps using AppInventor, a free tool developed by Google and currently hosted by M.I.T.  Students with no programming experience each learn to create at least 12 mobile health apps during the semester.  Students tackled problems like inactivity, diet management, emergency preparedness, mindfulness and others, depending on their personal interests.  One student in particular, created an app to help a family member manage their Irritable Bowel Syndrome.   Starting in 2014, the AppInventor class will be officially endorsed as an undergraduate (QB) Math credit, and in May, Professor Rich Interdonato will be conducting a mini-course on app building with AppInventor at the American Telemedicine Association annual conference."

If you want more information, consider contacting Jill Lamping.  She might have something of interest for you too.  :)

--
I believe that the story about my APP will inspire the young students who always lament studies are hard and difficult such as my son.
This is the companion APP I made  for My website.
It took me one week to make this APP from scratch. Meaning learning how to make an APP , doing it and posting it in APP store.
I did it to demonstrate by example to my 21 year old son who is in the University here,  who wants to change his course halfway in to his degree saying subjects are too hard to learn.  Thus I wanted to demonstrate to him that it is not hard to learn an any new subject. It does not take long either, even a 58 year old man like myself can do it . What you need is dedication, interest and set your mind on the task what ever you wanted to do. Then any thing is possible. 
I live in Australia for the past 22 years and I made the first Sri Lankan Astrology web site about 14 years back which is still in the web. http://jyotisha.00it.com. Every thing in that website is done by myself. Actually I thought of making it because at that time there were no Eastern Astrological sites in the web as at that time Internet was just beginning. And India was not that computer literate.There were a few western Astrological sites that was all. 

So I wanted to show the world that there are other systems of astrology in eastern countries too.. This APP I made as a companion APP for my web site. It is not aimed at Sri Lankan or Indian Audience. It's purpose is to give an introduction of Eastern Astrology to people who have no idea about it . 
Wishing you all the best

--
Hi,  APP INVENTOR is a fantastic tool and now I can realize my own apps using cam, web, music ... special effects!
One question: Why I can't program with AI using google chrome on my android tablet?

--
Francesco... Thanks for the nice words about AI!

You can run your app on a device like a tablet or a phone, but you cannot program on either because dragging and dropping is not enabled in the User Interface for tablets and phones at this time.

--
Hi Francesco, I have an iPad 2 that I use Chrome browser on, i have found that I can log into app inv 2 on the tablet and control the behaviors of existing components on the tablet. If I find I need to add components like a button or anything I make note of it and add it later when I get to my laptop. I find it to work smoothly and by breaking it up I can do quite a lot on my tablet. I hope in the future there may be an update that will incorporate drag and drop. I hope this helps you and anyone hoping to make use of a tablet when on the go and use app inventor.

--
thank you!

--
I just found about App Inventor today.  I've been fusing with a number of solutions for creatign apps on android that have a host of cumbersome issues or have equipment requirements (i.e. app loader not running on my desktop or the APK created will only work on very specific configurations). I've been programming for fun and to provide plugins and tools for my professional work for about 30 years now and it is a joy to find such an easy to use tool to develop apps for my mobile so quickly and easily.
Just three hours from discovery to first multi-screen multi-control app. 

--
Just published my first game in Google play made with App Inventor 2.
Had great time making it...Thank you for this tool.
app name is "numgu_lite"

--
yes this is a marvelous tools when it work.for now i can't rebuild any of my apps.
Server rebuild it without error,adb reinstall it perfectly but manager never add nor start the app.what happens!!!

--
Im new usng AI2 and im having problems, when I typed the projects name and clicked OK Design Window did not open and I can't figure out how to see it. Some help needed

--
Please do the tutorials first... it'll make it a LOT easier for you in the future...

The tutorials are located here: http://appinventor.mit.edu/explore/ai2/tutorials

--
I'd be very pleased if I can include  procedures variables ( especialy those customized by myself).. from one screen to another so it'd be really object oreinted - and maybe also another existing blocks from scren 2,3..x like there's option for 'any other component' - you click on it and options list reveals

--
Robert... Please don't hijack threads in the forum.  This thread is for Testimonials... "I love it because..."

In the future, please post a regular discussion by starting a new thread.

You can add things you want to the App Inventor Issues List.

You can move variables back and forth between screens with the TinyDB...

--
I use MIT app inventor. It is a program built to make programming more simple, and less meticulous. It is like programming in yet an even higher level than Java, and easy to learn. I don't like traditional programming because of how slow it is, and how you get errors for everything and takes you forever to debug. Instead of doing the pain staking line by line coding, you just piece intuitive blocks together, which are self-explanatory. I am currently working on a quality game with it.

--
I like to think I'm smart on the computer. I mean, I've done a lot of geeky things in my quest for knowledge but, trying to understand app building and design has been pretty hard for me. Finally!! I can build apps in a way that I can understand. This tool is AWESOME and I'm having a blast! 
I haven't had this much fun in a long time. Thank you for being here and letting me learn.

--
You and your team have put together an absolutely amazing system.
I cannot wait to see the latest version.
I have started to post my "WishList" thoughts - please check it out.
Best to you and everyone on the team.

--
Test:  Does this unlock the topic?  

--

댓글 없음:

댓글 쓰기