<?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>Droided Sweetter</title>
	<atom:link href="http://enriqueandrada.es/droidedsweetter/feed/" rel="self" type="application/rss+xml" />
	<link>http://enriqueandrada.es/droidedsweetter</link>
	<description>La app Android de Sweetter</description>
	<lastBuildDate>Tue, 06 Dec 2011 23:19:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tratando con Django y Sweetter</title>
		<link>http://enriqueandrada.es/droidedsweetter/entornos/tratando-con-django-y-sweetter/</link>
		<comments>http://enriqueandrada.es/droidedsweetter/entornos/tratando-con-django-y-sweetter/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 23:10:21 +0000</pubDate>
		<dc:creator>bo_</dc:creator>
				<category><![CDATA[Entornos]]></category>

		<guid isPermaLink="false">http://enriqueandrada.es/droidedsweetter/?p=17</guid>
		<description><![CDATA[He estado últimamente enfrascado en la investigación del framework Django. Django hace páginas web dinámicas muy rápidamente, con un motor de persistencia integrado que me ha dejado alucinado y que sigue más o menos el patrón Modelo-Vista-Controlador, apoyándose en una estructura de plantillas para evitar repetir código. La verdad es que por ahora sólo me<a href="http://enriqueandrada.es/droidedsweetter/entornos/tratando-con-django-y-sweetter/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>He estado últimamente enfrascado en la investigación del framework <a href="https://www.djangoproject.com/" title="Django">Django</a>. Django hace páginas web dinámicas muy rápidamente, con un motor de persistencia integrado que me ha dejado alucinado y que sigue más o menos el patrón Modelo-Vista-Controlador, apoyándose en una estructura de plantillas para evitar repetir código.</p>
<p>La verdad es que por ahora sólo me he limitado a seguir el tutorial y ver las equivalencias en el código de sweetter. La idea ahora mismo es aprender lo suficiente como para empezar a desarrollar una aplicación en Django que acepte peticiones HTTP y responda a ellas. Más tarde haré un equivalente simple en Android. Después, con lo aprendido, generaré un plugin para Sweetter a modo de API HTTP y, por último, crearé la aplicación Android con la funcionalidad básica de Sweetter.</p>
<p>Todo eso suena genial y parece sencillo. Basta con ponerse, ¿no? Pues no sólo basta con ello. Ahora mismo, el principal escollo que me estoy encontrando es instalar Sweetter en mi máquina para aprender un poco del funcionamiento real. Creo que lo he hecho todo correctamente pero, aún así, &#8220;casca&#8221; al intentar generar automáticamente la base de datos. Este es el traceback de excepciones:</p>
<p><code><br />
Traceback (most recent call last):<br />
  File "/home/kike/pfc/sweetter/sweetter/manage.py", line 11, in <module><br />
    execute_manager(settings)<br />
  File "/usr/lib/python2.7/dist-packages/django/core/management/__init__.py", line 438, in execute_manager<br />
    utility.execute()<br />
  File "/usr/lib/python2.7/dist-packages/django/core/management/__init__.py", line 379, in execute<br />
    self.fetch_command(subcommand).run_from_argv(self.argv)<br />
  File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 191, in run_from_argv<br />
    self.execute(*args, **options.__dict__)<br />
  File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 209, in execute<br />
    translation.activate('en-us')<br />
  File "/usr/lib/python2.7/dist-packages/django/utils/translation/__init__.py", line 100, in activate<br />
    return _trans.activate(language)<br />
  File "/usr/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 202, in activate<br />
    _active.value = translation(language)<br />
  File "/usr/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 185, in translation<br />
    default_translation = _fetch(settings.LANGUAGE_CODE)<br />
  File "/usr/lib/python2.7/dist-packages/django/utils/translation/trans_real.py", line 162, in _fetch<br />
    app = import_module(appname)<br />
  File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module<br />
    __import__(name)<br />
  File "/home/kike/pfc/sweetter/sweetter/../sweetter/ublogging/__init__.py", line 7, in <module><br />
    mod = __import__(modname)<br />
  File "/home/kike/pfc/sweetter/sweetter/../sweetter/contrib/userform/UserForm.py", line 4, in <module><br />
    from ublogging.api import Plugin<br />
  File "/home/kike/pfc/sweetter/sweetter/ublogging/__init__.py", line 9, in <module><br />
    classobj = getattr(mod, clazzname)<br />
AttributeError: 'module' object has no attribute 'UserForm'</p>
<p></code></p>
<p>Estoy seguro de que es algo de configuración. Algo estoy poniendo mal en el settings que hace que no coja bien o los plugins o las apps instaladas. </p>
<p>Mientras tanto, ya tengo configurado Eclipse con PyDev para hacer mi pequeño &#8220;listener&#8221; que aceptará peticiones HTTP basiquísimas.</p>
<p>Seguiremos informando. </p>
]]></content:encoded>
			<wfw:commentRss>http://enriqueandrada.es/droidedsweetter/entornos/tratando-con-django-y-sweetter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tarea de entornos: Instalación de Android 2.3 en el terminal de pruebas</title>
		<link>http://enriqueandrada.es/droidedsweetter/entornos/hola-mundo/</link>
		<comments>http://enriqueandrada.es/droidedsweetter/entornos/hola-mundo/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 23:41:39 +0000</pubDate>
		<dc:creator>bo_</dc:creator>
				<category><![CDATA[Entornos]]></category>
		<category><![CDATA[cyanogen]]></category>
		<category><![CDATA[gingerbread]]></category>
		<category><![CDATA[orange boston]]></category>
		<category><![CDATA[root]]></category>

		<guid isPermaLink="false">http://enriqueandrada.es/droidedsweetter/?p=1</guid>
		<description><![CDATA[Hace tres meses que me he agenciado un LG Optimus 2X, por lo que he podido destinar mi Orange Boston (que resulta que tiene &#8220;secretos&#8221; ocultos) para el desarrollo del proyecto. La versión de Android que tenía instalada era una 2.1update, oficial de Orange y limpita después de hacer un hard reset. Después de investigar<a href="http://enriqueandrada.es/droidedsweetter/entornos/hola-mundo/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>Hace tres meses que me he agenciado un<a href="http://www.elandroidelibre.com/2011/01/lg-optimus-2x-toda-la-potencia-android-encabezando-la-tercera-generacion-de-smartphones.html"> LG Optimus 2X</a>, por lo que he podido destinar mi Orange Boston (que resulta que tiene &#8220;<a href="http://www.elandroidelibre.com/2010/12/el-secreto-del-orange-boston.html">secretos</a>&#8221; ocultos) para el desarrollo del proyecto.</p>
<p>La versión de Android que tenía instalada era una 2.1update, oficial de Orange y limpita después de hacer un hard reset. Después de investigar un poco, decidí desarrollar mi proyecto para que su versión de funcionamiento mínima fuera Android 2.3, nombre comercial Gingerbread. Es decir, usar el API level 9. Realmente podría haber decidido alguna versión anterior, porque creo, sin aún haber entrado profundamente en las opciones de diseño de Droided Sweetter, que las <a href="http://developer.android.com/sdk/android-2.3.html">capacidades añadidas</a> de esta versión no me van a resultar imprescindibles en el desarrollo. Pero el hecho de que el gran subidón en el número de aplicaciones se diera mientras la mayor parte de los terminales tenían 2.2 y 2.3 y debido a que tengo un poco de &#8220;versionitis&#8221; me he decidido por esta última. Desestimo Honeycomb (3.x) porque está destinada a tablets y Ice Cream Sandwich (4.0) porque ha salido hace poco y no habrá tanta documentación y código escrito para ella como para Gingerbread.</p>
<p>&nbsp;</p>
<p><a href="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/gingerbread-android.jpg"><img class="aligncenter size-full wp-image-11" title="gingerbreadAndroid" src="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/gingerbread-android.jpg" alt="" width="320" height="320" /></a></p>
<p>Así que, una vez decidida la versión a instalar, me he dispuesto a actualizar el Orange Boston. Tras leer un poco sobre el tema de las roms cocinadas,  me he decidido por una Cyanogen 7.1, una versión experimental pero de la que todo el mundo habla maravillas. Hay una <a href="http://wiki.cyanogenmod.com/wiki/Commtiva_Z71:_Full_Update_Guide">explicación detallada</a> en su web que vamos a seguir escrupulosamente, así que&#8230; ¡manos a la obra!</p>
<h3>1) Hacer backup</h3>
<p style="padding-left: 30px;">Tras un hard reset, poco backup hace falta hacer, así que ignoré este paso. El backup de la rom se hará en próximos pasos así que nada que hacer aquí.</p>
<h3>2) &#8220;Rootear&#8221; el terminal</h3>
<p style="padding-left: 30px;">Este paso es con diferencia el que más guerra me ha dado. Primero lo intenté con una aplicación, Universal Androot, pero no tuvo éxito. Después seguí <a href="http://www.htcmania.com/showpost.php?p=1073610&amp;postcount=1">este</a> tutorial, pero parece ser que el hard reset alteró de algún modo el terminal, haciendo que los drivers oficiales no sirvan para detectar el terminal en el modo FMT. También influye que mi sistema operativo sea Windows 7 64b. Una lástima. Tal y como nos indican en la wiki de Cyanogen, hay otra opción, que es flashear una ROM cocinada con el root ya habilitado, y nos recomiendan seguir <a href="http://albert-david.blogspot.com/2010/10/rooting-spice-mi-300.html">estos</a> pasos. De nuevo falló. El modo Recovery daba un mensaje de error, &#8220;android prepare failed. rc = -203&#8243;. No ha habido manera de saber qué significa eso en mi terminal. De cualquier modo, seguía sin poder adquirir permisos de root en el Boston. Una tercera opción sería hacerlo manualmente subiendo mediante <em>adb</em> el su y el superuser y ejecutarlo todo por línea de comando, pero de nuevo los drivers me impedían que el adb detectara el terminal. Ya casi desesperado encontré una aplicación que resultó ser mano de santo: <a href="http://forum.xda-developers.com/showthread.php?t=833953">z4root</a>. Una vez más XDA-Developers al rescate. La instalé, la ejecuté&#8230;¡et voilà! Ya tenía permisos de root en mi terminal. Uff, ha costado.</p>
<p style="padding-left: 30px;"><a href="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/androidSweat.jpg"><img class="aligncenter size-full wp-image-13" title="androidSweat" src="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/androidSweat.jpg" alt="" width="240" height="189" /></a></p>
<p>&nbsp;</p>
<h3>3) Instalar Clockworkmod Recovery</h3>
<p style="padding-left: 30px;">Como no tengo un modo Recovery cocinado, me dispuse a instalar el recomendado. Para ello, descargué del market <a href="http://market.android.com/details?id=com.koushikdutta.rommanager">ROM Manager</a>, un gestor de ROMs espectacular. Instalamos el Clockworkmod Recovery, que es una modificación de nuestro modo Recovery original. Esto nos pedirá permisos de administrador, que le daremos gustosamente, con lo que me costó conseguirlos&#8230;</p>
<p>&nbsp;</p>
<h3>4) Flashear la rom Cyanogenmod</h3>
<p style="padding-left: 30px;">Me descargué de  <a href="http://wiki.cyanogenmod.com/wiki/Latest_Version#Commtiva_Z71">aquí</a> la última versión, que aunque fuera experimental había leído que era bastante estable (&#8220;versionitis&#8221;, recordemos). También descargué las google apps, que siempre son interesantes y apenas ralentizan. Coloqué los <em>zip</em> en la raíz de mi tarjeta sd (que para el <a href="https://market.android.com/details?id=org.swiftp&amp;feature=search_result#?t=W251bGwsMSwxLDEsIm9yZy5zd2lmdHAiXQ..">SwiFTP</a> fue /mnt/sdcard) y reinicié en modo recovery (botón cámara + botón VolumenUp + Power On) y saltó perfectamente el mod instalado anteriormente. Aquí sí hice un backup de la rom instalada, por si las moscas. Borré los valores indicados (datos de usuario y caché) y procedí a instalar, primero el zip de cyanogen y luego las google apps. Hay que decir, como se ve en la imagen, que todo es muy muy intuitivo y no tuve ningún problema. Únicamente tuve que pulsar el botón Power On para volver atrás y elegir la opción de reboot. Una vez reiniciado, ya tenía la asombrosamente bien optimizada Cyanogen 7.1.0-Z71 y el Orange Bosto va como la seda.</p>
<p>&nbsp;</p>
<p><a href="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/ClockworkMod-Recovery.jpg"><img class="aligncenter size-full wp-image-15" title="ClockworkMod-Recovery" src="http://enriqueandrada.es/droidedsweetter/wp-content/uploads/2011/11/ClockworkMod-Recovery.jpg" alt="" width="445" height="262" /></a></p>
<p>&nbsp;</p>
<p>No quiero cerrar la entrada sin recomendar encarecidamente el programa <a href="https://market.android.com/details?id=org.swiftp&amp;feature=search_result#?t=W251bGwsMSwxLDEsIm9yZy5zd2lmdHAiXQ..">SwiFTP</a>. Es un pequeño servidor FTP que se monta en el móvil y con unas configuraciones mínimas pemite la transferencia de ficheros entre nuestro PC y el terminal mediante la red Wifi, cliente FTP mediante, por supuesto. Usando Filezilla me resultó comodísimo transferir la aplicación de root, hacer la copia de seguridad y  pasar a la SD los zips de las ROMs. Me ahorró muchísimo tiempo.</p>
<p>&nbsp;</p>
<p>Muy probablemente, la siguiente entrada vaya sobre cómo instalar Sweetter 3.0. Ya veremos qué tal se da.</p>
]]></content:encoded>
			<wfw:commentRss>http://enriqueandrada.es/droidedsweetter/entornos/hola-mundo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- Cargado originalmente en 2.55 segundos (2012-05-31, 20:46:43). -->