<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.geekandroll.com/wp-atom.php">
	<title type="text">Geek &amp; Roll</title>
	<subtitle type="text">Just another WordPress weblog</subtitle>

	<updated>2008-12-31T04:52:06Z</updated>
	<generator uri="http://wordpress.org/" version="2.6.3">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.geekandroll.com" />
	<id>http://www.geekandroll.com/feed/atom/</id>
	

			<link rel="self" href="http://feeds.feedburner.com/geekandroll" type="application/atom+xml" /><entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[Programando para la BlackBerry - Everlasting Flame II]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/499170629/" />
		<id>http://www.geekandroll.com/?p=704</id>
		<updated>2008-12-31T04:52:06Z</updated>
		<published>2008-12-31T04:52:06Z</published>
		<category scheme="http://www.geekandroll.com" term="Uncategorized" />		<summary type="html"><![CDATA[Ver primera y segunda parte.

Continuamos con el desarrollo de esta aplicación. Ya en la parte dos vimos cómo programar la funcionalidad básica: monitorear el tiempo de las llamadas y reaccionar de acuerdo a los límites establecidos (denominados soft y hard limit). Ahora sigue el turno de guardar a la memoria algunas de las opciones establecidas [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame-ii/">&lt;p&gt;Ver &lt;a href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-intro/" &gt;primera&lt;/a&gt; y &lt;a href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame/" &gt;segunda&lt;/a&gt; parte.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.geekandroll.com/wp-content/uploads/2008/12/everlasting-flame-hover.png" &gt;&lt;img src="http://www.geekandroll.com/wp-content/uploads/2008/12/everlasting-flame-hover.png" alt="Everlasting Flame icon" title="Everlasting Flame icon" width="60" height="55" class="size-full wp-image-675" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Continuamos con el desarrollo de esta aplicación. Ya en la parte dos vimos cómo programar la funcionalidad básica: monitorear el tiempo de las llamadas y reaccionar de acuerdo a los límites establecidos (denominados &lt;em&gt;soft&lt;/em&gt; y &lt;em&gt;hard&lt;/em&gt; limit). Ahora sigue el turno de guardar a la memoria algunas de las opciones establecidas por el usuario y crear una interfaz gráfica para la configuración.&lt;/p&gt;
&lt;p&gt;Como vimos, Everlasting Flame es una aplicación con la que el usuario no interactúa directamente y es por esto que no contiene una interfaz gráfica. La aplicación se ejecuta automáticamente cuando el teléfono inicia, de tal modo que al marcar un número comienza a contar el tiempo. Sin embargo es conveniente tener una interfaz de configuración donde podamos establecer los límites, así como también habilitar y deshabilitar el monitoreo de llamadas (por si queremos hacer una llamada más larga de lo normal sin que se corte).&lt;/p&gt;
&lt;p&gt;Para este propósito se crea lo que se llama un punto de entrada alternativo, que como su nombre lo indica, servirá como punto de entrada a la aplicación ejecutando una serie de pasos distintos a los &amp;#8220;normales&amp;#8221;. En nuestro caso el punto de entrada normal es el que no tiene interfaz gráfica y el alternativo es iniciar la interfaz gráfica para configurar la aplicación. Lo primero es configurar el proyecto como aplicación del sistema (es decir, que no muestra interfaz gráfica) y que sea auto ejecutable. Esto se hace desde Eclipse modificando las propiedades del proyecto. Después creamos un proyecto nuevo vacío y en las propiedades lo configuramos como punto de entrada alternativo al proyecto original, pasando como parámetro alguna cadena de identificación (en mi caso, &amp;#8220;init&amp;#8221;).&lt;/p&gt;
&lt;p&gt;De esta manera, cuando el usuario seleccione el icono de nuestra aplicación desde la BlackBerry, nuestra aplicación recibirá como argumento la cadena &amp;#8220;init&amp;#8221; y eso nos servirá como señal para iniciar la interfaz gráfica. Si la aplicación es iniciada automáticamente, no recibiremos la cadena &amp;#8220;init&amp;#8221; e iniciaremos la aplicación como antes. Modificamos EverlastingFlame.java de esta manera:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;static&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; main&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;String&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; args&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;On Endless main&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;boolean&lt;/span&gt; startup = &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;int&lt;/span&gt; i=&lt;span class="nu0"&gt;0&lt;/span&gt;; i &amp;lt; args.&lt;span class="me1"&gt;length&lt;/span&gt;; i++&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;args&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;.&lt;span class="me1"&gt;equals&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;init&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; startup = &lt;span class="kw2"&gt;true&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;startup&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Called from regular entry point, display the GUI.&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MainGUI gui = &lt;span class="kw2"&gt;new&lt;/span&gt; MainGUI&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gui.&lt;span class="me1"&gt;enterEventDispatcher&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Called from alternate entry point, start the EverlastingFlame.&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EverlastingFlame ef = &lt;span class="kw2"&gt;new&lt;/span&gt; EverlastingFlame&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ef.&lt;span class="me1"&gt;enterEventDispatcher&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Como vemos en el código, si recibimos la cadena &amp;#8220;init&amp;#8221; creamos una nueva instancia de MainGUI y ejecutamos su event dispatcher para que el sistema despliegue la pantalla. El código de MainGUI.java se muestra a continuación:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;class&lt;/span&gt; MainGUI &lt;span class="kw2"&gt;extends&lt;/span&gt; UiApplication&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; MainScreen mainScreen;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; MainGUI&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mainScreen = &lt;span class="kw2"&gt;new&lt;/span&gt; EverlastingFlameScreen&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LabelField label = &lt;span class="kw2"&gt;new&lt;/span&gt; LabelField&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Everlasting Flame Configuration&amp;#8221;&lt;/span&gt;, LabelField.&lt;span class="me1"&gt;ELLIPSIS&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | LabelField.&lt;span class="me1"&gt;USE_ALL_WIDTH&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mainScreen.&lt;span class="me1"&gt;setTitle&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;label&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pushScreen&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;mainScreen&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Esta clase extiende a UiApplication porque precisamente es una aplicación con interfaz gráfica. Contiene una MainScreen con el título de &amp;#8220;Everlasting Flame Configuration&amp;#8221;. Por último empujamos la pantalla para que sea mostrada en el teléfono. La MainScreen es realmente una instancia de EverlastingFlameScreen, una clase que hereda de MainScreen e implementa la interfaz gráfica y los eventos que nos interesan:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;class&lt;/span&gt; EverlastingFlameScreen &lt;span class="kw2"&gt;extends&lt;/span&gt; MainScreen&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; CheckboxField chkActive;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; EverlastingFlameScreen&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chkActive = &lt;span class="kw2"&gt;new&lt;/span&gt; CheckboxField&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Start monitoring service?&amp;#8221;&lt;/span&gt;,Options.&lt;span class="me1"&gt;getActive&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; add&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;chkActive&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;protected&lt;/span&gt; &lt;span class="kw4"&gt;boolean&lt;/span&gt; onSavePrompt&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;isDirty&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;int&lt;/span&gt; option = &lt;a href="http://www.google.com/search?q=allinurl%3ADialog+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Dialog&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;ask&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.google.com/search?q=allinurl%3ADialog+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Dialog&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;D_SAVE&lt;/span&gt;, &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="st0"&gt;&amp;#8220;Do you want to save changes?&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;option == &lt;a href="http://www.google.com/search?q=allinurl%3ADialog+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Dialog&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;SAVE&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; onSave&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;boolean&lt;/span&gt; chkState = chkActive.&lt;span class="me1"&gt;getChecked&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Options.&lt;span class="me1"&gt;setActive&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;chkState&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Options.&lt;span class="me1"&gt;getActive&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ADialog+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Dialog&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;inform&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Calls will be monitored, Mujajaja!&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ADialog+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Dialog&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;inform&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Calls are no longer monitored.&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chkActive.&lt;span class="me1"&gt;setChecked&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Options.&lt;span class="me1"&gt;getActive&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;return&lt;/span&gt; &lt;span class="kw2"&gt;false&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;return&lt;/span&gt; &lt;span class="kw2"&gt;true&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Para efectos de este ejemplo, la pantalla se compone solamente de un checkbox que sirve para habilitar o deshabilitar el servicio de monitoreo. Si este checkbox se encuentra activo, Everlasting Flame monitorea las llamadas, inyectando el tono DTMF y colgando cuando es necesario. De más está decir que si se encuentra desactivado, las llamadas transcurren normales. En el constructor se crea el checkbox en cuestión y se le pasa una cadena que será su etiqueta, así como también el estado inicial del checkbox (seleccionado o no seleccionado).&lt;/p&gt;
&lt;p&gt;El estado inicial se obtiene de las opciones del usuario, gracias a una clase Options que nos sirve para guardar las preferencias del usuario en memoria no volátil (más de esto en la siguiente entrega de esta serie de posts). La magia ocurre en el método onSavePrompt. Este método se ejecuta cuando el sistema cree que hubo algún cambio que debe ser guardado. Nosotros sobreescribimos el método y agregamos una pequeña validación.&lt;/p&gt;
&lt;p&gt;Cuando el sistema ejecuta onSavePrompt, verificamos el estado de la pantalla. isDirty nos indica que hubo cambios y por lo tanto hay que preguntar al usuario (por medio del método estático ask de la clase Dialog) si desea guardar. En caso de si desear guardar, verificamos si el usuario activó o desactivó el servicio y por último informamos al usuario que sus cambios han sido aplicados.&lt;/p&gt;
&lt;p&gt;Queda solamente modificar el PhoneListener para tomar en cuenta el estado del servicio (activado o desactivado). Esto es muy sencillo utilizando la clase Options que se verá más adelante:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Options.&lt;span class="me1"&gt;getActive&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeSeconds == softLimit&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Soft limit reached&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; injectDTMFTone&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Phone.&lt;span class="me1"&gt;getActiveCall&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeSeconds == hardLimit&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Hard limit reached, hanging up!&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; injectEndCall&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Service not active&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si el servicio se encuentra activo, realiza las mismas validaciones anteriores. En caso de encontrarse inactivo, simplemente no hace nada.&lt;/p&gt;
&lt;p&gt;Lo que queda es explicar la clase Options y por supuesto agregar mayor funcionalidad a la interfaz gráfica, como por ejemplo la configuración de los límites, la acción a realizar en cada uno de ellos y cambiar el funcionamiento entre modo &amp;#8220;naco&amp;#8221; (funcione para todos los números) y modo &amp;#8220;VIP&amp;#8221; (sólo para números seleccionados).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=5EMLBT"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=5EMLBT" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame-ii/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame-ii/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame-ii/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[10 placeres culposos geek]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/498078917/" />
		<id>http://www.geekandroll.com/?p=702</id>
		<updated>2008-12-29T21:46:23Z</updated>
		<published>2008-12-29T21:46:23Z</published>
		<category scheme="http://www.geekandroll.com" term="Uncategorized" />		<summary type="html"><![CDATA[Tratando de robar un poco del spotlight en el que se encuentran mis amigos de 10puntos.info, les comparto una lista de 10 placeres culposos geek compilada por mi en orden de relevancia ascendente y numeración inversa:

Aprender diálogos de tu película favorita, y repetirlos a cada rato. No vasta con contarle al mundo el numero de [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/10-placeres-culposos-geek/">&lt;p&gt;Tratando de robar un poco del &lt;em&gt;spotlight &lt;/em&gt;en el que se encuentran mis amigos de &lt;a href="http://www.10puntos.info/" onclick="javascript:urchinTracker ('/outbound/article/www.10puntos.info');"&gt;10puntos.info&lt;/a&gt;, les comparto una lista de 10 placeres culposos geek compilada por mi en orden de relevancia ascendente y numeración inversa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Aprender diálogos de tu película favorita, y repetirlos a cada rato. No vasta con contarle al mundo el numero de 6 cifras que suman las veces que haz visto &lt;em&gt;The Lord of the Rings&lt;/em&gt; (la trilogia completa y de una sentada, porque según tu, no existe otra manera de verlas), o tratar de impartir lecciones de vida con lo &amp;#8220;aprendido&amp;#8221; en &lt;em&gt;The Fight Club&lt;/em&gt;. Por si fuera poco, te aprendes los diálogos y los repites en todas y cada una de las ocasiones que crees relevante además de, claro está, cuando estas viendo la película y es el turno de la escena en cuestión.&lt;/li&gt;
&lt;li&gt;Japón. Ya sea por querer aprender Japones, pregonar a los cuatro vientos tu fascinación con la mujer Japonesa (o con la imagen que tu crees que es representativa de la mujer Japonesa) o simplemente tu amor por las artes marciales de dicho país, parece ser como si todo lo proveniente del Japón ocasionara un click en tu mente que hace que te agrade y lo quieras.&lt;/li&gt;
&lt;li&gt;Escribir un blog. Porque seguramente a todo el mundo le interesa lo que tu haces. El momentum decrece cuando te das cuenta de los otros millones de individuos que también tienen tus grandes ideas, solo que antes que tu, además de ser más jóvenes, han logrado más cosas que tu a su edad y a la tuya además de que ellos sí aprendieron Japones.&lt;/li&gt;
&lt;li&gt;Diseñar camisetas graciosas (Tees). Todo geek tiene excelentes ideas para camisetas y pondría su propia tienda de camisetas por Internet, si tan sólo tuviera el tiempo (es que las más de 70 horas y contando de Final Fantasy XII no lo dejan).&lt;/li&gt;
&lt;li&gt;Leer &lt;em&gt;feeds&lt;/em&gt;. Todo empezó con la necesidad organizar y tener a la mano las grandes cantidades de información regada por muchos sitios que visitamos frecuentemente. Se introdujeron los &lt;em&gt;feeds &lt;/em&gt;RSS y todo fue perfecto&amp;#8230; hasta que la desorganización empezó dentro de nuestros propios &lt;em&gt;feeds&lt;/em&gt;. Sabes que eres adicto a esto cuando pasas de 1000+ en el &lt;em&gt;Reader&lt;/em&gt; a 17 en menos de 30 minutos, y la mayoría de las veces tan solo lees unos cuantos, luego solo los títulos, y luego simplemente presionas &lt;em&gt;Mark all as read&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Defender la piratería. Lo llamas de mil maneras, menos piratería (porque piratería es atacar barcos mercantes, y eso es muy malo). Defiendes el hecho de que te bajas la discografía completa de Topo Gigio porque los cerdos avariciosos de la iTunes Store la ofrecen con ese asqueroso DRM. Al final, lo único que quieres es no pagar por la música y terminas comprando reproductores que alimentan a la máquina del DRM (como iPods, iPhones, Zunes).&lt;/li&gt;
&lt;li&gt;Comprar nuevos gadgets. Necesito un iPod con mas capacidad. Necesito una tabla Wacom. Necesito un celular nuevo. Necesito, Necesito, &lt;strong&gt;Necesito&lt;/strong&gt;. No necesitas nada de eso, más bien lo deseas con todas tus entrañas sobrealimentadas de pizza y coca cola.&lt;/li&gt;
&lt;li&gt;Internet en la casa. Después de todo el día laboral en la computadora y conectado a Internet, llegas a tu casa&amp;#8230; a estar en la computadora y usar Internet por supuesto.&lt;/li&gt;
&lt;li&gt;Twitter. Por algo se le hace tan estúpido a la mayoría de la gente, ¿O es que la mayoría son estúpidos?&lt;/li&gt;
&lt;li&gt;Apple. Todos los productos de Apple son un enorme placer culposo, y punto.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=AeImcT"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=AeImcT" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/10-placeres-culposos-geek/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/10-placeres-culposos-geek/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/10-placeres-culposos-geek/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[Regalos Geek de Navidad edición 2008]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/497377643/" />
		<id>http://www.geekandroll.com/?p=700</id>
		<updated>2008-12-29T01:42:32Z</updated>
		<published>2008-12-29T01:42:32Z</published>
		<category scheme="http://www.geekandroll.com" term="geekchandise" /><category scheme="http://www.geekandroll.com" term="hay-un-mundo-alla-afuera" />		<summary type="html"><![CDATA[Pasó Navidad y es hora de preguntar: ¿Qué regalos geek recibieron o se autoregalaron esta Navidad? Yo empiezo:

El Blu-Ray edición especial de &#8220;The Dark Knight&#8221;

Como ven, mi presupuesto para regalos se lo llevó completamente otro regalo al que no considero Geek así que no hay mucho que presumir. Seguramente ustedes si, así que a presumir [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/regalos-geek-de-navidad-edicion-2008/">&lt;p&gt;Pasó Navidad y es hora de preguntar: ¿Qué regalos geek recibieron o se autoregalaron esta Navidad? Yo empiezo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El Blu-Ray edición especial de &amp;#8220;The Dark Knight&amp;#8221;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Como ven, mi presupuesto para regalos se lo llevó completamente otro regalo al que no considero Geek así que no hay mucho que presumir. Seguramente ustedes si, así que a presumir en los comentarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=xFJZtY"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=xFJZtY" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/regalos-geek-de-navidad-edicion-2008/#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/regalos-geek-de-navidad-edicion-2008/feed/atom/" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/regalos-geek-de-navidad-edicion-2008/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Rafyta</name>
						<uri>http://rafyta.com</uri>
					</author>
		<title type="html"><![CDATA[twitter + last.fm = blip.fm]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/494299599/" />
		<id>http://www.geekandroll.com/?p=696</id>
		<updated>2008-12-24T20:11:28Z</updated>
		<published>2008-12-24T20:09:44Z</published>
		<category scheme="http://www.geekandroll.com" term="internet" /><category scheme="http://www.geekandroll.com" term="web2.0" />		<summary type="html"><![CDATA[
No es necesario decir mucho, pero este sitio con el que me acabo de topar (y ya olvidé cómo), te permite blipear con una canción que tus contactos pueden escuchar. Ése es el concepto básico; buscas una canción, pones un mensaje y se publica en tu cuenta. En lugar de usuario, eres &#8220;DJ&#8221; y en [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/twitter-lastfm-blipfm/">&lt;p&gt;&lt;a href="http://blip.fm"title="blip.fm"  target="_blank" onclick="javascript:urchinTracker ('/outbound/article/blip.fm');"&gt;&lt;img class="alignnone size-full wp-image-697" src="http://www.geekandroll.com/wp-content/uploads/2008/12/blipfm.gif" alt="" width="450" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No es necesario decir mucho, pero este sitio con el que me acabo de topar (y ya olvidé cómo), te permite &lt;em&gt;blipear&lt;/em&gt; con una canción que tus contactos pueden escuchar. Ése es el concepto básico; buscas una canción, pones un mensaje y se publica en tu cuenta. En lugar de usuario, eres &amp;#8220;DJ&amp;#8221; y en lugar de &amp;#8220;seguir&amp;#8221; a tus amigos, añades DJ&amp;#8217;s a tus favoritos.&lt;/p&gt;
&lt;p&gt;El concepto es fresco, aunque desde luego no 100% original, pero apenas llevo unos minutos y ya me gustó bastante. En ciertos aspectos supera por mucho a last.fm, que era lo más parecido que usaba para mi sitio personal.&lt;/p&gt;
&lt;p&gt;Pueden checar unos blips que posteé para probar en &lt;a href="http://blip.fm/rafyta" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/blip.fm');"&gt;http://blip.fm/rafyta&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=EH9aVL"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=EH9aVL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/twitter-lastfm-blipfm/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/twitter-lastfm-blipfm/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/twitter-lastfm-blipfm/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[Retrospectiva, mi 2008 in a nutshell]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/492564525/" />
		<id>http://www.geekandroll.com/?p=692</id>
		<updated>2008-12-22T21:27:01Z</updated>
		<published>2008-12-22T21:27:01Z</published>
		<category scheme="http://www.geekandroll.com" term="Uncategorized" />		<summary type="html"><![CDATA[Cuando iniciamos este blog no teníamos muy clara la idea de lo que sería, en que se convertiría o de que se trataría. Todo inició con un: &#8220;Hey, nuestros blogs se parecen. ¿Porque no escribimos en uno solo?&#8221;. Mi respuesta a Axel (el de la idea y el de la fotito de abajo con la [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/retrospectiva-mi-2008-in-a-nutshell/">&lt;p&gt;Cuando iniciamos este blog no teníamos muy clara la idea de lo que sería, en que se convertiría o de que se trataría. Todo inició con un: &amp;#8220;Hey, nuestros blogs se parecen. ¿Porque no escribimos en uno solo?&amp;#8221;. Mi respuesta a Axel (el de la idea y el de la fotito de abajo con la greña alborotada) fue &amp;#8220;¡Buena idea!&amp;#8221; aunque mentalmente fue &amp;#8220;Hmm&amp;#8230; no, así estoy bien&amp;#8221;. La buena noticia es que me equivoqué, juntos los dos - y ahora tres - logramos hacer algo que por separado no lograría capturar el &lt;em&gt;feeling&lt;/em&gt; geek de los tres. Por si no se han dado cuenta, cada uno de los tres inyecta un lado de la &lt;em&gt;geekes &lt;/em&gt;general de Geek&amp;#038;Roll. La mala noticia es que perdí mi blog personal.&lt;/p&gt;
&lt;p&gt;Las razones para cerrar mi blog personal fueron varias y no todas tuvieron que ver directamente con el compromiso de Geek&amp;#038;Roll. Aun así, la mayoría de los temas tratados en mi blog personal comenzaron a aparecer en forma de posts de un servidor aquí, pero obviamente los temas más personales se fueron directo a /dev/null (algo como la papelera de reciclaje pero sin la opción de recuperar lo ahí depositado). Desde entonces los temas personales que decido hacer públicos en la red se desbaratan entre Tweets, posts, Facebook, Picasa, conversaciones de IM y no se que tantas cosas más.&lt;/p&gt;
&lt;p&gt;La larga introducción es para justificar el siguiente post 100% personal. Para mi, el 2008 fue un año de evolución más que de cambio. Evolución que me trajo experiencias que difícilmente voy a dejar de recordar en los años venideros. En el 2008 viví algunos de los momentos más memorables de mi vida hasta la fecha, algunos públicos como la despedida completamente &lt;em&gt;impromptu&lt;/em&gt; de todos mis amigos y compañeros de maestría, otros privados de los que por obvias razones no daré ejemplo. Días con tintes de despedida de grandes amigos, amigas y otros personajes, así como también emocionantes bienvenidas de personajes mucho tiempo atrás olvidados.&lt;/p&gt;
&lt;p&gt;El 2009 se perfila como la culminación a manera de cambio del largo hilo evolutivo del 2008. Quiero terminar con un simple gracias a todas las personas con las que tuve el privilegio de compartir este 2008. Gracias a mis amigos de Geek&amp;#038;Roll, el staff, los visitantes &lt;em&gt;elite&lt;/em&gt; que siempre vuelven sin importar de las desviaciones en la calidad y la frecuencia de posteo que solemos tener, a todos los lectores que hacen comentarios o los anónimos. Gracias a Rafyta por siempre echarme la mano con la cosa de las imágenes y esas cosas de diseño de las que no entiendo nada y por ende son Del Diablo&amp;trade;. Gracias a las personas que me han permitido &lt;strong&gt;invertir&lt;/strong&gt; en lo único que me va a quedar si llego a viejo: los recuerdos de una vida plena.&lt;/p&gt;
&lt;p&gt;Gracias, y que venga el 2009.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=EtWs6h"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=EtWs6h" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/retrospectiva-mi-2008-in-a-nutshell/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/retrospectiva-mi-2008-in-a-nutshell/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/retrospectiva-mi-2008-in-a-nutshell/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[PS3 Home rifa y controla]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/482337744/" />
		<id>http://www.geekandroll.com/?p=685</id>
		<updated>2008-12-12T04:44:28Z</updated>
		<published>2008-12-12T04:44:28Z</published>
		<category scheme="http://www.geekandroll.com" term="entretenimiento" />		<summary type="html"><![CDATA[ Acabo de probar la beta pública de Home, el mundo virtual a la second life de Sony para la PS3. En este post voy a plasmar mis impresiones, aunque pueden encontrar reseñas mucho mas completas en otros blogs, aquí les contaré mi experiencia personal con el servicio.
Primero la descarga. 77 megas. Se descargó e [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/ps3-home-rifa-y-controla/">&lt;p&gt;&lt;a href="http://www.geekandroll.com/wp-content/uploads/2008/12/home-sony-logo-lg.jpg" &gt;&lt;img src="http://www.geekandroll.com/wp-content/uploads/2008/12/home-sony-logo-lg.jpg" alt="Home" title="Home" width="300" height="256" class="size-medium wp-image-686" /&gt;&lt;/a&gt; Acabo de probar la beta pública de Home, el mundo virtual &lt;em&gt;a la second life&lt;/em&gt; de Sony para la PS3. En este post voy a plasmar mis impresiones, aunque pueden encontrar reseñas mucho mas completas en otros blogs, aquí les contaré mi experiencia personal con el servicio.&lt;/p&gt;
&lt;p&gt;Primero la descarga. 77 megas. Se descargó e instaló sin problemas. Al tratar de hacer login me pidió que aceptara un acuerdo de usuario y después de aceptarlo sin ver lo que decía no me pude conectar. Volví a intentar y nada. Me salí, mandé un tweet con mi frustración, consulté los foros, volví a intentar y ahora si se pudo. ¡Eureka!&lt;/p&gt;
&lt;p&gt;Lo primero que te pide es crear un usuario. Aunque muchos se irán por tratar de recrearse a sí mismos virtualmente (cosa que es bastante posible por la flexibilidad de la herramienta) yo elegí por hacer un usuario a como me dio la gana. No dudo que habrá gente que aproveche y se cree un alter-ego, después de todo es una de las gracias de un mundo virtual como estos. Una vez con tu avatar, Home te lleva directamente a tu departamento donde te da un mini tutorial de como interactuar con el mundo virtual.&lt;/p&gt;
&lt;p&gt;En este punto yo estaba pensando ¿Y? ¿Es todo? El mundo virtual de Home se divide en varias secciones acomodadas por stacks. En la beta pública están el stack de Home, de Uncharted y de Killzone 2 si mal no recuerdo. Cada stack cuenta con varios escenarios, el stack de Home tiene tu departamento, la plaza central, la sala de juegos, el cine, entre otras cosas. Otra vez ¿Y? ¿Es todo?&lt;/p&gt;
&lt;p&gt;Al poner pie en la plaza sale el montón de personas caminando por todos lados. Inmediatamente se me acercó un personaje a preguntarme que si de donde era, que si quería ser su amigo, esa clase de interacción nunca me ha llamado la atención. No veo el beneficio de &amp;#8220;conocer&amp;#8221; a alguien virtual sin un interés común. Es distinto conocer a alguien enmedio de un tiroteo en Resistance o retándolo a un duelo de guitarras en Guitar Hero 3, ¿pero parado al lado de un lago de alta definición, o viendo un trailer de &lt;em&gt;Twilight&lt;/em&gt;? no es para mi, no gracias.&lt;/p&gt;
&lt;p&gt;Apunto de desconectarme del servicio veo que JPDA, uno de mis amigos en la PlayStation Network (PSN) y a quien también conozco en el MundoReal se conecta. Le envío un mensaje para ver en que parte del mundo virtual anda y coincidimos en la plaza. Es una sensación extraña estar platicando con una representación virtual de alguien que tu conoces y estas acostumbrado a platicar en el MundoReal. Después de unos cuantos tortuosos mensajes de texto introducidos con el control, nos pusimos de acuerdo para jugar boliche virtual. Antes de entrar a la sala de boliche llegó otro personaje hablando español como nosotros, nos preguntó de donde somos y supuestamente nos seguiría a jugar boliche pero no volvimos a saber de él.&lt;/p&gt;
&lt;p&gt;Después de la ronda de boliche virtual en la que descubrí que no sirvo para eso, decidimos dar la vuelta por la sala de juegos para tratar de ganar una mesa de billar. No me explico como le hará Home para manejar eso, porque como están las cosas ahora en el Beta la sala de juegos estaba demasiado poblada y las pocas mesas de billar estaban todas ocupadas. No me quiero imaginar cuando Home sea utilizado por más y más personas.&lt;/p&gt;
&lt;p&gt;En Home también te puedes comunicar por voz, simplemente acercándote a alguien y hablando. Hablar con la representación virtual de alguien a quien conoces en MundoReal es, como ponerlo, &lt;em&gt;freaking cool&lt;/em&gt;. Desde Home te puedes poner de acuerdo para echarte una retita de algún juego que los dos tengan, invitar a gente a tu departamento virtual, ver películas en un cine virtual y otras actividades que ya están disponibles o lo estarán proximamente.&lt;/p&gt;
&lt;p&gt;Presiento todo un éxito para este Home tan esperado. Y vaya que lo necesita la consola de Sony.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=u049gR"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=u049gR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/ps3-home-rifa-y-controla/#comments" thr:count="7" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/ps3-home-rifa-y-controla/feed/atom/" thr:count="7" />
		<thr:total>7</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/ps3-home-rifa-y-controla/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Rafyta</name>
						<uri>http://rafyta.com</uri>
					</author>
		<title type="html"><![CDATA[Porqué mi mamá usa Linux]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/479220939/" />
		<id>http://www.geekandroll.com/?p=680</id>
		<updated>2008-12-09T06:03:03Z</updated>
		<published>2008-12-09T06:01:29Z</published>
		<category scheme="http://www.geekandroll.com" term="FLOSS" /><category scheme="http://www.geekandroll.com" term="opinion" />		<summary type="html"><![CDATA[
Hace como un mes les instalé a mi mamá y a mi hermana (pero más por mi mamá) una PC con Ubuntu Studio. Yo lo había instalado el año pasado por curiosidad, ya que es una distro Linux para creación y edición de contenido multimedia. Después de un mes de uso, mas o menos, le [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/porque-mi-mama-usa-linux/">&lt;p&gt;&lt;img class="alignnone size-full wp-image-681" src="http://www.geekandroll.com/wp-content/uploads/2008/12/ubuntu-studio.jpg" alt="" width="450" height="200" /&gt;&lt;/p&gt;
&lt;p&gt;Hace como un mes les instalé a mi mamá y a mi hermana (pero más por mi mamá) una PC con Ubuntu Studio. Yo lo había instalado el año pasado por curiosidad, ya que es una &lt;em&gt;distro&lt;/em&gt; Linux para creación y edición de contenido multimedia. Después de un mes de uso, mas o menos, le pregunté a mi mamá si estaba agusto con la forma en que funcionaba la computadora. De su respuesta puedo concluir lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es fácil de usar&lt;/li&gt;
&lt;li&gt;Más rápida que cuando tenía windows&lt;/li&gt;
&lt;li&gt;No se traba ni se reinicia espontáneamente&lt;/li&gt;
&lt;li&gt;Fue fácil adaptarse viniendo de windows y mac os x&lt;/li&gt;
&lt;li&gt;No hay que preocuparse por virus&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cabe mencionar que esta computadora es la primera que compre con mi propio dinero, ganando a pulso cada peso con sudor y&amp;#8230; bueno ustedes me entienden, cuando iba empezandoa trabajar. El punto es que tiene más de 5 años de uso; por lo que no es ningún &lt;em&gt;avión&lt;/em&gt; de máquina. Sin embargo, con Linux funciona perfectamente.&lt;/p&gt;
&lt;p&gt;Lo que me pone a pensar es que mi mamá y mi hermana son ejemplos clásicos de usuarios casuales que sólo necesitan internet, e-mail y office. Creo que si personas sin mucha experiencia, como ellas, pudieron adaptarse con una explicación de 3 minutos de cómo entrar y salir del sistema (y apagar la PC), cualquiera puede hacerlo.&lt;/p&gt;
&lt;p&gt;Aunque la lista de razones que puse arriba es algo que todos sabemos, es muy distinto leerlo que verlo en la vida diaria; por lo menos para mí lo fue, y me da gusto ver que el software libre pueda pasar de ser un concepto idealista para alguien como yo, que por distintas razones está amarrado a windows, y llegue a tener su lugarcito en la familia.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=giyG7w"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=giyG7w" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/porque-mi-mama-usa-linux/#comments" thr:count="10" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/porque-mi-mama-usa-linux/feed/atom/" thr:count="10" />
		<thr:total>10</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/porque-mi-mama-usa-linux/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[Programando para la Blackberry - Everlasting Flame]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/476994965/" />
		<id>http://www.geekandroll.com/?p=668</id>
		<updated>2008-12-06T22:53:14Z</updated>
		<published>2008-12-06T22:30:19Z</published>
		<category scheme="http://www.geekandroll.com" term="aplicaciones" /><category scheme="http://www.geekandroll.com" term="programacion" />		<summary type="html"><![CDATA[Ver primera parte: Intro

En la introducción se vió un poco sobre lo que es programar una aplicación para la BlackBerry haciendo un pequeño &#8220;Hola Mundo&#8221; muy sencillo. Ahora toca explicar las bases de la aplicación que se menciona en aquel post llamada &#8220;Everlasting Flame&#8221;. El nombre es el título de una canción del grupo de [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame/">&lt;p&gt;&lt;em&gt;Ver primera parte: &lt;a href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-intro/" &gt;Intro&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.geekandroll.com/wp-content/uploads/2008/12/everlasting-flame-hover.png" &gt;&lt;img src="http://www.geekandroll.com/wp-content/uploads/2008/12/everlasting-flame-hover.png" alt="Everlasting Flame icon" title="Everlasting Flame icon" width="60" height="55" class="size-full wp-image-675" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En la introducción se vió un poco sobre lo que es programar una aplicación para la BlackBerry haciendo un pequeño &amp;#8220;Hola Mundo&amp;#8221; muy sencillo. Ahora toca explicar las bases de la aplicación que se menciona en aquel post llamada &amp;#8220;Everlasting Flame&amp;#8221;. El nombre es el &lt;a href="http://www.last.fm/music/Kreator/_/Everlasting+Flame" onclick="javascript:urchinTracker ('/outbound/article/www.last.fm');"&gt;título de una canción&lt;/a&gt; del grupo de Thrash Aleman Kreator. Tengo la mala costumbre de nombrar a todos mis proyectos con titulos de canciones metaleras.&lt;/p&gt;
&lt;p&gt;Primero un poco de teoría. Las aplicaciones de BlackBerry pueden ser de dos tipos: sin GUI o con GUI. Típicamente el punto de entrada de las que tienen GUI es cuando el usuario selecciona el ícono correspondiente en la pantalla. Las que no tienen GUI generalmente cuentan con otro punto de entrada, como al momento de hacer una llamada telefónica, enviar un SMS, solicitar datos, etc. En nuestro caso nuestra aplicación es sin GUI y su punto de entrada es al momento de realizar una llamada telefónica.&lt;/p&gt;
&lt;p&gt;En el API de RIM hay dos clases que nos interesan actualmente: &lt;a href="http://www.blackberry.com/developers/docs/4.1api/net/rim/device/api/system/Application.html" onclick="javascript:urchinTracker ('/outbound/article/www.blackberry.com');"&gt;Application&lt;/a&gt;y &lt;a href="http://www.blackberry.com/developers/docs/4.1api/net/rim/device/api/ui/UiApplication.html" onclick="javascript:urchinTracker ('/outbound/article/www.blackberry.com');"&gt;UiApplication&lt;/a&gt; para aplicaciones sin UI o con UI, respectivamente. También nos interesa el &lt;a href="http://www.blackberry.com/developers/docs/4.1api/net/rim/blackberry/api/phone/PhoneListener.html" onclick="javascript:urchinTracker ('/outbound/article/www.blackberry.com');"&gt;PhoneListener&lt;/a&gt; que nos sirve para registrar una clase que consume los eventos generados por la aplicación de teléfono en la BlackBerry. También nos interesa la clase &lt;a href="http://www.blackberry.com/developers/docs/4.1api/net/rim/blackberry/api/phone/Phone.html" onclick="javascript:urchinTracker ('/outbound/article/www.blackberry.com');"&gt;Phone&lt;/a&gt; que nos permite interactuar con la aplicación que se encarga de marcar el teléfono en la BlackBerry.&lt;/p&gt;
&lt;p&gt;Como se mencionó en el post de introducción, el funcionamiento es el siguiente: marco un número e inicia un contador. Si llego a un determinado número de segundos (&lt;em&gt;soft limit&lt;/em&gt;) el teléfono me avisa inyectando un tono DTMF a la llamada. Si llego a otro límite mayor (&lt;em&gt;hard limit&lt;/em&gt;) la llamada se termina automáticamente. Para esto vamos a usar las clases antes mencionadas.&lt;/p&gt;
&lt;p&gt;Nuestro programa consta básicamente de 2 clases: la clase principal que extiende a Application, y una clase que implementa la interfaz PhoneListener, o más específicamente extiende a AbstractPhoneListener, misma que implementa a PhoneListener y nos evita el tener que implementar todos los métodos abstractos de PhoneListener, enfocándonos solo a aquellos que necesitamos.&lt;br /&gt;
&lt;span id="more-668"&gt;&lt;/span&gt;&lt;br /&gt;
El contenido de la clase principal, EverlastingFlame.java:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;package com.&lt;span class="me1"&gt;divinesoft&lt;/span&gt;.&lt;span class="me1"&gt;blackberry&lt;/span&gt;.&lt;span class="me1"&gt;everlastingflame&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.blackberry.api.phone.Phone;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.blackberry.api.phone.PhoneListener;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.device.api.system.Application;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;class&lt;/span&gt; EverlastingFlame &lt;span class="kw2"&gt;extends&lt;/span&gt; Application&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; PhoneListener phoneListener;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; EverlastingFlame&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="coMULTI"&gt;/*These options will be set from the GUI in the future*/&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Setting program options&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Options.&lt;span class="me1"&gt;setSoftLimit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;270&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="co1"&gt;//in seconds&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Options.&lt;span class="me1"&gt;setHardLimit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;290&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="co1"&gt;//in seconds&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Instantiating CustomPhoneListener&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phoneListener = &lt;span class="kw2"&gt;new&lt;/span&gt; CustomPhoneListener&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Options.&lt;span class="me1"&gt;getSoftLimit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;, &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Options.&lt;span class="me1"&gt;getHardLimit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Registering PhoneListener&amp;#8230;&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Phone.&lt;span class="me1"&gt;addPhoneListener&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;phoneListener&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;static&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; main&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;String&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; args&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;On Endless main&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EverlastingFlame ef = &lt;span class="kw2"&gt;new&lt;/span&gt; EverlastingFlame&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ef.&lt;span class="me1"&gt;enterEventDispatcher&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Esta clase extiende a Application y tan solo declara su constructor y el punto de entrada de la aplicación. En el punto de entrada crea una nueva instancia de la aplicación y entra al ciclo de despacho de eventos ejecutando el método enterEventDispatcher. Esto es necesario para que se ejecute el código que se encarga de responder a eventos. El constructor crea un nuevo objeto CustomPhoneListener (del cual veremos el código a continuación) y lo registra mediante un método estático ante la clase Phone para recibir eventos del teléfono.&lt;/p&gt;
&lt;p&gt;La clase CustomPhoneListener:&lt;/p&gt;
&lt;div class="codesnip-container" &gt;
&lt;div class="codesnip"&gt;
&lt;ol&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;package com.&lt;span class="me1"&gt;divinesoft&lt;/span&gt;.&lt;span class="me1"&gt;blackberry&lt;/span&gt;.&lt;span class="me1"&gt;everlastingflame&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import java.util.Timer;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import java.util.TimerTask;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.blackberry.api.phone.AbstractPhoneListener;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.blackberry.api.phone.Phone;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.blackberry.api.phone.PhoneCall;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.device.api.system.ControlledAccessException;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.device.api.system.EventInjector;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.device.api.system.KeypadListener;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="co2"&gt;import net.rim.device.api.ui.Keypad;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw2"&gt;class&lt;/span&gt; CustomPhoneListener &lt;span class="kw2"&gt;extends&lt;/span&gt; AbstractPhoneListener&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; &lt;a href="http://www.google.com/search?q=allinurl%3ATimer+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Timer&lt;/span&gt;&lt;/a&gt; callTime;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; &lt;span class="kw4"&gt;int&lt;/span&gt; callTimeSeconds = &lt;span class="nu0"&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; &lt;span class="kw4"&gt;int&lt;/span&gt; softLimit, hardLimit = &lt;span class="nu0"&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; CustomPhoneListener&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;int&lt;/span&gt; softLimit, &lt;span class="kw4"&gt;int&lt;/span&gt; hardLimit&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;this&lt;/span&gt;.&lt;span class="me1"&gt;softLimit&lt;/span&gt; = softLimit;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;this&lt;/span&gt;.&lt;span class="me1"&gt;hardLimit&lt;/span&gt; = hardLimit;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; callConnected&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;int&lt;/span&gt; callId&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Call Connected&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callTime = &lt;span class="kw2"&gt;new&lt;/span&gt; &lt;a href="http://www.google.com/search?q=allinurl%3ATimer+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;Timer&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ATimerTask+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;TimerTask&lt;/span&gt;&lt;/a&gt; callTimeTask = &lt;span class="kw2"&gt;new&lt;/span&gt; &lt;a href="http://www.google.com/search?q=allinurl%3ATimerTask+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;TimerTask&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; run&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callTimeSeconds++;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeSeconds&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeSeconds == softLimit&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Soft limit reached&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; injectDTMFTone&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Phone.&lt;span class="me1"&gt;getActiveCall&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeSeconds == hardLimit&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Hard limit reached, hanging up!&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; injectEndCall&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callTime.&lt;span class="me1"&gt;schedule&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;callTimeTask, &lt;span class="nu0"&gt;0&lt;/span&gt;,&lt;span class="nu0"&gt;1000&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; injectEndCall&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Injecting event to end current call&amp;#8230;&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;try&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; EventInjector.&lt;span class="me1"&gt;KeyCodeEvent&lt;/span&gt; ev = &lt;span class="kw2"&gt;new&lt;/span&gt; EventInjector.&lt;span class="me1"&gt;KeyCodeEvent&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EventInjector.&lt;span class="me1"&gt;KeyCodeEvent&lt;/span&gt;.&lt;span class="me1"&gt;KEY_DOWN&lt;/span&gt;,&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;char&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;Keypad.&lt;span class="me1"&gt;KEY_END&lt;/span&gt;, &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KeypadListener.&lt;span class="me1"&gt;STATUS_ALT&lt;/span&gt;, &lt;span class="nu0"&gt;500&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; EventInjector.&lt;span class="me1"&gt;invokeEvent&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;ev&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="kw2"&gt;catch&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;ControlledAccessException cae&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Tried to end the call, but couldn&amp;#8217;t. I need permission!&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;private&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; injectDTMFTone&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;PhoneCall phoneCall&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;#038;bntl=1" onclick="javascript:urchinTracker ('/outbound/article/www.google.com');"&gt;&lt;span class="kw3"&gt;System&lt;/span&gt;&lt;/a&gt;.&lt;span class="me1"&gt;out&lt;/span&gt;.&lt;span class="me1"&gt;println&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8220;Sending DTMF tone&amp;#8230;&amp;#8221;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; phoneCall.&lt;span class="me1"&gt;sendDTMFTone&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;#8216;7&amp;#8242;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; callDisconnected&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt; &lt;span class="kw4"&gt;int&lt;/span&gt; callId &lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;//kill the thread&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callTime.&lt;span class="me1"&gt;cancel&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;//and restart the timer&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callTimeSeconds = &lt;span class="nu0"&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;
&lt;/li&gt;
&lt;li class="li1"&gt;
&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Esta clase extiende a AbstractPhoneListener y lo que hace es definir qué sucede cuando se ejecutan ciertos eventos del teléfono. Su constructor recibe ambos límites como parámetros y los inicializa. Al conectarse una llamada (callConnected) se inicializa un objeto Timer. A este objeto Timer se le registra un objeto TimerTask, que es el que nos sirve para ejecutar una tarea recurrente. En este caso TimerTask es un objeto que en su método run lo que hace es incrementar un contador y comprar su actual valor con el &lt;em&gt;softlimit &lt;/em&gt;o el &lt;em&gt;hardlimit&lt;/em&gt;, llamando al método necesario para tomar la acción adecuada.&lt;/p&gt;
&lt;p&gt;Como podemos observar, nos interesa contar segundos, y es por esto que registramos el TimerTask que suceda sin delay (primer argumento) y cada 1000 milisegundos (segundo argumento). Cada segundo se ejecuta el método run del TimerTask registrado. Al desconectarse la llamada se ejecuta callDisconnected, se detiene el objeto Timer y se pone a 0 el contador para iniciar de nuevo cuando se vuelva a realizar otra llamada. Los métodos injectDTMFTone e injectEndCall hacen exactamente lo que su nombre indica.&lt;/p&gt;
&lt;p&gt;Como ven, es bastante sencillo agregar esta funcionalidad a la BlackBerry. En este caso falta explicar cómo se guardan las opciones del usuario y una GUI para configurar la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=8NDbIR"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=8NDbIR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/programando-para-la-blackberry-everlasting-flame/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Cesar</name>
						<uri>http://www.cesarolea.com</uri>
					</author>
		<title type="html"><![CDATA[Los clientes FTP son feos]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/473789485/" />
		<id>http://www.geekandroll.com/?p=666</id>
		<updated>2008-12-03T17:17:09Z</updated>
		<published>2008-12-03T17:17:09Z</published>
		<category scheme="http://www.geekandroll.com" term="aplicaciones" /><category scheme="http://www.geekandroll.com" term="internet" />		<summary type="html"><![CDATA[Todos los clientes FTP que he probado son feos (con F de Foco Fundido). Si también el overhyped transmit es feo. Uno más o menos aceptable es SmartFTP. El más bonito en mi lista es Cyberduck, pero es OSX only al igual que mi editor de texto favorito: TextMate. Maldita manzana y sus aplicaciones.
De vuelta [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/los-clientes-ftp-son-feos/">&lt;p&gt;Todos los clientes FTP que he probado son &lt;strong&gt;feos&lt;/strong&gt; (con F de Foco Fundido). Si también el &lt;em&gt;overhyped&lt;/em&gt; transmit es feo. Uno más o menos aceptable es SmartFTP. El más bonito en mi lista es Cyberduck, pero es OSX only al igual que mi editor de texto favorito: TextMate. Maldita manzana y sus aplicaciones.&lt;/p&gt;
&lt;p&gt;De vuelta al tema. Los clientes FTP son feos. Funcionales (algunos más que otros) pero feos. Hasta CuteFTP que por el nombre esperarías algo menos feo, también era feo. ¿Qué se necesita para que un cliente FTP sea bonito? Según un servidor una interfaz minimalista, intuitivo y con estilo. Algo parecido a Chrome. Con lo básico para un cliente FTP y nada más.&lt;/p&gt;
&lt;p&gt;Mi pregunta es ¿Qué funcionalidad es la mínima absolutamente necesaria en un cliente FTP? digo, aparte de lo obvio: transferir archivos a un servidor FTP.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=mnUhDj"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=mnUhDj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/los-clientes-ftp-son-feos/#comments" thr:count="18" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/los-clientes-ftp-son-feos/feed/atom/" thr:count="18" />
		<thr:total>18</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/los-clientes-ftp-son-feos/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Rafyta</name>
						<uri>http://rafyta.com</uri>
					</author>
		<title type="html"><![CDATA[Six Apart se desayuna a Pownce]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/geekandroll/~3/472104851/" />
		<id>http://www.geekandroll.com/?p=663</id>
		<updated>2008-12-02T05:33:19Z</updated>
		<published>2008-12-02T05:33:19Z</published>
		<category scheme="http://www.geekandroll.com" term="blogs" /><category scheme="http://www.geekandroll.com" term="internet" />		<summary type="html"><![CDATA[
Hace unas horas recibí este mail:
We are sad to announce that Pownce is shutting down on December 15,
2008. As of today, Pownce will no longer be accepting new users or new
pro accounts.
To help with your transition, we have built an export tool so you can
save your content. You can find the export tool at Settings [...]]]></summary>
		<content type="html" xml:base="http://www.geekandroll.com/2008/12/six-apart-se-desayuna-a-pownce/">&lt;p&gt;&lt;img class="alignnone size-full wp-image-664" src="http://www.geekandroll.com/wp-content/uploads/2008/12/pownce.gif" alt="" width="450" height="200" /&gt;&lt;/p&gt;
&lt;p&gt;Hace unas horas recibí este mail:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;We are sad to announce that Pownce is shutting down on December 15,&lt;br /&gt;
2008. As of today, Pownce will no longer be accepting new users or new&lt;br /&gt;
pro accounts.&lt;/p&gt;
&lt;p&gt;To help with your transition, we have built an export tool so you can&lt;br /&gt;
save your content. You can find the export tool at Settings &amp;gt; Export.&lt;br /&gt;
Please export your content by December 15, 2008, as the site will not&lt;br /&gt;
be accessible after this date.&lt;/p&gt;
&lt;p&gt;Please visit our new home to find out more:&lt;br /&gt;
&lt;a href="http://www.sixapart.com/pownce" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.sixapart.com');"&gt;http://www.sixapart.com/pownce&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our thanks go out to everyone who contributed to the Pownce community,&lt;/p&gt;
&lt;p&gt;The Pownce Crew&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;La neta eso de &amp;#8220;triste&amp;#8221; no se si creerlo, porque debe haber rolado buena feria por una comunidad con tantos miembros y que podemos considerar exitosa. Si yo fuera de los &lt;em&gt;founders&lt;/em&gt; estaría brincando en un dedo y llamando al distribuidor Bertram (yates privados) y/o agente de bienes raíces más cercano. Los usuarios Pro de Pownce, pa que no se agüiten les van a dar una cuenta en TypePad por un año.&lt;/p&gt;
&lt;p&gt;Pownce se cierra este 15 de Diciembre, pero por lo menos sí piensan en sus usuarios y prepararon una herramienta para exportar todas las conversaciones inútiles que a cualquiera le interese conservar.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sixapart.com/pownce" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.sixapart.com');"&gt;Mas info aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/geekandroll?a=rebGKT"&gt;&lt;img src="http://feeds.feedburner.com/~a/geekandroll?i=rebGKT" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<link rel="replies" type="text/html" href="http://www.geekandroll.com/2008/12/six-apart-se-desayuna-a-pownce/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://www.geekandroll.com/2008/12/six-apart-se-desayuna-a-pownce/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	<feedburner:origLink>http://www.geekandroll.com/2008/12/six-apart-se-desayuna-a-pownce/</feedburner:origLink></entry>
	</feed>
