La verdad es que es una plática de hace DOS AÑOS y por suerte la pude ver (tengo una lista de ted talks por ver eterna pero prefiero no borrarlas porque me podría perder joyas como esta).
Lo que hacen es analizar los mecanismos con los cuales se generan las interacciones entre neuronas y la manera (única) en que cada persona y su corteza cerebral las maneja. Con esto y un software super increiblemente complicado, pueden básicamente “leer la mente”.
Esa lectura de mente + interfaces nuevas = el futuro.
En la plática hablan de juegos, pero imaginen aplicaciones más prácticas, para arquitectos, para medicina, para ingeniería.. En unión con realidad aumentada es el verdadero futuro, es más, ahí lo tienen, creo que mi empresa para el futuro será una que desarrolle software de Realidad Aumentada para este tipo de dispositivos.
Imaginen también el nivel de comunicación que se podría lograr si usamos esto con otros seres vivos: flora y fauna. Podríamos llegar a crear un lazo real y tangible con el planeta y ser los comunicadores/enlaces globales.
Es un primer paso que se dio hace casi dos años, es mi propósito buscar más de esto, traerlo de vuelta y buscar con su ayuda (de los millones de lectores, hahaha) producir algún proyecto colectivo que nos ayude a todos (idea.me ahí va, ahí va, ya van a ver que algo GRANDE les vamos a mandar..)
Así que, todo empezó un día con un cambio de versión y un nuevo tema – el propósito era escribir dos posts a la semana, tarea que demostró ser muy pesada para todo lo que viví en el año.
Hubo muchos proyectos (algunos muy divertidos, otros más pesados, pero como siempre, de todos aprendí y estoy muy agradecido) y traté de publicar sobre la línea que llevaba antes (reflexiones del mundo y un toque de la parte de sistemas) pero luego se vio una clara tendencia a las publicaciones más técnicas por lo que andaba haciendo.
Así logré escribir 60 posts. Un muy buen número (tomando en cuenta que hay 52 semanas en el año esto es un promedio mayor a un post a la semana) que me ayuda a poner la barra para este año en un nivel más adecuado: 1 post cada 2 semanas, es decir finalizar el año con 26 nuevos posts.
Suena poco tal vez, pero la verdad es que este año tengo muchos nuevos proyectos en los cuales también tengo que estar escribiendo posts y prefiero bajar la barra un poco antes que volver a errarle.
Este año estoy probando con crear mi “empresa virtual” que llamaré AquiGorka NET – como un colectivo o despacho pero más adecuado para nuestra modernidad. Es ahí donde incluiré la lista completa de proyectos en los que trabaje y sus diferentes detalles para poder dejar este espacio más hacía lo que siempre quise que fuera: un espacio de reflexión que haga que quien lea quiera aprender por si mismo.
Algo que me ha ido marcando es que he aprendido mucho de sistemas en la parte técnica pero ahora creo que me siento más listo para dirigir proyectos en lugar de desarrollarlos por completo (así que esperen posts de gestión y/o dirección).
¿Propósitos?
Muchos.
¿Lista de propósitos?
No. Mejor vuelvan cada dos semanas y algo nuevo encontrarán.
¿Ideas?
Prepárense que vienen con todo.
¿Comentarios?
Yo hago lo mío. Espero que quien lo necesite lo encuentre, y espero que algo digan, y si no lo hacen ni modo (ustedes, los millones de lectores).
La verdad es que desde que empecé a usar más a fondo WordPress encuentro que hay plugins, scripts, widgets, y otros MUY bien hechos. En este momento hablo del plugin Akismet que funciona para revisar los comments que llegan al website y compararlos contra un sistema que los califica como spam o como “libres”.
Estuve medio necio por mucho tiempo a no usar este plugin y por eso tuve que manualmente mandar a spam por lo menos unos 150 comentarios a la semana (y no lo hacía cada semana, así que había veces que tenía más de 500 comentarios acumulados..)
Desde que active Akismet me he relajado de una manera real y ahora ni siquiera me atasca mi email mi blog con los avisos de todos esos spams.
¿Cómo activar Akismet?
Activar el plugin (viene incluido por default en las instalaciones de WordPress)
Entrar a akismet.com y regsitrarse (esto era lo que más me detenia porque ya estoy harto de todos los miles de registros que hay que hacer, pero bueno, lo vale)
Escoger un sistema de pago (hay desde planes de grandes empresas hasta planes para personas y la opción de no pagar – ahora, ellos hacen esta pregunta: ¿cuánto vale akismet y sus servicios para ti? y tu puedes mover una barrita que va desde 10 dls mensuales hasta 0 – cuánto vale para cada uno es diferente, seguro así que este método de cobranza me parece increible!)
Una vez que terminas los pasos 3 y 4 recibes un API key, el cual se tiene que agregar en los Settings de Akismet en wordpress.
A mí me pasa. Creo que a tí te pasa. Espero que a muchos les pase.
En un mundo donde faltan buenas ideas, a las personas que tienen ideas les falta tiempo para realizarlas.
¿Cuántas veces se escucha o se dice ‘esa idea era mía’?
Gracias a este proyecto ahora podrás certificar que así fue.
La ‘idea’ (con derechos de autor, hahaha o por lo menos de dmca) es que cuando tengas una de esas brillantes ideas en lugar de escribirla en un “post it” o en una “nota en la compu” o “enviartela por email” (para luego nunca verla) es que abras tu aplicación. Ahí podrás ir apuntando todo lo relativo a tú idea y al final “sellarla” ese sello lo que dará será una certificación de la fecha en la que guardaste la idea – la cual si no lo quieres nunca será publicada, así nadie te robará la idea (ya estamos averiguando temas de encripción termo nuclear cuántica para guardar los datos de manera más segura que simplemente transformarlos en ceros y unos) y te quedarás tranquilo hasta que alguien más la haga realidad y entonces puedas decir con certeza y fecha que esa “era tu idea”.
Ya me dirán si les gusta.
Saludos,
Gorka
P.D. – si la idea era de ustedes espero me lo hagan saber, así podemos trabajar en equipo para la realización…
Sin abusar mucho (y no entrar a detalles MUY técnicos de OOP) estoy utilizando una clase de la librería de Flash AS3 que me permite instanciar clases de manera dinámica. Es una manera muy cómoda de eficientar procesos repetitivos (y de continuar con las ventajas de OOP como el polimorfismo) que nunca pensé que llegaría a utilizar (porque acostumbro declarar directamente las clases que voy a usar como propiedades privadas pero quise ver si podía quitar mucho código que se repetía sin sentido y encontré esta manera:
var referencia_clase:Class = getDefinitionByName(string_clase) as Class;
instancia = new referencia_clase();
// si se preguntan por qué la instancia no tiene declaración formal es porque antes está declarada como un objeto “dinámico/genérico” que vía polimorfismo puedo reusar para distintas clases – hahahaha
Necesita un string con el nombre de la clase con lo que se hace una referencia a la misma y luego esa misma referencia se usa para instanciar el objeto de la clase en sí.
Con eso ya se tiene acceso (vía el objeto) a todos los métodos y propiedades.
PERO…
Por la manera en la que trabaja el compilador de Flash (en mi caso versión cs5.5) cuando se usa un “import” para traer clases a memoria para luego instanciarlas, el compilador sólo agrega a memoria las clases que sí tienen una llamada real (no hace falta instancia, puede ser nada más la referencia: var obj_clase:Nombre_Clase;).
Eso quiere decir que las clases que uno querría llamar de manera dinámica NO ESTÁN en memoria y por lo tanto cuando se ejecuta el código se tira un error de ejecución de variable nula.
Es un bug? No creo, es más como un loophole curioso ya que si con el import sí se trajeran a memoria las clases que se piden entonces el compilador perdería una super ventaja que tiene de eficientar las llamadas reales que tiene que hacer.
Entonces cómo se resuelve esto? Como lo puse arriba: haciendo una referencia como propiedad dentro de la clase que va a usar el getDefinitionByName => var referencia:Clase_Dinamica;
Aunque esto implica que se tienen que agregar todas las clases que se van a usar de manera dinámica una por una, aún así se puede aprovechar la función getDefinitionByName para eficientar códigos (igual habría que hacer realmente un benchmark de uso de recursos de instancias reales vs. referencia clases e instanciación de una en una para ver qué camino es mejor).
Espero esto ayude a aquellos que querían usar el método y les mandaba el error: “ReferenceError: Error #1065: Variable NOMBRE_de_la_CLASE is not defined.”
La idea: estás viendo una pelicula o una serie de televisión (es más hasta una revista), no sabes como se llama el actor/actriz que está frente a tí, así que sacas tu iphone abres tu app de Who’s that dude? enfocas su cara y puf! magicamente te saca los datos del actor de IMDB. En la pantalla del iphone saldría un cuadro donde tienes que poner la cara del actor (y esto puede ser difícil si las cosas se están moviendo pero eventualmente podemos hacer que sólo con que se vea la cara en la pantalla se le reconozca.
La idea es que la app manda fotos de la cara a un servidor, este servidor se encarga de hacer el reconocimiento (con una base de datos de caras y celebridades preparada desde antes) y cuando encuentra un match manda pedir los datos a algún servicio de IMDB (hay que revisar que exista esto o sino usar su feed de XML o sino hasta parsear sus HTML’s) y eso se enseña al usuario en el iphone.
¿Qué necesito para hacer esto?
funcionalidad de web (es decir si para que esto funcione sea WIFI o 3G el dispositivo tiene que estar conectado a Internet)
programa que se encargue del reconocimiento facial y que tenga una base de datos (esto no es taan fácil y la base de datos puede ser MUY grande así que hay que calcular y organizar bien esta parte)
programa o script que se conecta a IMDB una vez que se sabe que actor/actriz es y que obtiene los datos del mismo
funcionalidad básica de app (secciones, botonería, eventos, etc)
Tengo ya varias ideas de cómo hacer la parte del servidor del reconocimiento facial, pero hasta que haga pruebas prefiero no contar demasiado.
Eventualmente si sale este proyecto, voy a hacer uno similar que use los datos y fotos de Facebook y que funcione para cualquier persona pública.
La idea es sencilla y divertida: se ve la sombra generada por una estaca (virtual) en un círculo con referencias horarias. Lo divertido es que planeo usar técnicas de realidad aumentada para lograr que la dirección y grado de la misma sean congruentes con la manera y posición del smartphone. Es decir que para que funcione correctamente tendría que estar apuntando al norte y completamente plano, pero si no es así de todas maneras algún resultado tendrá.
En una futura actualización hasta me podría conectar a un sistema de clima y si el lugar se encuentra nublado hasta podría considerar moderar la intenisdad de la sombra generada.
¿Qué necesito para hacer esto?
funcionalidad de brújula interna (para saber cuando apunta al norte – punto cero)
funcionalidad de giroscopio (para saber cuando está completamente plano – punto cero)
funcionalidad de hora (para cálculos a la hora de desplegar la sombra y si es que hay sombra – que pasa si lo ven bocaabajo)
funcionalidad básica de app (secciones, botonería, eventos, etc)
DISEÑO: si alguien se la rifa ayudándome con esto sería muy chido, sino ahí a ver qué hago.. hahaha
Un proyecto más a la lista, también es sencillo y ya usa un par de técnicas más avanzadas así que será un resultado divertido.
Para uno de mis proyectos (y lo más seguro es que para todos eventualmente) me encontré con la necesidad de poner un texto en un espacio más chico del total del texto, esto simple y sencillamente se soluciona habilitando un scrollbar.
La onda fue que al hacer uso del Componente que ya existe en flash de scrollbar me vino la duda si a la hora de enviarlo al iphone se vería de manera “nativa” o si mantendría el aspecto de flash. Al hacer las pruebas ví que mantenía el aspecto típico, y eso no me gustó nada porque le quita “usabilidad” (al no usar controles nativos a los que los usuarios ya se van acostumbrando – OJO gracias al desarrollo de apps para ios en flash y as3 se pueden recrear TODOS los controles que se quiera y a veces es bueno para innovar, pero en este caso es algo tan sencillo que no valía la pena recrearlo todo).
Busqué un rato en web y no encontré nada para iOS, hay muchos sí para AS3 pero simplemente para aplicaciones o web nada para mobile. Intenté trucar el componente que viene con flash y no sirvió de mucho, así que tuve que ponerme a hacer esto por código propio desde cero.
Resultó algo muy fácil, es una simple clase que al instanciar se le tienen que dar dos parametros: 1.- el movieclip origen (esto para que tenga acceso al stage y así pueda usar addChild) y 2.- la caja de texto a la que se le va a poner el scrollbar.
Notas.
Es deficiente en el sentido que no tiene animaciones fluídas para moverse ni para hacer fade in o fade out según su uso.
Nada más funciona en sentido vertical (con unos pocos cambios se puede hacer horizontal, pero en mobile nunca he visto eso).
Por ahora sólo funciona con TextField’s (con otros pocos cambios se le puede hacer funcionar con cualquier control/componente/movieclip).
Seguramente se puede eficientar el proceso y agregar un par de listener para que se integre aún mejor, pero con lo que es funciona y funciona muy bien.
Desde el constructor se puede controlar toda la “vista” o aspecto del scrollbar.
package {
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.*;
import flash.text.TextField;
public class ComponentVerticalScrollbar {
// ——- Constructor ——-
public function ComponentVerticalScrollbar(obj_home:MovieClip, obj_text_field:TextField, num_width:Number=5, num_round_w:Number=2, num_round_h=2, num_alpha:Number=.5, num_color:Number=0xCCCCCC) {
referencia_home = obj_home;
objeto_text_field = obj_text_field;
var number_position_x:Number = objeto_text_field.x + objeto_text_field.width ;
objeto_text_field.width -= 10;
var number_position_y:Number = objeto_text_field.y;
var num_height:Number = Math.floor(objeto_text_field.height / objeto_text_field.maxScrollV);
La idea es sencilla: al terminar de estacionar el coche abres en tu iphone la app, esperas que te geolocalice y luego marcas el lugar donde estás con el coche. Vas y haces lo tuyo (sea fiesta, trabajo, lo que sea..), cuando sales de tu “evento” prendes la app de nuevo en la opción de guía y te enseña una brújula con una flecha en dirección a tu coche.
¿Qué se necesita para hacer esto? (sin entrar a detalles de computadoras, aparatos y programas de desarrollo, sino más bien en cuanto a procesos)
funcionalidad de geolocalización (vía gps integrado en el smartphone)
funcionalidad de guardar datos en memoria
funcionalidad de transformar datos actuales de geolocalización contra datos fijados en una simple dirección
funcionalidad de aviso de ya llegamos
funcionalidad básica de app (cambiar secciones, botonería, eventos, etc)
En una actualización se puede agregar funcionalidad que te guíe tomando en cuenta calles y edificios (ya que esta versión seguro te pide que atravieses paredes para llegar directamente).
Es un proyecto sencillo, espero poder darme unas horas para llevarlo a cabo y tenerlo listo para luego subirlo al app Store y que lo puedan descargar y jugar con el.
Sin que el análisis tenga que ver con el enfoque de pago por suscripción, el autor del artículo termina diciendo que una de las empresas tomó la decisión de tratar a sus usuarios como personas con sentido común y como personas maduras en un mundo civilizado y eso geeneró frutos, mientras que las otras empresas que trataron a sus usuarios con falta de confianza, como si fueran a abusar de sus servicios no lo lograron.
Creo que poco a poco hemos llegado a un mundo en el que el diálogo y el respeto por el prójimo pueden más que la negligencia y la apatía – y como muchas otras veces, agradezco a un Internet libre y anárquico de tal logro – con lo cual se pueden crear (y recrear) proyectos pensando en las personas que los van a usar/requerir de otro modo.
Se ha recreado la manera de interactuar con los clientes
La forma no es nueva (tratar a las personas como personas no como ladrones) pero la libertad de actuar como personas “civilizadas” en Internet ha opacado los abusos típicos que se pueden dar (ojo no estoy diciendo que ya llegamos al paraiso – pero si quiero decir que el hecho es que ya hay destellos de verdadera fraternidad).
“The major problem – one of the major problems, for there are several – one of the many major problems with governing people is that of whom you get to do it; or rather of who manages to get people to let them do it to them. To summarize: it is a well known fact, that those people who most want to rule people are, ipso facto, those least suited to do it. To summarize the summary: anyone who is capable of getting themselves made President should on no account be allowed to do the job. To summarize the summary of the summary: people are a problem.”
Lo primero que tengo que decir es que aún no pruebo esto personalmente pero que en cuanto consiga mi plan de datos (vía 3G) lo llevaré a cabo y ahí les diré si era tan fácil como aqui lo voy a poner.
La idea general es así: con el iPad 3G (o con un iPhone y eventualmente si sacan un iPod Touch con 3G) se puede usar la señal de internet de la red de celular y compartirla con computadoras y otros gadgets (iPod Touch, etc.) así ya no se puede tener una red wifi que va contigo a todos lados (donde vaya el iPad o iPhone por supuesto).
Aunque los pasos suenan difíciles la verdad es que no lo son, primero los listaré y luego los explicaré:
Se necesita instalar una aplicación del tipo iProxy (no la iProxy que está en la appStore porque esa no es..) en el iPad. Este paso es el más difícil.
Crear una red con Ad Hoc con una computadora y conectar el iPad a la misma. Luego, desconectar todos los aparatos excepto el iPad.
Configurar el iPad para que sirva como router
Iniciar la app iProxy y configurarla
Conectar cualquier otro gadget a la red wifi y configurar su IP
Configurar un proxy para el gadget que se conecta (es solo una dirección en una forma no hay que aprender de esto)
Navegar
Ahora para la parte más detallada:
Instalar iProxy, lo que pasa es que se necesita una versión personalizada de iProxy para hacer esto ya que Apple no permite esta app así libre en la appStore, entonces hay que conseguir el codigo fuente, compilarlo e instalarlo. Esto se puede hacer directamente si se tiene cuenta de desarrollador de apps o con algún amigo que lo sea.
Esta parte es casi trivial y preferiría que busquen como hacerlo en Google (si no lo encuentran díganlo y lo pongo aqui)
Esto se logra configurando una IP fija de 10.0.0.1 y una mascara de red de 255.255.255.0 en el iPad
Debe de tener la IP fija que pusimos en el punto anterior y el puerto 8888 (tráfico de Internet)
Se puede seleccionar cualquier IP pero para rápido ejemplo ponerle 10.0.0.8 y submáscara de red de 255.255.255.0
Ya sea en el navegador o en el mismo firewall de windows o vía un http proxy se configura la dirección del mismo a: http://10.0.0.1:8080/socks.pac
Abrir alguna dirección web y comprobar que todo funcione.
Estuve leyendo que hay programas que se conectan a Internet sin usar tal configuración de proxy (Skype, etc.) entonces para eso se puede usar un programa de http proxy como Polipo para que todo el tráfico de Internet se canalice por ahí.
Así que bueno, se ve fácil, ya les diré como me va.
Cada vez que veo cosas que pasan que harían que me quejara me doy cuenta que a veces por falta de noción o “simple vista corta” podemos caer en acciones cuyo efecto puede ser tan culposo/causal como acciones tomadas a conciencia por aquellos que implican que “su manera de pensar es la única que se debe llevar a cabo”.
A veces he sido llamado ciertas cosas por ciertos comentarios, pero es porque mi manera de entender al mundo me ha hecho darme cuenta que aquellas personas que prefieren no “darse cuenta” o “hacerse pendejos” son tan culpables como aquellos que toman acciones deliberadas de abuso de poder.
Es a mi parecer que podemos crear un mundo conectado, abierto y con sistemas abiertos y sencillos de comunicación en el cual se critique a aquellos que abusan de ideales humanos para “no mover un dedo” y conseguir lo que quieren de la misma manera que aquellos que consideran al ser humano como un “número más en una estadística” y por lo tanto, lo digo y lo repetiré:
“Mientras sea capaz de usar este regalo que recibí (que llamaré razón) trataré de llevar a cabo acciones que promuevan el aprendizaje y uso del mismo para mejora de la condición de vida de todo aquello que se concibe con él.”
Saludos,
Gorka
P.D. – por favor si consideran abuso de genero el uso del pronombre “él” sientanse libres de cambiarlo arbitrariamente por “ella”
Así que siguiendo con la línea de análisis y pruebas para desarrollo de apps para iPhone, iPod Touch y iPad me puse a hacer unas pruebas de código de un proceso que me tenía “preocupado” (preocupado porque si no lo podía hacer con el paquete de flash implicaría que hasta para aplicaciones “sencillas” sería completamente necesaria una Mac – pero no).
Una parte que me parece muy interesante/importante de los nuevos desarrollos (incluyendo pero no sólo limitado a apps) es que tengan la posibilidad de descargar contenido actualizable vía otros medios (es decir descargan noticias, novedades, resumenes, marcadores, etc. de servicios web) y para esto es necesario poder hacer una llamada estilo REST desde la aplicación.
Mi duda era si el paquete de iPhone developer de flash cs5 tendría acceso a este tipo de peticiones (REST – que implican desde GET, POST, XML, SOAP, JSON, etc. a un web service o simplemente un script de respuesta) y la verdad es que sí se puede y es MUY sencillo, tan sencillo que aquí pongo el código de una llamada estilo “hello world”:
var variables:URLVariables = new URLVariables("var_envio=valor_envio");
var request:URLRequest = new URLRequest();
request.url = "http://www.[mi_dominio].com/";
request.method = URLRequestMethod.POST;
request.data = variables;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, completeHandler);
try{
loader.load(request);
} catch(error:Error){
trace("Unable to load URL");
}
function completeHandler(event:Event):void {
trace(event.target.data.var1);
}
Así de sencillo y lo bueno es que se pueden envíar variables para toma de decisiones de operación/negocio. Cabe decir que la manera de recibir variables es en formato de variables HTML (par variable=valor). Listo, con este tipo de llamadas posibles se puede crear una app que se actualiza vía un servicio y que muestra nuevos contenidos cada que la persona la abre y también se puede guardar información del usuario en un servidor (datos de registro, de estado, de uso, etc.) y así hasta conectar con otros servicios que tengan que ver con la app (imaginen un juego que necesita que uses al mismo tiempo app y computadora por ejemplo, en fin…).
Saludos,
Gorka
P.D. – lo siguiente que voy a averiguar es si se puede abrir un socket a un servidor y así tener una línea abierta para apps estilo juegos de cartas / chats – todo esto obviamente desde flash cs5 y su sdk para iphone.