<?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>Sergi &#38; Replace</title>
	<atom:link href="http://sergiandreplace.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sergiandreplace.com</link>
	<description>¡Mira, mamá! ¡Salgo en Internet!</description>
	<lastBuildDate>Thu, 19 Jan 2012 00:23:17 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Appunta: demo disponible!</title>
		<link>http://sergiandreplace.com/2012/01/appunta-demo-disponible/</link>
		<comments>http://sergiandreplace.com/2012/01/appunta-demo-disponible/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 00:23:17 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=282</guid>
		<description><![CDATA[<p>Hola</p> <p>He subido una demo de funcionalidades de Appunta al Market.</p> <p>Podéis encontrarla en <a href="http://kcy.me/6nc1">el Market de Android</a></p> <p>Si alguien se la baja y me comenta si funciona o no funciona, si da problemas o no va bien, lo agradecería enormemente (cervezas gratis para el mejor bughunter!!!)</p> <p>También he subido el código al repositorio [...]]]></description>
			<content:encoded><![CDATA[<p>Hola</p>
<p>He subido una demo de funcionalidades de Appunta al Market.</p>
<p>Podéis encontrarla en <a href="http://kcy.me/6nc1">el Market de Android</a></p>
<p>Si alguien se la baja y me comenta si funciona o no funciona, si da problemas o no va bien, lo agradecería enormemente (cervezas gratis para el mejor bughunter!!!)</p>
<p>También he subido el código al repositorio por si queréis ojearlo. Ah! y he comprado el dominio appunta.com. Algún dia pondré cosas en el, de momento hay un bonito wordpress dedicado al LoremIpsumismo, pero necesito dormir más de 5 horas por lo menos un día.</p>
<p>Ah, y si tenéis ideas para crear nuevos sistemas de visualización de geodatos, pues estaré encantado de oirlas, que ahora toca engordar la librería con widgets. Así a bote pronto se me ocurre, por ejemplo, un visor de rutas de senderismo donde el azimuth no señale al norte geográfico, si no al último punto de la ruta, así vemos el camino &#8220;delante nuestro&#8221;. Igual luego implementado es una castaña muy gordo. Igual no.</p>
<p>¿Y algún conejillo de indias con ganas de implementar en su app una librería que cambia casi cada día? ¿Algún amante del riesgo?</p>
<p>Gracias y buenas noches</p>
<p>P.D.: mañana toca catbeer, así que a los androideros tímidos os invito a venir a conocer a la gente de Catdroid, son todos muy majos, bueno, bastante majos, bueno, casi todos <img src='http://sergiandreplace.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>P.P.D: el icono/logotipo es horrendo, lo se, pero de momento no he podido hacer más, está en la lista de cosas &#8220;que son importantes, pero no urgentes y no tengo ni idea de cuando las haré&#8221;. Se aceptan ayudas y los autores mantienen la autoría, of course <img src='http://sergiandreplace.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2012/01/appunta-demo-disponible/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Appunta saca la otra patita, y oiga, es una pata muy gorda</title>
		<link>http://sergiandreplace.com/2012/01/appunta-saca-la-otra-patit/</link>
		<comments>http://sergiandreplace.com/2012/01/appunta-saca-la-otra-patit/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 00:11:24 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Appunta]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=267</guid>
		<description><![CDATA[<p>Hola!</p> <p>Segundo dia del cuaderno de bitácora de Appunta. Y francamente, estoy pletórico. He conseguido armar algo muy potente con una arquitectura muy, muy sencilla (todavía no he llegado a la docena de clases), y por una vez me quedo lejos de la sobreingeniería.</p> <p>¡¡¡Y tengo una captura de pantalla!!!</p> <p><a href="http://postimage.org/image/ekh2uz7zb" target="_blank"></a></p> <p>En las [...]]]></description>
			<content:encoded><![CDATA[<p>Hola!</p>
<p>Segundo dia del cuaderno de bitácora de Appunta. Y francamente, estoy pletórico. He conseguido armar algo muy potente con una arquitectura muy, muy sencilla (todavía no he llegado a la docena de clases), y por una vez me quedo lejos de la sobreingeniería.</p>
<p>¡¡¡Y tengo una captura de pantalla!!!</p>
<p><a href="http://postimage.org/image/ekh2uz7zb" target="_blank"><img class="alignright" style="border-image: initial; border-width: 5px; border-color: white; border-style: solid;" title="Radar!!!" src="http://s15.postimage.org/qz3uvazhn/device_2012_01_17_005306.png" alt="" width="240" height="400" /></a></p>
<p>En las últimas 48h he implementado un montón de cosas:</p>
<ul>
<li>Generada la clase abstracta AppuntaView. Esta se encarga de dibujar la vista utilizando tres métodos. Esta es la explicación extraida del Javadoc</li>
</ul>
<blockquote><p>This is the base class in order to create Views using the Appunta system. The class has all needed calculations and values to retrieve info from points.</p>
<p>It&#8217;s important to understand how this will work. All the stuff happens in the onDraw Method.</p>
<p>The <code><a href="eclipse-javadoc:%E2%98%82=Appunta/src%3Ccom.sergiandreplace.appunta.ui%7BAppuntaView.java%E2%98%83AppuntaView%E2%98%82%E2%98%82onDraw">onDraw</a></code> method has three phases: <strong>preRender</strong>, <strong>pointRendering</strong> &amp; <strong>postRender</strong>.</p>
<ul>
<li>The <strong>preRender</strong> phase triggers the method <code><a href="eclipse-javadoc:%E2%98%82=Appunta/src%3Ccom.sergiandreplace.appunta.ui%7BAppuntaView.java%E2%98%83AppuntaView%E2%98%82%E2%98%82preRender">preRender</a></code>, used to draw all needed elements used in the background.</li>
<li>In the <strong>pointRendering</strong> phase, the method <code><a href="eclipse-javadoc:%E2%98%82=Appunta/src%3Ccom.sergiandreplace.appunta.ui%7BAppuntaView.java%E2%98%83AppuntaView%E2%98%82%E2%98%82calculatePointCoordinates%E2%98%82Point">calculatePointCoordinates(Point)</a></code> is invoked per each on of the points, in order to calculate the screen coordinates for each one of them. Then, they are painted by calling their PaintRenderer.</li>
<li>In the <strong>Post render</strong> phase, the <code><a href="eclipse-javadoc:%E2%98%82=Appunta/src%3Ccom.sergiandreplace.appunta.ui%7BAppuntaView.java%E2%98%83AppuntaView%E2%98%82%E2%98%82postRender%E2%98%82Canvas">postRender(Canvas)</a></code> method is invoked in order to paint the latest layer</li>
</ul>
</blockquote>
<ul>
<li>Este sistema permite implementar nuevas formas de mostrar &#8220;geodatos&#8221; de forma rápida y sencilla. Pintamos un fondo, decidimos las coordenadas de cada punto dentro del canvas, y barnizamos. Y arreando.</li>
<li>A partir de esta implementación, RadarView es como 10 veces más pequeño.</li>
<li>Implementada nueva view (también hereda de AppuntaView) que muestra un panorama donde la distancia se coloca con la altura. Esto con una cámara detras a toda pantalla es una AR de las de diploma.</li>
<li>Con el objetivo de montarlo bien, he creado una clase que hereda de SurfaceView para mostrar la cámara.</li>
<li>Tengo que mirar la diferencia entre View y SurfaceView, que me da en la nariz que la segunda me va a venir bien para estas cosas.</li>
<li>También he documentado más</li>
<li>¡Y he subido un bonito sample! muestra algunas ciudades alrededor de Barcelona. Ojo que el punto central no se mueve y constantemente cree que estás en Barcelona. Los LocationServices para otro día. El sample está aquí: <a href="http://code.google.com/p/appunta/downloads/detail?name=appunta-sample-20120117.apk">http://code.google.com/p/appunta/downloads/detail?name=appunta-sample-20120117.apk</a></li>
</ul>
<p>De momento eso es todo (que no es poco). Ahora toca hacer un poco de limpieza y documentación, pero en general estoy muy satisfecho con el trabajo conseguido.</p>
<p>Supongo que huelga decir lo de que se agradecen comentarios, vivas, bravos, bughunters,  donaciones, cheques sopresa, corticoles y cualquier aportación que se desee dar al autor.</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2012/01/appunta-saca-la-otra-patit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appunta &#8211; un motor de AR</title>
		<link>http://sergiandreplace.com/2012/01/appunta-un-motor-de-ar/</link>
		<comments>http://sergiandreplace.com/2012/01/appunta-un-motor-de-ar/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 09:54:28 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=263</guid>
		<description><![CDATA[<p>Hola</p> <p>Estoy haciendo un motor de Realidad Aumentada GeoLocalizada. Tengo el proyecto al 40%, pero ya se puede enseñar.</p> <p>Al contrario de otros como Mixare que funcionan como una caja negra, este funciona con un conjunto de pequeños componentes que se comunican entre ellos, permitiendo un alto nivel de personalización, aunque funciona out-of-the-box</p> <p>De momento [...]]]></description>
			<content:encoded><![CDATA[<p>Hola</p>
<p>Estoy haciendo un motor de Realidad Aumentada GeoLocalizada. Tengo el proyecto al 40%, pero ya se puede enseñar.</p>
<p>Al contrario de otros como Mixare que funcionan como una caja negra, este funciona con un conjunto de pequeños componentes que se comunican entre ellos, permitiendo un alto nivel de personalización, aunque funciona out-of-the-box</p>
<p>De momento el único componente publicado es un View que permite mostrar puntos en una brújula.</p>
<p>El código es OS con licencia Apache 2.0. Así que, comparte y disfruta, pero menciona y agradece.</p>
<p>Encontrareis el proyecto en <a title="http://code.google.com/p/appunta/" href="http://code.google.com/p/appunta/">http://code.google.com/p/appunta/</a></p>
<p>Espero tener el módulo de AR &#8220;enseñable&#8221; en los próximos días. Os mantendré informados.</p>
<p>En el apartado de wiki hay algo de documentación, no mucha, pero habrá más en los próximos días.</p>
<p>Si os bajáis el source, es una app de prueba que muestra el radar con 4 puntos (Madrid, Zaragoza, Toulousse y París). El centro está fijo en BCN, así que estés donde estés ves los mismos puntos. El módulo de posicionamiento está a medias y no lo he publicado. Ojo, que la parte de la activity es sólo para pruebas, con lo que la calidad del código de esa parte deja mucho que desear, ya que es mi pequeño campo de pruebas.</p>
<p>Se aceptan sugerencias, bug-hunting, bug-fixing, groupies y jamones a la dirección de siempre.</p>
<p>Saludos!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2012/01/appunta-un-motor-de-ar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imágenes con esquinas redondeadas</title>
		<link>http://sergiandreplace.com/2012/01/imagenes-con-esquina-redondeadas/</link>
		<comments>http://sergiandreplace.com/2012/01/imagenes-con-esquina-redondeadas/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 12:34:10 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=257</guid>
		<description><![CDATA[<p>Hola</p> <p>A partir del video del otro día de Erik Burke, Taming Android UI (<a href="http://www.youtube.com/watch?v=jF6Ad4GYjRU">http://www.youtube.com/watch?v=jF6Ad4GYjRU</a> ¿no lo has visto? flagélate pues!!!) he hecho una pequeña clase que es una vista para mostrar imágenes con esquinas redondeadas.</p> <p>La gracia estriba en que no sólo hace eso, si no que mantiene el ratio que especifiquemos. Por [...]]]></description>
			<content:encoded><![CDATA[<p>Hola</p>
<p>A partir del video del otro día de Erik Burke, Taming Android UI (<a href="http://www.youtube.com/watch?v=jF6Ad4GYjRU">http://www.youtube.com/watch?v=jF6Ad4GYjRU</a> ¿no lo has visto? flagélate pues!!!) he hecho una pequeña clase que es una vista para mostrar imágenes con esquinas redondeadas.</p>
<p>La gracia estriba en que no sólo hace eso, si no que mantiene el ratio que especifiquemos. Por defecto usa el ratio de las cartas de Magic <img src='http://sergiandreplace.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  pero podemos establecer uno nuevo con setImageHeightRatio y setImageWidthRatio. También podemos hacerlas cuadradas con setImageSquareRatio</p>
<p>Una vez establecido el ratio, cada vez que cambiemos el tamaño, el control se ajustará al ratio establecido.</p>
<p>Se aceptan comentarios, sugerencias y bug-hunting.</p>
<p>Lo tenéis en <a title="mi repositorio de BitBucket" href="https://bitbucket.org/sergiandreplace/stuff/src/8eece2328998/RoundedCornersImageView/RoundeCornersImage.java">mi repositorio de BitBucket</a></p>
<p>La licencia es Apache, ergo, haced lo que os de la gana con el mientras mencioneis de donde sale.</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2012/01/imagenes-con-esquina-redondeadas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HierarchyViewer a lo loco</title>
		<link>http://sergiandreplace.com/2011/07/hierarchyviewer-a-lo-loco/</link>
		<comments>http://sergiandreplace.com/2011/07/hierarchyviewer-a-lo-loco/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 23:28:16 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=215</guid>
		<description><![CDATA[<p>Gracias a Fernando Cejas (<a href="http://kcy.me/46uj">@fernando_cejas</a>, un gran tipo) de <a href="http://kcy.me/46ul">Android 10</a>, llego a un pequeño módulo escrito por <a href="http://kcy.me/46uk">Romain Guy</a> que sirve para utilitzar Activites en un dispositivo Android real como servidor de vistas para HierarchyViewer.</p> <p>¿Lo que de lo cualo? Calma, que ahora me explico. Ya sabes&#8230;. &#8220;leer más&#8221;&#8230;.<br /> </p> [...]]]></description>
			<content:encoded><![CDATA[<p>Gracias a Fernando Cejas (<a href="http://kcy.me/46uj">@fernando_cejas</a>, un gran tipo) de <a href="http://kcy.me/46ul">Android 10</a>, llego a un pequeño módulo escrito por <a href="http://kcy.me/46uk">Romain Guy</a> que sirve para utilitzar Activites en un dispositivo Android real como servidor de vistas para HierarchyViewer.</p>
<p>¿Lo que de lo cualo? Calma, que ahora me explico. Ya sabes&#8230;. &#8220;leer más&#8221;&#8230;.<br />
<span id="more-215"></span></p>
<h3>Un visor para atarlos a todos en las sombras</h3>
<p>HierarchyViewer es una fabulosa herramienta del SDK de Android que todo desarrollador de Android debería utilitza asiduamente. ¿Y para que sirve? pues es capaz de mostrarnos la jerarquía de objetos de los layouts cargados en el emulador de Android que tengamos arrancado (en principio, luego veremos cómo saltarnos esta restricción).De esta manera, disponemos de información muy valiosa de como se inflan las vistas en runtime, así como tamaños finales que obtenemos.</p>
<p>Para utilizarlos, debemos ejecutar el programa hierarchyviewer.bat, que encontrareis en la carpeta tools del SDK de Android.</p>
<p>Una vez arrancado, busca dispositivos a los que poder preguntar por layouts cuya jerarquía pueda cargar. Repito, sólo os funcionará con el emulador o bien con alguna ROM que lo tenga activado, los dispositivos físicos con el SO de fábrica suelen tenerlo desactivado.</p>
<p>Si seleccionamos uno de estos layouts y hacemos clic en el botón &#8220;Load View Hierarchy&#8221;, nos mostrará un bonito esquema de árbol con toda la jerarquía de nuestro layout. Aquí un ejemplo:</p>
<p><img class="aligncenter size-full wp-image-217" style="border: 0px initial initial;" title="Hierarchy Viewer" src="http://sergiandreplace.com/wp-content/uploads/2011/07/hierarchyviewer.png" alt="" width="512" height="310" /><br />
Hay varios elementos interesantes, como por ejemplo la ventana de propiedades que hay a la derecha, que nos mostrará las propiedades del elemento seleccionado, o el mapa del layout justo debajo, donde vemos la &#8220;sombra&#8221; de todos los elementos, y si seleccionamos uno elemento aquí también se seleccionará en el arbol.</p>
<p>En el arbol, en cada nodo se nos muestra:</p>
<ul>
<li>El tipo de View (TextView, RelativeLayout, etc, etc, etc&#8230;)</li>
<li>Su id interno</li>
<li>Su id dentro de la colección android:id</li>
<li>Tres semáforos que nos indican el rendimiento del View al calcular las medidas, al inflarlo en la layout y dibujarlo en pantalla.</li>
<li>El índice relativo del objeto dentro de su padre</li>
</ul>
<p>Si hacemos clic en estos nodos nos da más información (cómo por ejemplo, los tiempos exactos de medida, layout y dibujo).</p>
<p>Tiene algunas cosas más, pero os invito a descubrirlo, que la herramienta es de uso bastante simple pero muy potente. Mi favorita es la opción Capture Layers, que nos guarda un archivo psd de Photoshop que contiene una capa por View todas ordenaditas y con la visibilidad correcta. Lo cual va de perlas para hacer prototipado (y robar la interfaz de otras apps, jiji).</p>
<h3>ViewServer, por que no sólo de emuladores vive el desarrollador</h3>
<p>Y todo esto venía por que yo quería hablar de la clase ViewServer del señor Romain. Pues al asunto.</p>
<p>La clase se puede descargar de su sitio de github: <a href="http://kcy.me/46up">http://github.com/romainguy/ViewServer</a></p>
<p>En realidad solo necesitais el fichero ViewServer.java (/src/com/android/debug/hv). Os lo descargais y lo poneis en cualquier paquete de vuestra app (si no es el paquete com.android.debug.hv recordad que debeis cambiar la instrucción package del fichero).</p>
<p>Ahora es necesario añadir al permiso INTERNET al manifest, sin este permiso no funciona.  Recordad quitarlo al publicar la app si no lo necesita.</p>
<p>Por último debemos arrancar y parar en el sitio correcto el ViewServer en las activies cuyo layout deseemos analizar con el Hierarchy Viewer:</p>
<pre>     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         // Set content view, etc.
         ViewServer.get(this).addWindow(this);
     }

     public void onDestroy() {
         super.onDestroy();
         ViewServer.get(this).removeWindow(this);
     }

     public void onResume() {
         super.onResume();
         ViewServer.get(this).setFocusedWindow(this);
     }</pre>
<p>Y nada más. Ya podemos ejecutar nuestra aplicación en un dispositivo físico y el Hierarchy Viewer será capaz de verlo y dejarnos estrujar los layouts hasta que confiesen. ¡Disfrutadlo!</p>
<h3>Más info:</h3>
<p>ViewServer en gitHub | <a href="http://kcy.me/46up">http://github.com/romainguy/ViewServer</a></p>
<p>Depuración sobre la interfaz de Android en el Developer site de Android | <a href="http://developer.android.com/guide/developing/debugging/debugging-ui.html">http://developer.android.com/guide/developing/debugging/debugging-ui.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/07/hierarchyviewer-a-lo-loco/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fragmentación de Android (pero la buena)</title>
		<link>http://sergiandreplace.com/2011/07/fragmentacion-de-android-pero-la-buena/</link>
		<comments>http://sergiandreplace.com/2011/07/fragmentacion-de-android-pero-la-buena/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 17:16:02 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=199</guid>
		<description><![CDATA[<p>Vamos a ver cómo empezar a trabajar con los Fragments de Android.</p> ¿Pero no se suponía que la fragmentación de Android era algo malo? <p>Sí, pero no hablo de esa fragmentación.</p> <p>Cuando hablamos de Fragments hablamos de un nuevo elemento añadido a la API a partir de HoneyComb. Los fragments son &#8220;pedazos&#8221; de la interfaz [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a ver cómo empezar a trabajar con los Fragments de Android.</p>
<h3>¿Pero no se suponía que la fragmentación de Android era algo malo?</h3>
<p>Sí, pero no hablo de esa fragmentación.</p>
<p>Cuando hablamos de Fragments hablamos de un nuevo elemento añadido a la API a partir de HoneyComb. Los fragments son &#8220;pedazos&#8221; de la interfaz que colocamos en nuestros layouts.</p>
<p>Y direis &#8220;pues eso es un View&#8221;. Y yo os diré &#8220;pues no&#8221;. Y si no le dais al botón de leer más, os quedareis con el misterio.</p>
<p><span id="more-199"></span>Por que los fragments tienen un ciclo de vida propio, lo cual nos permite utilitzarlos para implementar la lógica de la aplicación, y dejar las Activities como encargados de mostrar los Fragments que deseemos según el tamaño de pantalla.</p>
<p>Pongamos un ejemplo.</p>
<p>Imaginad que tenemos la típica aplicación que lista elementos y al pulsar uno de ellos, nos muestra el detalle de ese elemento. El problema se encuentra al ejecutar la aplicación en un tablet, donde se produce el &#8220;efecto oceano&#8221; (grandes espacios sin ocupar con elementos flotando). Pues nuestra Activity debería hacer dos cosas:</p>
<p>a) Si la pantalla es extra grande (vamos, un tablet), debería mostrar los dos fragments y gestionar los mensajes entre ellos.</p>
<p>b) Si la pantalla es grande, normal, o pequeña, debe mostrar un sólo fragment y llamar a una segunda Activity que muestre el fragment de detalle.</p>
<p>Como ya he dicho, de esta forma no es necesario implementar la lógica del programa en dos sitios, ya que los Fragments tienen su propio ciclo de vida.</p>
<h3>¿Honeycomb? un pelín exclusivistas los de la gran G</h3>
<p>Para que no exista todavía una mayor fragmentación (de la mala) debido a los Fragments (los buenos), y evitar un &#8220;apocalipsis honeycomb&#8221;, los señores de Google han decidido incluir los Fragments dentro de una API llamada AndroidSupport (versión 4, por ahora) que permite utilizar ciertos elementos de Android 3 incluso en 1.6.</p>
<p>Para instalarla, podeis añadirla como API desde el AVD manager, pero los más sencillo es añadir un Fragment a un Layout, y automágicamente os dirá que necesitais la librería y que si quereis que la instale.</p>
<p>Si ya la tenéis instalada, deberéis incluir en vuestro proyecto el archivo android-support-v4.jar que está en la carpeta \extras\android\compatibility\v4 del SDK de Android.</p>
<h3>¿Empezamos ya?</h3>
<p>Vale, vamos a ver un pequeño proyecto de ejemplo.</p>
<p>Necesitamos:</p>
<ol>
<li>Un proyecto de Android</li>
<li>Tres layouts que vamos a llamar main.xml, f1.xml y f2.xml. En los dos últimos colocad los controles que os de la gana.</li>
<li>Una actividad principal (que llamaremos MainActivity) que establezca como layout de la actividad a main.xml en el onCreate</li>
</ol>
<p>¿Ya? pues sigamos.<br />
Lo primero es cambiar la clase MainActivity para que herede de ActivityFragment y no de Activity, ya que la clase Activity nativa de versiones de Android inferiores a 3  no soporta Fragments. Si nuestra aplicación fuese nativa de 3 o superior no sería necesario este cambio.<br />
Ahora vamos a incluir los dos Fragments en nuestro Layout main.xml. Para ello usaremos el siguiente marcado:</p>
<pre>&lt;fragment 
	android:layout_height="wrap_content"
	android:layout_width="wrap_content"
	android:id="@+id/myfragment1"
	android:name="com.sergiandreplace.fragmentsApp.Fragment1"&gt;
	&lt;!-- Preview: layout=@layout/f1 --&gt;
&lt;/fragment&gt;</pre>
<p>Vamos a explicar cada atributo:</p>
<ol>
<li>layout_height y layout_width ya están más que explicados y no creo que haga falta entrar en ello.</li>
<li>android:id. Cada elemento Fragment de un layout debe tener un tag android:id con un identificador único o bien un tag android:tag con una cadena única (o bien nada).</li>
<li>android:name. Este es el más importante. Es la ruta canónica a la clase encargada de suministrarno la View a mostrar en el Fragment y a gestionar su ciclo de vida. Aun no las hemos creado.</li>
<li>&lt;!&#8211; Preview: layout=@layout/f1 &#8211;&gt; Este tag es simplemente para decirle al editor de layouts de Eclipse que muestre este layout en el editor. También se puede configurar via menú contextual del editor.</li>
</ol>
<p>Y una vez hecho esto, pues pondriamos otro elemento similar, pero para el segundo fragmento:</p>
<pre>&lt;fragment 
	android:layout_height="wrap_content"
	android:layout_width="wrap_content"
	android:id="@+id/myfragment2"
	android:name="com.sergiandreplace.fragmentsApp.Fragment2"&gt;
	&lt;!-- Preview: layout=@layout/f2 --&gt;
&lt;/fragment&gt;</pre>
<p>Listos.</p>
<p>Ahora vamos a crear la clase Fragment1 que va a encargarse de inflar el fragmento:</p>
<pre>public class Fragment1 extends Fragment {</pre>
<pre style="padding-left: 30px;">@Override</pre>
<pre style="padding-left: 30px;">public View onCreateView(LayoutInflater inflater,
  ViewGroup container, Bundle savedInstanceState) {</pre>
<pre style="padding-left: 60px;">return inflater.inflate(R.layout.f1, container,false);</pre>
<pre style="padding-left: 30px;">}</pre>
<pre>}</pre>
<p>Cómo veis, el formato es parecido al de una Activity, pero en vez del método onCreate, tenemos el método onCreateView, que debe devolver la View a mostrar en el fragmento. Este método recibe tres parámetros:</p>
<ol>
<li>inflater: un LayoutInflater que podemos utilitzar (y de hecho lo hacemos) para inflar la vista.</li>
<li>container: un ViewGroup que usaremos para hacer de root durante el inflado.</li>
<li>savedInstance: el Bundle con el estado del fragment si ha sido destruido</li>
</ol>
<p>Y simplemente devolvemos el resultado de inflar el layout con el método inflate. Para los que no lo conozcais, el tercer parámetro del método inflate (el booleano) indica si hay que crear una nueva View dentro del root o se debe inflar la View directamente en el root. En este caso, no nos hace falta y así evitamos elementos innecesarios.</p>
<p>Por último, sólo queda hacer la clase Fragment2 que será identica a Fragment1 cambiando el fragmento a hinchar.</p>
<p>¡Y ya está! Con esto hemos finalizado nuestro primer experimento con Fragments. Queda mucho por rascar, esto es el primer ejemplo, pero poco a poco y sin prisa. El próximo día hablaremos de cómo crear estos Fragments desde código.</p>
<p>Id en paz.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/07/fragmentacion-de-android-pero-la-buena/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalar Adobe AIR 2 en Linux x64</title>
		<link>http://sergiandreplace.com/2011/02/instalar-adobe-air-2-en-linux-x64/</link>
		<comments>http://sergiandreplace.com/2011/02/instalar-adobe-air-2-en-linux-x64/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 08:58:20 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=194</guid>
		<description><![CDATA[<p>Últimamente he iniciado un proceso de transición a Linux, no por necesidad, si no por ganas de aprender cosas.</p> <p>En este proceso me estoy encontrando con bastantes problemas. Uno de ellos se produce por que los ordenadores que tengo en casa son de 64 bits (y yo sin saberlo). Lo más curioso es que me [...]]]></description>
			<content:encoded><![CDATA[<p>Últimamente he iniciado un proceso de transición a Linux, no por necesidad, si no por ganas de aprender cosas.</p>
<p>En este proceso me estoy encontrando con bastantes problemas. Uno de ellos se produce por que los ordenadores que tengo en casa son de 64 bits (y yo sin saberlo). Lo más curioso es que me estoy encontrando problemas diferentes en cada uno (¿podría ser por que uno es AMD y el otro Intel?).</p>
<p>Muchos de los programas del repositorio de Ubuntu no dan soporte a 64 bits y no permite instalarlos, así que toca buscarse la vida. Uno de ellos es Adobe AIR, que utilizo para mi cliente de Twitter favorito, Tweetdeck.</p>
<p>La propia Adobe da una serie de instrucciones que no acaban de funcionar. Buscando, buscando, he encontrado una solución en el blog de <a href="http://www.jamesward.com/about-james-ward/">James  Ward</a> (<a href="http://www.jamesward.com/2010/10/14/install-adobe-air-on-64-bit-ubuntu-10-10">http://www.jamesward.com/2010/10/14/install-adobe-air-on-64-bit-ubuntu-10-10</a>) para instalar los paquetes .deb en 64 bits, que transcribo y traduzco aquí (con su permiso, por supuesto).</p>
<ol>
<li><a href="http://get.adobe.com/air/">Descarga el paquete .deb de  Adobe AIR</a>.</li>
<li>Abre una ventana de terminal y navega al directorio que contiene el archivo adobeair.deb.</li>
<li>Crea un directorio tmp:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> tmp</pre>
</div>
</div>
</li>
<li>Extrae el paquete deb a la carpeta tmp:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;">dpkg-deb <span style="color: #660033;">-x</span> adobeair.deb tmp</pre>
</div>
</div>
</li>
<li>Extrae los archivos de control:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;">dpkg-deb <span style="color: #660033;">--control</span> adobeair.deb tmp<span style="color: #000000; font-weight: bold;">/</span>DEBIAN</pre>
</div>
</div>
</li>
<li>Cambia el parámetro Architecture de  “i386″ a “all”:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">"s/i386/all/"</span> tmp<span style="color: #000000; font-weight: bold;">/</span>DEBIAN<span style="color: #000000; font-weight: bold;">/</span>control</pre>
</div>
</div>
</li>
<li>Empaqueta el archivo deb de nuevo:
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">dpkg</span> <span style="color: #660033;">-b</span> tmp adobeair_64.deb</pre>
</div>
</div>
</li>
</ol>
<p>¡Ahora el paquete ya puede instalarse en sistemas de 64 bits!  Simplemente, desde la línea de comandos teclea:</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">dpkg</span> <span style="color: #660033;">-i</span> adobeair_64.deb</pre>
</div>
</div>
<p>Y listos, ya se puede instalar TweetDeck o similares.</p>
<p>¡Gracias James!</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/02/instalar-adobe-air-2-en-linux-x64/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>2º Tech Cocktail + Android en el MWC</title>
		<link>http://sergiandreplace.com/2011/01/2%c2%ba-tech-cocktail-android-en-el-mwc/</link>
		<comments>http://sergiandreplace.com/2011/01/2%c2%ba-tech-cocktail-android-en-el-mwc/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 17:30:42 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[CatDroid]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=187</guid>
		<description><![CDATA[<p>Por segundo año consecutivo <a href="http://www.catdroid.org/" target="_blank">Catdroid</a> tiene el honor de organizar el 2º <a href="http://techcocktail.com/" target="_blank">﻿﻿Tech Cocktail</a> mixer durante el <a href="http://www.mobileworldcongress.com/" target="_blank">Mobile World Congress</a>, y por primera vez formo parte de la organización.</p> <p>Estamos super contentos de poder contar con la colaboración de <a href="http://techcocktail.com/" target="_blank">﻿﻿Tech Cocktail</a> y el ingenioso formato que otorga [...]]]></description>
			<content:encoded><![CDATA[<p>Por segundo año consecutivo <a href="http://www.catdroid.org/" target="_blank">Catdroid</a> tiene el honor de organizar el 2º <a href="http://techcocktail.com/" target="_blank">﻿﻿Tech Cocktail</a> mixer durante el <a href="http://www.mobileworldcongress.com/" target="_blank">Mobile World Congress</a>, y por primera vez formo parte de la organización.</p>
<p>Estamos super contentos de poder contar con la colaboración de <a href="http://techcocktail.com/" target="_blank">﻿﻿Tech Cocktail</a> y el ingenioso formato que otorga una oportunidad increíble a emprendedores en el área móvil (locales y visitantes) para enseñar su producto/aplicación.</p>
<p>El principal foco del evento es conectar, educar y amplificar a la propia comunidad técnica, y ofrecer un lugar donde mostrar algunas de las últimas innovaciones técnicas.</p>
<p>Por segundo año, la comunidad local de Android quiere dar la bienvenida a todos los entusiastas y desarrolladores de Android que nos estarán visitando de toda Europa y el mundo, y darles una oportunidad para conocernos y charlar un rato sobre lo último en el mundo de Android y desarrollo móvil en general.</p>
<p>Aquí están los detalles del evento:</p>
<ul>
<li> <strong>Cúando</strong>: Miércoles, 16 de Febrero del 2011 &#8211; 7:00 p.m. a 10:00 p.m.</li>
<li> <strong>Dónde</strong>: Club 41N  (62 Avinguda del Paral.lel , Barcelona)﻿</li>
<li> <strong>Qué</strong>: Un Cocktail Mixer para entusiastas de la tecnología</li>
<li> <strong>Precio</strong>: $15/12€  (para los &#8220;madrugadores&#8221;)  &#8211; $20/15€  estandard  / $20/15€ en la puerta</li>
</ul>
<p>El precio incluye dos bebidas (refresco o cerveza) o un cocktail.</p>
<p>Pasa por la página de <a href="http://techcocktailbarcelonamwc2011.eventbrite.com/" target="_blank">Teck Cocktail&#8217;s en event brite</a> para apuntarte ya:   <a href="http://techcocktailbarcelonamwc2011.eventbrite.com/" target="_blank">http://techcocktailbarcelonamwc2011.eventbrite.com/</a></p>
<p>Si te gustaría traer un producto, empresa o servicio mira las instrucciones en la página de eventbrite.</p>
<p>Si te gustaría participar como patrocinador del evento manda un email <em>core@catdroid.org</em> (tenemos algo especial para ti!).</p>
<p>Nos vemos allí!</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/01/2%c2%ba-tech-cocktail-android-en-el-mwc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charla sobre Mercurial por Jordi Gerona</title>
		<link>http://sergiandreplace.com/2011/01/charla-sobre-mercurial-por-jordi-gerona/</link>
		<comments>http://sergiandreplace.com/2011/01/charla-sobre-mercurial-por-jordi-gerona/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 20:43:42 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[Charlas]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[charlas]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=172</guid>
		<description><![CDATA[<p>Ayer asistí a una charla sobre Mercurial que impartió Jordi Gerona (de <a href="http://eventuo.com">Eventuo</a>) en <a href="http://www.barcelonactiva.cat/">Barcelona Activa</a> a de la mano de <a href="http://www.seedrocket.com/">SeedRocket</a>.</p> <p>Aunque estaba orientado a usuarios de SVN (Subversion) con ganas de conocer Hg (Mercurial) y yo no soy un experto en SVN (vamos, más bien novatillo), el buen hacer de [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer asistí a una charla sobre Mercurial que impartió Jordi Gerona (de <a href="http://eventuo.com">Eventuo</a>) en <a href="http://www.barcelonactiva.cat/">Barcelona Activa</a> a de la mano de <a href="http://www.seedrocket.com/">SeedRocket</a>.</p>
<p>Aunque estaba orientado a usuarios de SVN (Subversion) con ganas de conocer Hg (Mercurial) y yo no soy un experto en SVN (vamos, más bien novatillo), el buen hacer de Jordi ayudó bastante a seguir los conceptos explicados (sobre todo algunos que son complejos en Hg).</p>
<p>Y francamente, me vendió el producto. He estado haciendo algunas pruebas con <a href="https://bitbucket.org/">BitBucket</a>, y me está gustando mucho. Funciona bien, es rápido y sobre todo gratis (y no me obliga a que mis proyectos sean open source).</p>
<p>La idea básica de Mercurial es que no tenemos una estructura cliente/servidor como en SVN, al contrario, se trata de una arquitectura distribuida (de ahí su nombre DCVS, Distributed Control Version System), donde nos sincronizamos contra otros repositorios. Por comodidad, se tiene uno centralizado pasivo, pero que no manda sobre los demás y en vez de C/S tenemos repositorio local y remoto.</p>
<p>Así pues, tenemos nuestra working folder al igual que en SVN, pero la sincronizamos contra nuestro repositorio local (sito en la misma working folder). Cuando nuestros cambios estan listos para ser distribuidos, descargamos los últimos cambios del repositorio remoto, sincronizamos el head local y el head remoto en nuestro repositorio local, y mandamos estos cambios al remoto.</p>
<p>Un poco complicado de explicar en tres líneas, pero por suerte, Jordi ha compartido la presentación en Slide Share, y Fernando Cejas (de <a href="http://www.android10.org/">Android10</a>) tuvo a bien de grabarlo en video (la calidad de imagen no es lo más mejor, que lo hizo con el teléfono, pero el audio es lo importante).</p>
<p>Aqui la presentación: <a href="http://www.slideshare.net/giro9/mercurial">http://www.slideshare.net/giro9/mercurial</a></p>
<p>Aquí el video: <a href="http://www.slideshare.net/giro9/mercurial">http://www.slideshare.net/giro9/mercurial</a></p>
<p>P.D.: el preguntón del principio que no para de interrumpir soy yo. Sorry Jordi, es que cuando algo me interesa, me pongo muy pesado.</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/01/charla-sobre-mercurial-por-jordi-gerona/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Reporting Services: regenerando ReportServerTempDb</title>
		<link>http://sergiandreplace.com/2011/01/reporting-services-regenerando-reportservertempdb/</link>
		<comments>http://sergiandreplace.com/2011/01/reporting-services-regenerando-reportservertempdb/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 10:06:28 +0000</pubDate>
		<dc:creator>sergi</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Reporting Services]]></category>
		<category><![CDATA[ReportServerTempDB]]></category>

		<guid isPermaLink="false">http://sergiandreplace.com/?p=166</guid>
		<description><![CDATA[<p>Hola</p> <p>Ayer se nos cayó un servidor de MS Reporting Services 2005 (entre otras cosas). Al recuperar el backup, ReportServerTempDb no se recuperaba bien.</p> <p><a href="http://sergiandreplace.com/wp-content/uploads/2011/01/dilbert.jpg"></a>Esta base de datos es utilizada por Reporting Services para almacenar los objetos temporales que crea al mostrar informes, así que su contenido es volatil (vamos, que no pasa nada [...]]]></description>
			<content:encoded><![CDATA[<p>Hola</p>
<p>Ayer se nos cayó un servidor de MS Reporting Services 2005 (entre otras cosas). Al recuperar el backup, ReportServerTempDb no se recuperaba bien.</p>
<p><a href="http://sergiandreplace.com/wp-content/uploads/2011/01/dilbert.jpg"><img class="size-medium wp-image-168 alignleft" style="border: 2px solid black;" title="disaster recovery plan" src="http://sergiandreplace.com/wp-content/uploads/2011/01/dilbert-300x265.jpg" alt="" width="300" height="265" /></a>Esta base de datos es utilizada por Reporting Services para almacenar los objetos temporales que crea al mostrar informes, así que su contenido es volatil (vamos, que no pasa nada si se pierde). El problema es que al menos hay que tener la estructura vacía.</p>
<p>Buscando, buscando, encontré este enlace explicando los pasos para regenerarla en <a title="este blog" href="http://sql.richarddouglas.co.uk/archive/2010/07/rebuilding-reportservertempdb.html">este blog</a>. Pego una traducción:</p>
<ol>
<li>Creamos la base de datos. Para la instancia predeterminada, el nombre será ReportServerTempDB. Para instancias con nombre, será ReportServer$<em>Instancia</em>TempDB<br />
(acordaos de ajustar el tamaño correctamente).</li>
<li>En la base de datos nueva, creamos el rol de base de datos  RSExecRole.</li>
<li>Asignamos al rol RSExecRole de la base de datos los mismos usuarios que tengamos en el rol RSExecRole de la base de datos ReportServer.</li>
<li>Ejecutamos el script CatalogTempDB.sql. Lo encontrareis en la carpeta de Reporting Services (en cada versión cambia bastante)<br />
(que no se os olvide ejecutar el script en el contexto de ReportServerTempDB).</li>
</ol>
<p>¡Y voilà! funciona.</p>
<p>Qué ganas tengo de quitarme Reporting Services 2005 y actualizar a 2008, por que esta versión la miras y se rompe.</p>
<p>¿Alguien en la sala con experiencia en RS que me confirme si la versión 2008 es más estable?</p>
<p>Saludos!</p>
]]></content:encoded>
			<wfw:commentRss>http://sergiandreplace.com/2011/01/reporting-services-regenerando-reportservertempdb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

