Versión movil del blog
En particular, puede crear una versión móvil de cualquier blog sin ningún esfuerzo, y además lo hace de forma gratuita. Lo único es que agrega publicidad, pero creo que es un precio que vale la pena pagar.
A partir de este momento, este blog puede ser accedido desde cualquier teléfono móvil con acceso a internet desde http://marcoscrispino.mofuse.mobi
Si acceden a esa dirección desde una computadora, muestra una página web con un emulador...
Así es como se ve en el iPhone:
Readmore »»
Infinidad de galaxias
Esta imagen es increible, no deja de sorprenderme:
Fue tomada por el Hubble, apuntando hacia una zona aparentemente "vacía" del espacio, una región que ocupa aproximadamente el ancho de 1/15 del ancho de la luna llena.
A ver si logro compartir mi asombro... Se necesitan 30 millones de imágenes como esta para cubrir todo el cielo, y esta imagen fue tomada en una zona del espacio que se consideraba prácticamente vacía!
Pero para que lo voy a explicar yo, si Phil Plait lo explica mucho mejor...
También me gustó este articulo que habla del tema, sobre todo la referencia de Carl Sagan al final sobre "the Pale Blue dot".
Nota: tener en cuenta que "one billion" es 109. Readmore »»
En busca de código repetido
Uno de los problemas que más me quitan el sueño en los últimos tiempos, es el código repetido.
¿Por qué tener código repetido es un problema? La respuesta creo que es conocida por todos. El problema es que eventualmente las distintas versiones que se tienen se terminan desfazando, y empiezan a aparecer errores por tocar solo una. Además después de un cierto tiempo, es muy difícil saber cual de todas las versiones es la correcta, porque en general los cambios no se hacen en todas parejo.
Entonces, ¿cuanto código repetido es aceptable? Esta pregunta indudablemente es más abierta, y pueden haber diferentes criterios. ¿Una línea de código duplicada está bien?
Por ejemplo, si tengo el siguiente código (GeneXus 9.0), ¿está bien?:
if DocImpres = 'S'Nótese que los dos call al procedure GLog son idénticos... Además, los literales 'OC' y 'CMANUDOCOC' se usan varias veces en el código...
call(WGLLogDe,&msg1, &msg2, 'OC', 'CMANUDOCOC', &GlLogRef, '', &confirmo)
if &confirmo = 'N'
Call(PGLog, &msg1, &msg2, 'OC', 'CMANUDOCOC', &GlLogRef, '', &PedirDet)
endif
else
Call(PGLog, &msg1, &msg2, 'OC', 'CMANUDOCOC', &GlLogRef, '', &PedirDet)
endif
Haciendo algunos cambios al programa para eliminar estas repeticiones, llegamos a algo así:
&logGrabado = 'N'¿Es mejor que el código anterior? Yo creo que sí, pero seguramente para un caso tan simple haya discrepancias...
&GLLogSis = 'OC'
&TpoModId = 'CMANUDOCOC'
if DocImpres = 'S'
&logGrabado = udp(WGLLogDe, &msg1, &msg2, &GLLogSis, &TpoModId, &GlLogRef, '')
endif
if &logGrabado = 'N'
Call(PGLog, &msg1, &msg2, &GLLogSis, &TpoModId, &GlLogRef, '', '')
endif
Pienso que cuando se trata de 2 o más líneas de código es más fácil estar de acuerdo que no es bueno tener dicho código repetido.
Ahora, el problema, es como detectar esta situación.
Cuando el código repetido está dentro del mismo objeto, entonces es bastante fácil de detectar. No es trivial cuando se tienen programas grandes (más de 500 líneas por ejemplo), pero es posible.
El mayor problema es cuando el código repetido está en varios objetos. En esos casos no es para nada fácil de detectar.
Pienso que se podría automatizar, aunque no parece ser trivial. Algunas heurísticas que se me ocurre se podrían utilizar:
- Analizar las navegaciones de los objetos, para ver si hay navegaciones iguales. Esos objetos son candidatos a analizar. No necesariamente quiere decir que se pueda mejorar el código, pero sí vale la pena revisarlo.
- En general cuando se da que hay código repetido, el mismo está en el entorno de la llamada a un objeto, o en torno al uso de un determinado atributo. Por ejemplo, tengo un procedimiento que me devuelve un valor, y luego hago algo con dicho valor, pero en varios lugares lo que hago es exáctamente lo mismo...
Augmented Reality
La "realidad aumentada" (augmented reality en inglés) parece ser el tema del momento.
Básicamente, consiste en mostrar información obtenida de Internet sobre objetos reales: un edificio, un libro, etc.
Hoy vi una notica (en algún lado que ahora no me acuerdo) sobre un nuevo producto llamado Recognizr, que permite ver información asociada a una persona mediante una foto tomada con el teléfono móvil.
Otro producto que parece estar muy bueno es Google Goggles:
Creo que nadie puede dudar que en los próximos tiempos vamos a ver mucha innovación en esta área. Lo único que me precupa es que parece que todas las aplicaciones interesantes funcionan en Android...
Índice de los arrays
Ayer empecé a leer Dreaming in Code, que en una parte dice:
Maybe you noticed that I've called this Chapter 0. I did not mean to make an eccentric joke but, rather, to tip my hat to one small difference between computer programmers and the rest of us: Programmers count from zero, not from one. [...]Si bien no es del todo cierto, yo soy un programador y cuento desde el uno, es verdad que las computadoras cuentan desde el cero...
Why do programers count from zero? Because computers count from zero! And so programmers train themselves to count that way too, [...]
Cualquiera que haya programado un loop sobre los elementos de un array en C, C++, Java, C#, o cualquier otro lenguaje que tenga sus raíces en C, sabe que los elementos van de 0 a lenght-1. Algo así:
for (int i = 0; i < array.length; i++) { ... }Lo que nunca me había cuestionado, es por qué es así... Y después de pensarlo un poquito, la respuesta es bien simple: en C, los arrays son punteros a una dirección de memoria, que contiene el primer elemento. El índice es el desplazamiento con respecto al puntero. Así, para acceder al primer elemento del array, el desplazamiento a usar es cero, y por eso se accede con a[0]. Todos los lenguajes que vinieron atrás de C, aunque no manejen punteros directamente, mantienen la misma convención.
Toda una revelación :) Readmore »»
Google Buzz y el futuro de las redes sociales
Por si alguno estaba distraído, acá es el video de introducción que explica que es y como funciona:
Es una red social, porque puedo compartir mensajes, fotos, videos, etc. desde la aplicación, pero también es un agregdor de contenido. Me hace acordar mucho a FriendFeed. Pero en este caso, tiene la ventaja que ya tiene una base de unos 140 millones de usuarios, gracias a que está integrado a GMail.
Google además ya tiene otros productos que se solapan, como ser Orkut, Wave o los elementos compartidos en Reader. Veremos como evoluciona cada uno de estos.
Pero más que hablar de Buzz, me interesa hacer una reflexión sobre las redes sociales en general.
El problema que le veo, es que cada vez hay más contenido y cada vez hay más lugares donde tengo que ir a buscarlo. No solo eso, también hay mucho contenido repetido.
Por ejemplo, esta nota, por haberla publicado en el blog, queda automáticamente en el feed RSS del mismo, por lo que todos los que estén suscriptos lo van a ver por ahí. Además, tengo configurado para que se publique automáticamente en Twitter, que a su vez se publica en Facebook, FriendFeed y ahora Google Buzz (por lo menos, eso son los que me acuerdo ahora).
Es verdad que no todo el mundo publica todo cruzado, pero tampoco soy el único. Cualquiera que siga el blog por RSS y además sea mi amigo en Facebook, va a ver la nota dos veces. Si además me sigue en Twitter, 3 veces...
Lo que necesitamos no es una nueva red social. Esa es la estrategia que le sirve a Google para tener un pedacito del "real-time web", pero no nos sirve a los usuarios.
Lo que necesitamos es un agregador que permita registrarse a varias redes sociales a la vez, y compartir la información con mis contactos una sola vez, sin importar donde estén.
Estoy pensando en algo como lo que ya existe para la mensajería instantanea (por eso uso Pidgin, pero esa es otra historia), que me conecto a varias redes, tengo todos los contactos juntos, y cuando quiero hablar con uno no me importa en que red está, simplemente le doy doble-click y empiezo a escribir.
Para las redes sociales necesitamos algo similar, que pueda hacer todo desde un solo cliente, y que no me importe en que red está mi amigo, simplemente tiene que funcionar. Si mi amigo publica algo y yo quiero hacer un comentario, poder hacerlo donde sea que se haya publicado, sin siquiera enterarme. Readmore »»
Application Stores
Parece que el tema de las App Stores está de moda...
Ahora parece que Google suma una nueva, para aplicaciones que se integren a Google Apps (mail, docs, calendario, etc.).
El negocio es siempre el mismo: el dueño de la tienda pone a la venta aplicaciones de terceros, y cuando un usuario compra la aplicación, una parte va para el desarrollador y la otra para la empresa.
La ventaja que tiene, viéndolo desde el punto de vista del desarrollador, es que la aplicación queda a la venta y accesible para cualquier usuario, sin tener que invertir en infraestructura ni preocuparse demasiado por el medio de pago y demás.
Esta posibilidad de acceder a un número importante de usuarios, ha hecho que por ejemplo en la App Store de Apple, las aplicaciones valgan (en su mayoría), unos pocos dólares. Esto hace que haya muchos usuarios que las compran...
¿A que voy? Sería muy bueno tener una GeneXus App Store, para user controls, extensions, patterns, etc.
Esta idea en realidad ya se había planteado, Enrique ya lo ha comentado, y si no recuerdo mal, José Lamas también comento algo de esto en su charla del Encuentro GeneXus 2008.
En realidad con el tema infraestructura ya están bastante bien, con la GeneXus Gallery, pero le estaría faltando el tema comercial.








