<?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>mrm-sama ga miteru v3.0 &#187; Programación</title>
	<atom:link href="http://www.perry.es/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.perry.es</link>
	<description>The sky was the color of television tuned to a dead channel.</description>
	<lastBuildDate>Fri, 10 Feb 2012 12:26:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Implementar soporte a Emoji en aplicaciones Android</title>
		<link>http://www.perry.es/2011/05/31/implementar-soporte-a-emoji-en-aplicaciones-android/</link>
		<comments>http://www.perry.es/2011/05/31/implementar-soporte-a-emoji-en-aplicaciones-android/#comments</comments>
		<pubDate>Tue, 31 May 2011 11:00:14 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Móvil]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[emoji]]></category>
		<category><![CDATA[snippets]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=9996</guid>
		<description><![CDATA[Creo que voy a comenzar explicando primero qué es esto de Emoji a los que no lo sepan, y dar un poco de antecedentes al respecto. Originario de los keitai japoneses, los caracteres emoji vendrían a ser una variante muy arraigada de lo que conocemos por emoticonos. Vaya, sólo hay que fijarse en que los propios [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-9997" title="mobile_gmail_emoji" src="http://www.perry.es/extra/uploads/2011/05/mobile_gmail_emoji.png" alt="" width="252" height="296" />Creo que voy a comenzar explicando primero qué es esto de Emoji a los que no lo sepan, y dar un poco de antecedentes al respecto.</p>
<p>Originario de los keitai japoneses, los caracteres <strong>emoji</strong> vendrían a ser una variante muy arraigada de lo que conocemos por emoticonos. Vaya, sólo hay que fijarse en que los propios emoji han conseguido tener una serie de caracteres propios en el espacio unicode.</p>
<p>Si bien en un principio <a href="http://surf-style.us/manual3.htm">había varias variantes</a> según el fabricante de móviles/operador japos, ahora está bastante estandarizado, al haberse metido por medio nada menos que gigantes como Apple o Google, y la revisión 6 de Unicode los aúna a todos.</p>
<p>Para ver una curiosa comparativa entre Emoji y la conocida Dingbats, podéis echar un vistazo a <a href="http://www.unicode.org/faq/emoji_dingbats.html#4">este artículo</a>.</p>
<p>Pero vamos al lío. Los emoji se han popularizado en occidente por ser una manera de mostrar emoticonos en iOS (iPhone/iPad) de forma fácil, aprovechándose de las características de internacionalización del móvil, y proporcionando un interfaz común a todas las aplicaciones para ello. Por cuestiones de trabajo (&#8230;and again) he tenido que tomar decisiones al respecto de implementar un soporte a emoticonos, y me he decidido por utilizar lo más estándar que hay al respecto, que es emoji. Pero su utilización en Android de la misma manera que en iPhone no es válida, así que me ha tocado ponerme el traje de trabajo y programar una clase que me permita intercalar el texto con las imágenes.</p>
<p>Para empezar, hace falta el pack de imágenes que deberemos meter en <strong>/res/drawable-mdpi/</strong> de nuestro proyecto. Os lo pongo para descargar aquí.<br />
<a href="http://www.perry.es/descargas/Pack+de+im%C3%A1genes+Emoji">Pack de imágenes Emoji</a> 1.0 - 328 hits</p>
<p>Para mapear las imágenes a caracteres utilizo una clase estática que he llamado <strong>EmoticonUtils.java</strong>, y cuyo código os voy a poner aquí. Es sencilla, lo que pasa es que es un poco coñazo porque es meter muchos datos a pelo, ya que la solución elegante (usando reflection) es inviable por lentísima (y ya sabemos que a mayor gasto de CPU en un móvil, mucho mayor consumo de batería).</p>
<p><pre>
package com.mrm.emoji;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map.Entry;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ImageSpan;
import com.mrm.emoji.R;
public class EmoticonUtils {
	public enum Tipo { Smiley, Place, Nature, Event, Symbol };
	private final static HashMap&lt;String, Integer&gt; emoticons = new HashMap&lt;String, Integer&gt;();
	private final static HashMap&lt;String, String[]&gt; categories = new HashMap&lt;String, String[]&gt;();
	 // Vectores de caracteres unicode en formato hex (necesitan conversi&oacute;n)
	private final static int[] smileys = new int[] { 0xe415, 0xe056, 0xe057, 0xe414, 0xe405, 0xe106, 0xe418, 0xe417, 0xe40d, 0xe40a, 0xe404, 0xe105, 0xe409, 0xe40e, 0xe402,
		0xe108, 0xe403, 0xe058, 0xe407, 0xe401, 0xe40f, 0xe40b, 0xe406, 0xe413, 0xe411, 0xe412, 0xe410, 0xe107, 0xe059, 0xe416, 0xe408, 0xe40c, 0xe11a,
		0xe10c, 0xe32c, 0xe32a, 0xe32d, 0xe328, 0xe32b, 0xe022, 0xe023, 0xe327, 0xe329, 0xe32e, 0xe335, 0xe334, 0xe337, 0xe336, 0xe13c, 0xe330, 0xe331,
		0xe326, 0xe03e, 0xe11d, 0xe05a, 0xe00e, 0xe421, 0xe420, 0xe00d, 0xe010, 0xe011, 0xe41e, 0xe012, 0xe422, 0xe22e, 0xe22f, 0xe231, 0xe230, 0xe427,
		0xe41d, 0xe00f, 0xe41f, 0xe14c, 0xe201, 0xe115, 0xe428, 0xe51f, 0xe429, 0xe424, 0xe423, 0xe253, 0xe426, 0xe111, 0xe425, 0xe31e, 0xe31f, 0xe31d,
		0xe001, 0xe002, 0xe005, 0xe004, 0xe51a, 0xe519, 0xe518, 0xe515, 0xe516, 0xe517, 0xe51b, 0xe152, 0xe04e, 0xe51c, 0xe51e, 0xe11c, 0xe536, 0xe003,
		0xe41c, 0xe41b, 0xe419, 0xe41a, 0xe32f, 0xe10d };
	private final static int[] places = new int[] { 0xe036, 0xe157, 0xe038, 0xe153, 0xe155, 0xe14d, 0xe156, 0xe501, 0xe158, 0xe43d, 0xe037, 0xe504, 0xe44a, 0xe146, 0xe50a, 0xe505,
		0xe506, 0xe122, 0xe508, 0xe509, 0xe03b, 0xe04d, 0xe449, 0xe44b, 0xe51d, 0xe44c, 0xe124, 0xe121, 0xe433, 0xe202, 0xe135, 0xe01c, 0xe01d, 0xe010,
		0xe136, 0xe42e, 0xe01b, 0xe15a, 0xe159, 0xe432, 0xe430, 0xe431, 0xe42f, 0xe01e, 0xe039, 0xe435, 0xe01f, 0xe125, 0xe03a, 0xe14e, 0xe252, 0xe137,
		0xe209, 0xe154, 0xe133, 0xe150, 0xe320, 0xe123, 0xe132, 0xe143, 0xe50b, 0xe514, 0xe513, 0xe50c, 0xe50d, 0xe511, 0xe50f, 0xe512, 0xe510, 0xe50e };
	private final static int[] nature = new int[] { 0xe04a, 0xe04b, 0xe049, 0xe048, 0xe04c, 0xe13d, 0xe443, 0xe43e, 0xe04f, 0xe052, 0xe053, 0xe524, 0xe52c, 0xe52a, 0xe531, 0xe050,
		0xe527, 0xe051, 0xe10b, 0xe52b, 0xe52f, 0xe109, 0xe528, 0xe01a, 0xe134, 0xe530, 0xe529, 0xe526, 0xe52d, 0xe521, 0xe523, 0xe52e, 0xe055, 0xe525,
		0xe10a, 0xe522, 0xe019, 0xe054, 0xe520, 0xe306, 0xe030, 0xe304, 0xe110, 0xe032, 0xe305, 0xe303, 0xe118, 0xe447, 0xe119, 0xe307, 0xe308, 0xe444,
		0xe441, 0xe436 };
	private final static int[] events = new int[] { 0xe437, 0xe438, 0xe43a, 0xe439, 0xe43b, 0xe117, 0xe440, 0xe442, 0xe446, 0xe445, 0xe11b, 0xe448, 0xe033, 0xe112, 0xe325, 0xe312,
		0xe310, 0xe126, 0xe127, 0xe008, 0xe03d, 0xe00c, 0xe12a, 0xe00a, 0xe00b, 0xe009, 0xe316, 0xe129, 0xe141, 0xe142, 0xe317, 0xe128, 0xe14b, 0xe211,
		0xe114, 0xe145, 0xe144, 0xe03f, 0xe313, 0xe116, 0xe10f };
	private final static int[] symbols = new int[] { 0xe21c, 0xe21d, 0xe21e, 0xe21f, 0xe220, 0xe221, 0xe222, 0xe223, 0xe224, 0xe225, 0xe210, 0xe232, 0xe233, 0xe235, 0xe234, 0xe236,
		0xe237, 0xe238, 0xe239, 0xe23b, 0xe23a, 0xe23d, 0xe23c, 0xe24d, 0xe212, 0xe24c, 0xe213, 0xe214, 0xe507, 0xe203, 0xe20b, 0xe22a, 0xe22b, 0xe226,
		0xe227, 0xe22c, 0xe22d, 0xe215, 0xe216, 0xe217, 0xe218, 0xe228, 0xe151, 0xe138, 0xe139, 0xe13a, 0xe208, 0xe14f, 0xe20a, 0xe434, 0xe309, 0xe315,
		0xe30d, 0xe207, 0xe229, 0xe206, 0xe205, 0xe204, 0xe12e, 0xe250, 0xe251, 0xe14a, 0xe149, 0xe104, 0xe103, 0xe101, 0xe102, 0xe13f, 0xe140, 0xe11f,
		0xe12f, 0xe031, 0xe30e, 0xe311, 0xe113, 0xe30f, 0xe13b, 0xe42b, 0xe42a, 0xe018, 0xe016, 0xe015, 0xe014, 0xe42c, 0xe42d, 0xe017, 0xe013, 0xe20e,
		0xe20c, 0xe20f, 0xe20d, 0xe131, 0xe12b, 0xe130, 0xe12d, 0xe324, 0xe301, 0xe148, 0xe502, 0xe03c, 0xe30a, 0xe042, 0xe040, 0xe041, 0xe12c, 0xe007,
		0xe31a, 0xe31b, 0xe13e, 0xe13b, 0xe006, 0xe302, 0xe319, 0xe321, 0xe322, 0xe314, 0xe503, 0xe10e, 0xe318, 0xe43c, 0xe11e, 0xe323, 0xe31c, 0xe034, 0xe035,
		0xe045, 0xe338, 0xe047, 0xe30c, 0xe044, 0xe30b, 0xe043, 0xe120, 0xe33b, 0xe33f, 0xe341, 0xe34c, 0xe344, 0xe342, 0xe33d, 0xe33e, 0xe340, 0xe34d,
		0xe339, 0xe147, 0xe343, 0xe33c, 0xe33a, 0xe43f, 0xe34b, 0xe046, 0xe345, 0xe346, 0xe348, 0xe347, 0xe34a, 0xe349, 0xe23f, 0xe240, 0xe241, 0xe242,
		0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, 0xe24a, 0xe24b, 0xe23e, 0xe532, 0xe533, 0xe534, 0xe535, 0xe21a, 0xe219, 0xe21b, 0xe02f,
		0xe024, 0xe025, 0xe026, 0xe027, 0xe028, 0xe029, 0xe02a, 0xe02b, 0xe02c, 0xe02d, 0xe02e, 0xe332, 0xe333, 0xe24e, 0xe24f, 0xe537 };
	/**
	 * Inicializaci&oacute;n est&aacute;tica de los emoji
	 */
	static {
		// a&ntilde;adimos uno a uno los Drawable de todos los emoticonos
		// a&ntilde;adir los drawable usando reflection es demasiado costoso
		emoticons.put(String.format(&quot;%C&quot;,0xe001),R.drawable.emoji_e001);
		emoticons.put(String.format(&quot;%C&quot;,0xe002),R.drawable.emoji_e002);
		emoticons.put(String.format(&quot;%C&quot;,0xe003),R.drawable.emoji_e003);
		emoticons.put(String.format(&quot;%C&quot;,0xe004),R.drawable.emoji_e004);
		emoticons.put(String.format(&quot;%C&quot;,0xe005),R.drawable.emoji_e005);
		emoticons.put(String.format(&quot;%C&quot;,0xe006),R.drawable.emoji_e006);
		emoticons.put(String.format(&quot;%C&quot;,0xe007),R.drawable.emoji_e007);
		emoticons.put(String.format(&quot;%C&quot;,0xe008),R.drawable.emoji_e008);
		emoticons.put(String.format(&quot;%C&quot;,0xe009),R.drawable.emoji_e009);
		emoticons.put(String.format(&quot;%C&quot;,0xe00a),R.drawable.emoji_e00a);
		emoticons.put(String.format(&quot;%C&quot;,0xe00b),R.drawable.emoji_e00b);
		emoticons.put(String.format(&quot;%C&quot;,0xe00c),R.drawable.emoji_e00c);
		emoticons.put(String.format(&quot;%C&quot;,0xe00d),R.drawable.emoji_e00d);
		emoticons.put(String.format(&quot;%C&quot;,0xe00e),R.drawable.emoji_e00e);
		emoticons.put(String.format(&quot;%C&quot;,0xe00f),R.drawable.emoji_e00f);
		emoticons.put(String.format(&quot;%C&quot;,0xe010),R.drawable.emoji_e010);
		emoticons.put(String.format(&quot;%C&quot;,0xe011),R.drawable.emoji_e011);
		emoticons.put(String.format(&quot;%C&quot;,0xe012),R.drawable.emoji_e012);
		emoticons.put(String.format(&quot;%C&quot;,0xe013),R.drawable.emoji_e013);
		emoticons.put(String.format(&quot;%C&quot;,0xe014),R.drawable.emoji_e014);
		emoticons.put(String.format(&quot;%C&quot;,0xe015),R.drawable.emoji_e015);
		emoticons.put(String.format(&quot;%C&quot;,0xe016),R.drawable.emoji_e016);
		emoticons.put(String.format(&quot;%C&quot;,0xe017),R.drawable.emoji_e017);
		emoticons.put(String.format(&quot;%C&quot;,0xe018),R.drawable.emoji_e018);
		emoticons.put(String.format(&quot;%C&quot;,0xe019),R.drawable.emoji_e019);
		emoticons.put(String.format(&quot;%C&quot;,0xe01a),R.drawable.emoji_e01a);
		emoticons.put(String.format(&quot;%C&quot;,0xe01b),R.drawable.emoji_e01b);
		emoticons.put(String.format(&quot;%C&quot;,0xe01c),R.drawable.emoji_e01c);
		emoticons.put(String.format(&quot;%C&quot;,0xe01d),R.drawable.emoji_e01d);
		emoticons.put(String.format(&quot;%C&quot;,0xe01e),R.drawable.emoji_e01e);
		emoticons.put(String.format(&quot;%C&quot;,0xe01f),R.drawable.emoji_e01f);
		emoticons.put(String.format(&quot;%C&quot;,0xe020),R.drawable.emoji_e020);
		emoticons.put(String.format(&quot;%C&quot;,0xe021),R.drawable.emoji_e021);
		emoticons.put(String.format(&quot;%C&quot;,0xe022),R.drawable.emoji_e022);
		emoticons.put(String.format(&quot;%C&quot;,0xe023),R.drawable.emoji_e023);
		emoticons.put(String.format(&quot;%C&quot;,0xe024),R.drawable.emoji_e024);
		emoticons.put(String.format(&quot;%C&quot;,0xe025),R.drawable.emoji_e025);
		emoticons.put(String.format(&quot;%C&quot;,0xe026),R.drawable.emoji_e026);
		emoticons.put(String.format(&quot;%C&quot;,0xe027),R.drawable.emoji_e027);
		emoticons.put(String.format(&quot;%C&quot;,0xe028),R.drawable.emoji_e028);
		emoticons.put(String.format(&quot;%C&quot;,0xe029),R.drawable.emoji_e029);
		emoticons.put(String.format(&quot;%C&quot;,0xe02a),R.drawable.emoji_e02a);
		emoticons.put(String.format(&quot;%C&quot;,0xe02b),R.drawable.emoji_e02b);
		emoticons.put(String.format(&quot;%C&quot;,0xe02c),R.drawable.emoji_e02c);
		emoticons.put(String.format(&quot;%C&quot;,0xe02d),R.drawable.emoji_e02d);
		emoticons.put(String.format(&quot;%C&quot;,0xe02e),R.drawable.emoji_e02e);
		emoticons.put(String.format(&quot;%C&quot;,0xe02f),R.drawable.emoji_e02f);
		emoticons.put(String.format(&quot;%C&quot;,0xe030),R.drawable.emoji_e030);
		emoticons.put(String.format(&quot;%C&quot;,0xe031),R.drawable.emoji_e031);
		emoticons.put(String.format(&quot;%C&quot;,0xe032),R.drawable.emoji_e032);
		emoticons.put(String.format(&quot;%C&quot;,0xe033),R.drawable.emoji_e033);
		emoticons.put(String.format(&quot;%C&quot;,0xe034),R.drawable.emoji_e034);
		emoticons.put(String.format(&quot;%C&quot;,0xe035),R.drawable.emoji_e035);
		emoticons.put(String.format(&quot;%C&quot;,0xe036),R.drawable.emoji_e036);
		emoticons.put(String.format(&quot;%C&quot;,0xe037),R.drawable.emoji_e037);
		emoticons.put(String.format(&quot;%C&quot;,0xe038),R.drawable.emoji_e038);
		emoticons.put(String.format(&quot;%C&quot;,0xe039),R.drawable.emoji_e039);
		emoticons.put(String.format(&quot;%C&quot;,0xe03a),R.drawable.emoji_e03a);
		emoticons.put(String.format(&quot;%C&quot;,0xe03b),R.drawable.emoji_e03b);
		emoticons.put(String.format(&quot;%C&quot;,0xe03c),R.drawable.emoji_e03c);
		emoticons.put(String.format(&quot;%C&quot;,0xe03d),R.drawable.emoji_e03d);
		emoticons.put(String.format(&quot;%C&quot;,0xe03e),R.drawable.emoji_e03e);
		emoticons.put(String.format(&quot;%C&quot;,0xe03f),R.drawable.emoji_e03f);
		emoticons.put(String.format(&quot;%C&quot;,0xe040),R.drawable.emoji_e040);
		emoticons.put(String.format(&quot;%C&quot;,0xe041),R.drawable.emoji_e041);
		emoticons.put(String.format(&quot;%C&quot;,0xe042),R.drawable.emoji_e042);
		emoticons.put(String.format(&quot;%C&quot;,0xe043),R.drawable.emoji_e043);
		emoticons.put(String.format(&quot;%C&quot;,0xe044),R.drawable.emoji_e044);
		emoticons.put(String.format(&quot;%C&quot;,0xe045),R.drawable.emoji_e045);
		emoticons.put(String.format(&quot;%C&quot;,0xe046),R.drawable.emoji_e046);
		emoticons.put(String.format(&quot;%C&quot;,0xe047),R.drawable.emoji_e047);
		emoticons.put(String.format(&quot;%C&quot;,0xe048),R.drawable.emoji_e048);
		emoticons.put(String.format(&quot;%C&quot;,0xe049),R.drawable.emoji_e049);
		emoticons.put(String.format(&quot;%C&quot;,0xe04a),R.drawable.emoji_e04a);
		emoticons.put(String.format(&quot;%C&quot;,0xe04b),R.drawable.emoji_e04b);
		emoticons.put(String.format(&quot;%C&quot;,0xe04c),R.drawable.emoji_e04c);
		emoticons.put(String.format(&quot;%C&quot;,0xe04d),R.drawable.emoji_e04d);
		emoticons.put(String.format(&quot;%C&quot;,0xe04e),R.drawable.emoji_e04e);
		emoticons.put(String.format(&quot;%C&quot;,0xe04f),R.drawable.emoji_e04f);
		emoticons.put(String.format(&quot;%C&quot;,0xe050),R.drawable.emoji_e050);
		emoticons.put(String.format(&quot;%C&quot;,0xe051),R.drawable.emoji_e051);
		emoticons.put(String.format(&quot;%C&quot;,0xe052),R.drawable.emoji_e052);
		emoticons.put(String.format(&quot;%C&quot;,0xe053),R.drawable.emoji_e053);
		emoticons.put(String.format(&quot;%C&quot;,0xe054),R.drawable.emoji_e054);
		emoticons.put(String.format(&quot;%C&quot;,0xe055),R.drawable.emoji_e055);
		emoticons.put(String.format(&quot;%C&quot;,0xe056),R.drawable.emoji_e056);
		emoticons.put(String.format(&quot;%C&quot;,0xe057),R.drawable.emoji_e057);
		emoticons.put(String.format(&quot;%C&quot;,0xe058),R.drawable.emoji_e058);
		emoticons.put(String.format(&quot;%C&quot;,0xe059),R.drawable.emoji_e059);
		emoticons.put(String.format(&quot;%C&quot;,0xe05a),R.drawable.emoji_e05a);
		emoticons.put(String.format(&quot;%C&quot;,0xe101),R.drawable.emoji_e101);
		emoticons.put(String.format(&quot;%C&quot;,0xe102),R.drawable.emoji_e102);
		emoticons.put(String.format(&quot;%C&quot;,0xe103),R.drawable.emoji_e103);
		emoticons.put(String.format(&quot;%C&quot;,0xe104),R.drawable.emoji_e104);
		emoticons.put(String.format(&quot;%C&quot;,0xe105),R.drawable.emoji_e105);
		emoticons.put(String.format(&quot;%C&quot;,0xe106),R.drawable.emoji_e106);
		emoticons.put(String.format(&quot;%C&quot;,0xe107),R.drawable.emoji_e107);
		emoticons.put(String.format(&quot;%C&quot;,0xe108),R.drawable.emoji_e108);
		emoticons.put(String.format(&quot;%C&quot;,0xe109),R.drawable.emoji_e109);
		emoticons.put(String.format(&quot;%C&quot;,0xe10a),R.drawable.emoji_e10a);
		emoticons.put(String.format(&quot;%C&quot;,0xe10b),R.drawable.emoji_e10b);
		emoticons.put(String.format(&quot;%C&quot;,0xe10c),R.drawable.emoji_e10c);
		emoticons.put(String.format(&quot;%C&quot;,0xe10d),R.drawable.emoji_e10d);
		emoticons.put(String.format(&quot;%C&quot;,0xe10e),R.drawable.emoji_e10e);
		emoticons.put(String.format(&quot;%C&quot;,0xe10f),R.drawable.emoji_e10f);
		emoticons.put(String.format(&quot;%C&quot;,0xe110),R.drawable.emoji_e110);
		emoticons.put(String.format(&quot;%C&quot;,0xe111),R.drawable.emoji_e111);
		emoticons.put(String.format(&quot;%C&quot;,0xe112),R.drawable.emoji_e112);
		emoticons.put(String.format(&quot;%C&quot;,0xe113),R.drawable.emoji_e113);
		emoticons.put(String.format(&quot;%C&quot;,0xe114),R.drawable.emoji_e114);
		emoticons.put(String.format(&quot;%C&quot;,0xe115),R.drawable.emoji_e115);
		emoticons.put(String.format(&quot;%C&quot;,0xe116),R.drawable.emoji_e116);
		emoticons.put(String.format(&quot;%C&quot;,0xe117),R.drawable.emoji_e117);
		emoticons.put(String.format(&quot;%C&quot;,0xe118),R.drawable.emoji_e118);
		emoticons.put(String.format(&quot;%C&quot;,0xe119),R.drawable.emoji_e119);
		emoticons.put(String.format(&quot;%C&quot;,0xe11a),R.drawable.emoji_e11a);
		emoticons.put(String.format(&quot;%C&quot;,0xe11b),R.drawable.emoji_e11b);
		emoticons.put(String.format(&quot;%C&quot;,0xe11c),R.drawable.emoji_e11c);
		emoticons.put(String.format(&quot;%C&quot;,0xe11d),R.drawable.emoji_e11d);
		emoticons.put(String.format(&quot;%C&quot;,0xe11e),R.drawable.emoji_e11e);
		emoticons.put(String.format(&quot;%C&quot;,0xe11f),R.drawable.emoji_e11f);
		emoticons.put(String.format(&quot;%C&quot;,0xe120),R.drawable.emoji_e120);
		emoticons.put(String.format(&quot;%C&quot;,0xe121),R.drawable.emoji_e121);
		emoticons.put(String.format(&quot;%C&quot;,0xe122),R.drawable.emoji_e122);
		emoticons.put(String.format(&quot;%C&quot;,0xe123),R.drawable.emoji_e123);
		emoticons.put(String.format(&quot;%C&quot;,0xe124),R.drawable.emoji_e124);
		emoticons.put(String.format(&quot;%C&quot;,0xe125),R.drawable.emoji_e125);
		emoticons.put(String.format(&quot;%C&quot;,0xe126),R.drawable.emoji_e126);
		emoticons.put(String.format(&quot;%C&quot;,0xe127),R.drawable.emoji_e127);
		emoticons.put(String.format(&quot;%C&quot;,0xe128),R.drawable.emoji_e128);
		emoticons.put(String.format(&quot;%C&quot;,0xe129),R.drawable.emoji_e129);
		emoticons.put(String.format(&quot;%C&quot;,0xe12a),R.drawable.emoji_e12a);
		emoticons.put(String.format(&quot;%C&quot;,0xe12b),R.drawable.emoji_e12b);
		emoticons.put(String.format(&quot;%C&quot;,0xe12c),R.drawable.emoji_e12c);
		emoticons.put(String.format(&quot;%C&quot;,0xe12d),R.drawable.emoji_e12d);
		emoticons.put(String.format(&quot;%C&quot;,0xe12e),R.drawable.emoji_e12e);
		emoticons.put(String.format(&quot;%C&quot;,0xe12f),R.drawable.emoji_e12f);
		emoticons.put(String.format(&quot;%C&quot;,0xe130),R.drawable.emoji_e130);
		emoticons.put(String.format(&quot;%C&quot;,0xe131),R.drawable.emoji_e131);
		emoticons.put(String.format(&quot;%C&quot;,0xe132),R.drawable.emoji_e132);
		emoticons.put(String.format(&quot;%C&quot;,0xe133),R.drawable.emoji_e133);
		emoticons.put(String.format(&quot;%C&quot;,0xe134),R.drawable.emoji_e134);
		emoticons.put(String.format(&quot;%C&quot;,0xe135),R.drawable.emoji_e135);
		emoticons.put(String.format(&quot;%C&quot;,0xe136),R.drawable.emoji_e136);
		emoticons.put(String.format(&quot;%C&quot;,0xe137),R.drawable.emoji_e137);
		emoticons.put(String.format(&quot;%C&quot;,0xe138),R.drawable.emoji_e138);
		emoticons.put(String.format(&quot;%C&quot;,0xe139),R.drawable.emoji_e139);
		emoticons.put(String.format(&quot;%C&quot;,0xe13a),R.drawable.emoji_e13a);
		emoticons.put(String.format(&quot;%C&quot;,0xe13b),R.drawable.emoji_e13b);
		emoticons.put(String.format(&quot;%C&quot;,0xe13c),R.drawable.emoji_e13c);
		emoticons.put(String.format(&quot;%C&quot;,0xe13d),R.drawable.emoji_e13d);
		emoticons.put(String.format(&quot;%C&quot;,0xe13e),R.drawable.emoji_e13e);
		emoticons.put(String.format(&quot;%C&quot;,0xe13f),R.drawable.emoji_e13f);
		emoticons.put(String.format(&quot;%C&quot;,0xe140),R.drawable.emoji_e140);
		emoticons.put(String.format(&quot;%C&quot;,0xe141),R.drawable.emoji_e141);
		emoticons.put(String.format(&quot;%C&quot;,0xe142),R.drawable.emoji_e142);
		emoticons.put(String.format(&quot;%C&quot;,0xe143),R.drawable.emoji_e143);
		emoticons.put(String.format(&quot;%C&quot;,0xe144),R.drawable.emoji_e144);
		emoticons.put(String.format(&quot;%C&quot;,0xe145),R.drawable.emoji_e145);
		emoticons.put(String.format(&quot;%C&quot;,0xe146),R.drawable.emoji_e146);
		emoticons.put(String.format(&quot;%C&quot;,0xe147),R.drawable.emoji_e147);
		emoticons.put(String.format(&quot;%C&quot;,0xe148),R.drawable.emoji_e148);
		emoticons.put(String.format(&quot;%C&quot;,0xe149),R.drawable.emoji_e149);
		emoticons.put(String.format(&quot;%C&quot;,0xe14a),R.drawable.emoji_e14a);
		emoticons.put(String.format(&quot;%C&quot;,0xe14b),R.drawable.emoji_e14b);
		emoticons.put(String.format(&quot;%C&quot;,0xe14c),R.drawable.emoji_e14c);
		emoticons.put(String.format(&quot;%C&quot;,0xe14d),R.drawable.emoji_e14d);
		emoticons.put(String.format(&quot;%C&quot;,0xe14e),R.drawable.emoji_e14e);
		emoticons.put(String.format(&quot;%C&quot;,0xe14f),R.drawable.emoji_e14f);
		emoticons.put(String.format(&quot;%C&quot;,0xe150),R.drawable.emoji_e150);
		emoticons.put(String.format(&quot;%C&quot;,0xe151),R.drawable.emoji_e151);
		emoticons.put(String.format(&quot;%C&quot;,0xe152),R.drawable.emoji_e152);
		emoticons.put(String.format(&quot;%C&quot;,0xe153),R.drawable.emoji_e153);
		emoticons.put(String.format(&quot;%C&quot;,0xe154),R.drawable.emoji_e154);
		emoticons.put(String.format(&quot;%C&quot;,0xe155),R.drawable.emoji_e155);
		emoticons.put(String.format(&quot;%C&quot;,0xe156),R.drawable.emoji_e156);
		emoticons.put(String.format(&quot;%C&quot;,0xe157),R.drawable.emoji_e157);
		emoticons.put(String.format(&quot;%C&quot;,0xe158),R.drawable.emoji_e158);
		emoticons.put(String.format(&quot;%C&quot;,0xe159),R.drawable.emoji_e159);
		emoticons.put(String.format(&quot;%C&quot;,0xe15a),R.drawable.emoji_e15a);
		emoticons.put(String.format(&quot;%C&quot;,0xe201),R.drawable.emoji_e201);
		emoticons.put(String.format(&quot;%C&quot;,0xe202),R.drawable.emoji_e202);
		emoticons.put(String.format(&quot;%C&quot;,0xe203),R.drawable.emoji_e203);
		emoticons.put(String.format(&quot;%C&quot;,0xe204),R.drawable.emoji_e204);
		emoticons.put(String.format(&quot;%C&quot;,0xe205),R.drawable.emoji_e205);
		emoticons.put(String.format(&quot;%C&quot;,0xe206),R.drawable.emoji_e206);
		emoticons.put(String.format(&quot;%C&quot;,0xe207),R.drawable.emoji_e207);
		emoticons.put(String.format(&quot;%C&quot;,0xe208),R.drawable.emoji_e208);
		emoticons.put(String.format(&quot;%C&quot;,0xe209),R.drawable.emoji_e209);
		emoticons.put(String.format(&quot;%C&quot;,0xe20a),R.drawable.emoji_e20a);
		emoticons.put(String.format(&quot;%C&quot;,0xe20b),R.drawable.emoji_e20b);
		emoticons.put(String.format(&quot;%C&quot;,0xe20c),R.drawable.emoji_e20c);
		emoticons.put(String.format(&quot;%C&quot;,0xe20d),R.drawable.emoji_e20d);
		emoticons.put(String.format(&quot;%C&quot;,0xe20e),R.drawable.emoji_e20e);
		emoticons.put(String.format(&quot;%C&quot;,0xe20f),R.drawable.emoji_e20f);
		emoticons.put(String.format(&quot;%C&quot;,0xe210),R.drawable.emoji_e210);
		emoticons.put(String.format(&quot;%C&quot;,0xe211),R.drawable.emoji_e211);
		emoticons.put(String.format(&quot;%C&quot;,0xe212),R.drawable.emoji_e212);
		emoticons.put(String.format(&quot;%C&quot;,0xe213),R.drawable.emoji_e213);
		emoticons.put(String.format(&quot;%C&quot;,0xe214),R.drawable.emoji_e214);
		emoticons.put(String.format(&quot;%C&quot;,0xe215),R.drawable.emoji_e215);
		emoticons.put(String.format(&quot;%C&quot;,0xe216),R.drawable.emoji_e216);
		emoticons.put(String.format(&quot;%C&quot;,0xe217),R.drawable.emoji_e217);
		emoticons.put(String.format(&quot;%C&quot;,0xe218),R.drawable.emoji_e218);
		emoticons.put(String.format(&quot;%C&quot;,0xe219),R.drawable.emoji_e219);
		emoticons.put(String.format(&quot;%C&quot;,0xe21a),R.drawable.emoji_e21a);
		emoticons.put(String.format(&quot;%C&quot;,0xe21b),R.drawable.emoji_e21b);
		emoticons.put(String.format(&quot;%C&quot;,0xe21c),R.drawable.emoji_e21c);
		emoticons.put(String.format(&quot;%C&quot;,0xe21d),R.drawable.emoji_e21d);
		emoticons.put(String.format(&quot;%C&quot;,0xe21e),R.drawable.emoji_e21e);
		emoticons.put(String.format(&quot;%C&quot;,0xe21f),R.drawable.emoji_e21f);
		emoticons.put(String.format(&quot;%C&quot;,0xe220),R.drawable.emoji_e220);
		emoticons.put(String.format(&quot;%C&quot;,0xe221),R.drawable.emoji_e221);
		emoticons.put(String.format(&quot;%C&quot;,0xe222),R.drawable.emoji_e222);
		emoticons.put(String.format(&quot;%C&quot;,0xe223),R.drawable.emoji_e223);
		emoticons.put(String.format(&quot;%C&quot;,0xe224),R.drawable.emoji_e224);
		emoticons.put(String.format(&quot;%C&quot;,0xe225),R.drawable.emoji_e225);
		emoticons.put(String.format(&quot;%C&quot;,0xe226),R.drawable.emoji_e226);
		emoticons.put(String.format(&quot;%C&quot;,0xe227),R.drawable.emoji_e227);
		emoticons.put(String.format(&quot;%C&quot;,0xe228),R.drawable.emoji_e228);
		emoticons.put(String.format(&quot;%C&quot;,0xe229),R.drawable.emoji_e229);
		emoticons.put(String.format(&quot;%C&quot;,0xe22a),R.drawable.emoji_e22a);
		emoticons.put(String.format(&quot;%C&quot;,0xe22b),R.drawable.emoji_e22b);
		emoticons.put(String.format(&quot;%C&quot;,0xe22c),R.drawable.emoji_e22c);
		emoticons.put(String.format(&quot;%C&quot;,0xe22d),R.drawable.emoji_e22d);
		emoticons.put(String.format(&quot;%C&quot;,0xe22e),R.drawable.emoji_e22e);
		emoticons.put(String.format(&quot;%C&quot;,0xe22f),R.drawable.emoji_e22f);
		emoticons.put(String.format(&quot;%C&quot;,0xe230),R.drawable.emoji_e230);
		emoticons.put(String.format(&quot;%C&quot;,0xe231),R.drawable.emoji_e231);
		emoticons.put(String.format(&quot;%C&quot;,0xe232),R.drawable.emoji_e232);
		emoticons.put(String.format(&quot;%C&quot;,0xe233),R.drawable.emoji_e233);
		emoticons.put(String.format(&quot;%C&quot;,0xe234),R.drawable.emoji_e234);
		emoticons.put(String.format(&quot;%C&quot;,0xe235),R.drawable.emoji_e235);
		emoticons.put(String.format(&quot;%C&quot;,0xe236),R.drawable.emoji_e236);
		emoticons.put(String.format(&quot;%C&quot;,0xe237),R.drawable.emoji_e237);
		emoticons.put(String.format(&quot;%C&quot;,0xe238),R.drawable.emoji_e238);
		emoticons.put(String.format(&quot;%C&quot;,0xe239),R.drawable.emoji_e239);
		emoticons.put(String.format(&quot;%C&quot;,0xe23a),R.drawable.emoji_e23a);
		emoticons.put(String.format(&quot;%C&quot;,0xe23b),R.drawable.emoji_e23b);
		emoticons.put(String.format(&quot;%C&quot;,0xe23c),R.drawable.emoji_e23c);
		emoticons.put(String.format(&quot;%C&quot;,0xe23d),R.drawable.emoji_e23d);
		emoticons.put(String.format(&quot;%C&quot;,0xe23e),R.drawable.emoji_e23e);
		emoticons.put(String.format(&quot;%C&quot;,0xe23f),R.drawable.emoji_e23f);
		emoticons.put(String.format(&quot;%C&quot;,0xe240),R.drawable.emoji_e240);
		emoticons.put(String.format(&quot;%C&quot;,0xe241),R.drawable.emoji_e241);
		emoticons.put(String.format(&quot;%C&quot;,0xe242),R.drawable.emoji_e242);
		emoticons.put(String.format(&quot;%C&quot;,0xe243),R.drawable.emoji_e243);
		emoticons.put(String.format(&quot;%C&quot;,0xe244),R.drawable.emoji_e244);
		emoticons.put(String.format(&quot;%C&quot;,0xe245),R.drawable.emoji_e245);
		emoticons.put(String.format(&quot;%C&quot;,0xe246),R.drawable.emoji_e246);
		emoticons.put(String.format(&quot;%C&quot;,0xe247),R.drawable.emoji_e247);
		emoticons.put(String.format(&quot;%C&quot;,0xe248),R.drawable.emoji_e248);
		emoticons.put(String.format(&quot;%C&quot;,0xe249),R.drawable.emoji_e249);
		emoticons.put(String.format(&quot;%C&quot;,0xe24a),R.drawable.emoji_e24a);
		emoticons.put(String.format(&quot;%C&quot;,0xe24b),R.drawable.emoji_e24b);
		emoticons.put(String.format(&quot;%C&quot;,0xe24c),R.drawable.emoji_e24c);
		emoticons.put(String.format(&quot;%C&quot;,0xe24d),R.drawable.emoji_e24d);
		emoticons.put(String.format(&quot;%C&quot;,0xe24e),R.drawable.emoji_e24e);
		emoticons.put(String.format(&quot;%C&quot;,0xe24f),R.drawable.emoji_e24f);
		emoticons.put(String.format(&quot;%C&quot;,0xe250),R.drawable.emoji_e250);
		emoticons.put(String.format(&quot;%C&quot;,0xe251),R.drawable.emoji_e251);
		emoticons.put(String.format(&quot;%C&quot;,0xe252),R.drawable.emoji_e252);
		emoticons.put(String.format(&quot;%C&quot;,0xe253),R.drawable.emoji_e253);
		emoticons.put(String.format(&quot;%C&quot;,0xe301),R.drawable.emoji_e301);
		emoticons.put(String.format(&quot;%C&quot;,0xe302),R.drawable.emoji_e302);
		emoticons.put(String.format(&quot;%C&quot;,0xe303),R.drawable.emoji_e303);
		emoticons.put(String.format(&quot;%C&quot;,0xe304),R.drawable.emoji_e304);
		emoticons.put(String.format(&quot;%C&quot;,0xe305),R.drawable.emoji_e305);
		emoticons.put(String.format(&quot;%C&quot;,0xe306),R.drawable.emoji_e306);
		emoticons.put(String.format(&quot;%C&quot;,0xe307),R.drawable.emoji_e307);
		emoticons.put(String.format(&quot;%C&quot;,0xe308),R.drawable.emoji_e308);
		emoticons.put(String.format(&quot;%C&quot;,0xe309),R.drawable.emoji_e309);
		emoticons.put(String.format(&quot;%C&quot;,0xe30a),R.drawable.emoji_e30a);
		emoticons.put(String.format(&quot;%C&quot;,0xe30b),R.drawable.emoji_e30b);
		emoticons.put(String.format(&quot;%C&quot;,0xe30c),R.drawable.emoji_e30c);
		emoticons.put(String.format(&quot;%C&quot;,0xe30d),R.drawable.emoji_e30d);
		emoticons.put(String.format(&quot;%C&quot;,0xe30e),R.drawable.emoji_e30e);
		emoticons.put(String.format(&quot;%C&quot;,0xe30f),R.drawable.emoji_e30f);
		emoticons.put(String.format(&quot;%C&quot;,0xe310),R.drawable.emoji_e310);
		emoticons.put(String.format(&quot;%C&quot;,0xe311),R.drawable.emoji_e311);
		emoticons.put(String.format(&quot;%C&quot;,0xe312),R.drawable.emoji_e312);
		emoticons.put(String.format(&quot;%C&quot;,0xe313),R.drawable.emoji_e313);
		emoticons.put(String.format(&quot;%C&quot;,0xe314),R.drawable.emoji_e314);
		emoticons.put(String.format(&quot;%C&quot;,0xe315),R.drawable.emoji_e315);
		emoticons.put(String.format(&quot;%C&quot;,0xe316),R.drawable.emoji_e316);
		emoticons.put(String.format(&quot;%C&quot;,0xe317),R.drawable.emoji_e317);
		emoticons.put(String.format(&quot;%C&quot;,0xe318),R.drawable.emoji_e318);
		emoticons.put(String.format(&quot;%C&quot;,0xe319),R.drawable.emoji_e319);
		emoticons.put(String.format(&quot;%C&quot;,0xe31a),R.drawable.emoji_e31a);
		emoticons.put(String.format(&quot;%C&quot;,0xe31b),R.drawable.emoji_e31b);
		emoticons.put(String.format(&quot;%C&quot;,0xe31c),R.drawable.emoji_e31c);
		emoticons.put(String.format(&quot;%C&quot;,0xe31d),R.drawable.emoji_e31d);
		emoticons.put(String.format(&quot;%C&quot;,0xe31e),R.drawable.emoji_e31e);
		emoticons.put(String.format(&quot;%C&quot;,0xe31f),R.drawable.emoji_e31f);
		emoticons.put(String.format(&quot;%C&quot;,0xe320),R.drawable.emoji_e320);
		emoticons.put(String.format(&quot;%C&quot;,0xe321),R.drawable.emoji_e321);
		emoticons.put(String.format(&quot;%C&quot;,0xe322),R.drawable.emoji_e322);
		emoticons.put(String.format(&quot;%C&quot;,0xe323),R.drawable.emoji_e323);
		emoticons.put(String.format(&quot;%C&quot;,0xe324),R.drawable.emoji_e324);
		emoticons.put(String.format(&quot;%C&quot;,0xe325),R.drawable.emoji_e325);
		emoticons.put(String.format(&quot;%C&quot;,0xe326),R.drawable.emoji_e326);
		emoticons.put(String.format(&quot;%C&quot;,0xe327),R.drawable.emoji_e327);
		emoticons.put(String.format(&quot;%C&quot;,0xe328),R.drawable.emoji_e328);
		emoticons.put(String.format(&quot;%C&quot;,0xe329),R.drawable.emoji_e329);
		emoticons.put(String.format(&quot;%C&quot;,0xe32a),R.drawable.emoji_e32a);
		emoticons.put(String.format(&quot;%C&quot;,0xe32b),R.drawable.emoji_e32b);
		emoticons.put(String.format(&quot;%C&quot;,0xe32c),R.drawable.emoji_e32c);
		emoticons.put(String.format(&quot;%C&quot;,0xe32d),R.drawable.emoji_e32d);
		emoticons.put(String.format(&quot;%C&quot;,0xe32e),R.drawable.emoji_e32e);
		emoticons.put(String.format(&quot;%C&quot;,0xe32f),R.drawable.emoji_e32f);
		emoticons.put(String.format(&quot;%C&quot;,0xe330),R.drawable.emoji_e330);
		emoticons.put(String.format(&quot;%C&quot;,0xe331),R.drawable.emoji_e331);
		emoticons.put(String.format(&quot;%C&quot;,0xe332),R.drawable.emoji_e332);
		emoticons.put(String.format(&quot;%C&quot;,0xe333),R.drawable.emoji_e333);
		emoticons.put(String.format(&quot;%C&quot;,0xe334),R.drawable.emoji_e334);
		emoticons.put(String.format(&quot;%C&quot;,0xe335),R.drawable.emoji_e335);
		emoticons.put(String.format(&quot;%C&quot;,0xe336),R.drawable.emoji_e336);
		emoticons.put(String.format(&quot;%C&quot;,0xe337),R.drawable.emoji_e337);
		emoticons.put(String.format(&quot;%C&quot;,0xe338),R.drawable.emoji_e338);
		emoticons.put(String.format(&quot;%C&quot;,0xe339),R.drawable.emoji_e339);
		emoticons.put(String.format(&quot;%C&quot;,0xe33a),R.drawable.emoji_e33a);
		emoticons.put(String.format(&quot;%C&quot;,0xe33b),R.drawable.emoji_e33b);
		emoticons.put(String.format(&quot;%C&quot;,0xe33c),R.drawable.emoji_e33c);
		emoticons.put(String.format(&quot;%C&quot;,0xe33d),R.drawable.emoji_e33d);
		emoticons.put(String.format(&quot;%C&quot;,0xe33e),R.drawable.emoji_e33e);
		emoticons.put(String.format(&quot;%C&quot;,0xe33f),R.drawable.emoji_e33f);
		emoticons.put(String.format(&quot;%C&quot;,0xe340),R.drawable.emoji_e340);
		emoticons.put(String.format(&quot;%C&quot;,0xe341),R.drawable.emoji_e341);
		emoticons.put(String.format(&quot;%C&quot;,0xe342),R.drawable.emoji_e342);
		emoticons.put(String.format(&quot;%C&quot;,0xe343),R.drawable.emoji_e343);
		emoticons.put(String.format(&quot;%C&quot;,0xe344),R.drawable.emoji_e344);
		emoticons.put(String.format(&quot;%C&quot;,0xe345),R.drawable.emoji_e345);
		emoticons.put(String.format(&quot;%C&quot;,0xe346),R.drawable.emoji_e346);
		emoticons.put(String.format(&quot;%C&quot;,0xe347),R.drawable.emoji_e347);
		emoticons.put(String.format(&quot;%C&quot;,0xe348),R.drawable.emoji_e348);
		emoticons.put(String.format(&quot;%C&quot;,0xe349),R.drawable.emoji_e349);
		emoticons.put(String.format(&quot;%C&quot;,0xe34a),R.drawable.emoji_e34a);
		emoticons.put(String.format(&quot;%C&quot;,0xe34b),R.drawable.emoji_e34b);
		emoticons.put(String.format(&quot;%C&quot;,0xe34c),R.drawable.emoji_e34c);
		emoticons.put(String.format(&quot;%C&quot;,0xe34d),R.drawable.emoji_e34d);
		emoticons.put(String.format(&quot;%C&quot;,0xe401),R.drawable.emoji_e401);
		emoticons.put(String.format(&quot;%C&quot;,0xe402),R.drawable.emoji_e402);
		emoticons.put(String.format(&quot;%C&quot;,0xe403),R.drawable.emoji_e403);
		emoticons.put(String.format(&quot;%C&quot;,0xe404),R.drawable.emoji_e404);
		emoticons.put(String.format(&quot;%C&quot;,0xe405),R.drawable.emoji_e405);
		emoticons.put(String.format(&quot;%C&quot;,0xe406),R.drawable.emoji_e406);
		emoticons.put(String.format(&quot;%C&quot;,0xe407),R.drawable.emoji_e407);
		emoticons.put(String.format(&quot;%C&quot;,0xe408),R.drawable.emoji_e408);
		emoticons.put(String.format(&quot;%C&quot;,0xe409),R.drawable.emoji_e409);
		emoticons.put(String.format(&quot;%C&quot;,0xe40a),R.drawable.emoji_e40a);
		emoticons.put(String.format(&quot;%C&quot;,0xe40b),R.drawable.emoji_e40b);
		emoticons.put(String.format(&quot;%C&quot;,0xe40c),R.drawable.emoji_e40c);
		emoticons.put(String.format(&quot;%C&quot;,0xe40d),R.drawable.emoji_e40d);
		emoticons.put(String.format(&quot;%C&quot;,0xe40e),R.drawable.emoji_e40e);
		emoticons.put(String.format(&quot;%C&quot;,0xe40f),R.drawable.emoji_e40f);
		emoticons.put(String.format(&quot;%C&quot;,0xe410),R.drawable.emoji_e410);
		emoticons.put(String.format(&quot;%C&quot;,0xe411),R.drawable.emoji_e411);
		emoticons.put(String.format(&quot;%C&quot;,0xe412),R.drawable.emoji_e412);
		emoticons.put(String.format(&quot;%C&quot;,0xe413),R.drawable.emoji_e413);
		emoticons.put(String.format(&quot;%C&quot;,0xe414),R.drawable.emoji_e414);
		emoticons.put(String.format(&quot;%C&quot;,0xe415),R.drawable.emoji_e415);
		emoticons.put(String.format(&quot;%C&quot;,0xe416),R.drawable.emoji_e416);
		emoticons.put(String.format(&quot;%C&quot;,0xe417),R.drawable.emoji_e417);
		emoticons.put(String.format(&quot;%C&quot;,0xe418),R.drawable.emoji_e418);
		emoticons.put(String.format(&quot;%C&quot;,0xe419),R.drawable.emoji_e419);
		emoticons.put(String.format(&quot;%C&quot;,0xe41a),R.drawable.emoji_e41a);
		emoticons.put(String.format(&quot;%C&quot;,0xe41b),R.drawable.emoji_e41b);
		emoticons.put(String.format(&quot;%C&quot;,0xe41c),R.drawable.emoji_e41c);
		emoticons.put(String.format(&quot;%C&quot;,0xe41d),R.drawable.emoji_e41d);
		emoticons.put(String.format(&quot;%C&quot;,0xe41e),R.drawable.emoji_e41e);
		emoticons.put(String.format(&quot;%C&quot;,0xe41f),R.drawable.emoji_e41f);
		emoticons.put(String.format(&quot;%C&quot;,0xe420),R.drawable.emoji_e420);
		emoticons.put(String.format(&quot;%C&quot;,0xe421),R.drawable.emoji_e421);
		emoticons.put(String.format(&quot;%C&quot;,0xe422),R.drawable.emoji_e422);
		emoticons.put(String.format(&quot;%C&quot;,0xe423),R.drawable.emoji_e423);
		emoticons.put(String.format(&quot;%C&quot;,0xe424),R.drawable.emoji_e424);
		emoticons.put(String.format(&quot;%C&quot;,0xe425),R.drawable.emoji_e425);
		emoticons.put(String.format(&quot;%C&quot;,0xe426),R.drawable.emoji_e426);
		emoticons.put(String.format(&quot;%C&quot;,0xe427),R.drawable.emoji_e427);
		emoticons.put(String.format(&quot;%C&quot;,0xe428),R.drawable.emoji_e428);
		emoticons.put(String.format(&quot;%C&quot;,0xe429),R.drawable.emoji_e429);
		emoticons.put(String.format(&quot;%C&quot;,0xe42a),R.drawable.emoji_e42a);
		emoticons.put(String.format(&quot;%C&quot;,0xe42b),R.drawable.emoji_e42b);
		emoticons.put(String.format(&quot;%C&quot;,0xe42c),R.drawable.emoji_e42c);
		emoticons.put(String.format(&quot;%C&quot;,0xe42d),R.drawable.emoji_e42d);
		emoticons.put(String.format(&quot;%C&quot;,0xe42e),R.drawable.emoji_e42e);
		emoticons.put(String.format(&quot;%C&quot;,0xe42f),R.drawable.emoji_e42f);
		emoticons.put(String.format(&quot;%C&quot;,0xe430),R.drawable.emoji_e430);
		emoticons.put(String.format(&quot;%C&quot;,0xe431),R.drawable.emoji_e431);
		emoticons.put(String.format(&quot;%C&quot;,0xe432),R.drawable.emoji_e432);
		emoticons.put(String.format(&quot;%C&quot;,0xe433),R.drawable.emoji_e433);
		emoticons.put(String.format(&quot;%C&quot;,0xe434),R.drawable.emoji_e434);
		emoticons.put(String.format(&quot;%C&quot;,0xe435),R.drawable.emoji_e435);
		emoticons.put(String.format(&quot;%C&quot;,0xe436),R.drawable.emoji_e436);
		emoticons.put(String.format(&quot;%C&quot;,0xe437),R.drawable.emoji_e437);
		emoticons.put(String.format(&quot;%C&quot;,0xe438),R.drawable.emoji_e438);
		emoticons.put(String.format(&quot;%C&quot;,0xe439),R.drawable.emoji_e439);
		emoticons.put(String.format(&quot;%C&quot;,0xe43a),R.drawable.emoji_e43a);
		emoticons.put(String.format(&quot;%C&quot;,0xe43b),R.drawable.emoji_e43b);
		emoticons.put(String.format(&quot;%C&quot;,0xe43c),R.drawable.emoji_e43c);
		emoticons.put(String.format(&quot;%C&quot;,0xe43d),R.drawable.emoji_e43d);
		emoticons.put(String.format(&quot;%C&quot;,0xe43e),R.drawable.emoji_e43e);
		emoticons.put(String.format(&quot;%C&quot;,0xe43f),R.drawable.emoji_e43f);
		emoticons.put(String.format(&quot;%C&quot;,0xe440),R.drawable.emoji_e440);
		emoticons.put(String.format(&quot;%C&quot;,0xe441),R.drawable.emoji_e441);
		emoticons.put(String.format(&quot;%C&quot;,0xe442),R.drawable.emoji_e442);
		emoticons.put(String.format(&quot;%C&quot;,0xe443),R.drawable.emoji_e443);
		emoticons.put(String.format(&quot;%C&quot;,0xe444),R.drawable.emoji_e444);
		emoticons.put(String.format(&quot;%C&quot;,0xe445),R.drawable.emoji_e445);
		emoticons.put(String.format(&quot;%C&quot;,0xe446),R.drawable.emoji_e446);
		emoticons.put(String.format(&quot;%C&quot;,0xe447),R.drawable.emoji_e447);
		emoticons.put(String.format(&quot;%C&quot;,0xe448),R.drawable.emoji_e448);
		emoticons.put(String.format(&quot;%C&quot;,0xe449),R.drawable.emoji_e449);
		emoticons.put(String.format(&quot;%C&quot;,0xe44a),R.drawable.emoji_e44a);
		emoticons.put(String.format(&quot;%C&quot;,0xe44b),R.drawable.emoji_e44b);
		emoticons.put(String.format(&quot;%C&quot;,0xe44c),R.drawable.emoji_e44c);
		emoticons.put(String.format(&quot;%C&quot;,0xe501),R.drawable.emoji_e501);
		emoticons.put(String.format(&quot;%C&quot;,0xe502),R.drawable.emoji_e502);
		emoticons.put(String.format(&quot;%C&quot;,0xe503),R.drawable.emoji_e503);
		emoticons.put(String.format(&quot;%C&quot;,0xe504),R.drawable.emoji_e504);
		emoticons.put(String.format(&quot;%C&quot;,0xe505),R.drawable.emoji_e505);
		emoticons.put(String.format(&quot;%C&quot;,0xe506),R.drawable.emoji_e506);
		emoticons.put(String.format(&quot;%C&quot;,0xe507),R.drawable.emoji_e507);
		emoticons.put(String.format(&quot;%C&quot;,0xe508),R.drawable.emoji_e508);
		emoticons.put(String.format(&quot;%C&quot;,0xe509),R.drawable.emoji_e509);
		emoticons.put(String.format(&quot;%C&quot;,0xe50a),R.drawable.emoji_e50a);
		emoticons.put(String.format(&quot;%C&quot;,0xe50b),R.drawable.emoji_e50b);
		emoticons.put(String.format(&quot;%C&quot;,0xe50c),R.drawable.emoji_e50c);
		emoticons.put(String.format(&quot;%C&quot;,0xe50d),R.drawable.emoji_e50d);
		emoticons.put(String.format(&quot;%C&quot;,0xe50e),R.drawable.emoji_e50e);
		emoticons.put(String.format(&quot;%C&quot;,0xe50f),R.drawable.emoji_e50f);
		emoticons.put(String.format(&quot;%C&quot;,0xe510),R.drawable.emoji_e510);
		emoticons.put(String.format(&quot;%C&quot;,0xe511),R.drawable.emoji_e511);
		emoticons.put(String.format(&quot;%C&quot;,0xe512),R.drawable.emoji_e512);
		emoticons.put(String.format(&quot;%C&quot;,0xe513),R.drawable.emoji_e513);
		emoticons.put(String.format(&quot;%C&quot;,0xe514),R.drawable.emoji_e514);
		emoticons.put(String.format(&quot;%C&quot;,0xe515),R.drawable.emoji_e515);
		emoticons.put(String.format(&quot;%C&quot;,0xe516),R.drawable.emoji_e516);
		emoticons.put(String.format(&quot;%C&quot;,0xe517),R.drawable.emoji_e517);
		emoticons.put(String.format(&quot;%C&quot;,0xe518),R.drawable.emoji_e518);
		emoticons.put(String.format(&quot;%C&quot;,0xe519),R.drawable.emoji_e519);
		emoticons.put(String.format(&quot;%C&quot;,0xe51a),R.drawable.emoji_e51a);
		emoticons.put(String.format(&quot;%C&quot;,0xe51b),R.drawable.emoji_e51b);
		emoticons.put(String.format(&quot;%C&quot;,0xe51c),R.drawable.emoji_e51c);
		emoticons.put(String.format(&quot;%C&quot;,0xe51d),R.drawable.emoji_e51d);
		emoticons.put(String.format(&quot;%C&quot;,0xe51e),R.drawable.emoji_e51e);
		emoticons.put(String.format(&quot;%C&quot;,0xe51f),R.drawable.emoji_e51f);
		emoticons.put(String.format(&quot;%C&quot;,0xe520),R.drawable.emoji_e520);
		emoticons.put(String.format(&quot;%C&quot;,0xe521),R.drawable.emoji_e521);
		emoticons.put(String.format(&quot;%C&quot;,0xe522),R.drawable.emoji_e522);
		emoticons.put(String.format(&quot;%C&quot;,0xe523),R.drawable.emoji_e523);
		emoticons.put(String.format(&quot;%C&quot;,0xe524),R.drawable.emoji_e524);
		emoticons.put(String.format(&quot;%C&quot;,0xe525),R.drawable.emoji_e525);
		emoticons.put(String.format(&quot;%C&quot;,0xe526),R.drawable.emoji_e526);
		emoticons.put(String.format(&quot;%C&quot;,0xe527),R.drawable.emoji_e527);
		emoticons.put(String.format(&quot;%C&quot;,0xe528),R.drawable.emoji_e528);
		emoticons.put(String.format(&quot;%C&quot;,0xe529),R.drawable.emoji_e529);
		emoticons.put(String.format(&quot;%C&quot;,0xe52a),R.drawable.emoji_e52a);
		emoticons.put(String.format(&quot;%C&quot;,0xe52b),R.drawable.emoji_e52b);
		emoticons.put(String.format(&quot;%C&quot;,0xe52c),R.drawable.emoji_e52c);
		emoticons.put(String.format(&quot;%C&quot;,0xe52d),R.drawable.emoji_e52d);
		emoticons.put(String.format(&quot;%C&quot;,0xe52e),R.drawable.emoji_e52e);
		emoticons.put(String.format(&quot;%C&quot;,0xe52f),R.drawable.emoji_e52f);
		emoticons.put(String.format(&quot;%C&quot;,0xe530),R.drawable.emoji_e530);
		emoticons.put(String.format(&quot;%C&quot;,0xe531),R.drawable.emoji_e531);
		emoticons.put(String.format(&quot;%C&quot;,0xe532),R.drawable.emoji_e532);
		emoticons.put(String.format(&quot;%C&quot;,0xe533),R.drawable.emoji_e533);
		emoticons.put(String.format(&quot;%C&quot;,0xe534),R.drawable.emoji_e534);
		emoticons.put(String.format(&quot;%C&quot;,0xe535),R.drawable.emoji_e535);
		emoticons.put(String.format(&quot;%C&quot;,0xe536),R.drawable.emoji_e536);
		emoticons.put(String.format(&quot;%C&quot;,0xe537),R.drawable.emoji_e537);
		// as&iacute; solamente se realiza la b&uacute;squeda en la inicializaci&oacute;n
		categories.put(Tipo.Smiley.toString(), getCharsFromTags(Tipo.Smiley));
		categories.put(Tipo.Event.toString(), getCharsFromTags(Tipo.Event));
		categories.put(Tipo.Nature.toString(), getCharsFromTags(Tipo.Nature));
		categories.put(Tipo.Place.toString(), getCharsFromTags(Tipo.Place));
		categories.put(Tipo.Symbol.toString(), getCharsFromTags(Tipo.Symbol));
	}
	/**
	 * Transforma los vectores de c&oacute;digo hexadecimal con los c&oacute;digos de caracter unicode a los propios caracteres
	 * @param tipo Categor&iacute;a del emoticono deseado
	 * @return Vector de caracteres unicode
	 */
	private static String[] getCharsFromTags(Tipo tipo) {
		int[] array = null;
		switch (tipo) {
			case Smiley:
				array = smileys;
				break;
			case Event:
				array = events;
				break;
			case Nature:
				array = nature;
				break;
			case Place:
				array = places;
				break;
			case Symbol:
				array = symbols;
				break;
		}
		LinkedList&lt;String&gt; tags = new LinkedList&lt;String&gt;();
		for (int i:array)
			tags.add(String.format(&quot;%C&quot;,i));
		return tags.toArray(new String[0]);
	}
	/**
	 * Devuelve un vector de caracteres unicode perteneciente a una categor&iacute;a de emoji
	 *
	 * @param tipo Categor&iacute;a de emoji deseada
	 * @return Vector de caracteres unicode de los emoji del tipo indicado
	 */
	public static String[] getTags(Tipo tipo) {
		return categories.get(tipo.toString());
	}
	/**
	 * Devuelve la ID del Resource perteneciente a un emoticono, dado su caracter unicode
	 *
	 * @param tag Caracter unicode del emoji deseado
	 * @return
	 */
	public static int getResource(String tag) {
		return emoticons.get(tag);
	}
	/**
	 * Nos devuelve el Spannable con la mezcla de texto/im&aacute;genes necesaria para la representaci&oacute;n de los emoticonos
	 *
	 * @param context Contexto de ejecuci&oacute;n donde se realiza la llamada
	 * @param text Texto a parsear con los caracteres de los emoticonos
	 * @return Devuelve un Spannable con las im&aacute;genes intercaladas en el texto
	 */
	public static Spannable getEmojiText(Context context, String text) {
		SpannableStringBuilder builder = new SpannableStringBuilder(text);
		int index;
		for (index = 0; index &lt; builder.length(); index++) {
			for (Entry&lt;String, Integer&gt; entry : emoticons.entrySet()) {
				int length = entry.getKey().length();
				if (index + length &gt; builder.length())
					continue;
				if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
					builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
					index += length - 1;
		        	break;
				}
			}
		}
		return builder;
	}
}
</pre>
</p>
<p>Para utilizar este código en tus proyectos, solamente hay que cambiar las implementaciones que utilicen <strong>setText</strong> de <strong>String</strong> a <strong>Spannable</strong>, que lo admiten perfectamente. Por ejemplo, os puedo comentar que tanto <strong>TextView</strong> como <strong>EditText</strong> lo admiten sin ningún problema. Un ejemplo de uso sería el que sigue.</p>
<p>
<pre>
final TextView mensajeTexto = (TextView)findViewById(R.id.mensajeTexto);
mensajeTexto.setText(EmoticonUtils.getEmojiText(ctx, textoPlano));
</pre>
</p>
<p>
La variable <strong>textoPlano</strong> debe de ser una String en UTF-8 que puede contener tanto texto como caracteres emoji, que serán convenientemente cambiados por sus respectivas imágenes guardadas en los recursos del proyecto.
</p>
<p>Espero que este código os sirva, que para mí ha sido un coñazo hacerlo. Lo mejoraré seguramente para minimizar los costes, pero a saber si me da por actualizar este post&#8230; de todos modos esto es totalmente funcional <img src='http://www.perry.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Si encontráis algún problema, dejádmelo en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2011/05/31/implementar-soporte-a-emoji-en-aplicaciones-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uso de XMPP en Android</title>
		<link>http://www.perry.es/2011/05/25/uso-de-xmpp-en-android/</link>
		<comments>http://www.perry.es/2011/05/25/uso-de-xmpp-en-android/#comments</comments>
		<pubDate>Wed, 25 May 2011 10:12:49 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Móvil]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[smack]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=7932</guid>
		<description><![CDATA[Por (circunstancias) estoy trabajando con XMPP para un cliente multiplataforma (móvil) de mensajería, por su potencia, por ser un estándar conocido, y por las diversas implementaciones de gran calidad y extensibilidad que existen a nivel de servidor. Para elegir una librería en Java, para usar en Android, la cosa está bastante clara: hay que tirar [...]]]></description>
			<content:encoded><![CDATA[<p>Por (circunstancias) estoy trabajando con XMPP para un cliente multiplataforma (móvil) de mensajería, por su potencia, por ser un estándar conocido, y por las diversas implementaciones de gran calidad y extensibilidad que existen a nivel de servidor.</p>
<p>Para elegir una librería en Java, para usar en Android, la cosa está bastante clara: hay que tirar con <a title="Smack" href="http://www.igniterealtime.org/projects/smack/index.jsp">Smack</a>. Pero presenta una serie de problemas la librería, al menos con las versiones a día de hoy, que hacen que tengamos que buscar por otro lado: errores en la conexión por no poder utilizar el método SASL por defecto (al no estar presentes en la VM de Android algunos métodos utilizados), incapacidad de usar compresión, entre otras.</p>
<p>Entonces se llega a <a href="http://code.google.com/p/asmack/">asmack</a>, o sea, Smack para Android, que es un fork donde se han aplicado una serie de parches en la autenticación, DNS, y más.</p>
<p>Y a priori, todo funciona bien.</p>
<pre>
System.setProperty("java.net.preferIPv6Addresses", "false");
ConnectionConfiguration cc = new ConnectionConfiguration("domain",5222);
cc.setSecurityMode(SecurityMode.disabled);
cc.setCompressionEnabled(false);
cc.setReconnectionAllowed(true);

conn = new XMPPConnection(cc);
Connection.DEBUG_ENABLED = true;

try {
conn.connect();
if (conn.isConnected())
Log.d(TAG,"Conectado");
else {
Log.d(TAG,"No conectado");
return;
}

conn.login(user+"@domain", pass, "resource");

if (conn.isAuthenticated()) {
Log.d(TAG,"Autenticado");
res = true;
}
else
Log.d(TAG,"No autenticado");
} catch (XMPPException ex) { ex.printStackTrace(); }
</pre>
<p>Pero tiene pegas. Hay algunas funcionalidades que no van del todo bien, y para solventarlas en su mayoría hay que tirar de versiones de asmack que han parcheado. Yo tuve la suerte de encontrar <a href="https://github.com/Flowdalic/asmack">un fork de asmack hecho por Flowdalic</a> que soluciona la mayoría de problemas, como por ejemplo la búsqueda de usuarios en el servidor.</p>
<p>Pero hay un tema muy insidioso que nadie ha solucionado en sus JAR. Resulta que existe, dentro de la carpeta META-INF de los mismos, un archivo que se llama smack.providers que debería cargarse, puesto que cuenta con los IQ providers de la mayoría de añadidos útiles de XMPP, pero por cuestiones de cómo se generan los JAR de Android, no está presente. Por lo tanto -y que sepáis que es lo que más me dio por culo a la hora de encontrar qué fallaba- hay que registrarlos manualmente.</p>
<p>Antes de definir el ConnectionConfiguration, debemos añadir esta línea de código:</p>
<pre>
// poner entre el System.setProperty y el ConnectionConfiguration
configure(ProviderManager.getInstance());
// ha de ir siempre antes del establecimiento de la conexión
</pre>
<p>Y después crear una función que se llame configure, quedando como la que sigue:</p>
<pre>

// reemplazo para smack.providers ya que éste no funciona en asmack
private void configure(ProviderManager pm) {
//  Private Data Storage
pm.addIQProvider("query","jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider());

//  Time
try {
pm.addIQProvider("query","jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time"));
} catch (ClassNotFoundException e) {
Log.w(TAG, "Can't load class for org.jivesoftware.smackx.packet.Time");
}

//  XHTML
pm.addExtensionProvider("html","http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider());

//  Roster Exchange
pm.addExtensionProvider("x","jabber:x:roster", new RosterExchangeProvider());
//  Message Events
pm.addExtensionProvider("x","jabber:x:event", new MessageEventProvider());
//  Chat State
pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());
pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider());

//   FileTransfer
pm.addIQProvider("si","http://jabber.org/protocol/si", new StreamInitiationProvider());
pm.addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
pm.addIQProvider("open","http://jabber.org/protocol/ibb", new OpenIQProvider());
pm.addIQProvider("close","http://jabber.org/protocol/ibb", new CloseIQProvider());
pm.addExtensionProvider("data","http://jabber.org/protocol/ibb", new DataPacketProvider());

//  Group Chat Invitations
pm.addExtensionProvider("x","jabber:x:conference", new GroupChatInvitation.Provider());
//  Service Discovery # Items
pm.addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());
//  Service Discovery # Info
pm.addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
//  Data Forms
pm.addExtensionProvider("x","jabber:x:data", new DataFormProvider());
//  MUC User
pm.addExtensionProvider("x","http://jabber.org/protocol/muc#user", new MUCUserProvider());
//  MUC Admin
pm.addIQProvider("query","http://jabber.org/protocol/muc#admin", new MUCAdminProvider());
//  MUC Owner
pm.addIQProvider("query","http://jabber.org/protocol/muc#owner", new MUCOwnerProvider());
//  Delayed Delivery
pm.addExtensionProvider("x","jabber:x:delay", new DelayInformationProvider());
//  Version
try {
pm.addIQProvider("query","jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version"));
} catch (ClassNotFoundException e) {
Log.w(TAG, "Can't load class for org.jivesoftware.smackx.packet.Version");
}
//  VCard
pm.addIQProvider("vCard","vcard-temp", new VCardProvider());
//  Offline Message Requests
pm.addIQProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider());
//  Offline Message Indicator
pm.addExtensionProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider());
//  Last Activity
pm.addIQProvider("query","jabber:iq:last", new LastActivity.Provider());
//  User Search
pm.addIQProvider("query","jabber:iq:search", new UserSearch.Provider());
//  SharedGroupsInfo
pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider());
//  JEP-33: Extended Stanza Addressing
pm.addExtensionProvider("addresses","http://jabber.org/protocol/address", new MultipleAddressesProvider());
}
</pre>
<p>Y con esto ya nos funcionarían todas las características, doy fe de ello: ya me funcionan IncomingFileTransfer y OutgoingFileTransfer, los chats multiusuario, e incluso los mensajes de OfflineMessageManager.</p>
<p>No sé si soy manco o qué, pero darme cuenta de todo esto y hallar las soluciones me ha costado bastantes semanas de dolor y agonía, y aquí lo comparto con vosotros, si es que a alguno alguna vez le toca trastear con XMPP en Android.</p>
<p>Sólo se que estoy temblando pensando en el momento que tenga que portar esta aplicación a iOS xDD</p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2011/05/25/uso-de-xmpp-en-android/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>AnimeUnderground 1.4 para Android</title>
		<link>http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/</link>
		<comments>http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 19:50:44 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Móvil]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[animeunderground]]></category>
		<category><![CDATA[animeunderground-android]]></category>
		<category><![CDATA[audev]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=2399</guid>
		<description><![CDATA[Para celebrar las 2000 descargas, he subido una actualización importante para la aplicación de Android de AU. El changelog, como podemos ver en el Android Market, es el que sigue: Novedades de esta versión: Rediseño del icono del launcher. Rediseño del widget. Añadida nueva ventana de login. Añadida nueva ventana de registro. Añadidas opciones en [...]]]></description>
			<content:encoded><![CDATA[<p>Para celebrar las 2000 descargas, he subido una actualización importante para la aplicación de Android de AU.</p>

<a href='http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/au_login/' title='au_login'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2011/04/au_login-150x150.png" class="attachment-thumbnail" alt="au_login" title="au_login" /></a>
<a href='http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/au_registrarse/' title='au_registrarse'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2011/04/au_registrarse-150x150.png" class="attachment-thumbnail" alt="au_registrarse" title="au_registrarse" /></a>
<a href='http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/au_iconosnuevos/' title='au_iconosnuevos'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2011/04/au_iconosnuevos-150x150.png" class="attachment-thumbnail" alt="au_iconosnuevos" title="au_iconosnuevos" /></a>
<a href='http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/au_principal/' title='au_principal'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2011/04/au_principal-150x150.png" class="attachment-thumbnail" alt="au_principal" title="au_principal" /></a>

<p>El changelog, como podemos ver en el <a href="https://market.android.com/details?id=com.aunder.application&amp;feature=search_result">Android Market</a>, es el que sigue:</p>
<p>Novedades de esta versión:</p>
<ol>
<li>Rediseño del icono del launcher.</li>
<li>Rediseño del widget.</li>
<li>Añadida nueva ventana de login.</li>
<li>Añadida nueva ventana de registro.</li>
<li>Añadidas opciones en configuración.</li>
<li>Mejoras en el login del foro.</li>
<li>Corrección de FCs reportados por los usuarios.</li>
<li>Se han arreglado las noticias de Abyss, ya funcionan todas bien y se muestran correctamente con su foto correspondiente.</li>
<li>Se han arreglado los errores que salían al hacer check-in de una serie.</li>
</ol>
<p>De paso, aprovecho para comentar que están en desarrollo versiones de AU para Windows Phone 7 y para dispositivos iOS 4.3.1 (en principio), sin tiempo estimado de salida, puesto que se hacen en los ratos libres cuando no pasamos el día trabajando.</p>
<p>Es que en <a href="http://www.audev.net">AUDev</a> molamos más que un <a href="http://spb.fotolog.com/photo/59/58/11/sopademerluza/1243092940827_f.jpg">bocata de chopped</a>, y que el esmegma de un <a href="http://images.wikia.com/starwars/images/6/6c/Rancor.jpg">rancor</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2011/04/07/animeunderground-para-android-1-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AnimeUnderground para Android</title>
		<link>http://www.perry.es/2010/11/21/animeunderground-para-android/</link>
		<comments>http://www.perry.es/2010/11/21/animeunderground-para-android/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 20:15:24 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Móvil]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[animeunderground]]></category>
		<category><![CDATA[animeunderground-android]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=1510</guid>
		<description><![CDATA[Tras más de un mes sin poner nada por aquí, algo pasaba que me tenía tan ocupado. Pues eran varias cosas, entre ellas esta aplicación. La aplicación para Android de AnimeUnderground. Con ella podréis ver las últimas noticias, toda la información sobre nuestras series y sobre los miembros de AU. También proporciona acceso rápido al [...]]]></description>
			<content:encoded><![CDATA[<p>Tras más de un mes sin poner nada por aquí, algo pasaba que me tenía tan ocupado. Pues eran varias cosas, entre ellas esta aplicación. La aplicación para <strong>Android </strong>de <strong>AnimeUnderground</strong>.</p>
<p>Con ella podréis ver las últimas noticias, toda la información sobre nuestras series y sobre los miembros de AU. También proporciona acceso rápido al foro, y te notifica cuando haya una nueva noticia. Además, incorpora un widget de 4&#215;1 para estar al tanto de la última noticia y dar un acceso rápido a la misma y a la aplicación completa.</p>
<p>Os dejo unas cuantas capturas de la misma (hacedles click para verlas mejor).</p>

<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-1/' title='captura-1'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-1-150x150.png" class="attachment-thumbnail" alt="captura-1" title="captura-1" /></a>
<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-2/' title='captura-2'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-2-150x150.png" class="attachment-thumbnail" alt="captura-2" title="captura-2" /></a>
<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-3/' title='captura-3'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-3-150x150.png" class="attachment-thumbnail" alt="captura-3" title="captura-3" /></a>
<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-4/' title='captura-4'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-4-150x150.png" class="attachment-thumbnail" alt="captura-4" title="captura-4" /></a>
<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-5/' title='captura-5'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-5-150x150.png" class="attachment-thumbnail" alt="captura-5" title="captura-5" /></a>
<a href='http://www.perry.es/2010/11/21/animeunderground-para-android/captura-6/' title='captura-6'><img width="150" height="150" src="http://www.perry.es/extra/uploads/2010/11/captura-6-150x150.png" class="attachment-thumbnail" alt="captura-6" title="captura-6" /></a>

<p>Podéis descargarla, valorarla, y demás en este enlace.</p>
<div id="app198" class="appbrain-app"><a style="font-size: 11px; color: #555; font-family: Arial, sans-serif;" href="http://www.appbrain.com/app/animeunderground/com.aunder.application">AnimeUnderground for Android on AppBrain</a></div>
<p><script src="http://www.appbrain.com/api/api.nocache.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2010/11/21/animeunderground-para-android/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Visual Studio Solution File Version Conversor 1.0</title>
		<link>http://www.perry.es/2010/09/26/visual-studio-solution-file-version-conversor-1-0/</link>
		<comments>http://www.perry.es/2010/09/26/visual-studio-solution-file-version-conversor-1-0/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 10:15:28 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=1476</guid>
		<description><![CDATA[Esta es una pequeña aplicación destinada a los programadores de Visual Studio que tengan el engorro de trabajar entre versiones para la universidad, el curro, casa, etc. Simplemente edita los archivos de solución permitiendo engañar a la aplicación y poder usar otras versiones. Obviamente no va a solucionar el problema de que te funcione en [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-1477" title="VSSFVC" src="http://www.perry.es/extra/uploads/2010/09/vssfvc-325x132.jpg" alt="" width="325" height="132" />Esta es una pequeña aplicación destinada a los programadores de Visual Studio que tengan el engorro de trabajar entre versiones para la universidad, el curro, casa, etc. Simplemente edita los archivos de solución permitiendo engañar a la aplicación y poder usar otras versiones.</p>
<p>Obviamente no va a solucionar el problema de que te funcione en VS2005 una aplicación que usa .NET 4.0 o similares, pero sí te revierte los cambios que suelen ser habituales en el cambio de versiones.</p>
<p>Os dejo el enlace de descarga aquí:</p>
<a href="http://www.perry.es/descargas/Visual+Studio+Solution+File+Version+Conversor">Visual Studio Solution File Version Conversor</a> 1.0 - 328 hits
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2010/09/26/visual-studio-solution-file-version-conversor-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patchwerk 1.5</title>
		<link>http://www.perry.es/2010/09/09/patchwerk-1-5/</link>
		<comments>http://www.perry.es/2010/09/09/patchwerk-1-5/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 15:15:23 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Patchwerk]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=1462</guid>
		<description><![CDATA[Hace ya tiempo saqué una pequeña GUI para crear parches xdelta que ha resultado ser bastante útil (y parece que utilizada), al menos en el mundillo fansub en español. En AU lo usamos hasta en la sopa para el control de QCs y para subsanar cagadas en releases realizadas (*yikes*), y me consta que gente [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-1465 alignright" title="Patchwerk 1.5" src="http://www.perry.es/extra/uploads/2010/09/patchwerk15-325x151.jpg" alt="" width="325" height="151" />Hace ya tiempo saqué una pequeña<strong> GUI para crear parches xdelta</strong> que ha resultado ser bastante útil (y parece que utilizada), al menos en el mundillo fansub en español. En AU lo usamos hasta en la sopa para el control de QCs y para subsanar cagadas en releases realizadas (*yikes*), y me consta que gente de otros fansubs lo ha estado utilizando también.</p>
<p>Como últimamente yo mismo he vuelto de mi retiro fansuberil, y lo he tenido que estar utilizando bastante, he realizado unas cuantas modificaciones al código del mismo para que me fuese más útil y cómodo. Y ahora las comparto, claro.</p>
<p>Podéis descargar el instalador desde aquí:</p>
<a href="http://www.perry.es/descargas/Patchwerk+1.5">Patchwerk 1.5</a>  - 737 hits
<h2>Instrucciones de instalación</h2>
<ul>
<li>Si ya teníais una versión anterior instalada, <strong>desinstaladla</strong>.</li>
<li>Ejecutad el instalador, tenéis el enlace arriba.</li>
</ul>
<h2>Changelog</h2>
<ul>
<li>Optimización de métodos internos.</li>
<li>Eliminadas actualizaciones ClickOnce.</li>
<li>Añadido sistema de actualización de wyBuild.</li>
<li>El nombre del archivo final se generará ahora (a no ser que lo especifiques de otra manera) basándose en el nombre que le des al archivo del parche xdelta.</li>
<li>Agrandado el tamaño de la ventana para ver más fácilmente las rutas de los archivos.</li>
<li>Icono lulzer cambiado por uno de mayor resolución.</li>
</ul>
<p>Si tenéis algún problema, comentádmelo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2010/09/09/patchwerk-1-5/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Facebook Quiz: ¿Qué ente de AU eres?, lo que hace el aburrimiento&#8230;</title>
		<link>http://www.perry.es/2009/05/18/facebook-quiz-%c2%bfque-ente-de-au-eres-lo-que-hace-el-aburrimiento/</link>
		<comments>http://www.perry.es/2009/05/18/facebook-quiz-%c2%bfque-ente-de-au-eres-lo-que-hace-el-aburrimiento/#comments</comments>
		<pubDate>Mon, 18 May 2009 09:51:43 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[AnimeUndeground]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[quiz]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=771</guid>
		<description><![CDATA[Harto de que me llenen de quiz la página de Inicio de mi Facebook, la mayoría en perfecto español neutro de un pueblo perdido de Perú o un suburbio pobre de Paraguay, llenas de faltas y palabras que sólo Dios sabe qué significan, con respuestas estúpidas y preguntas más estúpidas todavía, e inspirado por el [...]]]></description>
			<content:encoded><![CDATA[<p>Harto de que me llenen de quiz la página de Inicio de mi <a href="http://www.facebook.com">Facebook</a>, la mayoría en perfecto español neutro de un pueblo perdido de Perú o un suburbio pobre de Paraguay, llenas de faltas y palabras que sólo Dios sabe qué significan, con respuestas estúpidas y preguntas más estúpidas todavía, e inspirado por el test de <em>Quin personatge d&#8217;OtakUAB ets?</em>, pues me puse manos a la obra para hacer esta cosa&#8230;</p>
<p><a href="http://apps.facebook.com/trqujl-ente-d-ggjege/"><img class="alignnone size-large wp-image-773" title="¿Qué ente de AU eres?" src="http://www.perry.es/extra/uploads/2009/05/au-quiz1-500x360.png" alt="¿Qué ente de AU eres?" width="500" height="360" /></a></p>
<p>Hay 14 respuestas posibles, y si bien no estamos todos, sí que estamos unos cuantos. La verdad es que es bastante entretenido ver quién le sale a la gente de fuera, desde luego, y ya he visto varios &#8220;yo&#8221;, varios Abyss, varios Chak, varios ^3R^, varios Deh&#8230;</p>
<p>Obviamente, a cada uno le ha ido saliendo sí mismo&#8230; ejem.</p>
<p><a href="http://www.perry.es/extra/uploads/2009/05/itsme.png"><img class="alignnone size-large wp-image-775" title="Oh, vaya, soy mrm xDDD" src="http://www.perry.es/extra/uploads/2009/05/itsme-500x201.png" alt="Oh, vaya, soy mrm xDDD" width="500" height="201" /></a></p>
<p>El comentario <em>self-bukkake</em> es normal eh, va en consonancia a lo de &#8220;altivo&#8221; xDDDDDDDDDD Y la mayoría son en ese plan.</p>
<p>Pues eso, ya me contaréis qué os sale, que está bastante graciosete. Aunque es bastante friki pero qué se le va a hacer&#8230; Sólo hay que mirar la página en la que estáis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2009/05/18/facebook-quiz-%c2%bfque-ente-de-au-eres-lo-que-hace-el-aburrimiento/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Patchwerk 1.0: Creación y aplicación de parches xdelta</title>
		<link>http://www.perry.es/2009/02/26/patchwerk-creacion-y-aplicacion-de-parches-xdelta/</link>
		<comments>http://www.perry.es/2009/02/26/patchwerk-creacion-y-aplicacion-de-parches-xdelta/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 13:14:07 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Patchwerk]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=458</guid>
		<description><![CDATA[Ayer usé por primera vez el xdelta, para la gente que tenía la RC2 de Kara no Kyoukai (que va con softsubs, como ya sabéis), pudiera pasar a la RC3 sin tener que volver a bajarse todo el capítulo. Me gustó mucho la idea de poder pasar de una versión del capítulo a otra usando [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer usé por primera vez el xdelta, para la gente que tenía la RC2 de <a href="http://www.perry.es/?p=430">Kara no Kyoukai</a> (que va con softsubs, como ya sabéis), pudiera pasar a la RC3 sin tener que volver a bajarse todo el capítulo. Me gustó mucho la idea de poder pasar de una versión del capítulo a otra usando sólamente un parchecito de 10K de tamaño. Lo que no me gustó tanto fue tener que teclear en la línea de comandos los parámetros a mano. Si a eso le unes las ganas que tenía de probar a hacer algo utilizando el WPF de Microsoft con el Visual Studio 2008, pues el resultado es este programilla realizado en un ratillo de hoy por la mañana xD</p>
<div id="attachment_459" class="wp-caption alignnone" style="width: 457px"><a href="http://www.perry.es/wp-content/uploads/2009/02/patchwerk_ui1.jpg"><img class="size-full wp-image-459" title="patchwerk_ui1" src="http://www.perry.es/wp-content/uploads/2009/02/patchwerk_ui1.jpg" alt="Menuda sobriedad, me amuermo a mí mismo" width="447" height="265" /></a><p class="wp-caption-text">Menuda sobriedad, me amuermo a mí mismo</p></div>
<p>Es muy simple. Simplemente es una GUI para la última versión del xdelta (que viene incluída), y no tiene mayor complicación. Un poquete de explicación nunca está de más:</p>
<ul>
<li><strong>Archivo Original</strong>: El archivo del que se parte (p.ej, la RC2 de KnK).</li>
<li><strong>Archivo Destino</strong>: El archivo modificado, nuevo (p.ej, la RC3 de KnK).</li>
<li><strong>Nombre del Parche</strong>: No importa cómo lo llamemos, pero siempre va bien algo explicativo (p.ej. &#8220;KnK.01.RC2toRC3&#8243;)</li>
<li><strong>Batch Aplicación</strong>: El nombre del archivo .BAT que generará el programa, para aplicar el parche (p.ej. &#8220;[parche] Kara no Kyoukai 01 &#8211; RC2 a RC3.bat&#8221;)</li>
<li><strong>Borrar Archivos Intermedios</strong>: Si está marcado, borrará el parche y el .bat generados, cuando estén ya comprimidos en el .ZIP del parche. Si no, pues no xD</li>
</ul>
<p>Y el programa lo que hará es:</p>
<ol>
<li>Creará el archivo de diferencias entre <em>Original </em>y <em>Destino</em>, llamándolo como se indica en <em>Nombre del Parche</em> + &#8220;.xdelta&#8221;.</li>
<li>Creará el .BAT que se deberá ejecutar para convertir <em>Original </em>en <em>Destino</em>.</li>
<li>Cogerá el .BAT generado, el ejecutable del xdelta, y el archivo de diferencias, y los comprimirá juntos en un archivo .ZIP.</li>
</ol>
<p>Así lo que conseguimos es automatizar completamente el proceso fácil de sustitución de scripts de un MKV con softsubs a otro, que es lo que me incumbe. Pero ojo, que esto se puede utilizar para <strong>CUALQUIER COSA</strong>, es totalmente de propósito general. Otra cosa muy distinta es la utilidad que le voy a dar yo, que es la que he comentado. Y bueno, aplicado al fansub pues también se me ocurre si ha habido algún error/glitch en el vídeo, pues solucionarlo de forma fácil. O para sustituir los audios. O lo que se os ocurra xD</p>
<p>Podéis bajarlo de aquí: <a href="http://www.perry.es/descargas/Patchwerk+1.0">Patchwerk 1.0</a>  - 1387 hits</p>
<p>O mirar la <a href="http://mrm.aunder.org/Patchwerk/publish.htm">URL de publicación aquí</a>.</p>
<p>Como ya he dicho, utiliza WPF y ClickOnce, así que requiere <strong>Windows Installer 3.1</strong> y <strong>.NET Framework 3.5</strong>. Si no los tenéis, os lo bajará el instalador.</p>
<p>Ah, no tiene apenas comprobación de errores. Es simple, hace lo que tiene que hacer, nada más. Si hacéis el burro petará, fijo. Y cuando lo ejecutéis, como usa el ClickOnce este de marras, si hay alguna versión nueva o algo, se actualizará solito, así que sólo hay que bajar 1 vez y despreocuparse.</p>
<p>Espero que le sirva a alguien, aparte de a mí <img src='http://www.perry.es/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2009/02/26/patchwerk-creacion-y-aplicacion-de-parches-xdelta/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Back on black, back on track</title>
		<link>http://www.perry.es/2009/01/15/back-on-black-back-on-track/</link>
		<comments>http://www.perry.es/2009/01/15/back-on-black-back-on-track/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 19:52:28 +0000</pubDate>
		<dc:creator>mrm</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sobre la web]]></category>
		<category><![CDATA[AnimeUndeground]]></category>
		<category><![CDATA[fansub]]></category>
		<category><![CDATA[mrm]]></category>

		<guid isPermaLink="false">http://www.perry.es/?p=206</guid>
		<description><![CDATA[Tampoco es para echar las campanas al vuelo, pero me parece que poquito a poquito me vuelto a reintegrar en el mundillo fansuberil. Así para abrir boca, por fin parecen haberse solucionado los problemas de mi pequeña joyita, el PerrySub, con Vista. Y puedo utilizarlo a mis anchas, awwwww yeah. Ahora compilado en Visual Studio [...]]]></description>
			<content:encoded><![CDATA[<p>Tampoco es para echar las campanas al vuelo, pero me parece que poquito a poquito me vuelto a reintegrar en el mundillo fansuberil. Así para abrir boca, por fin parecen haberse solucionado los problemas de mi pequeña joyita, el PerrySub, con Vista. Y puedo utilizarlo a mis anchas, awwwww yeah. Ahora compilado en Visual Studio 2008 (cambiando el 2005 por fin), y con la nueva versión del AviSynthWrapper de Awayo. Ni siquiera da el error que debiera al cerrarse, es mágico.</p>
<div id="attachment_207" class="wp-caption alignnone" style="width: 510px"><a href="http://www.perry.es/wp-content/uploads/2009/01/perry2009.png"><img class="size-large wp-image-207" title="perry2009" src="http://www.perry.es/wp-content/uploads/2009/01/perry2009-500x295.png" alt="Y por fin cambió el Nyoron-ism de la 0.7.38.2 xD" width="500" height="295" /></a><p class="wp-caption-text">Y por fin cambió el Nyoron-ism de la 0.7.38.2 en la 0.7.39.0 xD</p></div>
<p>Se nota bastante la oxidación, y que el After Effects con mi pepino va bastante más suave (incluso editando a 1920&#215;1080). Me da un poco de miedo qué pasará a la hora de encodear, pero como perro viejo, me voy a cambiar de chaqueta a los softsubs. Las RC1+ se las va a fumar pepito, un remux y pa&#8217;rriba. Al que no le guste ajo y agua xD</p>
<p>Y bueno, eso, que poquito a poquito a ver si dura esto, y se pueden llevar proyectos a buen término. Pasito a pasito y sin agobiarse, que esto es como una rehabilitación <img src='http://www.perry.es/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.perry.es/2009/01/15/back-on-black-back-on-track/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

