Me toca ayudar en los salones infantiles de una iglesia, soy el encargado de efectos especiales! :P jajaja pero siempre ando batallando con el CD que se ralla o que se me olvida, espero le sirva a alguien más. Espero terminarlo pronto!
lunes, 25 de abril de 2016
App para la Iglesa
Hola
Me toca ayudar en los salones infantiles de una iglesia, soy el encargado de efectos especiales! :P jajaja pero siempre ando batallando con el CD que se ralla o que se me olvida, espero le sirva a alguien más. Espero terminarlo pronto!
Me toca ayudar en los salones infantiles de una iglesia, soy el encargado de efectos especiales! :P jajaja pero siempre ando batallando con el CD que se ralla o que se me olvida, espero le sirva a alguien más. Espero terminarlo pronto!
lunes, 27 de julio de 2015
Cómo le ganó Mayweather a Pacquiao parte I
Lo importante no es hacer las cosas bien, sino verte bien haciéndolas.
En el fut siempre está el típico fintero que se lleva a uno o a dos, pero al final termina perdiendo el balón de todas formas - o se lo quita el tercero, o hace un mal pase, o hace un tiro desviado. Este tipo es considerado bueno, o por lo menos decente, aunque raro es que haga algo que valga la pena.
También está el típico personaje que, en una discusión, la lleva de perder contra otro que está más informado y que tiene una inteligencia superior. Sin embargo con agresión pura logra hacer quedar al otro mal, o por lo menos verse bien él, aunque lógicamente nada de lo que diga tenga sentido. Este tipo de comportamiento es típico de los políticos - nadie les gana en una entrevista, ni con mil pruebas de su corrupción.
Así, en todas las áreas de actividad humana, no es tan importante hacer las cosas bien, sino verte bien haciéndolas. En el box lo mismo es verdad.
Floyd Mayweather es el mejor aplícando este tipo de técnicas. Y en su pelea contra Manny Pacquiao las utilizó a la perfección. Aquí presentamos algunas de ellas.
Jab a la frente
Más que un jab es un "tap", una sobadita, una caricia. En términos de daño, uno de estos es casi 0. La frente es increiblemente fuerte y está diseñada para proteger el cerebro. De hecho este tipo de golpes podría hacerle más daño al que los tira que al que los recibe, ya que los golpes a la frente lastiman las manos. Pero eso no importa, lo importante es que Floyd luce súper bien, con la guardia abajo, con la espalda erecta, manteniendo a la distancia a su oponente que se ve encorvado, más tenso y fuera de posición para contra-atacar.
El Empujón
Aún cuando es conectado con un jab aquí, Floyd "no pierde" el intercambio porque al empujar a Manny, lo saca de balance y lo hace ver mal. El que está viendo la pelea no alcanza a ver bien lo que pasó y soló se queda con la impresión de que Floyd está dominando. No hace falta decir que empujar es ilegal, la maestría de Floyd es que sabe romper las reglas para su beneficio (más vale maña que fuerza).
La Cachetada de izquierda
Generalmente, Floyd utiliza el gancho de izquierda para escapar de las cuerdas, es una de sus armas favoritas, y con ella knockeó a Ricky Hatton en 2007. Sin embargo, Manny iba preparado para contra-golpear al cuerpo. Floyd ve venir la izquierda de Manny y sólo le da tiempo para tirar su gancho en forma de cachetada. No hace falta decir que este tipo de golpes no lastiman, ya que la mano extendida le quita todo el poder al golpe. Aunque en estos intercambios Manny conectó al cuerpo de Floyd, Floyd salió "ganándolos" porque un golpe a la cara luce más que uno al cuerpo. Además, Floyd combina la cachetada con un empujón que saca de balance a Manny y lo hace ver aún peor.
La Agachada
Otro movimiento ilegal de Mayweather. Es ilegal agacharte abajo del cinturón de tu oponente. Pero Floyd juega con las reglas una vez más, utilizando este movimiento no sólo para evadir golpes, sino para hacer fallar golpes a su oponente. Una de las ventajas es la que venimos diciendo, hace ver bien a Floyd y mal a Manny. La otra es que al fallar golpes Manny gasta mucho más energía que la que gastaría si los conectara.
Golpes a la Guardia
Por otro lado, en una pelea tan pareja, donde hay pocos verdaderos golpes, golpear la guardia luce más que no golpear nada, y mucho más que golpear el aire. Floyd utiliza este recurso ya que es menos arriesgado que intentar golpear directo a la cara. El golpe es más rápido y es más difícil ser contra-golpeado. Además, al cubrirse Manny tapa sus ojos y se expone a que lo saquen de balance como sucede en este caso.
El Jalón
Es difícil para la mayoría de los peleadores encontrar su distancia con Floyd, ya que tiene brazos anormalmente largos. Pero cuando Manny logra acortar la distancia, floyd tiene un último recurso (ilegal otra vez) para evitar ser castigado. Jalar o empujar hacia abajo a su oponente. Este movimiento es la firma de Floyd, y lo heredó de su padre, Floyd Mayweather Sr. En algún momento se dieron cuenta que a pesar de ser totalmente inefectiva para causar daño, esta técnica es increiblemente efectiva para lucir bien. Floyd luce como rey aquí y Manny parece que le va ha hacer un favorsito. Y no sólo es lucir bien por lucir bien, estas técnicas realmente funcionan para persuadir a la audiencia y a los jueces, no es por nada que la usan todo el tiempo.
El Abrazo
Bueno, esta es la única técnica que no hace ver muy bien a Floyd, pero lo saca de apuros. Cuando siente que esta en una posición desventajosa la solución es simple, show the love. (Por cierto, es ilegal también).
El Jalón/Empujón/Cachetada/Huye por tu vida
La idea siempre es la misma, saca de balance a tu oponente, mante una posición erguida y cuida que no te peguen en la cara. Aquí Manny logra conectar con la izquierda, pero es un golpe muy débil ya que floyd esta moviendose en dirección opuesta. Floyd "gana" este "intercambio" una vez más sacando de balance a Manny y probablemente haciéndolo fallar el siguiente golpe.
Todos estos recursos son parte del arsenal Mayweather. Gusten o no son efectivos para sacar la chamba. En la próxima parte analizaremos algunas de las herramientas más masculinas que Floyd utilizó para vencer a Manny.
Saludos.
En el fut siempre está el típico fintero que se lleva a uno o a dos, pero al final termina perdiendo el balón de todas formas - o se lo quita el tercero, o hace un mal pase, o hace un tiro desviado. Este tipo es considerado bueno, o por lo menos decente, aunque raro es que haga algo que valga la pena.
También está el típico personaje que, en una discusión, la lleva de perder contra otro que está más informado y que tiene una inteligencia superior. Sin embargo con agresión pura logra hacer quedar al otro mal, o por lo menos verse bien él, aunque lógicamente nada de lo que diga tenga sentido. Este tipo de comportamiento es típico de los políticos - nadie les gana en una entrevista, ni con mil pruebas de su corrupción.
Así, en todas las áreas de actividad humana, no es tan importante hacer las cosas bien, sino verte bien haciéndolas. En el box lo mismo es verdad.
Floyd Mayweather es el mejor aplícando este tipo de técnicas. Y en su pelea contra Manny Pacquiao las utilizó a la perfección. Aquí presentamos algunas de ellas.
Jab a la frente
Más que un jab es un "tap", una sobadita, una caricia. En términos de daño, uno de estos es casi 0. La frente es increiblemente fuerte y está diseñada para proteger el cerebro. De hecho este tipo de golpes podría hacerle más daño al que los tira que al que los recibe, ya que los golpes a la frente lastiman las manos. Pero eso no importa, lo importante es que Floyd luce súper bien, con la guardia abajo, con la espalda erecta, manteniendo a la distancia a su oponente que se ve encorvado, más tenso y fuera de posición para contra-atacar.
El Empujón
Aún cuando es conectado con un jab aquí, Floyd "no pierde" el intercambio porque al empujar a Manny, lo saca de balance y lo hace ver mal. El que está viendo la pelea no alcanza a ver bien lo que pasó y soló se queda con la impresión de que Floyd está dominando. No hace falta decir que empujar es ilegal, la maestría de Floyd es que sabe romper las reglas para su beneficio (más vale maña que fuerza).
La Cachetada de izquierda
Generalmente, Floyd utiliza el gancho de izquierda para escapar de las cuerdas, es una de sus armas favoritas, y con ella knockeó a Ricky Hatton en 2007. Sin embargo, Manny iba preparado para contra-golpear al cuerpo. Floyd ve venir la izquierda de Manny y sólo le da tiempo para tirar su gancho en forma de cachetada. No hace falta decir que este tipo de golpes no lastiman, ya que la mano extendida le quita todo el poder al golpe. Aunque en estos intercambios Manny conectó al cuerpo de Floyd, Floyd salió "ganándolos" porque un golpe a la cara luce más que uno al cuerpo. Además, Floyd combina la cachetada con un empujón que saca de balance a Manny y lo hace ver aún peor.
La Agachada
Otro movimiento ilegal de Mayweather. Es ilegal agacharte abajo del cinturón de tu oponente. Pero Floyd juega con las reglas una vez más, utilizando este movimiento no sólo para evadir golpes, sino para hacer fallar golpes a su oponente. Una de las ventajas es la que venimos diciendo, hace ver bien a Floyd y mal a Manny. La otra es que al fallar golpes Manny gasta mucho más energía que la que gastaría si los conectara.
Golpes a la Guardia
Por otro lado, en una pelea tan pareja, donde hay pocos verdaderos golpes, golpear la guardia luce más que no golpear nada, y mucho más que golpear el aire. Floyd utiliza este recurso ya que es menos arriesgado que intentar golpear directo a la cara. El golpe es más rápido y es más difícil ser contra-golpeado. Además, al cubrirse Manny tapa sus ojos y se expone a que lo saquen de balance como sucede en este caso.
El Jalón
Es difícil para la mayoría de los peleadores encontrar su distancia con Floyd, ya que tiene brazos anormalmente largos. Pero cuando Manny logra acortar la distancia, floyd tiene un último recurso (ilegal otra vez) para evitar ser castigado. Jalar o empujar hacia abajo a su oponente. Este movimiento es la firma de Floyd, y lo heredó de su padre, Floyd Mayweather Sr. En algún momento se dieron cuenta que a pesar de ser totalmente inefectiva para causar daño, esta técnica es increiblemente efectiva para lucir bien. Floyd luce como rey aquí y Manny parece que le va ha hacer un favorsito. Y no sólo es lucir bien por lucir bien, estas técnicas realmente funcionan para persuadir a la audiencia y a los jueces, no es por nada que la usan todo el tiempo.
El Abrazo
Bueno, esta es la única técnica que no hace ver muy bien a Floyd, pero lo saca de apuros. Cuando siente que esta en una posición desventajosa la solución es simple, show the love. (Por cierto, es ilegal también).
El Jalón/Empujón/Cachetada/Huye por tu vida
La idea siempre es la misma, saca de balance a tu oponente, mante una posición erguida y cuida que no te peguen en la cara. Aquí Manny logra conectar con la izquierda, pero es un golpe muy débil ya que floyd esta moviendose en dirección opuesta. Floyd "gana" este "intercambio" una vez más sacando de balance a Manny y probablemente haciéndolo fallar el siguiente golpe.
Todos estos recursos son parte del arsenal Mayweather. Gusten o no son efectivos para sacar la chamba. En la próxima parte analizaremos algunas de las herramientas más masculinas que Floyd utilizó para vencer a Manny.
Saludos.
viernes, 19 de junio de 2015
Ropa en Unreal Engine 4, 3ds Max y Apex Nvidia - Santuario
Una de las maneras que podemos hacer para crear ropa, o objetos que sean algún tipo de tela, para Unreal Engine 4, utilizamos un plugin para 3ds Max ya que al hacerlo con blender, no se importaba correctamente la tela.
El plugin de Nvidia se llama APEX Clothing lo pueden encontrar aquí. Para poder descargarlo es necesario crear cuenta con Nvidia.
Lo que hicimos fue crear en blender las cortinas que queríamos utilizar, para poder ubicarlas en el lugar donde se quedarán.
Una vez creada la cortina, exportamos el objeto en fbx, para poder abrirlo en 3ds y agregarle el modificador de Apex.
En 3ds Max lo primero que debemos hacer es crear un bone, el cual estará ligado a la cortina.
El plugin de Nvidia se llama APEX Clothing lo pueden encontrar aquí. Para poder descargarlo es necesario crear cuenta con Nvidia.
Lo que hicimos fue crear en blender las cortinas que queríamos utilizar, para poder ubicarlas en el lugar donde se quedarán.
Una vez creada la cortina, exportamos el objeto en fbx, para poder abrirlo en 3ds y agregarle el modificador de Apex.
En 3ds Max lo primero que debemos hacer es crear un bone, el cual estará ligado a la cortina.
Después seleccionamos la cortina y le agregamos los valores el modificador skin y le agregamos a este skin el bone que acabamos de agregar.
Después agregamos el modificador llamado "Apex Clothing".
Al agregar este modificador, podemos agregar las propiedades de las ropas. Estas propiedades están encargadas de decir, que tanta resistencia tiene al doblarse, escala de gravedad, amortiguación, etc. Los valores de nuestro objeto son los siguientes:
La herramienta para pintar los valores de la tela o ropa es la siguiente.
Después de que agregamos los valores a la tela que deseamos que tenga, exportamos el objeto de tela como un fbx y también lo exportamos como PhysX and APEX. Después de hacer esto, importamos el objeto fbx a unreal y le agregamos al objeto el archivo .apx que exportamos.
Al agregar el archivo apx que exportamos, podemos agregar al material del objeto las propiedades para que lo convierta en ropa.
Listo amigos, con esto ya tenemos nuestro objeto como tela. Si tienes alguna duda o algún comentario, no dudes en comentar.
Saludos!
miércoles, 10 de junio de 2015
Liferay "Mi Perfil (My Account)" desde template en velocity
Normalmente no se necesita, pero en algunos casos se puede necesitar crear una entrada al portlet de Mi Perfil (My Account) de Liferay desde algún template en velocity, ya sea desde un custom theme, template de contenido, template de listas dinámicas, template de asset publisher, etc.
Liferay en su dockbar hace esta liga desde un jsp y es bastante diferente hacerlo en velocity.
Dejo aquí un ejemplo de como llamar el portlet de Mi Perfil (My Account) desde velocity. El código es bastante corto y sencillo, ya que esta URL se encuentra en la variable de Liferay de theme_display!
Creamos la URL para el portlet de Mi Perfil (My Account), luego hay que cargarla en un popup (para hacerlo como lo hace Liferay en el dockbar).
Liferay tiene una utilería de javascript para crear los popups que utiliza, así que la usamos.
Listo! así de fácil.
Liferay en su dockbar hace esta liga desde un jsp y es bastante diferente hacerlo en velocity.
Dejo aquí un ejemplo de como llamar el portlet de Mi Perfil (My Account) desde velocity. El código es bastante corto y sencillo, ya que esta URL se encuentra en la variable de Liferay de theme_display!
## Liferay pop up link to display the account editing page of a user (Velocity)
#set ($my_account_url = $theme_display.getURLMyAccount() + "&controlPanelCategory=my")
Creamos la URL para el portlet de Mi Perfil (My Account), luego hay que cargarla en un popup (para hacerlo como lo hace Liferay en el dockbar).
Liferay tiene una utilería de javascript para crear los popups que utiliza, así que la usamos.
<a href="javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true}, title: 'My Account', uri: '$my_account_url'});">
Edit Profile
</a>
Listo! así de fácil.
viernes, 5 de junio de 2015
Página de configuración en portlet de Liferay
Varias veces he batallado para recordar y/o encontrar como crear una página de configuración en un portlet al estilo Liferay, así que dejare el proceso aquí para futuras referencias, o por si a alguien le sirve!
(Digo al estilo Liferay porque siempre puedes crear una pagina mas en tu portlet, que tenga acceso restringido para Admins, y manejar ahi las configuraciones del portlet. Pero los portlets de que trae Liferay de caja, no se configuran asi.)
Primero, creamos nuestro portlet.
Entramos al archivo liferay-portlet.xml, en este agregamos el configuration-action-class, usando la clase DefaultConfigurationAction. quedaria asi:
Al agregar esto, liferay ya crea en las configuraciones del portlet una nueva pestaña llamada setup. Esta pestaña estara en blanco, ahora creemos la página para mostrar algo.
En el archivo de configuración del portlet, portlet.xml agregamos un parámetro de inicialización mas, para agregar el jsp.
El nombre del parámetro debe ser config-template, así es como Liferay sabe que ese parámetro es para la configuración del portlet.
Agregamos la pagina config.jsp en este caso a la misma altura de view.jsp, que es la pagina que se crea automáticamente al generar el portlet.
En el view.jsp vamos a traer la configuración para pintarla.
Y en el config.jsp creamos una forma, con un textbox para poner el mensaje que queremos mostrar al usuario (en este caso).
En el value del textbox, usamos en el name el doble guion para la propiedad message, que es la que utilizamos en el view.jsp para mostrar el mensaje que queremos que vea el usuario, esto es para que la clase DefaultConfigurationAction haga todo mágicamente, sin tener necesidad nosotros de mandarlo guardar o mandarlo traer de la base de datos en un Controller. Este método de guardado/extracción solo se usa en la forma, no al momento de ir por la propiedad en las preferencias del portlet.
Y listo! esto debe tener un portlet con una pagina de configuración al estilo Liferay!
Resultado final:
(Digo al estilo Liferay porque siempre puedes crear una pagina mas en tu portlet, que tenga acceso restringido para Admins, y manejar ahi las configuraciones del portlet. Pero los portlets de que trae Liferay de caja, no se configuran asi.)
Primero, creamos nuestro portlet.
Entramos al archivo liferay-portlet.xml, en este agregamos el configuration-action-class, usando la clase DefaultConfigurationAction. quedaria asi:
<portlet>
<portlet-name>configtest</portlet-name>
<icon>/icon.png</icon>
<configuration-action-class>com.liferay.portal.kernel.portlet.DefaultConfigurationAction</configuration-action-class>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
<css-class-wrapper>configtest-portlet</css-class-wrapper>
</portlet>
Al agregar esto, liferay ya crea en las configuraciones del portlet una nueva pestaña llamada setup. Esta pestaña estara en blanco, ahora creemos la página para mostrar algo.
En el archivo de configuración del portlet, portlet.xml agregamos un parámetro de inicialización mas, para agregar el jsp.
<init-param>
<name>view-template</name>
<value>/view.jsp</value>
</init-param>
<init-param>
<name>config-template</name>
<value>/config.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
El nombre del parámetro debe ser config-template, así es como Liferay sabe que ese parámetro es para la configuración del portlet.
Agregamos la pagina config.jsp en este caso a la misma altura de view.jsp, que es la pagina que se crea automáticamente al generar el portlet.
En el view.jsp vamos a traer la configuración para pintarla.
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<%=message %>.
Y en el config.jsp creamos una forma, con un textbox para poner el mensaje que queremos mostrar al usuario (en este caso).
<%@page import="com.liferay.portal.kernel.util.Constants"%>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<liferay-portlet:actionURL portletConfiguration="true" var="configURL"/>
<liferay-portlet:renderURL portletConfiguration="true" var="configRenderURL"/>
<aui:form action="<%=configURL %>" method="post" name="fm">
<aui:input name="<%=Constants.CMD %>" type="hidden" value="<%=Constants.UPDATE %>" />
<aui:input name="redirect" type="hidden" value="<%=configRenderURL %>" />
<aui:fieldset>
<aui:input name="preferences--message--" id="message" label="Welcome Message" value="<%=message %>" />
</aui:fieldset>
<aui:button-row>
<aui:button type="submit"/>
</aui:button-row>
</aui:form>
En el value del textbox, usamos en el name el doble guion para la propiedad message, que es la que utilizamos en el view.jsp para mostrar el mensaje que queremos que vea el usuario, esto es para que la clase DefaultConfigurationAction haga todo mágicamente, sin tener necesidad nosotros de mandarlo guardar o mandarlo traer de la base de datos en un Controller. Este método de guardado/extracción solo se usa en la forma, no al momento de ir por la propiedad en las preferencias del portlet.
Y listo! esto debe tener un portlet con una pagina de configuración al estilo Liferay!
Resultado final:
lunes, 1 de junio de 2015
Santuario - UE4 y Oculust Rift
Hola amigos
Actualmente nos encontramos trabajando en un proyecto nuevo, el cual es la representación del Santuario descrito en el libro de Éxodo de la Biblia.
Para dicho proyecto decidimos utilizar Unreal Engine 4 ya que queremos utilizar un dispositivo para Realidad Aumentada llamado Oculus Rift. Para aquellos que no sepan que es el Oculus Rift, aquí les dejo un video para que se den una idea. VIDEO
Espero muy pronto les podamos avisar en donde lo pueden descargar y como utilizarlo.
Saludos
Actualmente nos encontramos trabajando en un proyecto nuevo, el cual es la representación del Santuario descrito en el libro de Éxodo de la Biblia.
Para dicho proyecto decidimos utilizar Unreal Engine 4 ya que queremos utilizar un dispositivo para Realidad Aumentada llamado Oculus Rift. Para aquellos que no sepan que es el Oculus Rift, aquí les dejo un video para que se den una idea. VIDEO
Espero muy pronto les podamos avisar en donde lo pueden descargar y como utilizarlo.
Saludos
lunes, 2 de febrero de 2015
Aplicación para android - Frases de Buda
Hola Gente!
Pues nos complace informarles que esta publicada la primera aplicación para dispositivos Android desarrollada con Corona.
Siempre se empieza por algo, y este es el inicio de Nituniyo!.
Saludos!
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
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
(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:
Éste método devuelve un json a manera de árbol, por ejemplo:
Espero le sirva a alguien!
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!!!
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.
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.
Después creamos un directorio en donde se guardara la base de datos.
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.
Ya solo queda crear las tablas. Un ejemplo de creación de tabla y agregar datos, sería.
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.
Espero les sirva de algo, Saludos!
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
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:
Para encontrar el quinto tag <a> dentro de un div contenedor:
Si quiero obtener el div padre, del quinto tag <a>, cuando el contenedor tiene muchos divs anidados:
Si quiero algun tag html (div en este caso), de los tags encontrados como parents del quinto tag <a>
Si quiero saber el id, o la clase css de ese div encontrado:
Por si le sirve a alguien!
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!
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
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.
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.
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:
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!
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
Teniendo el JSON de ejemplo:
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 OBJECTIDTeniendo 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
Floyd Mayweather
Marcos Maidana
https://www.youtube.com/watch?v=Lo6ND7-PFvY
Suscribirse a:
Entradas (Atom)









Encuéntrala aquí!