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.
Application Stores
iPad, iPhone y la próxima revolución tecnológica
Como todo producto nuevo de Apple, a generado todo tipo de reacciones. Están los que ya quieren uno y lo van a encargar tan pronto como se pueda, y están los que no ven demasiado en qué les puede cambiar la vida (entre los que me incluyo).
Mis impresiones sobre el iPad
Mi primerimpresión es que no veo mucho la utilidad de un dispositivo de este tipo. No solo del iPad, me refiero a cualquier "tablet". Es demásido grande para llevarlo en el bolsillo, y creo que es poco práctico de usar, al menos comparado con un netbook.
Tampoco es cuestión de criticar a Apple, que en los últimos productos que ha lanzado al mercado ha tenido mucho éxito. En todo caso, aunque no sea un dispositivo que revolucione el segmento de mercado que ocupa (como lo hicieron el iPod y el iPhone), igual para Apple va a ser un buen negocio.
iPhone OS 3.2
El iPad viene con el mismo sistema operativo que el iPhone, al que se le hicieron algunos cambios para soportar pantallas más grandes.
Todas las aplicaciones que funcionan en el iPhone funcionan también en el iPad, en el tamaño normal o en pantalla completa.
Esta versión del sistema operativo todavía no está disponible para el iPhone, pero supongo que para marzo cuando empiecen a entregar las primeras iPad ya va a estar.
El próximo producto de Apple: iDock
Entonces, me animo a hacer una predicción...
¿Que pasa cuando combinamos un dispositivo que funciona muy bien y tiene mucha aceptación, con la posibilidad incorporada al sistema operativo para mostrar las aplicaciones en pantalla más grandes?
Además agreguemos a la ecuación que el hardware es cada vez más chico y más potente.
Apple (o algún otro), va a sacar en algún momento un dock que permita agregarle un teclado, ratón y pantalla (multitouch por supuesto) al iPhone, para poder usarlo como PC de escritorio.
En realidad no se si lo van a hacer, pero estaría bueno :) La posibilidad la tienen... De hecho, para el iPad ya existe:
La competencia
Obviamente Apple no es el único que puede hacer esto. La principal competencia podría venir de Google con su sistema operativo Android.
Es verdad que Google está trabajando tambien el el Chrome OS, pero esto es algo totalmente distinto. Sería un dispositivo portatil como lo es un teléfono móvil, pero con la posibilidad de colocarlo en un dock para usarlo como PC.
Conclusiones
Tal vez en iPad no vaya a disparar el uso de los "tablets", pero creo que le da a Apple otras posibilidades con respecto a otros productos como son el iPhone y el iPod Touch.
Creo que no va a pasar mucho tiempo hasta que los teléfonos móviles se conviertan en verdaderas computadoras personales. Va a estar bueno verlo. Readmore »»
Probando iWebKit
Desde que Fabián me mostró la aplicación que había hecho con jQTouch, tenía ganas de hacer alguna prueba de desarrollar aplicaciones web para el iPhone.
Estuve viendo un poco, pero como nunca hice nada con jQuery, me pareció que podía ser más simple probar con iWebKit, que se basa en HTML y CSS. Es decir, también usa JavaScript, pero yo no tengo que meterme con el código.
La verdad que me resultó muy sencillo de usar, y con relativamente poco esfuerzo se logra una aplicación que se ve casi como una aplicación nativa en el iPhone. En la prueba que hice, en realidad me faltaron algunos detalles como por ejemplo que no logré que los check box se vean bien, pero para ser una prueba quedó muy bien con muy poco esfuerzo.
Una de las cosas que dice iWebKit que soporta, son aplicaciones en modo full screen. Estas son aplicaciones Web, pero que se instalan como si fueran una aplicación nativa, y si bien corren dentro de Safari, no muestran las barras de navegación.
El problema que tiene iWebKit, es que el modo full screen funciona solamente para sitios de una sola página (no son tan raros... hoy en día con AJAX es bastante común).
Lo que me sorprende es que nadie haya encontrado un work arround a este problema, así que acá va el que encontré yo:
Para tener sitios de múltiples páginas con iWebKit que funcionan en modo full screen, en vez de hacer los links con
<a href="miPagina.html">link</a>se deben hacer con un poco de JavaScript
<a href="javascript:location.replace('miPagina.html');">link</a>Readmore »»
Viviendo en la nube
... que no es lo mismo que viviendo en las nubes, vale la aclaracion.
Creo que no es noticia para nadie, que cada vez es más fácil y más común tener datos en la nube.
Por eso es que Google está trabajando en Chrome OS, que si bien creo que todavía no es el momento, demuestra hacia donde va la industria.
En esta nota quería contar como ha sido mi experiencia y hacer una reseña de los servicios que uso.
Respaldo de datos
El primer uso que le di a la nube fue para respaldar datos. Originalmente respaldaba a CD, pero desde hace unos años respaldo todo a algún servicio en Internet.
El primero que usé fue XDrive que tenía 5GB de espacio, hasta que AOL decidió cancelar el servicio. Uno de los riesgos que tiene...
Actualmente uso Windows Live Skydrive que en este momento tiene 25GB de almacenamiento gratuito. Lo que respaldo ahí son básicamente fotos y videos, aunque también respaldo algún que otro archivo.
No tiene (hasta donde conozco), la posibilidad de sincronizar datos, pero de todas formas a este nivel no me interesa. Los archivos que tengo ahí los voy agregando de forma incremental.
Sincronización de archivos
La sincronización de archivos es otro tema, ya que en general las cosas que quiero tener sincronizadas son pocas.
Para esto, uso otro servicio llamado Dropbox, que tiene clientes para todos los sistemas operativos importantes (Windows, Mac, Linux), además de tener un cliente para el iPhone y de poder acceder mediante un navegador a travez de la página web.
Las cosas que tengo sincronizadas son por ejemplo un archivo con datos útiles, la lista de contraseñas (encriptada por supuesto), algunos PDFs para leer en el teléfono, etc.
Dropbox tiene 2GB de espacio en su versión gratuita, lo que es más que suficiente para el uso que le doy.
Además tiene la posibilidad de compartir archivos mediante el uso de una carpeta pública.
Correo electrónico
Cuando empecé el artículo, pensaba escribir como respaldo los datos del PC hacia Internet, pero en el caso del correo electrónico es al revés...
Para el correo personal, uso GMail, que con sus 7.5GB de espacio y aumentando todos los días, es más que suficiente, por lo menos por los próximos años.
Además en el PC tengo un cliente de correo, configurado con POP3 para que baje el mails desde la cuenta de GMail, y ahí me quedo con los correos que me interesa guardar. Si en algún momento desaparece GMail, al menos tengo los correos importantes.
Documentos
Con los documentos pasa más o menos lo mismo. Todavía tengo documentos que están locales y respaldo a Skydrive, pero cada vez más estoy empezando a mover las cosas a Google Docs, para poder accederlas desde cualquier lugar.
Un caso particular de documentos es el curriculum, que en algún momento mantenía actualizado en un .doc, pero actualmente si lo precisara, iría sin duda a buscar el de LinkedIn.
Calendario
Como calendario, uso Google Calendar (sí, otro servicio de Google...) que puedo ver en GMail y puedo sincronizar con el iPhone.
Contactos
Para respaldar los contactos, uso un sitio llamado myFunambol. El nombre no dice mucho, pero el servicio está bueno.
Ya lo usaba con el Sony Ericsson, y pasar los contactos al iPhone fue tan fácil como bajar la aplicación y apretar el botón "sincronizar".
Conclusión
Todo parece estar yendo hacia la nube, y creo que por una buena razón: es práctico.
Es práctico poder acceder mis archivos desde cualquier lugar, es práctico poder acceder al correo en cualquier momento, es práctico poder usar el calendario indistintamente en el PC y en el teléfono, es práctico tener los contactos sincronizados.
¿Alguien usa algún servicio adicional? ¿Han tenido la necesidad de usar algún servicio de estos o similar?
Buscar un elemento dentro de un SDT en GeneXus
En GeneXus, no hay una forma de buscar un elemento dentro de una colección (SDT), que no sea recorriendo toda la lista. Hay una función IndexOf, pero compara referencias y no el contenido de los elementos.
Ejemplo:
&esta = Boolean.FalseEsto no parece ser lo más elegante... No debería necesitar 7 líneas de código para saber si un elemento está en la colección, lo debería poder hacer en una sola línea.
for &depUbiItem in &depUbis
if &depUbiItem.DepId = &DepId and &depUbiItem.CicUbiId = &CicUbiId
&esta = Boolean.True
exit
endif
endfor
El problema es que dado un SDT, GeneXus no tiene forma de saber cuales son los elementos que quiero comparar. En el ejemplo, estoy comparando DepId y CicUbiId, pero el SDT tiene varios campos más.
Una posibilidad sería poder definirle comportamiento a los SDTs, de forma de poder decirle cual es la función de comparación que tengo que usar. Esta función de comparación se definiría una vez para el SDT, y siempre que se quiera buscar un elemento se haría usando este comparador.
Otra opción que me gustaría más, es poder definir on-line la función de comparación. En C# por ejemplo, usando lambda expressions, quedaría algo así:
bool esta = depUbis.Exists(d => ((d.DepId = depId) && (d.CicUbiId = cicUbiId)));O escribiendolo como me gustaría verlo en GeneXus:
&esta = &depUbis.Exists(d => d.DepId = &DepId and d.CicUbiId = &CicUbiId)Esto se lee "existe un elemento d en la colección &depUbis que cumple que d.DepId = &DepId y d.CicUbiId = &CicUbiId".
Las colecciones en C# definen otras funciones que también sería intereante tener, como ser:
- First: devuelve el primer elemento que cumple con la condición
- Where: devuelve otra colección con los elementos que cumplen con la condición
- Select: permite hacer una proyección, devuelve otra colección pero de otro tipo
Atributos y controles como parámetro en GeneXus
Capaz que el título no dice mucho, es dificil explicar lo que quiero en una línea...
Todos sabemos que es una buena práctica de programación, reutilizar código siempre que sea posible. En GeneXus X con los data selectors se dio un gran paso, pero hay cosas que me siguen faltando.
Por ejemplo, tengo el siguiente código que borra los datos de tablas referenciadas, cuando borro una determinada entidad (sí, seguro que es más prolijo hacer un Business Component y borrar con eso, pero no es el punto).
¿Se ve el patrón de código repetido? El problema es que no tengo forma de unificar el código en un procedimiento o subrutina, de forma de pasarle solamente el atributo que va en el defined by.
Seguramente no es fácil de implementar, pero sería interesante.
Otro caso donde pasa algo similar, es con los controles en pantalla.
Por ejemplo, recibo unas variables por parámetro, si vienen cargadas las muestro en el form deshabilitadas, y si no las muestro habilitadas.
El código es el siguiente:
Otra vez, creo que es fácil ver el patrón en el código, y otra vez no tengo forma de hacer algo genérico, que reciba dos variables (el parámetro y la variable que tengo en el form), y le aplique la lógica...
Capaz que este caso es más sencillo de implementar que el otro, porque no cambia la forma en que navega el programa. Readmore »»
Lo que le falta al Chrome OS
Primero que nada, quiero aclarar que no he usado Chrome OS... lo que sigue es más bien una reflexión.
Y no lo he probado, porque creo que no aporta nada nuevo. Es decir muchas de las cosas que hago con un PC, las podría hacer con aplicaciones Web corriendo en Chrome OS, pero hay una actividad que hoy (creo) no se puede hacer: desarrollar software.
El problema es que mientras que los desarrolladores no se sientan atraidos a la nueva plataforma, no van a surgir desarrollos optimizados para Chromes OS, lo que se transforma en un círculo vicioso porque los usuarios no van a ver el valor de cambiar a un sistema operativo que no les aporta nada nuevo.
Claro que tiene sus ventajas (levanta mucho más rápido que cualquier otro PC, está enfocado a la Web que hoy por hoy es lo que más usan los usuarios, los equipos pueden ser más baratos, etc.), pero todavía está por verse que adopción va a tener.
Creo que en algún momento Google va a tener que liberar un conjunto de herramientas Web para desarrollar software, para que los desarrolladores puedan usar la plataforma a la que estarían apuntando. Tal vez algo como Bespin de Mozilla Labs, aunque seguramente debería ser algo un poco más avanzado, no solo un editor de texto.
Va a ser interesante de ver...








