viernes, 31 de agosto de 2012

Cristalab

Cristalab


Cómo funciona la geolocalización por WiFi

Posted: 31 Aug 2012 09:20 AM PDT

La geolocalización es muy útil en aplicaciones web y móviles. Pero GPS no siempre está disponible. Gracias a un esfuerzo de empresas como Google, Apple, Microsoft y Skyhook, es posible obtener latitud y longitud muy acertada con sólo usar antenas wifi. Aquí te explicamos cómo funciona.


El demo


Entra a Geolocation de HTML5 Demos y si estás desde un laptop o un computador con antena wifi prendida dale "Aceptar" cuando el navegador te pida permiso. Verás que te ubica MUY cerca a donde estás, si no es que es exacto.

Geolocation de antenas wifi


La geolocalización funciona con HTML5 o con apps nativas móviles. La técnica es muy simple:

1. Capturar datos de routers y geolocalizarlos


Si tienes un teléfono Android o iPhone, al instalarlo te preguntó si querías "ayudar anonimamente" y al mismo tiempo hacer que la localización sea más veloz. Todos dicen que sí.


El teléfono prende la antena wifi y captura todas las redes inalambricas cercanas. NO importa que esté protegida, que sea WPA2 o que la clave tenga mil caracteres porque no usa el nombre de la red, ni los paquetes, sino la MAC Address del router. Este es un número único del router que nunca cambia, incluso si el router es formateado o la red cambia de nombre. Y siempre va en texto claro entre las ondas.

Tras capturar una lista de MAC de los routers cercanos, el teléfono prende el GPS tradicional, obtiene una latitud y longitud acertada y manda a los servers (Google Geolocation, Skyhook, Microsoft Bing Geocode, etc) esos datos. Los routers rara vez se mueven, así que la base de datos tiende a ser buena.

Los carros de fotos de Google Street View también hace lo mismo con GPS profesional y antenas wifi de alto poder.

2. Comparar routers cercanos con la DB pública


Cuando una aplicación pide geolocalizar por wifi, sea en un teléfono, tablet o laptop, la app se conecta a Google Geolocation, Skyhook o la empresa que use (los navegadores lo hacen automático), le envía al API una lista completa de las MAC Address de todos los routers que tu antena ve. El API compara esas direcciones con latitudes y longitudes, triangula y envía una latitud y longitud muy cercana a la realidad.


3. Hacer algo con la latitud y longitud


¿Quieres probarlo? Crea un archivo HTML y en etiquetas script, inserta este código:

Código :

navigator.geoLocation.getCurrentPosition(exito, fallo);  function exito(datos)  {     alert(datos.coords.latitude + "," + datos.coords.longitude);  }  function fallo(errorsh)  {     alert("Tarde o temprano ¬ ¬");  }

[nota:a26f27c43e]Atención: Lo tienes que probar en un server, aunque sea local, no te sirve si lo abres desde el disco.[/nota:a26f27c43e]
Al probarlo, te pedirá permiso para buscarte, usará geolocalización por wifi y te mostrará en pantalla tu latitud y longitud separado por una coma. Necesitas usar un navegador de verdad, eso sí. IE9 o superior.

Luego, puedes poner esos números en Google Maps y verás que, quizás, es tu casa. Si quieres usar esos datos para mostrar el mapa en un sitio web, puedes usar Gmaps.js o el API de Google Maps nativo.

La geolocalización wifi es increíble y funciona incluso en lugares muy remotos. Pública en los comentarios de donde eres y si te funcionó. O cuentale en un tweet a @cristalab.

Enviar comentario

Redes OSPF: comandos generales y debug en Packet Tracer

Posted: 31 Aug 2012 06:19 AM PDT

En este videotutorial de Redes, repasaremos los comandos de revisión básica, con los que hemos trabajado en los diferentes protocolos y configuraciones, para comprobar la asignación de las diferentes redes, solucionar errores y gracias a comandos específicos, testear información única de Ospf y los dispositivos que forman parte de la topología.

Empezaremos revisando la configuración de los dispositivos con las opciones del comando Show, mientras usamos comandos específicos de OSPF para obtener información exclusiva del protocolo y usamos el Debug para comprobar los mensajes generados.



Saludos.

Enviar comentario

Movimiento de profundidad a una imagen estática con After Effects

Posted: 13 Aug 2012 05:39 AM PDT

En este videotutorial de After Effects, aprenderemos a añadir características tridimensionales y de profundidad real a una fotografía plana de un paisaje, usando las máscara en la generación de varios niveles de profundidad, que ajustaremos y desplazaremos en el entorno tridimensional del programa, para poder incluir diferentes tomas de cámara sutiles que nos proporcionarán el material animado.

Comenzaremos con la importación de la fotografía, generando varios duplicados y ajustándolos para que puedan interactuar en el entorno de trabajo 3D.

Recortaremos las porciones de los duplicados que nos interesen, para conseguir el efecto deseado y crear los diferentes planos de la composición, sobre los que modificaremos posición y escala.

Para terminar, aplicaremos varios retoques y efectos, al mismo tiempo que animamos la cámara, para obtener la toma final.




Saludos.

Enviar comentario

Menú con XML y PHP

Posted: 13 Aug 2012 05:28 AM PDT

Que tal! Este es mi primer aporte y espero en verdad les sea de utilidad. En este tutorial les intentaré explicar sobre el manejo de un menú en XML, usando cada elemento como VAR.

Nos manejaremos de esta manera: por medio de PHP se cargan los elementos de mi menú como un array, lo que nos lleva sólo a ejecutar una acción en lugar de invocar cada elemento por separado.

Espero lo comprendan un poco mas con estas líneas.

Código :

<item id="MN_CURSOS" text="Cursos">        <item id="MNCTSS_AREAS" text="Areas">              <userdata name="url">                 <!--  Declaracion del elemento VAR:   -->                 <VAR:WSCATALOGOSAREAS/>                  <!--  Para el catalogo de Areas  -->              </userdata>              <userdata name="qs">                 <VAR:LOADFORM/>              </userdata>           </item>        <item id="MNCTSS_CURSOS" text="Admon de Cursos">              <userdata name="url">                 <VAR:WSCATALOGOSCURSOS/>              </userdata>              <userdata name="qs">                 <VAR:LOADFORM/>              </userdata>        </item>        <item id="MNCTSS_DOCENTES" text="Admon de Docentes">              <userdata name="url">                 <VAR:WSCATALOGOSDOCENTES/>              </userdata>              <userdata name="qs">                 <VAR:LOADFORM/>              </userdata>        </item>     </item>  


[nota:cfbb5853f9]En la línea 4 "VAR:WSCATALOGOSAREAS" puse un pequeño comentario sólo en esta parte, sin embargo en las demás líneas aparecen otras variables que uso de igual forma.[/nota:cfbb5853f9]

A continuación pasamos a la parte de PHP que es donde se carga el Array, en mi caso lo hago con un Switch dependiendo de la petición que se obtenga de otra de las peticiones que se efectúan en mi framework (cosa que espero poder compartir más adelante). Para este caso sólo pondré el Switch con el Case que quiero explicar:

Código :

  switch ($oGET->do) {        case 'load_menu' : {           header ("Content-Type:text/xml");                      $oTpl->load(FS_ADMIN . 'menu.xml');           $oTpl->setVar(              array(                 'LOGOUT' => encodeQueryString(array('do' => 'logout')),                 'LOADFORM' => encodeQueryString(array('do' => 'load_form')),                 'WSCATALOGOSPERFILES' => WS_CATALOGOS_PERFILES,                 'WSCATALOGOSAREAS' => WS_CATALOGOS_AREAS,                 'WSCATALOGOSUSUARIOS' => WS_CATALOGOS_USUARIOS,                 'WSCATALOGOSCURSOS' => WS_CATALOGOS_CURSOS,                 'WSCATALOGOSDOCENTES' => WS_CATALOGOS_DOCENTES,                )           );             $xml = $oPerfil->parseDHTMLXMenu($oTpl->publish(true));                      echo $xml;                      break;        }  


El objeto "$oGET" es un elemento global que uso para el manejo del Frame, este objeto ejecuta la acción "do" a la acción "load_menu". Dentro de este se encuentra el objeto "$oTpl" (ObjectTemplate) que es usado como plantilla, después carga con la acción "load" el menu.xml, la variable "FS_ADMIN" es sólo la dirección de la carpeta, esto con el fin de no tener que estar poniendo las rutas cada vez que quiera cargar algo, sólo use un archivo de constantes, esto es de mucha utilidad ya que evita pérdida de tiempo innecesaria en especificar las rutas.

Continuando, una vez cargado el menu.xml, el objeto "$oTpl" carga las variables de nuestro menu.xml, estas variables ya están definidas en mi archivo de constantes.

Esta es la parte para esta variable, "constantes.php" y cada uno de ellos es sólo el direccionamiento de las carpetas.

Código :

  //Constantes para catalogo de Areas  define('WS_CATALOGOS_AREAS', WS_CATALOGOS . 'areas/');  define('FS_CATALOGOS_AREAS', FS_CATALOGOS . 'areas/');  define('FS_CATALOGOS_AREAS_GRID', FS_CATALOGOS_AREAS . 'grid/');  define('FS_CATALOGOS_AREAS_CONSULTA', FS_CATALOGOS_AREAS . 'editar/');  define('FS_CATALOGOS_AREAS_NUEVO', FS_CATALOGOS_AREAS . 'agregar/');  


Una vez que se carga el Array lo asigno al objeto $xml, por ahí se observa lo siguiente:

Código :

$xml = $oPerfil->parseDHTMLXMenu($oTpl->publish(true));


Partiendo esta línea de derecha a izquierda sería:

Código :

$oTpl->publish(true)

Esto no tiene mucha ciencia, es sólo la acción de "publicar" el objeto $oTpl.

Código :

$oPerfil->parseDHTMLXMenu($oTpl->publish(true));

Aquí solo se pasa al modo de DHTMLX cuya referencia dejo aquí: http://docs.dhtmlx.com/doku.php

El objeto $oPerfil, lo uso para que dependiendo del perfil del usuario, se carguen o no las opciones del menú, por medio de validaciones y permisos asignados.

Este es un complemento para que nuestros menúes tengan cierta presentación y algunas animaciones.

Y LISTO! una vez que se genera esta variable $xml, sólo se le hace un "echo" y se hace un "break" para especificar que la petición ha sido terminada.

Yo les llamo OBJETOS entendiendo que ya se sabe que una variable puede ser manejada como tal.

Espero sus comentarios y espero que esto les sirva, aquí he aprendido mucho y espero seguir aportando.

Enviar comentario

Oh nuestro webmaster!

Posted: 13 Apr 2006 05:00 PM PDT

Nos prohibieron publicar este comic. Era lo mejor. Nos dijeron "Hagan algo impactante". Pero algo terriblemente malo paso. Ahora, una orden judicial nos obliga a mostrarlo. Contra nuestra voluntad.

jueves, 30 de agosto de 2012

Cristalab

Cristalab


Atributos de creación de músculos en 3D Maya

Posted: 30 Aug 2012 08:35 AM PDT

Seguiremos aprendiendo atributos de los diferentes tipos de cápsulas y músculos, que junto con los sistemas de simulación que nos ofrece 3D Maya, nos permitirán controlar cuestiones relacionadas con distintos aspectos de la creación de éstos, como la forma y otros nodos iniciales que son incorporados durante la generación y que nos ayudarán ajustar los atributos de deformación y simulación, incluso una vez ya implementados en sistemas completos.

Estudiaremos cómo se accede a estas propiedades desde varios modulos específicos, como el Channel Box y el Atribute Editor, para realizar las modificaciones sobre cada uno de ellos, comprobando de forma directa, cómo se ven afectados los músculos y el resto del sistema.



Saludos.

Enviar comentario

Conversión de Skincluster en 3D Maya

Posted: 10 Aug 2012 07:59 AM PDT

Utilizaremos uno de los caracteres con animación de tipo Motion capture que incluyen las librerías de referencia de 3D Maya, para aprender a crear conversiones de conjuntos completos, previamente rigeados con las herramientas clásicas de Skinning, Smooth y Rigid Bin, en sistemas de músculos formados por cápsulas y que a diferencia de conversiones de episodios anteriores, conservarán las influencias de la deformación sobre la malla a la que afectan.

Cargaremos el personaje desde el Visor en el entorno de trabajo y comprobaremos la animación aplicada del sistema clásico de huesos, para realizar la conversión al nuevo sistema muscular de cápsulas y revisar la correcta asignación de los ejes.

Para terminar ajustaremos varios pesos y refinaremos la translación aplicada en los atributos de la piel.



Saludos.

Enviar comentario

285.000 niños ya pueden ir al cole...pero todavía queda mucho para lograr un mundo #SINtrabajoinfantil

Si no puedes ver correctamente este email, haga clic aquí.

IV Encuentro Internacional contra el Trabajo Infantil | Un camino hacia la conferencia Mundial del 2013 | Fundación Telefónica

285.000 niños ya pueden ir al cole…    pero todavía queda mucho para lograr un mundo #SINtrabajoinfantil

 
Gracias al compromiso y al trabajo de Fundación Telefónica con una amplia red de ONG, 285.000 niños de 13 países Latinoamericanos tienen la posibilidad de ir al colegio. Pero quedan muchos todavía obligados a trabajar. 
 
Para buscar soluciones para esos 13.215.000 niños, que no van a la escuela, se celebra el IV Encuentro Internacional contra el Trabajo Infantil.
 
El Encuentro aborda una nueva etapa el próximo lunes 3 de septiembre. En esta fase vamos a identificar, analizar y compartir estudios, prácticas y experiencias exitosas en la lucha contra el trabajo infantil en Centroamérica y el Caribe.
 
En este encuentro Fundación Telefónica reúne a numerosos expertos del ámbito de la erradicación del trabajo infantil: ONG; investigadores, personal de las administraciones gubernamentales y organismos supranacionales; y especialistas en protección de derechos de la infancia.
 
Estas son las temáticas en las que puedes aportar tu experiencia y visión:
  • Trabajo Infantil Peligroso en Agricultura
  • Explotación sexual comercial de niñas, niños y adolescentes
  • Políticas de lucha contra la pobreza
  • Metodologías innovadoras en educación
  • Nuevas formas de movilización social

Inscríbete ya para participar, desde el 3 de septiembre, en las actividades online. Visita la nueva web, más interactiva, del IV Encuentro Internacional contra el Trabajo Infantil.

 

www.encuentrotrabajoinfantil.fundaciontelefonica.com

Comparte este mensaje en tus redes sociales:

Twitter

Facebook

 
Si tienes alguna duda, envía un e-mail a encuentroTI@fundaciontelefonica.com
Fundación Telefónica | Gestión Ejecutiva: Ceats | Apoyo: OIT / Unesco - Oficina en Santiago



 

miércoles, 29 de agosto de 2012

Cristalab

Cristalab


Enrutamiento OSPF básico en Packet Tracer

Posted: 29 Aug 2012 08:10 AM PDT

En este videotutorial empezamos a ver las características básicas del protocolo de enrutamiento dinámico OSPF, aprendiendo las propiedades que lo hacen una opción a tener en cuenta, para su implementación en redes privadas de gran tamaño y revisando la configuración básica de área única en una red simple, con datos de direccionamiento asignados.

En primer lugar veremos una presentación, en la que compararemos el protocolo y revisaremos su proceso general.

Posteriormente usaremos Packet Tracer para introducir la configuración en la topología, comprobar la generación de adyacencias entre vecinos y testear la conectividad con un Ping.



Saludos.

Enviar comentario

Animar un elemento usando la línea de tiempo en Photoshop

Posted: 29 Aug 2012 02:21 AM PDT

En este videotutorial de Photoshop aprenderemos varios trucos de animación que nos permitirán crear un movimiento más fluído de los caminos y las trayectorias, de una forma sencilla, gracias a la interpolación manual de cada uno de los fotogramas clave y al uso del papel de cebolla, que nos ayudará a testear que el resultado sea el más indicado en cada área.

Interpolaremos el movimiento, ajustando y refinando la posición en cada paso intermedio, ayudándonos con el papel cebolla, para redirigir la trayectoria y obtener un resultado preciso en todo el recorrido.



Saludos.

Enviar comentario

jQuery 1.8 publicado: Mejor CSS3, modularidad y velocidad

Posted: 10 Aug 2012 06:42 AM PDT

Ha salido una nueva versión de jQuery, la 1.8. Antes de arrancar, puedes descargarla e implementarla en tus sitios:

Los cambios son muchos, pero la mayoría son de estabilidad y bugs. jQuery ha llegado a un nivel de maduración donde ya no hay tanta magia por release, pero sí una plataforma mucho más robusta. Entre los cambios más importantes, resaltamos:


Prefijos CSS3 automáticos


No hay nada más horrible que agregar todos estos prefijos para poder trabajar con CSS3:
[css:1:1ab130ffae]-webkit-
-moz-
-o-
-ms-[/css:1:1ab130ffae]
Para el CSS normal tenemos una solución usando prefix-free, pero si agregabas código CSS3 con jQuery usando la función .css(), estos no se incluían automáticamente ni con esa función, por lo que había que agregarlos a mano.

Ahora con jQuery 1.8, los prefijos son automáticamente detectados y agregados.

Mejora de velocidad en el motor de selectores


jQuery es famoso por su capacidad de llegar a cualquier parte del DOM usando selectores CSS. Esa habilidad requiere código pesado que en jQuery 1.8 ha sido ampliamente optimizado, especialmente para IDs.

Las animaciones ahora tienen un evento de progreso


El core de animaciones se ha reescrito bastante para ser más veloz, aun no es 100% CS3 (Eso es una promesa de jQuery 2.0) pero, entre lo nuevo, destaca un nuevo callback para saber el progreso de la animación.

Modularidad


Ahora puedes bajar y usar solo ciertos pedazos de jQuery. Si nunca usas animation, si jamás te metes con AJAX, entre otros modulos, construye tu propio jQuery compacto usando grunt.

Recordatorio del nuevo modelo de eventos de jQuery


Desde jQuery 1.6 hay un nuevo modelo de eventos recomendado, pero aun muchas personas siguen usando el viejo (e incorrecto) modelo de:

Código :

$(document).ready( function ()  {      //NO no no no.  });

El nuevo y correcto modelo de eventos de jQuery, recomendado para todos los casos, es este:

Código :

$(document).on("ready", evento);  function evento (ev)  {      // Clever girl.   }

Nada de usar los eventos como función del objeto, nada de usar live o bind. "on" y "off" suplen todas las necesidades y funcionan para todos los casos.

Enviar comentario

Operadores de comparación en Python

Posted: 10 Aug 2012 05:33 AM PDT

Mientras desarrollamos, muchas veces nos vemos en la necesidad de comparar datos, ya sean proporcionados por el usuario o incluídos en nuestro propio código, para esto, nos sirven los operadores de comparación, y en este videotutorial de Python, estudiamos los más comunes:

Enviar comentario