<?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>Iker Perez de Albeniz &#187; howto</title>
	<atom:link href="http://www.ikeralbeniz.net/tag/howto/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ikeralbeniz.net</link>
	<description>mi propio egolog sobre tecnología y frikadas varias</description>
	<lastBuildDate>Mon, 26 Apr 2010 15:54:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sencillo Mirror de imágenes para tu Blog usando Google App Engine</title>
		<link>http://www.ikeralbeniz.net/2010/01/25/sencillo-mirror-de-imagenes-para-tu-blog-usando-google-app-engine/</link>
		<comments>http://www.ikeralbeniz.net/2010/01/25/sencillo-mirror-de-imagenes-para-tu-blog-usando-google-app-engine/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 16:59:53 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Content Delivery Network]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google App Engine]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[imagenes]]></category>
		<category><![CDATA[mirror]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[reposotorio]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=116</guid>
		<description><![CDATA[Muchos de los Hostings que usamos para albergar nuestras webs tienen una limitación de ancho de banda mensual. Por tanto es bastante interesante disponer de un sistema de almacenamiento de imágenes que nos permita disponer de dichos archivos sin consumir ancho de banda de nuestro posting. En este artículo voy a explicar como realizar una pequeña aplicación para tener nuestro mirror de imágenes.]]></description>
			<content:encoded><![CDATA[<p>Muchos de los Hostings que usamos para albergar nuestras webs tienen una limitación de ancho de banda mensual. Por tanto es bastante interesante disponer de un sistema de almacenamiento de imágenes que nos permita disponer de dichos archivos sin consumir ancho de banda de nuestro posting. En este artículo voy a explicar como realizar una pequeña aplicación para tener nuestro mirror de imágenes.</p>
<p>En este articulo no voy a dar por echo que el lector conoce y se maneja en el entorno Google App Engine por tanto me centrare en explicar el código utilizado.</p>
<p><span style="text-decoration: underline;"><strong>main.py</strong></span></p>
<fieldset>import cgi<br />
import os<br />
from google.appengine.api import users<br />
from google.appengine.ext import webapp<br />
from google.appengine.ext.webapp.util import run_wsgi_app<br />
import google.appengine.ext.webapp.util<br />
from google.appengine.ext import db<br />
from google.appengine.ext.webapp import template</p>
<p>class Mirror(db.Model):<br />
&nbsp;name = db.TextProperty()<br />
&nbsp;mime = db.TextProperty()<br />
&nbsp;picture = db.BlobProperty(default=None)</p>
<p>class GetImage(webapp.RequestHandler):<br />
&nbsp;def get(self,name):<br />
&nbsp;&nbsp;image = getImageFile(name)<br />
&nbsp;&nbsp;if (movie and movie.picture):<br />
&nbsp;&nbsp;&nbsp;self.response.headers['Content-Type'] = image.mime<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(image.picture)<br />
&nbsp;&nbsp;else:<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;&lt;!DOCTYPE HTML PUBLIC \&#8221;-//IETF//DTD HTML 2.0//EN\&#8221;&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;&lt;html&gt;\r\n\t&lt;head&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;title&gt;404 Not Found&lt;/title&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;\t&lt;/head&gt;\r\n\t&lt;body&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;h1&gt;Not Found&lt;/h1&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;p&gt;The requested URL /%s was not found on this server.&lt;/p&gt;\r\n&#8221;%name)<br />
&nbsp;&nbsp;&nbsp;self.response.out.write(&#8220;\t&lt;/body&gt;\r\n&lt;/html&gt;\r\n&#8221;)</p>
<p>def getImageFile(name):<br />
&nbsp;images = Mirror.all()<br />
&nbsp;for image in images:<br />
&nbsp;&nbsp;if image.name == name:<br />
&nbsp;&nbsp;&nbsp;return image<br />
&nbsp;return None</p>
<p>class MainHandler(webapp.RequestHandler):</p>
<p>&nbsp;def get(self):<br />
&nbsp;&nbsp;images = Mirror.all()<br />
&nbsp;&nbsp;template_values = {<br />
&nbsp;&nbsp;&nbsp;&#8217;error&#8217;: &#8220;&#8221;,<br />
&nbsp;&nbsp;&nbsp;&#8217;images&#8217;: images,<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;path = os.path.join(os.path.dirname(__file__), &#8216;form.html&#8217;)<br />
&nbsp;&nbsp;self.response.out.write(template.render(path, template_values))</p>
<p>&nbsp;def post(self):<br />
&nbsp;&nbsp;newimage = Mirror()<br />
&nbsp;&nbsp;imagedata = self.request.get(&#8220;image&#8221;)<br />
&nbsp;&nbsp;newimage.picture = db.Blob(imagedata)<br />
&nbsp;&nbsp;newimage.name = self.request.POST[u'image'].filename<br />
&nbsp;&nbsp;newimage.mime = self.request.POST[u'image'].type<br />
&nbsp;&nbsp;newimage.put()<br />
&nbsp;&nbsp;self.redirect(&#8220;/&#8221;)</p>
<p>def main():<br />
&nbsp;application = webapp.WSGIApplication([('/', MainHandler),(r'/(.*)', GetImage)],debug=True)<br />
&nbsp;run_wsgi_app(application)</p>
<p>if __name__ == &#8216;__main__&#8217;:<br />
&nbsp;main()</fieldset>
<p>Comos sabéis la aplicación que subimos a los servidores de Google corren en una SandBox donde no es posible escribir en disco, por tanto usaremos el sistema de almacenamiento de GAE para almacenar las imágenes. Por tanto primero de todo deberemos definir un modelo de datos.</p>
<fieldset>class Mirror(db.Model):<br />
&nbsp;name = db.TextProperty()<br />
&nbsp;mime = db.TextProperty()<br />
&nbsp;picture = db.BlobProperty(default=None)</fieldset>
<p>En este caso definimos la estructura Mirror con sus propiedades name (nombre de la imagen), mime (mime de la imagen) y picture (la imagen en bruto).</p>
<p>Comos sabéis el sistema de paths de GAE es gestionado a través de SGIApplication por tanto para poder acceder a las imágenes almacenadas deberemos definir una política de paths. En este caso he definido la siguiente:</p>
<fieldset>application = webapp.WSGIApplication([('/', MainHandler),(r'/(.*)', GetImage)],debug=True)<br />
run_wsgi_app(application)</fieldset>
<p>Es decir en caso de acceder a / se nos mostrara la pagina principal a través de la clase MainHandler y en caso de que se nos muestre /<loquesea> se nos mostrara el archivos <loquesea> a través de la classe GetImage.</p>
<p><strong>La Clase MainHandler</strong></p>
<fieldset>class MainHandler(webapp.RequestHandler):</p>
<p>def get(self):<br />
&nbsp;images = Mirror.all()<br />
&nbsp;template_values = {<br />
&nbsp;&nbsp;&#8217;error&#8217;: &#8220;&#8221;,<br />
&nbsp;&nbsp;&#8217;images&#8217;: images,<br />
&nbsp;}<br />
&nbsp;path = os.path.join(os.path.dirname(__file__), &#8216;form.html&#8217;)<br />
&nbsp;self.response.out.write(template.render(path, template_values))</p>
<p>def post(self):<br />
&nbsp;newimage = Mirror()<br />
&nbsp;imagedata = self.request.get(&#8220;image&#8221;)<br />
&nbsp;newimage.picture = db.Blob(imagedata)<br />
&nbsp;newimage.name = self.request.POST[u'image'].filename<br />
&nbsp;newimage.mime = self.request.POST[u'image'].type<br />
&nbsp;newimage.put()<br />
&nbsp;self.redirect(&#8220;/&#8221;)</fieldset>
<p>La clase MainHandler en caso de se accedida mediante GET mostrara el formulario HTML (form.html) y un listado de imágenes almacenadas, para hacer mas legible el código he optado por usar la funcionalidad de platillas que ofrece GAE. </p>
<p>El formulario envía su mismo path la imagen utilizando el método POST por tanto en el tetrodo POST de la clase MainHandler donde se almacenara la imagen enviada.</p>
<p><strong>La Clase GetImage</strong></p>
<fieldset>class GetImage(webapp.RequestHandler):<br />
&nbsp;def get(self,name):<br />
&nbsp;image = getImageFile(name)<br />
&nbsp;if (movie and movie.picture):<br />
&nbsp;&nbsp;self.response.headers['Content-Type'] = image.mime<br />
&nbsp;&nbsp;self.response.out.write(image.picture)<br />
&nbsp;else:<br />
&nbsp;&nbsp;self.response.out.write(&#8220;&lt;!DOCTYPE HTML PUBLIC \&#8221;-//IETF//DTD HTML 2.0//EN\&#8221;&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;&lt;html&gt;\r\n\t&lt;head&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;title&gt;404 Not Found&lt;/title&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;\t&lt;/head&gt;\r\n\t&lt;body&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;h1&gt;Not Found&lt;/h1&gt;\r\n&#8221;)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;\t\t&lt;p&gt;The requested URL /%s was not found on this server.&lt;/p&gt;\r\n&#8221;%name)<br />
&nbsp;&nbsp;self.response.out.write(&#8220;\t&lt;/body&gt;\r\n&lt;/html&gt;\r\n&#8221;)</fieldset>
<p>La clase getImage recoge en el parámetro nombre de la función get el resultado de la expresión regular definida en el <em>path r’(.*)’</em>. Por tanto en este caso name será el nombre del archivo. Mediante la función getImageFile recorremos la base de datos y buscamos el archivo solicitado. </p>
<fieldset>def getImageFile(name):<br />
&nbsp;images = Mirror.all()<br />
&nbsp;for image in images:<br />
&nbsp;&nbsp;if image.name == name:<br />
&nbsp;&nbsp;&nbsp;return image<br />
&nbsp;return None</fieldset>
<p>Si existe el archivo este es mostrado modificando la cabecera Content-Type con el mime del archivo para que el navegador lo muestre correctamente. En caso contrario se muestra un mensaje de error.</p>
<p><span style="text-decoration: underline;"><strong>form.html</strong></span></p>
<fieldset>&lt;!DOCTYPE HTML PUBLIC &#8220;-//IETF//DTD HTML 2.0//EN&#8221;&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Upload File&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Select File to Upload&lt;/h1&gt;<br />
&lt;form action=&#8221;" method=&#8221;POST&#8221; enctype=&#8221;multipart/form-data&#8221; &gt;<br />
&lt;input name=&#8221;image&#8221; type=&#8221;file&#8221; size=&#8221;42&#8243; /&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Upload&#8221;&gt;<br />
&lt;/form&gt;<br />
&lt;H1&gt;Index of Files&lt;/H1&gt;<br />
&lt;PRE&gt;<br />
&lt;IMG SRC=&#8221;/blank.gif&#8221; ALT=&#8221;     &#8220;&gt; &lt;A HREF=&#8221;?N=D&#8221;&gt;Name&lt;/A&gt;<br />
&lt;HR&gt;<br />
{% for image in images %}<br />
&lt;IMG SRC=&#8221;/image2.gif&#8221; ALT=&#8221;[IMG]&#8220;&gt; &lt;A HREF=&#8221;/{{image.name}}&#8221;&gt;{{image.name}}&lt;/A&gt;<br />
{% endfor %}<br />
&lt;/PRE&gt;<br />
&lt;HR&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</fieldset>
<p>Se trata de un ejemplo sencillo, no hay validación de imágenes duplicadas. Además seria posible enviar un código de control a través de la petición POST para evitar que nos suban imágenes de terceros o incluso usar el sistema de loging de Google.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2010/01/25/sencillo-mirror-de-imagenes-para-tu-blog-usando-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Instalando ANDROID + ECLIPSE en WINDOWS (2000 o XP)</title>
		<link>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/</link>
		<comments>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 10:37:34 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=131</guid>
		<description><![CDATA[En el artículo anterior explicábamos como <a href="http://bendertheandroid.blogspot.com/2007/11/instalando-android-eclipse-en-ubuntu.html">instalar ANDROID y  ECLIPSE  en UBUNTU</a>. Ahora toca el turno a Windows y puesto que la configuración de eclipse es la misma en ambos sistemas operativos solo se explicara como se instalan el SDK y ECILPSE en el ordenador.]]></description>
			<content:encoded><![CDATA[<p>En el artículo anterior explicábamos como <a href="http://bendertheandroid.blogspot.com/2007/11/instalando-android-eclipse-en-ubuntu.html">instalar ANDROID y  ECLIPSE  en UBUNTU</a>. Ahora toca el turno a Windows y puesto que la configuración de eclipse es la misma en ambos sistemas operativos solo se explicara como se instalan el SDK y ECILPSE en el ordenador.</p>
<p>El primer paso es instalar el SDK, para lo cual nos lo descargaremos de esta dirección:</p>
<p><a href="http://dl.google.com/android/android_sdk_windows_m3-rc20a.zip">http://dl.google.com/android/android_sdk_windows_m3-rc20a.zip</a></p>
<p>Una vez descargado y descomprimida cambiamos el nombre de la carpeta  <b>“android_sdk_windows_m3-rc20a”</b> por <b>“android_sdk”</b> y la movemos a nuestro <b>C:\Archivos de Programa\</b>.</p>
<p>Para terminar la instalación solo falta añadir la ruta del SDK al path, para lo cual vamos a <b>INICIO> Configuración > Panel de Control</b> y entramos en <b>Sistema</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzwoy0NpOiI/AAAAAAAAAB8/ibv9pc1xZSM/s1600-h/android.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzwoy0NpOiI/AAAAAAAAAB8/ibv9pc1xZSM/s320/android.png" alt="" id="BLOGGER_PHOTO_ID_5133022528769964578" border="0" /></a></p>
<p>Dentro del panel de Sistema vamos a la pestaña <b>Opciones Avanzadas</b> y pulsamos en <b>Variables de Entorno</b></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YsgLljqoEIQ/RzwpPENpOjI/AAAAAAAAACE/yaMAYr1LG6U/s1600-h/android1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YsgLljqoEIQ/RzwpPENpOjI/AAAAAAAAACE/yaMAYr1LG6U/s320/android1.png" alt="" id="BLOGGER_PHOTO_ID_5133023014101269042" border="0" /></a></p>
<p>Se nos mostraran dos listas de variables: <b>Variables de usuario para usuario</b> y <b>variables del sistema</b>. En nuestro caso añadiremos una variable y cambiaremos el path en la lista de <b>Variables del sistema</b> para que todos los usuarios tengan acceso al SDK.</p>
<p>Por tanto pulsaremos en <b>Nueva</b> y nos aparecerá un cuadro de dialogo donde meteremos el nombre de la variable y su ruta. En el caso del SDK pondremos como nombre SDK_ROOT y la ruta C:\Archivos de Programa\android_sdk y pulsamos <b>Aceptar</b>. La nueva variable se añadirá a la lista.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/RzwpaUNpOkI/AAAAAAAAACM/mcUYYG9UVg8/s1600-h/android2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/RzwpaUNpOkI/AAAAAAAAACM/mcUYYG9UVg8/s320/android2.png" alt="" id="BLOGGER_PHOTO_ID_5133023207374797378" border="0" /></a></p>
<p>Ya solo falta añadir la ruta al path, por tanto, buscamos la variable <b>PATH</b> de la lista de Variables del sistema, y pulsamos sobre ella dos veces. Se nos aparecerá el mismo cuadro de dialogo de antes peor esta vez completo con el nombre PATH un montón de rutas que están añadidas al path separadas por <b>“;”</b>. Por tanto añadiremos los siguiente al final del campo Valor de la variable: <b>;%SDK_ROOT%\tools</b></p>
<p>NOTA: no olvidar el <b>“;”</b> ni los <b>“%”</b></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YsgLljqoEIQ/RzwplkNpOlI/AAAAAAAAACU/C7A-PMFrZ-A/s1600-h/android3.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YsgLljqoEIQ/RzwplkNpOlI/AAAAAAAAACU/C7A-PMFrZ-A/s320/android3.png" alt="" id="BLOGGER_PHOTO_ID_5133023400648325714" border="0" /></a></p>
<p>Pulsamos <b>Aceptar</b> a todas las ventanas hasta cerrarlas todas y ya tenemos el SDK instalado.</p>
<p>Y asolo faltaría instalar <a href="http://www.eclipse.org/">Eclipse</a>. Para instalar eclipse solo hay que descargarse eclipse del siguiente <a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20071103/eclipse-java-europa-fall2-win32.zip&amp;url=http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/technology/epp/downloads/release/20071103/eclipse-java-europa-fall2-win32.zip&amp;mirror_id=17">enlace</a>, descomprimirlo y mover la carpeta a <b>C:\Archivos de Programa\</b>. (para que esté todo mas ordenado..)</p>
<p>A partir de aquí faltaría configurar y plugin de android para eclipse. Los pasos son idénticos que en Ubuntu así que podéis seguir los mismos pasos que se indican en el articulo anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2007/11/15/instalando-android-eclipse-en-windows-2000-o-xp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando ANDROID + ECLIPSE en UBUNTU</title>
		<link>http://www.ikeralbeniz.net/2007/11/14/instalando-android-eclipse-en-ubuntu/</link>
		<comments>http://www.ikeralbeniz.net/2007/11/14/instalando-android-eclipse-en-ubuntu/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 10:44:11 +0000</pubDate>
		<dc:creator>Iker</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.ikeralbeniz.net/?p=135</guid>
		<description><![CDATA[En este artículo vamos a explicar mas detalladamente la instalación de <a href="http://code.google.com/android">ANDROID SDK</a>, <a href="http://www.eclipse.org/">ECLIPSE</a> y el PLUGIN DE ANDROID para eclipse en <a href="http://www.ubuntu.com/">UBUNTU</a>. Básicamente son las mismas instrucciones que aparecen en la pagina de google pero un poco mas comentadas y con imágenes, para que aquellos que siempre se os atraviesan las instalaciones lo tengáis mas fácil.]]></description>
			<content:encoded><![CDATA[<p>En este artículo vamos a explicar mas detalladamente la instalación de <a href="http://code.google.com/android">ANDROID SDK</a>, <a href="http://www.eclipse.org/">ECLIPSE</a> y el PLUGIN DE ANDROID para eclipse en <a href="http://www.ubuntu.com/">UBUNTU</a>. Básicamente son las mismas instrucciones que aparecen en la pagina de google pero un poco mas comentadas y con imágenes, para que aquellos que siempre se os atraviesan las instalaciones lo tengáis mas fácil.</p>
<p>NOTA: En esta guía supondremos que hacemos una instalación para el usuario de nombre &#8220;user&#8221;.</p>
<p>Lo primero descargar ABDROID SDK, podes hacerlo con vuestro navegador o por consola con wget. Por tanto abrimos una consola y nos situamos en nuestro home. Descomprimimos y cambiamos en nombre del directorio &#8220;android_sdk_linux_m3-rc20a&#8221; por &#8220;android_sdk&#8221;</p>
<fieldset><span style="font-size:85%;"><span style="font-family:courier new;">user@ubuntu:~$ wget http://dl.google.com/android/android_sdk_linux_m3-rc20a.zip</span><br />
<span style="font-family:courier new;">user@ubuntu:~$ unzip android_sdk_linux_m3-rc20a.zip</span><br />
<span style="font-family:courier new;">user@ubuntu:~$ mv android_sdk_linux_m3-rc20a android_sdk</span></span><br />
</fieldset>
<p>Finalmente para terminar la instalación tendremos que añadir el SDK al path, por tanto editaremos el archivo .bashrc de nuestro /home con cualquier editor de texto (vi, gedit, kate&#8230;) y añadiremos las siguientes des lineas al final del documento:</p>
<fieldset><span style="font-size:85%;"><span style="font-family:courier new;">user@ubuntu:~$ vi /home/user/.bashrc</span></p>
<p><span style="font-family:courier new;">export SDK_ROOT=/home/user/android_sdk</span><br />
<span style="font-family:courier new;">export PATH=$SDK_ROOT/tools:$PATH</span></span><br />
</fieldset>
<p>Y atenemos el SDK instalado y es posible acceder a sus aplicaciones desde consola, por tanto ahora nos queda instalar un IDE para programar cómodamente nuestras aplicaciones. Para eso el IDE idóneo es ECLIPSE ya que existen plugins para trabajar con ABDROID de forma sencilla.</p>
<p>Por tanto, en caso de que no lo hubiéramos instalado, pasamos a instalar ECLIPSE:</p>
<fieldset><span style="font-size:85%;"><span style="font-family:courier new;">user@ubuntu:~$ apt-get install eclipse</span></span><br />
</fieldset>
<p>Tras descargarse, se instalara automáticamente gracias a APT por lo que una vez finalizada la instalación ya podremos lanzar eclipse. En caso de que no dispongas de ningún acceso directo a la aplicación podéis acceder por consola.</p>
<fieldset><span style="font-size:85%;"><span style="font-family:courier new;">user@ubuntu:~$ eclipse</span></span><br />
</fieldset>
<p>Una vez iniciado eclipse nos vamos al menú <b>Help > Software Updates > Find and Install&#8230;</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt5m0EMMiI/AAAAAAAAAAc/Gg6FoyFjXcs/s1600-h/android.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt5m0EMMiI/AAAAAAAAAAc/Gg6FoyFjXcs/s320/android.png" alt="" id="BLOGGER_PHOTO_ID_5132829908037022242" border="0" /></a></p>
<p>Seleccionamos <b>Search for new features to install</b> y pulsamos  <b>Next</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt52UEMMjI/AAAAAAAAAAk/w5W0gHD4o_s/s1600-h/android1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt52UEMMjI/AAAAAAAAAAk/w5W0gHD4o_s/s320/android1.png" alt="" id="BLOGGER_PHOTO_ID_5132830174324994610" border="0" /></a></p>
<p>Pulsamos <b>New Remote Site</b> y se nos mostrara un dialogo que nos pedirá una URL y un nombre para identificar el “repositorio”. Por nombre podemos poner “Android” y en la URL introducimos la siguiente dirección:</p>
<p>https://dl-ssl.google.com/android/eclipse/</p>
<p>y pulsamos <b>OK</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YsgLljqoEIQ/Rzt6EEEMMkI/AAAAAAAAAAs/_NR0xvsg3Ds/s1600-h/android2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YsgLljqoEIQ/Rzt6EEEMMkI/AAAAAAAAAAs/_NR0xvsg3Ds/s320/android2.png" alt="" id="BLOGGER_PHOTO_ID_5132830410548195906" border="0" /></a></p>
<p>Se nos añadirá un repositorio a la lista, lo seleccionamos (si no lo esta) y pulsamos <b>Finish</b>.</p>
<p>Nos aparecerá ahora un árbol con la siguiente estructura: <b>Android Plugin > Eclipse Integration > Android Development Tools</b>, los seleccionamos todos y pulsamos <b>Next</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt6S0EMMlI/AAAAAAAAAA0/lq1BgYdD2xo/s1600-h/android3.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt6S0EMMlI/AAAAAAAAAA0/lq1BgYdD2xo/s320/android3.png" alt="" id="BLOGGER_PHOTO_ID_5132830663951266386" border="0" /></a></p>
<p>Aceptamos las condiciones de la licencia y pulsamos <b>Next</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt6eUEMMmI/AAAAAAAAAA8/bofiajTlTt8/s1600-h/android4.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt6eUEMMmI/AAAAAAAAAA8/bofiajTlTt8/s320/android4.png" alt="" id="BLOGGER_PHOTO_ID_5132830861519762018" border="0" /></a></p>
<p>Finalmente nos aparecerá una lista de tareas a instalar, y nos aparecerá “Android Developm..”, y pulsamos <b>Finish</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt6mkEMMnI/AAAAAAAAABE/nkNXO3tNUQE/s1600-h/android5.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt6mkEMMnI/AAAAAAAAABE/nkNXO3tNUQE/s320/android5.png" alt="" id="BLOGGER_PHOTO_ID_5132831003253682802" border="0" /></a></p>
<p>El instalador descargara el paquete y lo instalara automáticamente.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt6ukEMMoI/AAAAAAAAABM/QbuWq3iPGR0/s1600-h/android6.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt6ukEMMoI/AAAAAAAAABM/QbuWq3iPGR0/s320/android6.png" alt="" id="BLOGGER_PHOTO_ID_5132831140692636290" border="0" /></a></p>
<p>NOTA: El plugin ADT no esta firmado por lo que deberemos aceptar su instalación a pesar de ello.. por lo que pulsaremos <b>Install All</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt62kEMMpI/AAAAAAAAABU/zOiq0vI5o7A/s1600-h/android7.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_YsgLljqoEIQ/Rzt62kEMMpI/AAAAAAAAABU/zOiq0vI5o7A/s320/android7.png" alt="" id="BLOGGER_PHOTO_ID_5132831278131589778" border="0" /></a></p>
<p>Ya esta el plugin completamente instalado, y solo falta reiniciar eclipse.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt7BUEMMqI/AAAAAAAAABc/QZ2Ds5OxJI8/s1600-h/android8.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt7BUEMMqI/AAAAAAAAABc/QZ2Ds5OxJI8/s320/android8.png" alt="" id="BLOGGER_PHOTO_ID_5132831462815183522" border="0" /></a></p>
<p>Una vez reiniciado solo falta configurar el plugin indicándole la ruta al SDK, por lo tanto accedemos al menú <b>Window > Preferences&#8230;</b></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt7I0EMMrI/AAAAAAAAABk/vMO55BovNqM/s1600-h/android9.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt7I0EMMrI/AAAAAAAAABk/vMO55BovNqM/s320/android9.png" alt="" id="BLOGGER_PHOTO_ID_5132831591664202418" border="0" /></a></p>
<p>seleccionamos <b>ANDROID</b> e introducimos la ruta a nuestro SDK, que en nuestro ejemplo era <b>/home/user/android_sdk/</b>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt7S0EMMsI/AAAAAAAAABs/yOzWcwInd9Y/s1600-h/android10.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YsgLljqoEIQ/Rzt7S0EMMsI/AAAAAAAAABs/yOzWcwInd9Y/s320/android10.png" alt="" id="BLOGGER_PHOTO_ID_5132831763462894274" border="0" /></a></p>
<p>Finalmente pulsamos <b>Apply</b> y nos aparecerá una ventana con un aviso de que el plugin ya esta instalado y configurado correctamente.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt7cUEMMtI/AAAAAAAAAB0/wv0u1Arq4nI/s1600-h/android11.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_YsgLljqoEIQ/Rzt7cUEMMtI/AAAAAAAAAB0/wv0u1Arq4nI/s320/android11.png" alt="" id="BLOGGER_PHOTO_ID_5132831926671651538" border="0" /></a></p>
<p>Ya tenemos nuestro entorno de desarrollo completamente instalado. En siguientes artículos explicaremos como hacer pequeñas aplicaciones paso a paso!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ikeralbeniz.net/2007/11/14/instalando-android-eclipse-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
