jueves, 20 de noviembre de 2014

Crear un arbol en json desde lista en Java

Directo al punto!
Tenemos una lista en Java en forma de árbol y queremos convertirla a json para usarla en el front-end

List<Especialidad> treeEspecialidades = new ArrayList<Especialidad>();

El objeto Especialidad vendría siendo el nodo del árbol, y dentro tiene una lista de hijos (de tipo Especialidad también), y la lista de treeEspecialidades es la lista de los nodos raíz.
Podemos usar el modo rápido, y convertir el árbol a json con alguna librería que convierta el java a json

 String json = JSONFactoryUtil.serialize(treeEspecialidades);  

(en este caso JSONFactoryUtil esta en las librerías core de Liferay)
Lo malo de este método es que al ser una lista de objetos, crea mucha basura en el json, que no va a ser usada nunca.

Para crear el objeto json con los datos que se quieren y el formato que se requiera para usarlo en el front-end, se crea un método recursivo. Éste recorre todo el árbol y lo convierte a json:

 private String convertTreeToJson(List<Especialidad> treeEspecialidades){  
           if(treeEspecialidades==null){  
                return "";  
           }  
           StringBuffer sb = new StringBuffer();  
           for(Especialidad especialidad: treeEspecialidades){  
                sb.append("{");  
                sb.append("id:\""+especialidad.getEspecialidadId()+"\",");  
                if(especialidad.getParent()!=null){  
                     sb.append("parent:\""+especialidad.getParent().getEspecialidadId()+"\",");  
                }else{  
                     sb.append("parent:\"#\",");  
                }  
                sb.append("text:\""+especialidad.getEspecialidad()+"\",");  
                if(especialidad.getHijos()!=null){  
                     sb.append(convertTreeToJson(especialidad.getHijos()));  
                }  
                sb.append("}");  
     }  
           return sb.toString();  
}  

Éste método devuelve un json a manera de árbol, por ejemplo:

 {  
   id: "1",  
   parent: "#",  
   text: "Energética",  
   {  
     id: "2",  
     parent: "1",  
     text: "Petróleo y Gas",  
   } {  
     id: "10",  
     parent: "1",  
     text: "Luz y Fuerza",  
     {  
       id: "11",  
       parent: "10",  
       text: "Luz",  
       {  
         id: "12",  
         parent: "11",  
         text: "Luz calle",  
         {  
           id: "13",  
           parent: "12",  
           text: "Luz de luces",  
         }  
       }  
     }  
   }  
 } {  
   id: "3",  
   parent: "#",  
   text: "Tecnología",  
   {  
     id: "5",  
     parent: "3",  
     text: "Desarrollo de sismtemas",  
     {  
       id: "6",  
       parent: "5",  
       text: "Programador Java",  
     } {  
       id: "9",  
       parent: "5",  
       text: "Programador .Net ligeramente mucho texto de prueba",  
     }  
   }  
 } {  
   id: "4",  
   parent: "#",  
   text: "Mercadotécnia",  
   {  
     id: "7",  
     parent: "4",  
     text: "Merca 2",  
     {  
       id: "8",  
       parent: "7",  
       text: "Hoja Merca",  
     }  
   }  
 }  

Espero le sirva a alguien!

viernes, 7 de noviembre de 2014

La Forma.

Todo lo que conocemos lo conocemos en FORMA. Por ejemplo, una flor tiene la forma de una flor, una palabra la forma de una palabra, una imagen mental la forma de una imagen mental, un sonido la forma de un sonido, un pensamiento la forma de un pensamiento, y el silencio la forma del silencio. 

La oscuridad forma de oscuridad, el amor forma de amor, la envidia forma de envidia, el dolor forma de dolor y la felicidad forma de felicidad. El dinero en forma de dinero, el calor en forma de calor, las galaxias en formas de galaxias, los números en forma de números, y Justin Bieber en forma de Justin Bieber.

Todo lo que se puede conocer se puede conocer sólo en FORMA. 

El problema es que en realidad las formas no nos interesan. Siempre nos preguntamos, ¿de dónde vienen las formas? más comúnmente, ¿de dónde viene todo? ¿por qué existe ALGO en vez de NADA?

Y la respuesta tradicional, por supuesto es, "todo viene de Dios." "Ajá! y de dónde viene Dios?" Y aquí es dónde comienza el debate. Unos dicen, "Dios es Dios y siempre ha existido", otros dicen "a! y por qué ALGO no puede venir de NADA y Dios si?? eso es trampa!"

Queridos hermanos, hay sólo 3 alternativas relevantes. O las FORMAS vienen de la NADA y aparecieron por sí solas, o las FORMAS siempre han existido y existirán desde infinito hasta infinito, o las FORMAS vienen de DIOS.

La primera nadie realmente la toma en serio, aunque los "intelectuales" famosos modernos han adoptado una versión que combina la primera y la segunda (Un Universo de la Nada).

Puede ser expresada algo así, ALGO es NADA, (o las FORMAS son NADA). Si ellos hubieran escrito la Biblia, Génesis 1:1 sería algo así,  "En el principio no había NADA y después ALGO pasó. aunque en realidad ALGO y NADA son lo mismo (aunque antes no había NADA Y después ALGO pasó)". (versión coloquial)

La segunda (las FORMAS siempre han existido y existirán desde infinito hasta infinito) es tentadora, pero quien se sienta a meditar profundamente sobre esto jamás podrá aceptarlo. "Osea, una flor existe no más por que sí? así no más porque NO se le ocurrió a nadie?"

La única opción que nos queda es la tercera. Las FORMAS vienen de DIOS. 

La definición de Dios es, "aquel que está más allá de las FORMAS, el SIN FORMA, EL AMO DE LAS FORMAS, DE DONDE LAS FORMAS VIENEN, EL CREADOR DE LAS FORMAS, EL QUE UNA VEZ QUE QUITAS LAS FORMAS SIGUE QUEDANDO, EL ESENCIAL, EL YO SOY, EL QUE NO TIENEN LIMITES, EL INFINITO, EL QUE NO PUEDE SER CONTENIDO, EL VERDADERO, EL REAL, EL ALFA Y EL OMEGA, EL QUE ES ANTES DE ALFA Y SIGUE SIENDO DESPUÉS DE OMEGA, THE ONE, "EL FORMADOR" (para ver 99 nombres más usados en el ISLAM más ver wikipedia Nombres de Dios)

EL PROBLEMA es que nuestras definiciones siguen siendo FORMAS!!!! 

"aquel que está más allá de las FORMAS" es como decir la FORMA que está más allá de las FORMAS!!! 

No hay palabras para expresar la REALIDAD que está detrás de las FORMAS. Porque en el momento que le das un nombre le estás dando una FORMA. Unos pueden decir que la palabra NADA es lo mismo, pero NADA implica ausencia de realidad. DIOS implica realidad

Por eso decimos que todo lo que podemos conocer sólo lo podemos conocer en forma.

Jesús es Dios hecho Forma. Dios tomo Forma en Jesús por que nosotros sólo podemos conocer en forma. Para que através de la forma de Jesús y sus enseñanzas pudieramos conocer aunque sea un poco al SIN FORMA. 



lunes, 20 de octubre de 2014

El Gran Examen

La vida humana es un examen.

Los que lo pasen van a ir al cielo y conocerán a Dios.

No hay excusas, las reglas del examen están escritas en nuestra misma naturaleza.

No se ocupan libros sagrados, aunque Dios nos dejó libros sagrados por si eso de que se nos va la onda.

Nadie puede decir yo no sabía. El deseo más grande de todo ser humano es conocer a la Realidad Absoluta. Se puede también expresar como deseo de entender todo, o deseo de ver a Dios, o deseo de ser Dios.

Todo ser humano sabe que no está haciendo bien las cosas y que debe cambiar su vida. Por eso cuando nuestra vida peligra dejamos a un lado las cosas que sabíamos que eran pérdida de tiempo, y hacemos las que sabemos debíamos haber estado haciendo.

Los que no pasen el examen muy probablemente desaparecerán para siempre o reencarnarán como creaturas salvajes, llenas de anciedad y desesperación. O peligro se van al infierno donde será el llanto y crujir de dientes.

Sigue a tu consciencia hasta las últimas consecuencias y vivirás ANIMOOO!!!FUAAAA!!!

sábado, 6 de septiembre de 2014

La Realidad

No todos estan de acuerdo si existe Dios o no.
Pero casi todos están de acuerdo que existe una Realidad.
Por alguna razón suponemos que es sólo una y no dos o muchas. 
Algunos le llaman a esta Realidad "el Cosmos". 
El Cosmos es todo lo que es, lo que fue y lo que será. 
El Cosmos es descrito como la suma total de las leyes naturales.
Generalmente se entiende que está compuesto de lo que podemos ver,
y si hay algo que todavía no conocemos de él, seguramente en el futuro
lo averigüaremos. Esta posición se le conoce como Materialismo. Se puede
resumir en la frase, "el Universo está ciego". En otras palabras, la Realidad 
no se conoce a sí misma..

Pero una Realidad que esté ciega es inconcebible. 
Si le quitaramos la hermosura al universo que conocemos,
si le quitaramos el perfecto orden,
si le quitaramos el majestuoso balance,
si le quitarmas su inmensa complejidad,
una complejidad paradójicamente simple,
si le quitaramos el hecho de que es relativamente comprensible,
si le quitaramos sus leyes,
si sólo reinara el caos,
y de lo unico que estuvieramos conscientes fuera una cuchara,
o una piedra, o un rayo de luz, o simplemente oscuridad o vacío,
aún así diríamos que la Realidad es maravillosa, que no puede estar
ciega y de que es infinitamente superior a mí.

En algún momento la Nada fue conquistada, y Algo emergió.
O tal vez, mejor dicho, Algo siempre ha sido, Algo es, Algo será.
Esto es más grande que nuestro pequeño Cosmos. Nuestro pequeño
Cosmos es sólo un átomo de una de Sus flatulencias. 
Lo mas grande que podamos imaginar sigue siendo nada al lado del Infinito.

Hay muchas palabras con las que describimos esta Realidad. Pero la mejor sigue
siendo Dios. La tradición sigue ganando.



sábado, 30 de agosto de 2014

Esfuerzo

Se requiere de un gran esfuerzo.
Un esfuerzo formidable.
Un esfuerzo supra-humano.
El Reino no es para los flojos.

El esfuerzo precede la atención inquebrantable.
Por lo tanto el esfuerzo es la madre de todas las virtudes.

Es muy fácil ser cool.
Pero ser esforzado es sólo par los valientes.

                    *              *

Quien no sabe estar solo, no sabe estar con compañía.
Quien no sabe estar con compañía, no sabe estar solo.

La Realidad es, y tu no puedes añadirle ni quitarle nada.

Quien abandone sus busquedas intelectuales encontrará la inteligencia.

Entre más largo un libro, menos exacto.
El libro más exacto nunca ha sido escrito.

jueves, 28 de agosto de 2014

CoronaLabs y base de datos Sqlite3

Corona Labs y Sqlite3

Siempre que empiezo una app, nunca la termino! :@
Por eso decidí tener un cliente, que me presionara, que me dijera ¿Y mi app?, ¡Ya la quiero!. Desafortunadamente mi "cliente" no me paga. Pero ya veo mas progreso!, así que, Gracias Cliente!, ya casi termino tu app!.

 Pasando a la aplicación
-El cliente pidió una app de frases.
-Ok, ¿en donde guardo las frases?
-Esta bien fácil!, una base de datos.
-¿Como hago eso?

 Sqlite3 funciona de manera sencilla, es una base de datos sin instalación, ya que corona cuenta con esta base de datos en su repertorio.
 Para poder crear la base de datos, primero mandamos llamar la base de datos.

 require "sqlite3"  

Después creamos un directorio en donde se guardara la base de datos.

 local pathDB = system.pathForFile("data.db", system.DocumentsDirectory)  

El nombre en este caso, es data.db, y el otro parámetro que pasamos contiene el directorio de la aplicación.
Después de tener esto, abrimos la base de datos.

 local db = sqlite3.open(pathDB)  

Ya solo queda crear las tablas. Un ejemplo de creación de tabla y agregar datos, sería.
 local tablesetup = [[CREATE TABLE IF NOT EXISTS ejemplo (id INTEGER PRIMARY KEY autoincrement, ejemplo, );]]  
           db:exec(tablesetup)  
 local insertQuery = [[INSERT INTO ejemplo VALUES (NULL, 'Hola Mundo'); ]]  
                     db:exec( insertQuery )  

Si queremos ver que contiene nuestra base de datos, les recomiendo el plugin de firefox, y si lo quieren ver en consola, les dejo una pequeña función.

 local function showDB()  
      local showDataBase = {}   
      for row in db:nrows("SELECT * FROM ejemplo") do  
      print("Row " .. row.id .. row.ejemplo )  
           showDataBase[#showDataBase +1] =  
           {  
           showDataBase = row.ejemplo  
      }  
      end  
 end  

Espero les sirva de algo, Saludos!




viernes, 1 de agosto de 2014

Efectos de cambiar escena en Corona Labs

Hola

El día 31 de Julio, Corona liberó su nuevo SDK, con la cual es posible usar Admob v2, ya que las llamadas para mostrar los anuncios de AdMob v1, dejarán de funcionar (creo el 1 de agosto).

Si desean bajar el nuevo SDK de corona, lo pueden encontrar en la página de su úlltima versión pública.

Pasando al tema de los efectos que ofrece corona, les dejo un video que muestra los diferentes efectos que tiene corona para cambiar de escena.



Para ver el código utilizado entrar a la siguiente liga.
Código fuente

sábado, 19 de julio de 2014

Encontrar tags de html con JQuery

Hola, hace un tiempo tuve modificar varias partes de un html con jquery... aqui dejo unos tips de como encontrar ciertas secciones del html (en mi caso, para no perderlo y encontrarlo facilmente :D).

por ejemplo:
Para encontrar el quinto tag <a> del html:
 $("a")[5]  

Para encontrar el quinto tag <a> dentro de un div contenedor:
 $( "#contenedor" ).find("a")[5]

Si quiero obtener el div padre, del quinto tag <a>, cuando el contenedor tiene muchos divs anidados:
 $($( "#contenedor" ).find("a")[5]).parent()

Si quiero algun tag html (div en este caso), de los tags encontrados como parents del quinto tag <a>
 $($("#maindiv").find("a")[5]).parents("div")[0]

Si quiero saber el id, o la clase css de ese div encontrado:
 $($($("#maindiv").find("a")[5]).parents("div")[0]).attr('class')
para el id se usaria: attr('id')

Por si le sirve a alguien!

lunes, 14 de julio de 2014

Reemplazar string recursivamente y hacer respaldo de archivo - Ameza

Que onda gente!

Pues me topé con la necesidad de reemplazar un string en un directorio, y era necesario hacer un respaldo del archivo.

La solución es la siguiente:

El comando grep busca los archivos que necesitamos, esto para saber cuales archivos tienen el string que estamos buscando. Esto solo lo hago para corroborar que los archivos se hallan modificado.

grep -lr "stringQueSeDeseaCambiar" *

Esto se hace en la carpeta en donde se buscará, incluyendo subcarpetas.

El comando para cambiar el string es sed, y al final el mío quedó de la siguiente manera:

grep -lr "stringQueSeDeseaCambiar" * | xargs sed -i.backup s/'stringQueSeDeseaCambiar'/'stringNuevo'/g

Con este comando, reemplazamos los archivos que contengan el string 'stringQueSeDeseaCambiar' por 'stringNuevo', y creamos un archivo con terminación .backup.

Estoy seguro que se puede optimizar de alguna manera, así que no dudes en dejar tu comentario.

Saludos!

viernes, 11 de julio de 2014

Atención

Las religiones del mundo se convirtieron en guardianes de un conocimiento que no es directamente intuitivo. Es decir, si las religiones desaparecieran, este conocimiento desaparecería junto con ellas. Prueba de ello es el fracazo de las ciencia en resolver el problema de la "felicidad". Comenzando a finales del siglo 19 con las teorías psicoanalíticas de Freud hasta la psiquiatría moderna, el ser humano no ha logrado dar un solo paso para aliviar su desesperación.

El odio que siente por sí mismo es reflejado en todo lo que hace: opresión, injusticia, egoísmo, avaricia, etc. Desde el individuo hasta la nación se dirigen hacia la destrucción. Basta dar sólo unos cuantos ejemplos: la explotación del medio ambiente, el monopolio ecónomico, la desigualdad social, una cita médica donde eres atendido por cinco minutos y recetado medicina que no necesitas y cobrado 700 pesos, la felicidad mórbida que uno siente cuando a alguien le va mal, el deseo indestructible que tenenos de seguir adquiriendo no importa cuanto tengamos.

Le decimos odio porque ultimadamente es lo que causa nuestra miseria. Los guardines de este conocimiento se encargaron de mancharlo. O más bien dicho, se encargaron de desacreditarlo. A tal punto que en el siglo 21 hablar de este conocimiento es nada más que objeto de ridículo. Sin embargo el conocimiento allí sigue para "el que tenga oídos". Cada tradición desarrolló su propio lenguaje para expresar este conocimiento, el taoismo, el budismo, el sikhismo, el islamismo, el judaismo, el cristianismo, el hinduismo, etc. 

Un análisis superficial los hace ver aparentemente incompatibles. Pero al ir hasta el fondo del asunto se pueden econtrar muchas cosas en común. La más importante y esencial de todas es la concentración. A veces le llamaron meditación, otras veces deber, Jesús le llamó "velad y orad", otros le llamaron silencio, otros observación, otros lo describieron como una guerra, otros le llamaron compasión, otros sabiduría. Nosotros le llamamos atención.

El que pudiera mantener su atención sin distraerse un sólo instante se convertiría en un héroe. Pero no sólo eso. Al poner atención, el problema que los "genios" nunca pudieron resolver es resuelto instantáneamente.

miércoles, 11 de junio de 2014

Cancelar transiciones en corona sdk

Hola,

Me topé con un problema en las transiciones de objetos infinita en corona sdk. Al salir del juego e ir al menú principal, o reiniciar el nivel, marcaba un error porque no se había terminado bien la transición de los objetos.

Los objetos en este ejemplo son nubes, que al salir de la pantalla vuelven a aparecer al inicio, cambiando su posición y velocidad aleatoria mente.

Usando storyboard, el código seria de esta manera:
Tenemos la generación de las nubes y su transición, al terminarla, se vuelve a generar el objeto con el mismo id y a iniciar la transición, para así continuar de manera infinita, todo esto lo tengo dentro del método scene:createScene del storyboard.

   
      clouds ={  
       {getImage = "images/cloud01.png"},   
       {getImage = "images/cloud02.png"},  
       {getImage = "images/cloud03.png"}  
      }  
      local returnClouds = function( obj )  
        if ( obj.moveTrans ) then  
                transition.cancel( obj.moveTrans )  
                obj.moveTrans = nil  
                makeClouds(obj.id)  
           end  
      end  
      function makeClouds(id)  
           imagesId = math.random (1,3)  
           local cloud = display.newImage(clouds[imagesId].getImage  )  
           cloud.x = math.random (display.screenOriginX , centerX )  
           cloud.y = math.random (topScrn + cloud.height, centerY)  
           cloud.alpha = 0.7  
           cloud.id=id  
           group:insert(cloud)  
           allClouds[id] = cloud  
           cloud.moveTrans = transition.to( cloud, {time = math.random (30000 , 120000), x = w + 300, onComplete=returnClouds } )  
      end  
      for i=0,2 do  
           makeClouds(i)  
      end  

El método de returnClouds es donde se cancela la transición, en este caso para iniciarla nuevamente.

La variable de allClouds se agrego como variable global, al inicio del proyecto, para así poder tener todas las nubes en el método de scene:exitScene del storyboard.

 local allClouds = {}  

Esto genera las nubes, su transición y el reinicio al llegar al final de la pantalla. Ahora para la cancelación de la transición y que no genere problemas, debe cancelarse en el método de scene:exitScene del storyboard.
El código para este ejemplo seria:

 -- Called when scene is about to move offscreen:  
 function scene:exitScene( event )  
      local group = self.view  

      for i = 0, #allClouds do  
           local obj = allClouds[i]  
           if ( obj.moveTrans ) then  
                transition.cancel( obj.moveTrans )  
                obj.moveTrans = nil  
           end  
      end  
      -- INSERT code here (e.g. stop timers, remove listeners, unload sounds, etc.)  
      -- Remove listeners attached to the Runtime, timers, transitions, audio tracks  
 end  

Espero les pueda ayudar en algo!

El código de la generación de nubes esta basado en el utilizado en este blog:
http://www.christianpeeters.com/rolly-bear-world/
Recomendado por cierto!

martes, 6 de mayo de 2014

Ordenar objeto JSON alfabéticamente por cualquier atributo

Me topé con una situación en la que necesitaba ordenar un JSON alfabéticamente, una vez mas, StackOverflow me sacó del apuro.
La opción mas votada esta muy buena, puedes ordenar por cualquier atributo y en cualquier orden.
Les dejo el link a esta respuesta:
http://stackoverflow.com/a/4698083

 function sortJsonArrayByProperty(objArray, prop, direction){  
   if (arguments.length<2) throw new Error("sortJsonArrayByProp requires 2 arguments");  
   var direct = arguments.length>2 ? arguments[2] : 1; //Default to ascending  
   if (objArray && objArray.constructor===Array){  
     var propPath = (prop.constructor===Array) ? prop : prop.split(".");  
     objArray.sort(function(a,b){  
       for (var p in propPath){  
         if (a[propPath[p]] && b[propPath[p]]){  
           a = a[propPath[p]];  
           b = b[propPath[p]];  
         }  
       }  
       // convert numeric strings to integers  
       a = a.match(/^\d+$/) ? +a : a;  
       b = b.match(/^\d+$/) ? +b : b;  
       return ( (a < b) ? -1*direct : ((a > b) ? 1*direct : 0) );  
     });  
   }  
 }  
 sortJsonArrayByProperty(results, 'attributes.OBJECTID');  
 sortJsonArrayByProperty(results, 'attributes.OBJECTID', -1);  
En las ultimas 2 lineas se manda llamar la funcion de orden ascendente y descendente, ordenandolo por el OBJECTID

Teniendo el JSON de ejemplo:

 {"results": [  
  {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "35",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "SADD MAARAB PHARMACY",  
    },  
   "geometryType": "esriGeometryPoint",  
   },  
  {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "1",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "GAYATHY HOSPITAL PHARMACY",  
   },  
   "geometryType": "esriGeometryPoint",  
  },  
    {  
   "layerId": 5,  
   "layerName": "Pharmaceutical Entities",  
   "attributes": {  
    "OBJECTID": "255",  
    "FACILITYTYPE": "Pharmacy",  
    "FACILITYSUBTYPE": "24 Hr Pharmacy",  
    "COMMERCIALNAME_E": "AL DEWAN PHARMACY",  
    },  
   "geometryType": "esriGeometryPoint",  
   }  
 ]}  

jueves, 1 de mayo de 2014

Análisis de Floyd Mayweather y Marcos Maidana

Mayweather y Maidana pelean este sábado 3 de Mayo. Particularmente, el análisis de Floyd está muy completo.

Floyd Mayweather

Marcos Maidana
https://www.youtube.com/watch?v=Lo6ND7-PFvY

martes, 22 de abril de 2014

Multitouch - CoronaLabs

Hola gente!

Andamos preparando la siguiente app, y me encontré con un problema, ¿como poder hacer click al mismo tiempo a dos botones diferentes?

NOTA: Para poder saber si tu aplicación acepta el multitouch, es necesario probar la aplicación en el celular.

Pasemos al código:

Primero creemos nuestros 2 botones:

 local widget = require( "widget" )  
 local button1 = widget.newButton  
 {  
   left = 100,  
   top = 200,  
   id = "button1",  
   label = "Boton1",  
   onEvent = handleButtonEvent  
 }  
 local button2 = widget.newButton  
 {  
   left = 200,  
   top = 200,  
   id = "button2",  
   label = "Boton2",  
   onEvent = handleButtonEvent  
 }  

Con estas lineas creamos el código necesario para visualizar dos botones, a los cuales al darle click mandamos llamar a la función handleButtonEvent, la cual es la siguiente:

 local function handleButtonEvent( event )  
   if ( "ended" == event.phase ) then  
    print( event.target.id .. "was pressed")    
   end  
 end  

Esta función es mandada llamar en diferentes eventos del botón, pero nosotros preguntamos si la fase a la que mandaron llamar es la de acabada y con esto nos damos cuenta que el usuario dio click y ya retiro el dedo del botón, dando como resultado el mostrar en consola el nombre del botón que fue presionado.

Pero ¿como mostrar al usuario que presiono el botón?,  vamos a crear dos variables,llamadas cont1 y cont2, las cuales contendrán el número de veces que la persona a presionado el botón, y crearemos dos variables más para mostrar el numero de veces que han presionado el boton1 o el boton2.

 local cont1 = 0  
 local cont2 = 0  
 local myTextCont1 = display.newText( "hello", 100, 200, native.systemFontBold, 12 )  
 myTextCont1:setFillColor( 1, 0, 0.5 )  
 local myTextCont2 = display.newText( "hello", 200, 200, native.systemFontBold, 12 )  
 myTextCont2:setFillColor( 1, 0, 0.5 )  

Como podemos ver, las variables por el momento solo muestran un texto de hello, pero éste puede ser modificado de manera dinámica por medio de nuestra función handleButtonEvent. Esta función quedaría de la siguiente manera:

 local function handleButtonEvent( event )  
   if ( "ended" == event.phase ) then  
     if(event.target.id == "button1") then  
          cont1=cont1+1  
          myTextCont1.text = cont1  
          else  
          cont2= cont2+1  
          myTextCont2.text = cont2  
     end  
 print( "Button1 was=" .. cont1 .."button2 was =".. cont2 .. "event target id =".. event.target.id )  
   end  
 end  

Como pueden ver, podemos cambiar el texto de la variable accesando con el nombreDeVariable.text.

Si nosotros probamos la aplicación en el celular, podremos ver que no funcionan los botones al mismo tiempo, y esto es por que por default, se tiene desactivada esta funcionalidad. Para activarla agregamos la siguiente linea de código en la parte superior de nuestro main y ¡wala!.

 system.activate("multitouch")  

Para aquellos que no quiere explicación y quieren código para probar, les mando en el siguiente link los archivos de código fuente que se utilizaron.
Código fuente.
APP DEMO.

Recomendaciones y sugerencias, deja tu comentario, saludos y GG!


lunes, 21 de abril de 2014

¿Quién soy? - Eperez

Mi nombre es Edgar, experto en análisis.

El análisis es el arte de encontrar los componentes más simples de un sistema complejo. Es el arte de encontrar problemas, solucionarlos, e implementar los ajustes necesarios.

No existen herramientas analíticas que nos ayuden a detectar problemas en sistemas complejos. Por eso el análisis es un arte que sólo se puede desarrollar con experiencia, prestando atención, siempre en busca de los elementos más simples del "todo", y con un poco de suerte también.

Cada persona tiene facilidad de analizar diferentes situaciones según sus experiencias y área de especialización. Pero sólo cuando conscientemente decidimos analizar algo es que nuestra habilidad analítica puede mejorar en gran medida.

Por ejemplo, ¿por qué las muchachas bonitas son bonitas? Hacer la pregunta es sólo el primer paso, y la mayoría de la gente ni siquiera da ese paso. Damos por sentado que las delgaditas son guapas, o que las que tienen ciertas proporciones son más bonitas, etc. Pero un buen analista va más allá. Un buen analista primero identifica el sistema a analizar. Y después no descansa hasta encontrar cada sub-elemento del problema.

Pero eso no es fácil. Se requiere de gran determinación...


¿Quienes soy? - Ameza

Que onda raza!

Mi nombre es Aarón, y será un gusto poder compartir mis experiencias con ustedes en este blog. 
Soy Ingeniero en Sistemas Computacionales y para mi familia, la persona que les quita los virus a sus computadoras, no se crean familia.

Mi vida laboral de ISC, consta de como 5 o 6 años (no recuerdo mi CV). Y estoy orgulloso de haberme titulado con un proyecto que hice con un amigo, que digo amigo, ¡UN HERMANO!, su nombre es Eder Salim. Estuvimos trabajando en un simulador del Santuario descrito en la Biblia (en el libro de Exodo) controlado por el Kinect. También estuve trabajando con Jwm Solutions, Clever Software y se empezó, con la ayuda y el apoyo del departamento de Investigación de la Universidad, un Laboratorio de Realidad Aumentada. 

Estado civil ¡CASADO!, obviamente soy recién casado, por que sigo feliz con mi hermosa y amorosa esposa, y me gusta jugar dota 2, futbol, basket, voli, fut beis, roña, trompo, canicas, hoyito, etc etc.

Saludos y GG!






¿Como ganar dinero desarrollando Apps?

Hola gente!

La respuesta a esta pregunta estará al final de el articulo, ¡PERO PRIMERO LEE! no hagas trampa.

Las apps son para muchos desarrolladores un sueño, el tesoro al final del arco iris, la ciudad de el dorado, o una mekans en peleas de equipo*. Pero en realidad ¿es posible sobrevivir desarrollando aplicaciones?.
Como muchos, deseo poder generar ingresos como para poder sobrevivir, y poder generar aplicaciones como angry birds, whatsapp, facebook, aunque en realidad es como querer ganar la lotería.

Existen diferentes tipos de ventas en el mercado de las aplicaciones, unos venden dentro de sus aplicaciones, otros venden las aplicaciones y otros muestran anuncios y con esto generan ingresos, pero no conozco a nadie que lo halla hecho, así que me dedique a buscar a alguien que lo hiciera.

Investigando me encontré con un canal de IRC donde me encontré con una persona que ha trabajado con juegos desde hace 20 años, el cual me comentó que los anuncios en las aplicaciones solo molestan al usuario, que son distracciones y me recomendó que vendiera mis aplicaciones, ya que uno puede generar una experiencia de juego, que el usuario recomendará, y si es buena la aplicación se venderá.

Para aquellos que tengan experiencias que podría ayudar a gente nueva como yo, les agradezco dejen un comentario o me contacten para contar alguna de sus experiencias.

Saludos y GG!

Respuesta: Tramposo, no leíste nada! :P  

Aplicaciones Móviles

Hola gente!

Cualquier persona que desee desarrollar aplicaciones móviles, puede intentarlo con software que nos ayudan a generar el código, obviamente no existe un programa que con un click se genere el código de nuestra aplicación, pero les recomiendo Corona Labs.

CoronaLabs es una brillante herramienta para crear nuestras aplicaciones, es necesario saber programar, o por lo menos tener las ganas de programar. El lenguaje de programación que se utiliza es lua, y es bastante rápida su programación de hecho.

Solo queda invitarlos a que se den una vuelta por su página en: http://coronalabs.com/.





Saludos y GG!

Hola Mundo

Hola pipol!

Esperemos sirva de ayuda, estrenando blog. Esperemos alguno de los artículos aquí publicados, puedan ser de ayuda.

Saludos y GG!