<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fr4gus</title>
	<atom:link href="http://www.fr4gus.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fr4gus.com</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Sun, 29 Apr 2012 06:15:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[VTANDROID] Quinta Asignación</title>
		<link>http://www.fr4gus.com/2012/04/29/vtandroid-quinta-asignacion/</link>
		<comments>http://www.fr4gus.com/2012/04/29/vtandroid-quinta-asignacion/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 06:15:40 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Asignaciones Tutoria Virtual de Android]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=565</guid>
		<description><![CDATA[Para esta asignación, vamos a guardar las imágenes de los avatars de los usuarios. La idea es que guardemos en el almacenamiento externo y que si hay una imagen local, la usen, sino la bajan y la usan. Posteriormente vamos a hacer el cache de imagenes para guardar unas en memoria. El detalle es el [...]]]></description>
			<content:encoded><![CDATA[<p>Para esta asignación, vamos a guardar las imágenes de los avatars de los usuarios. La idea es que guardemos en el almacenamiento externo y que si hay una imagen local, la usen, sino la bajan y la usan.</p>
<p>Posteriormente vamos a hacer el cache de imagenes para guardar unas en memoria.</p>
<p>El detalle es el siguiente:</p>
<ol>
<li>Al mostrar un tweet, vamos a verificar que la imagen del usuario que emitió el tweet, exista en el almacenamiento local.</li>
<li>Si no existe, se toma el URL y se baja al SDCard.</li>
<li>Una vez con la ruta local, hay que actualizar la interfaz para que muestre el avatar.</li>
</ol>
<p>Además, se va a guardar la información del usaurio y del tweet en una base de datos local.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2012/04/29/vtandroid-quinta-asignacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[VTANDROID] Cuarta Asignación</title>
		<link>http://www.fr4gus.com/2012/04/11/vtandroid-cuarta-asignacion/</link>
		<comments>http://www.fr4gus.com/2012/04/11/vtandroid-cuarta-asignacion/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 06:50:20 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Asignaciones Tutoria Virtual de Android]]></category>
		<category><![CDATA[adapter]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[base adapter]]></category>
		<category><![CDATA[listview]]></category>
		<category><![CDATA[tutoria]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[ui patterns]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=562</guid>
		<description><![CDATA[Requerimientos Esta asignación requiere que muestren en una acitividad los tweets del timeline de un usuario. El reto es que puedan mostrar esa información, solicitando los datos a un servicio web (el API de twitter). Vamos a utilizar las librerias Twitter4J y SignPost. La idea es que apliquen su conocimiento para poder autenticarse y luego [...]]]></description>
			<content:encoded><![CDATA[<h2>Requerimientos</h2>
<p>Esta asignación requiere que muestren en una acitividad los tweets del timeline de un usuario. El reto es que puedan mostrar esa información, solicitando los datos a un servicio web (el API de twitter). Vamos a utilizar las librerias <a href="http://twitter4j.org/en/index.html">Twitter4J </a>y <a href="http://code.google.com/p/oauth-signpost/">SignPost</a>. La idea es que apliquen su conocimiento para poder autenticarse y luego poder solicitar a Twitter los tweets mas recientes. La aplicación debe mostrar los datos de manera eficiente y sin que se pegue.</p>
<h2>Que ocupan:</h2>
<ul>
<li>Asistir a la tutoria. Esta semana repasamos mas a detalle los componentes visuales, asi como la parte de diseño. Además voy explicarles como implmentar correctamente un ListView con su respectivo Adapter y hablarles sobre el patron de ViewHolder.</li>
<li>Ya adelanté parte del trabajo. En el siguiente branch, pueden encontrar la implementación del ListView que vimos en la tutoria y además ya está la parte la autenticación de twitter que es medio truculenta. La siguiente semana la voy a explicar para que todos lo tengan claro. Eso sí me gustaría motivarlos a que lo intenten implementar ustedes mismos y si se quedan pegados en algo usar la implementación como referencia.</li>
</ul>
<h2>Referencias:</h2>
<ol>
<li>Branch en Github de la implementación parcial de la asignación. <a href="https://github.com/fr4gus/OAMMBLO/tree/feature/asignacion_cuatro">https://github.com/fr4gus/OAMMBLO/tree/feature/asignacion_cuatro</a></li>
<li>El ejemplo que yo utilicé para implementar la autenticación con Twitter.</li>
<li>Android Designs: <a href="http://developer.android.com/design/index.html">http://developer.android.com/design/index.html</a></li>
<li>Android UI Patterns: <a href="http://www.androiduipatterns.com/">http://www.androiduipatterns.com/</a></li>
<li>Android Patterns: <a href="http://www.androidpatterns.com/">http://www.androidpatterns.com/</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2012/04/11/vtandroid-cuarta-asignacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[VTANDROID] Tercera Asignación</title>
		<link>http://www.fr4gus.com/2012/03/27/vtandroid-tercera-asignacion/</link>
		<comments>http://www.fr4gus.com/2012/03/27/vtandroid-tercera-asignacion/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 04:27:46 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Asignaciones Tutoria Virtual de Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[vtandroid android tutorial course]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=558</guid>
		<description><![CDATA[La tercera asignación corresponde a hacer las siguientes actividades. Para su revisión deben hacer fork del proyecto OAMMBLO y modificarlo para realizar la asignación. Modificar SplashActivity para que se vea por 1 segundo y luego se muestra la pantalla de LoginActivity. Es necesario que &#8220;cierren&#8221; SplashScreen para que no quede en la pila. Crear la [...]]]></description>
			<content:encoded><![CDATA[<p>La tercera asignación corresponde a hacer las siguientes actividades. Para su revisión deben hacer fork del proyecto OAMMBLO y modificarlo para realizar la asignación.</p>
<p>Modificar <strong>SplashActivity</strong> para que se vea por 1 segundo y luego se muestra la pantalla de LoginActivity. Es necesario que &#8220;cierren&#8221; SplashScreen para que no quede en la pila.</p>
<p>Crear la actividad <strong>LoginActivity</strong> cuyo layout va a constar de un &#8220;formulario&#8221; para ingresar a la aplicación. El fondo debe ser blanco. El texto que indica al usuario que ingrese sus datos debe ser de color negro, en &#8220;negrita&#8221; y al menos 18sp (screen points) de tamaño. En vez de poner &#8220;labels&#8221; o &#8220;etiquetas&#8221; para cada uno de los campos de edición, basta con que utilicen la propiedad &#8220;<strong>hint</strong>&#8221; he indique para qué es cada campo. Un hint para &#8220;username&#8221; y otro hint para el campo &#8220;password&#8221;.</p>
<p style="text-align: center;"><a href="http://www.fr4gus.com/wp-content/uploads/2012/03/20120326_215645_edit0.jpg"><img class="aligncenter  wp-image-559" title="20120326_215645_edit0" src="http://www.fr4gus.com/wp-content/uploads/2012/03/20120326_215645_edit0.jpg" alt="" width="499" height="498" /></a></p>
<p style="text-align: left;">En LoginActivity, deben buscar el id del botón y definir un<strong> View.OnClickListener</strong> para que al hacer click, el botó llame a la actividad <strong>DashboardActivity</strong>. El layou para ésta actividad debe ser similar a la siguiente:</p>
<p style="text-align: center;"><a href="http://www.fr4gus.com/wp-content/uploads/2012/03/20120326_220838_edit0.jpg"><img class="aligncenter  wp-image-560" title="20120326_220838_edit0" src="http://www.fr4gus.com/wp-content/uploads/2012/03/20120326_220838_edit0.jpg" alt="" width="454" height="523" /></a></p>
<p>Ustedes pueden definir un layout a su gusto, pero debe tener al menos las opciones de:</p>
<ol>
<li>Tweets (Ver timeline)</li>
<li>Lists</li>
<li>Mentions</li>
<li>Retweets</li>
<li>Crear nuevo tweet (A la par de la etiqueta OAMMBLO)</li>
</ol>
<p>Recuerde:</p>
<ul>
<li>Definir todos los textos en string.xml y usarlos en los layout.</li>
<li>Crear los &#8220;assets&#8221; para mdpi y hpdi al menos.</li>
</ul>
<p>Referencias:</p>
<ol>
<li><a href="http://www.androiduipatterns.com/p/android-ui-pattern-collection.html">http://www.androiduipatterns.com/p/android-ui-pattern-collection.html</a></li>
<li><a href="http://developer.android.com/design/index.html">http://developer.android.com/design/index.html</a></li>
<li><a href="http://www.google.com/events/io/2010/sessions/android-ui-design-patterns.html">http://www.google.com/events/io/2010/sessions/android-ui-design-patterns.html</a></li>
<li><a href="http://developer.android.com/guide/topics/ui/index.html">http://developer.android.com/guide/topics/ui/index.html</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2012/03/27/vtandroid-tercera-asignacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[VTANDROID] Segunda Asignación</title>
		<link>http://www.fr4gus.com/2012/03/22/vtandroid-segunda-asignacion/</link>
		<comments>http://www.fr4gus.com/2012/03/22/vtandroid-segunda-asignacion/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 04:41:57 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Asignaciones Tutoria Virtual de Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[vtandroid android tutorial course]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=555</guid>
		<description><![CDATA[La segunda asignación es leerse los siguientes documentos para la siguiente clase. http://developer.android.com/guide/topics/fundamentals/activities.html http://developer.android.com/guide/topics/intents/intents-filters.html http://developer.android.com/guide/practices/screens_support.html También pueden apoyar esta lectura con el siguiente post y video: http://www.fr4gus.com/2010/06/03/android-para-todos-dispositivos-p1/]]></description>
			<content:encoded><![CDATA[<p>La segunda asignación es leerse los siguientes documentos para la siguiente clase.</p>
<ol>
<li>http://developer.android.com/guide/topics/fundamentals/activities.html</li>
<li>http://developer.android.com/guide/topics/intents/intents-filters.html</li>
<li>http://developer.android.com/guide/practices/screens_support.html</li>
</ol>
<p>También pueden apoyar esta lectura con el siguiente post y video:</p>
<p><a href="http://www.fr4gus.com/2010/06/03/android-para-todos-dispositivos-p1/">http://www.fr4gus.com/2010/06/03/android-para-todos-dispositivos-p1/</a></p>
<p><iframe src="http://www.youtube.com/embed/gCiN_Zdv2n0" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2012/03/22/vtandroid-segunda-asignacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[VTANDROID] Primera asignación</title>
		<link>http://www.fr4gus.com/2012/03/13/vtandroid-primera-asignacion/</link>
		<comments>http://www.fr4gus.com/2012/03/13/vtandroid-primera-asignacion/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 01:52:20 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Asignaciones Tutoria Virtual de Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[vtandroid android tutorial course]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=550</guid>
		<description><![CDATA[Para empezar el curso es requerido que los estudiantes tengan instalado y probado el ambiente de desarrollo. Para ello deben instalar lo siguiente: IDE de su elección. Se recomienda Eclipse por ser el IDE soportado oficialmente. Que sea el classic o superior. Si baja e instala la edición para Java Developers, ocupa instalar manualmente el [...]]]></description>
			<content:encoded><![CDATA[<p>Para empezar el curso es requerido que los estudiantes tengan instalado y probado el ambiente de desarrollo. Para ello deben instalar lo siguiente:</p>
<ol>
<li>IDE de su elección. Se recomienda Eclipse por ser el IDE soportado oficialmente. Que sea el classic o superior. Si baja e instala la edición para Java Developers, ocupa instalar manualmente el plugin Web Tools Platform. <a href="http://www.eclipse.org/downloads/packages/eclipse-classic-372/indigosr2">http://www.eclipse.org/downloads/packages/eclipse-classic-372/indigosr2</a></li>
<li>Android SDK Tools. <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></li>
<li>Editor de Imágenes.</li>
<li>Poner los platform tools  en su path. Esto facilitara poder correr comandos como el ADB o el Emulador.</li>
</ol>
<p>Para probar que su ambiente esta correcto, deben crear un proyecto de Android y correrlo con el emulador. Si ven el &#8220;Hello World&#8221; estan listos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2012/03/13/vtandroid-primera-asignacion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Manejando cambio de orientación con un Progress Dialog</title>
		<link>http://www.fr4gus.com/2011/10/05/manejando-cambio-de-orientacion-con-un-progress-dialog/</link>
		<comments>http://www.fr4gus.com/2011/10/05/manejando-cambio-de-orientacion-con-un-progress-dialog/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 04:20:11 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Activity]]></category>
		<category><![CDATA[Change]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Orientation]]></category>
		<category><![CDATA[ProgressDialog]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=538</guid>
		<description><![CDATA[Puede que tengamos una pantalla, que en algún momento ejecute un cambio o solicitud de manera asíncrona. Para esto debemos mostrarle al usuario algo mientras, ya sea de manera determinada (progreso del trabajo o tarea) o indeterminada (el famoso spinner). Cuando hay un cambio de orientación, si la actividad no maneja el cambio de orientación, [...]]]></description>
			<content:encoded><![CDATA[<p>Puede que tengamos una pantalla, que en algún momento ejecute un cambio o solicitud de manera asíncrona. Para esto debemos mostrarle al usuario algo mientras, ya sea de manera determinada (progreso del trabajo o tarea) o indeterminada (el famoso <em>spinner</em>).</p>
<p>Cuando hay un cambio de orientación, si la actividad no maneja el cambio de orientación, probablemente sea destruida y recreada. Entonces ¿Qué pasa con el <em>ProgressDialog</em>?.</p>
<p>Iniciemos con dos reglas que debemos seguir:</p>
<ol>
<li>Si va a crear el <em>AsyncTask</em> dentro de la actividad como un inner class, asegúrese de que sea estática. Las inner class no estáticas, guardan una referencia de la outer class, en nuestro caso, la Actividad. Esto quiere decir que estamos &#8220;filtrando&#8221; (<em>leaking</em>) memoria, pues esa referencia de la actividad queda ahi mientras siga vivo el <em>AsyncTask</em>, y esto hay que evitarlo.</li>
<li>Para crear el <em>ProgressDialog</em>, utilice los métodos que tiene disponible la actividad. Me refiero a <em>onCreateDialog</em>, <em>showDialog</em> y <em>dismissDialog</em>. Esto por que a la hora de cambiar la orientación de la pantalla y al destruir y recrear la actividad, Android va a mantener el estado de los dialogs que estaban presentes y se encargará de mostrarlos nuevamente cuando la actividad es recreada.</li>
</ol>
<div>Ahora bien, aún siguiendo estas reglas, el principal problema es que la actividad que creó el <em>AsyncTask</em> puede que se destruya por lo que el <em>AsyncTask</em> pierda la referencia (y así debe ser). La solución es simplemente desacoplar la actividad del <em>AsyncTask</em>. Empleando los métodos del ciclo de vida de la activad, es posible &#8220;notificar&#8221; o &#8220;actualizar&#8221; el <em>AsyncTask</em>, para que se percate del cambio de actividad y pueda mostrar o ocultar el <em>ProgressDialog</em>.</div>
<p>El consenso es utilizar el método <em>onRetainNonConfigurationInstance</em>, para &#8220;guardar&#8221; la referencia del <em>AsynctTask</em>, así, cuando la nueva actividad es creada, ella se dará cuenta si la tarea todavia está en progreso, para poder &#8220;acoplarse&#8221; a ella.</p>
<div>
<pre class="brush: java; title: ; notranslate">
public class EjemploProgressDialogActivity extends Activity {
    public static final String TAG = &quot;EXAMPLE_DIALOG&quot;;

    public static final int PROGRESS_DIALOG = 1;

    MyTask task;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d(TAG, &quot;onCreate&quot;);
        Object obj = getLastNonConfigurationInstance();
        if (obj != null &amp;&amp; obj instanceof MyTask) {
            Log.d(TAG, &quot;Tarea previa ejecutandose&quot;);
            task = (MyTask) obj;
            task.attach(this);
        } else {
            task = new MyTask(this);
            task.execute(10);
            Log.d(TAG, &quot;Nueva tarea creada y ejecutada&quot;);
        }
    }

    @Override
    protected Dialog onCreateDialog(int id) {

        switch (id) {
        case PROGRESS_DIALOG:
            ProgressDialog pd = new ProgressDialog(this);
            pd.setTitle(&quot;Trabajando&quot;);
            pd.setMessage(&quot;Por favor espere...&quot;);
            return pd;

        default:
            break;
        }
        return super.onCreateDialog(id);
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, &quot;onPause&quot;);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, &quot;onRestart&quot;);

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, &quot;onResume&quot;);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, &quot;onStart&quot;);
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, &quot;onStop&quot;);
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        // Aqui es donde se hace la magia
        if (task != null) {
            task.deattach();
            return task;
        }
        return super.onRetainNonConfigurationInstance();
    }

    private static class MyTask extends AsyncTask {
        WeakReference ctx;

        public MyTask(Activity activity) {
            super();
            attach(activity);
        }

        @Override
        protected void onPreExecute() {
            Activity activity = ctx.get();
            if (activity != null &amp;&amp; !activity.isFinishing()) {
                Log.d(TAG, &quot;Mostrando Progress Dialog&quot;);
                activity.showDialog(PROGRESS_DIALOG);
            }
        }

        @Override
        protected Void doInBackground(Integer... params) {
            int seconds = params[0];
            try {
                Log.d(TAG, &quot;Tarea va a durar &quot; + seconds + &quot; segundos&quot;);
                Thread.sleep(seconds * 1000);
                Log.d(TAG, &quot;Tarea Lista&quot;);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (ctx != null &amp;&amp; ctx.get() != null) {
                Activity activity = ctx.get();
                if (!activity.isFinishing()) {
                    Log.d(TAG, &quot;Ocultando Progress Dialog&quot;);
                    activity.dismissDialog(PROGRESS_DIALOG);
                }
            }
        }

        public void attach(Activity activity) {
            this.ctx = new WeakReference(activity);
        }

        public void deattach() {
            ctx = null;
        }

    }
}
</pre>
</div>
<p>En la línea 14, pueden ver que en el método <em>onCreate</em> se pregunta si se salvó algún objeto previamente y luego se hacen los chequeos respectivos para asegurarse que el objeto sea el <em>AsyncTask</em>. En este ejemplo en particular, se crea el AsyncTask en el método <em>onCreate</em>, por lo que en el caso de que no exista, se crea.</p>
<p>En la línea 18 se ejecuta el método attach,para que el <em>AsyncTask</em> tenga la nueva referencia de la Actividad.</p>
<p>En la línea 77 que es el momento en que la actividad da su último suspiro, el <em>AsyncTask</em> se desacopla y se &#8220;salva&#8221; la referencia al <em>AsyncTask</em> para que la siguiente actividad (si es el caso) la retome, como vimos en el método onCreate.</p>
<p>Si ven la implementación del AsyncTask, primero que todo, se guarda la referencia a la actividad dentro de un WeakReference, para así evitar &#8220;filtrar&#8221; memoria.</p>
<p>En los métodos <em>onPreExecute</em> y <em>onPostExecute</em> se hacen validaciones para asegurarse de que la referencia de la actividad sea válidad (que exista la referencia y que la actividad no esté en proceso de morirse).</p>
<p>Si ejecutáramos éste código,  sin mover el dispositivo, esta sería la salida en la bitácora:</p>
<pre>10-04 21:54:46.254: DEBUG/EXAMPLE_DIALOG(6155): onCreate
10-04 21:54:46.294: DEBUG/EXAMPLE_DIALOG(6155): Mostrando Progress Dialog
10-04 21:54:46.514: DEBUG/EXAMPLE_DIALOG(6155): Tarea va a durar 10 segundos
10-04 21:54:46.514: DEBUG/EXAMPLE_DIALOG(6155): Nueva tarea creada y ejecutada
10-04 21:54:46.514: DEBUG/EXAMPLE_DIALOG(6155): onStart
10-04 21:54:46.524: DEBUG/EXAMPLE_DIALOG(6155): onResume
10-04 21:54:56.518: DEBUG/EXAMPLE_DIALOG(6155): Tarea Lista
10-04 21:54:56.524: DEBUG/EXAMPLE_DIALOG(6155): Ocultando Progress Dialog
10-04 21:55:12.395: DEBUG/EXAMPLE_DIALOG(6155): onPause
10-04 21:55:12.554: DEBUG/EXAMPLE_DIALOG(6155): onStop</pre>
<p>Pero si cambiamos la orientación del dispositivo, esto sería el resultado:</p>
<pre>te
10-04 21:56:08.584: DEBUG/EXAMPLE_DIALOG(6155): Mostrando Progress Dialog
10-04 21:56:08.754: DEBUG/EXAMPLE_DIALOG(6155): Nueva tarea creada y ejecutada
10-04 21:56:08.754: DEBUG/EXAMPLE_DIALOG(6155): onStart
10-04 21:56:08.754: DEBUG/EXAMPLE_DIALOG(6155): Tarea va a durar 10 segundos
10-04 21:56:08.764: DEBUG/EXAMPLE_DIALOG(6155): onResume
10-04 21:56:10.424: DEBUG/EXAMPLE_DIALOG(6155): onPause
10-04 21:56:10.424: DEBUG/EXAMPLE_DIALOG(6155): onStop
10-04 21:56:10.544: DEBUG/EXAMPLE_DIALOG(6155): onCreate
10-04 21:56:10.544: DEBUG/EXAMPLE_DIALOG(6155): Tarea previa ejecutandose
10-04 21:56:10.544: DEBUG/EXAMPLE_DIALOG(6155): onStart
10-04 21:56:10.704: DEBUG/EXAMPLE_DIALOG(6155): onResume
10-04 21:56:18.755: DEBUG/EXAMPLE_DIALOG(6155): Tarea Lista
10-04 21:56:18.755: DEBUG/EXAMPLE_DIALOG(6155): Ocultando Progress Dialog
10-04 21:56:21.626: DEBUG/EXAMPLE_DIALOG(6155): onPause
10-04 21:56:21.784: DEBUG/EXAMPLE_DIALOG(6155): onStop</pre>
<p>Imprimí además cuando se ejecutan otros métodos del ciclo de vida, para tener una referencia de cuando ocurre qué.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2011/10/05/manejando-cambio-de-orientacion-con-un-progress-dialog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>fr4gus y Arduino en El Chou TV</title>
		<link>http://www.fr4gus.com/2011/09/22/fr4gus-y-arduino-en-el-chou-tv/</link>
		<comments>http://www.fr4gus.com/2011/09/22/fr4gus-y-arduino-en-el-chou-tv/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 03:59:29 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[elchoutv]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=536</guid>
		<description><![CDATA[Muchas gracias a ElChouTV (www.elchoutv.com) por la invitación de ir a hablar de mi nuevo hobby, Arduino, y introducir este tema en el ámbito nacional. Video streaming by Ustream No se les olvide, el grupo de facebook en http://www.facebook.com/groups/arduinocr]]></description>
			<content:encoded><![CDATA[<p>Muchas gracias a ElChouTV (<a href="www.elchoutv.com">www.elchoutv.com</a>) por la invitación de ir a hablar de mi nuevo hobby, Arduino, y introducir este tema en el ámbito nacional.</p>
<p><object width="480" height="386" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="vid=17426326&amp;autoplay=false&amp;style=ub5D1719:lcCD311B:ocffffff:ucffffff" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/viewer.swf" /><embed width="480" height="386" type="application/x-shockwave-flash" src="http://www.ustream.tv/flash/viewer.swf" flashvars="vid=17426326&amp;autoplay=false&amp;style=ub5D1719:lcCD311B:ocffffff:ucffffff" allowfullscreen="true" allowscriptaccess="always" /></object> <br /><a style="padding: 2px 0px 4px; width: 400px; background: #ffffff; display: block; color: #000000; font-weight: normal; font-size: 10px; text-decoration: underline; text-align: center;" href="http://www.ustream.tv/" target="_blank">Video streaming by Ustream</a></p>
<p>No se les olvide, el grupo de facebook en <a href="http://www.facebook.com/groups/arduinocr">http://www.facebook.com/groups/arduinocr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2011/09/22/fr4gus-y-arduino-en-el-chou-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De Arduino a Android y de vuelta</title>
		<link>http://www.fr4gus.com/2011/09/06/de-arduino-a-android-y-de-vuelta/</link>
		<comments>http://www.fr4gus.com/2011/09/06/de-arduino-a-android-y-de-vuelta/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 20:57:10 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Accessory]]></category>
		<category><![CDATA[ADK]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[ITeadStudio]]></category>
		<category><![CDATA[Microbrige]]></category>
		<category><![CDATA[SeeedStudio]]></category>
		<category><![CDATA[Sparkfun]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=530</guid>
		<description><![CDATA[Apesar de mi gran interés en la electrónica, siempre ha sido una area flaca, básicamente por mi dificultad de entender la parte de las Leyes de Ohm y el resto de su teoría. Y es que a mi me gusta aprender haciendo y cuando descubrí Arduino fue como que oyeran mis plegarias. No voy a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.fr4gus.com/wp-content/uploads/2011/09/btshieldv2.2_3-copy.jpg"><img class="aligncenter size-full wp-image-533" title="Arduino and Android" src="http://www.fr4gus.com/wp-content/uploads/2011/09/btshieldv2.2_3-copy.jpg" alt="" width="600" height="281" /></a><a href="http://www.fr4gus.com/wp-content/uploads/2011/09/arduino_android.jpg"><br /></a></p>
<p>Apesar de mi gran interés en la electrónica, siempre ha sido una area flaca, básicamente por mi dificultad de entender la parte de las Leyes de Ohm y el resto de su teoría. Y es que a mi me gusta aprender haciendo y cuando descubrí Arduino fue como que oyeran mis plegarias.</p>
<p>No voy a ahondar mucho sobre que es Arduino, básicamente es una plataforma electrónica de código abierto, para crear objetos interactivos al ambiente. Si usted desea aprender más sobre Arduino, le recomiendo que se dé una vuelta por el sitio oficial que es http://www.arduino.cc y en español http://www.arduino.cc/es/.</p>
<p>Yo me compré este Starter Kit en Sparkfun (<a href="http://www.amazon.com/Sparkfun-Starter-Kit-Arduino-Flex/dp/B004G2F936/ref=sr_1_1?ie=UTF8&amp;qid=1315339471&amp;sr=8-1">amazon</a> / <a href="http://www.sparkfun.com/products/10174">sparkfun</a>), que viene con un <a href="http://arduino.cc/en/Main/ArduinoBoardUno">Arduino Uno</a>, varios sensores (temperatura, luz, flexibilidad, etc), algunos LEDs, resistencias, mini protoboard y jump wires. Lamentablemente por cuestiones de tiempo lo tuve guardado varios meses.</p>
<p>Al ver el anuncio en Google IO 2011 sobre el Android Open Accessorie Developer Kit (ADK) y de que podía comunicarse con Android y que además el hardware era compatible con Arduino dije: -¡Ahora sí! pero en ese momento el costo del ADK board era alrededor de los $300. Otro problema es que el ADK solo es compatible con dispositivos 2.3.4+. Como era compatible con Arduino, pensé que debía de haber alguna forma de poder hacer el ADK y efectivamente, ya alguien vió el mismo problema y puso en su blog, como hacer su propio (DIY) ADK board.</p>
<p>Ronfont en su sitio web, posteó los pasos de como instalar el ADK en un Arduino + USB Host Shield (ver post <a href="http://romfont.com/2011/05/12/google%E2%80%99s-open-accessory-development-kit-on-standard-arduino-hardware/">aquí</a>). No le bastó y 3 días después, publicó un <a href="http://romfont.com/2011/05/15/microbridge-adb-support-for-arduino/">post</a>, donde &#8220;hackeó&#8221; el protocolo ADB para poder hacer comunicar a un dispositivo Android con la pareja Arduino+USB Host Shield. Esto se convirtió en un proyecto de código abierto llamado <a href="http://code.google.com/p/microbridge">MicroBridge</a> que permitiría a dispositivos de 1.5 en adelante, comunicarse con Arduino.</p>
<p>Ésta no es la única forma de poder comunicar un Arduino con Android. Otra opción basada en USB, es la tarjeta IOIO (en inglés se pronuncia como yo-yo) creada por Sparkfun. <a href="http://www.seeedstudio.com/depot/">SeeedStudio</a> creó su propia version llamada <a href="http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html?cPath=132_133">SeedDuino ADK Mainboard</a>. <a href="http://www.microchip.com">Microship</a> también ofrece el <a href="http://www.microchip.com/pagehandler/en-us/chipKIT-Development-Platform.html">chipKIT</a>. <a href="http://www.iteadstudio.com">ITeadStudio</a> tiene su version llamada <a href="http://iteadstudio.com/store/index.php?main_page=product_info&amp;cPath=50_51&amp;products_id=464">Iteaduino ADK Main board</a>. Todas andan alrededor de los $80 actualmente.</p>
<p>Además de las opciones USB, hay otra opción de comunicar a Android con Arduino mediante Bluetooth. Primero se ocupa un módulo Bluetooth, y de esos también hay bastantes sabores. De los que yo conozco estan el <a href="http://www.sparkfun.com/products/582">BlueSmirf</a> y los Bluetooth Shield (<a href="http://iteadstudio.com/store/index.php?main_page=product_info&amp;cPath=18&amp;products_id=307">slave</a> y <a href="http://iteadstudio.com/store/index.php?main_page=product_info&amp;cPath=18&amp;products_id=468">slave/master</a>).</p>
<p>Existe un proyecto de código abierto llamado <a href="http://www.amarino-toolkit.net/">Amarino</a> que ofrece un API para Android y la librería para Arduino. Ya lo utilicé y es bastante sencillo una vez comprendido las bases.</p>
<p>Espero que esta información introductoria les sea de utilidad, proximamente postearé más información con ejemplos reales. Pueden revisar mi blog en la sección de Arduino, ahi ya he colocado un par de videos de mi pruebas con Microbrige.</p>
<p>Referencias:</p>
<ol>
<li><a href="http://romfont.com/2011/05/12/google%E2%80%99s-open-accessory-development-kit-on-standard-arduino-hardware/">Google&#8217;s Open Accessory Development Kit on Standard Arduino Hardware</a>.</li>
<li><a href="http://romfont.com/2011/05/15/microbridge-adb-support-for-arduino/">MicroBridge: ADB support for Arduino</a></li>
<li><a href="http://www.amarino-toolkit.net/">Amarino</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2011/09/06/de-arduino-a-android-y-de-vuelta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PixelCamera1</title>
		<link>http://www.fr4gus.com/2011/08/29/pixelcamera1/</link>
		<comments>http://www.fr4gus.com/2011/08/29/pixelcamera1/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 02:43:34 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Gallery]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=529</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2011/08/29/pixelcamera1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Megaman</title>
		<link>http://www.fr4gus.com/2011/08/29/megaman/</link>
		<comments>http://www.fr4gus.com/2011/08/29/megaman/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 02:38:48 +0000</pubDate>
		<dc:creator>Franklin García</dc:creator>
				<category><![CDATA[Gallery]]></category>

		<guid isPermaLink="false">http://www.fr4gus.com/?p=528</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.fr4gus.com/2011/08/29/megaman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

