lunes, febrero 22, 2010

Java "pasa por valor"

Nota: Aclaro que no soy un experto, y que me encuentro en constante aprendizaje, es por eso mismo que escribo esta breve nota que es más que todo un recordatorio personal, y que quizás la sirva a más de algún programador para aclarar el concepto.

Hace unos dias me puse a depurar un problema, que tenia que ver con pasar una cadena como parámetro en un método (primer error, porque las cadenas en Java son inmutables, cosa de la que hablare más adelante). En el metodo se modificaba el contenido de la cadena, e incorrectamente supuse que esa modificación se mantendría al terminar el método, por aquella frase (que muchos equivocadamente citan), que dice que en Java:
"Los tipos de datos primitivos se pasan por valor, y los objetos por referencia".
Vaya sorpresa me lleve, al darme cuenta que esta afirmacion era incorrecta. Los terminos "pasar por valor" y "pasar por referencia", tienen significados muy precisos, y usualmente se abusa de sus definiciones, o en mi caso se entienden o asumen equivocadamente.

"Pass by what?" 

Buscando aclarar mi duda, encontré en el sitio Javadude.com, una excelente explicación con ejemplos prácticos que demuestran claramente que Java "pasa por referencia", es una lectura casi obligatoria que recomiendo mucho. Cito las definiciones de los términos en cuestión, encontradas en el sitio que mencione anteriormente con traducciones propias (cualquier sugerencia para mejorar la legibilidad del texto es bienvenida) por motivos aclaratorios:
Pasar por Valor (Pass-by-value):
"El parámetro actual (o expresión) que se pasa como argumento al método se evalúa completamente, y el valor resultante de esta evaluación se copia en la ubicación de memoria que tenia el parámetro anterior a la ejecución del método. Esa ubicación es típicamente una porción de memoria en la pila de ejecucion de la aplicación (que es como Java lo maneja), pero otros lenguajes pueden elegir una forma de almacenamiento de parámetros diferente."
Texto Original: "The actual parameter (or argument expression) is fully evaluated and the resulting value is copied into a location being used to hold the formal parameter's value during method/function execution. That location is typically a chunk of memory on the runtime stack for the application (which is how Java handles it), but other languages could choose parameter storage differently."

Pasar por referencia (Pass-by-reference)
"El parámetro (en el método) actúa meramente como un alias para el parámetro actual (que esta afuera del método). En cualquier momento que el método utiliza el parámetro (para leerlo o escribir en el), se esta utilizando en realidad el parámetro actual (el que esta afuera del método).
Texto original: "The formal parameter merely acts as an alias for the actual parameter. Anytime the method/function uses the formal parameter (for reading or writing), it is actually using the actual parameter."
Para puntualizar, Java es estrictamente "Pasar por valor", como C (no como C++, que si soporta pasar por valor y por referencia, vean esta comparacion en la semantica entra Java y C++. Y esto lo podemos encontrar en la Java Language Specification  (JSL) en: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.1:
"Cuando un método o constructor se invoca, los valores del argumento o expresión actual inicializan nuevas variables como parámetro, cada una del tipo de dato declarado, antes de la ejecucion del cuerpo del método o constructor. El identificador que aparece en el "DeclaratorId" puede ser usado como un simple nombre en el cuerpo del metodo o constructor para referirse al parámetro formal."

Texto original: "When the method or constructor is invoked, the values of the actual argument expressions initialize newly created parameter variables, each of the declared Type, before execution of the body of the method or constructor. The Identifier that appears in the DeclaratorId may be used as a simple name in the body of the method or constructor to refer to the formal parameter."
En pocas palabras:
Java tiene apuntadores y ademas es estrictamente "Pasa por Valor".
Tener la idea de que Java pasa datos por referencia, es más común de lo que imagine, me tome la libertad de preguntar sobre esta caracteristica a varios amigos programadores con más experiencia que yo (5) y solo uno tenia claro el concepto....

"... de pronto senti que Java era maligno."

Y no es que ellos no sepan como funciona Java, porque a la hora de programar, o de aclarar la idea, era fácil ver como algunos terminaban asintiendo y cambiando de parecer. Es simplemente una característica que se olvida, y que creo que es peligroso que eso suceda (que se olvide), por lo que me tomo la libertad de escribir un poco sobre ella, esperando que a más de alguno le sirva, o que si ya lo sabían que simplemente lo recuerden.

No se olviden de leer el articulo de Javadude.com es realmente muy, pero muy bueno, especialmente si quieren ver ejemplos aclaratorios.
Saludos!

Java "pasa por valor"

Nota: Aclaro que no soy un experto, y que me encuentro en constante aprendizaje, es por eso mismo que escribo esta breve nota que es más que todo un recordatorio personal, y que quizás la sirva a más de algún programador para aclarar el concepto.

Hace unos dias me puse a depurar un problema, que tenia que ver con pasar una cadena como parámetro en un método (primer error, porque las cadenas en Java son inmutables, cosa de la que hablare más adelante). En el metodo se modificaba el contenido de la cadena, e incorrectamente supuse que esa modificación se mantendría al terminar el método, por aquella frase (que muchos equivocadamente citan), que dice que en Java:
"Los tipos de datos primitivos se pasan por valor, y los objetos por referencia".
Vaya sorpresa me lleve, al darme cuenta que esta afirmacion era incorrecta. Los terminos "pasar por valor" y "pasar por referencia", tienen significados muy precisos, y usualmente se abusa de sus definiciones, o en mi caso se entienden o asumen equivocadamente.

"Pass by what?" 

Buscando aclarar mi duda, encontré en el sitio Javadude.com, una excelente explicación con ejemplos prácticos que demuestran claramente que Java "pasa por referencia", es una lectura casi obligatoria que recomiendo mucho. Cito las definiciones de los términos en cuestión, encontradas en el sitio que mencione anteriormente con traducciones propias (cualquier sugerencia para mejorar la legibilidad del texto es bienvenida) por motivos aclaratorios:
Pasar por Valor (Pass-by-value):
"El parámetro actual (o expresión) que se pasa como argumento al método se evalúa completamente, y el valor resultante de esta evaluación se copia en la ubicación de memoria que tenia el parámetro anterior a la ejecución del método. Esa ubicación es típicamente una porción de memoria en la pila de ejecucion de la aplicación (que es como Java lo maneja), pero otros lenguajes pueden elegir una forma de almacenamiento de parámetros diferente."
Texto Original: "The actual parameter (or argument expression) is fully evaluated and the resulting value is copied into a location being used to hold the formal parameter's value during method/function execution. That location is typically a chunk of memory on the runtime stack for the application (which is how Java handles it), but other languages could choose parameter storage differently."

Pasar por referencia (Pass-by-reference)
"El parámetro (en el método) actúa meramente como un alias para el parámetro actual (que esta afuera del método). En cualquier momento que el método utiliza el parámetro (para leerlo o escribir en el), se esta utilizando en realidad el parámetro actual (el que esta afuera del método).
Texto original: "The formal parameter merely acts as an alias for the actual parameter. Anytime the method/function uses the formal parameter (for reading or writing), it is actually using the actual parameter."
Para puntualizar, Java es estrictamente "Pasar por valor", como C (no como C++, que si soporta pasar por valor y por referencia, vean esta comparacion en la semantica entra Java y C++. Y esto lo podemos encontrar en la Java Language Specification  (JSL) en: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.1:
"Cuando un método o constructor se invoca, los valores del argumento o expresión actual inicializan nuevas variables como parámetro, cada una del tipo de dato declarado, antes de la ejecucion del cuerpo del método o constructor. El identificador que aparece en el "DeclaratorId" puede ser usado como un simple nombre en el cuerpo del metodo o constructor para referirse al parámetro formal."

Texto original: "When the method or constructor is invoked, the values of the actual argument expressions initialize newly created parameter variables, each of the declared Type, before execution of the body of the method or constructor. The Identifier that appears in the DeclaratorId may be used as a simple name in the body of the method or constructor to refer to the formal parameter."
En pocas palabras:
Java tiene apuntadores y ademas es estrictamente "Pasa por Valor".
Tener la idea de que Java pasa datos por referencia, es más común de lo que imagine, me tome la libertad de preguntar sobre esta caracteristica a varios amigos programadores con más experiencia que yo (5) y solo uno tenia claro el concepto....

"... de pronto senti que Java era maligno."

Y no es que ellos no sepan como funciona Java, porque a la hora de programar, o de aclarar la idea, era fácil ver como algunos terminaban asintiendo y cambiando de parecer. Es simplemente una característica que se olvida, y que creo que es peligroso que eso suceda (que se olvide), por lo que me tomo la libertad de escribir un poco sobre ella, esperando que a más de alguno le sirva, o que si ya lo sabían que simplemente lo recuerden.

No se olviden de leer el articulo de Javadude.com es realmente muy, pero muy bueno, especialmente si quieren ver ejemplos aclaratorios.
Saludos!

sábado, febrero 20, 2010

Starcraft II: Zerg's vrs Protoss

El sitio gametrailers.com ha publicado durante este semana una serie de videos de StarCraft II -en su versión beta -. El siguiente vídeo muestra el desarrollo de una partida en la que intervienen la raza Protoss y Zerg. Espero lo disfruten y admiren la calidad de gráficos de esta nueva entrega.


Video del "gameplay" de StarCraft II, cortesía de gametrailers.com

Starcraft II: Zerg's vrs Protoss

El sitio gametrailers.com ha publicado durante este semana una serie de videos de StarCraft II -en su versión beta -. El siguiente vídeo muestra el desarrollo de una partida en la que intervienen la raza Protoss y Zerg. Espero lo disfruten y admiren la calidad de gráficos de esta nueva entrega.


Video del "gameplay" de StarCraft II, cortesía de gametrailers.com

miércoles, febrero 17, 2010

RecordMyDesktop: Grabando El Escritorio Desde "Linux"

Hace unos días necesitaba "grabar" ciertas actividades realizadas desde el escritorio de lo que llamaré "mi computadora", la cual utiliza Linux Mint - Felicia como sistema operativo. Debido a mi poca experiencia con Distribuciones Linux pensé que esta tarea sería muy difícil de completar, sino es que imposible! - en resumen  pensé que probablemente moriría en el intento - . 

Representación gráfica de lo que pasó por mi mente.

Afortunadamente descubrí que existe una diversidad de aplicaciones que permiten grabar nuestro escritorio desde plataformas Linux:
Puedes visitar los enlaces oficiales para obtener más información sobre cada uno, el único que he utilizado es recordMyDesktop. Al inicio me sorprendió -y abrumó-  ver que era una aplicación que funciona en línea de comandos, para aumentar mi sorpresa -y disminuir "el abrumo"- encontré una aplicación llamada gtk-recordMyDesktop que actúa como interfaz gráfica de recordMyDesktop. 

gtk-recordMyDesktop corriendo en "mi computadora".

(gtk)-RecordMyDesktop está disponible en los repositorios de la mayoría de distribuciones Linux más populares, o bien, se puede descargar el código fuente desde el sitio web oficial. En lo personal me siento muy satisfecho con el desempeño de la aplicación, aunque al principio se puede tener la impresion de que es muy pobre en cuanto a opciones disponibles. Sin embargo, se ha comportado de manera muy estable, simplemente haciendo lo que tiene que hacer -grabar mi escritorio- lo cual vuelve un espejismo la necesidad de más opciones de configuración. Uno de los aspectos mas notorios es la transparencia con que se ejecuta, ya que no se percibe una disminución sustancial en el rendimiento de la computadora mientras realiza el proceso de grabado. No obstante, si se selecciona la opción para codificar el vídeo "al vuelo" -es decir, mientra se graba- probablemente la historia no sea la misma, por eso mi recomendación personal es configurar la aplicación para que codifique el vídeo al finalizar la sesión de grabado.

Espero que mi experiencia sea de utilidad para ustedes y les recomiendo que si tienen un poco de tiempo libre puedan visitar los enlaces de las aplicaciones listadas anteriormente y "travesiarlas". Les recuerdo que sus comentarios son bienvenidos. Hasta la próxima.

RecordMyDesktop: Grabando El Escritorio Desde "Linux"

Hace unos días necesitaba "grabar" ciertas actividades realizadas desde el escritorio de lo que llamaré "mi computadora", la cual utiliza Linux Mint - Felicia como sistema operativo. Debido a mi poca experiencia con Distribuciones Linux pensé que esta tarea sería muy difícil de completar, sino es que imposible! - en resumen  pensé que probablemente moriría en el intento - . 

Representación gráfica de lo que pasó por mi mente.

Afortunadamente descubrí que existe una diversidad de aplicaciones que permiten grabar nuestro escritorio desde plataformas Linux:
Puedes visitar los enlaces oficiales para obtener más información sobre cada uno, el único que he utilizado es recordMyDesktop. Al inicio me sorprendió -y abrumó-  ver que era una aplicación que funciona en línea de comandos, para aumentar mi sorpresa -y disminuir "el abrumo"- encontré una aplicación llamada gtk-recordMyDesktop que actúa como interfaz gráfica de recordMyDesktop. 

gtk-recordMyDesktop corriendo en "mi computadora".

(gtk)-RecordMyDesktop está disponible en los repositorios de la mayoría de distribuciones Linux más populares, o bien, se puede descargar el código fuente desde el sitio web oficial. En lo personal me siento muy satisfecho con el desempeño de la aplicación, aunque al principio se puede tener la impresion de que es muy pobre en cuanto a opciones disponibles. Sin embargo, se ha comportado de manera muy estable, simplemente haciendo lo que tiene que hacer -grabar mi escritorio- lo cual vuelve un espejismo la necesidad de más opciones de configuración. Uno de los aspectos mas notorios es la transparencia con que se ejecuta, ya que no se percibe una disminución sustancial en el rendimiento de la computadora mientras realiza el proceso de grabado. No obstante, si se selecciona la opción para codificar el vídeo "al vuelo" -es decir, mientra se graba- probablemente la historia no sea la misma, por eso mi recomendación personal es configurar la aplicación para que codifique el vídeo al finalizar la sesión de grabado.

Espero que mi experiencia sea de utilidad para ustedes y les recomiendo que si tienen un poco de tiempo libre puedan visitar los enlaces de las aplicaciones listadas anteriormente y "travesiarlas". Les recuerdo que sus comentarios son bienvenidos. Hasta la próxima.

domingo, febrero 14, 2010

Facebook vs Google vs Twitter

Estas semanas de febrero se han puesto muy interesante Internet. Google y Facebook estan entablando una acalorada batalla para almacenar, guardar y POSEER cada aspecto de las actividades e informacion personal de sus usuario. Michael Arrignton dice que Facebook esta retando a Gmail en su mercado, con el desarrollo de su propio servicio de correo, tiene sentido, es una progresión natural y lógica para Facebook. Ellos tienen la infraestructura, la tecnología y más importante... un grupo de 400 millones de usuarios que no dudaran mucho en utilizar el "@facebook.com" como correo principal (estadísticas de Facebook acá).
Luego Google lanza su servicio Buzz... muchos sugieren que es la respuesta ante el aparente fracaso de Google Wave. Otros que es un intento de competencia contra Twitter. Como todos se estarán imaginando, Google esta intentando incursionar en el mercado de redes sociales.

"Lanzamiento de Buzz"

Google al igual que Facebook, tienen la infraestructura, la tecnología y también a los usuarios. Sin embargo, la dificultad para Google, es el nicho de sus servicios, por ejemplo:
  • ¿A que vas cuando abres una cuenta en Gmail? fácil: vas a abrir una cuenta de correo.
  • ¿Porque abres una cuenta en Facebook? para mantenerme en contacto con viejos amigos, publicar fotos, compartir videos, jugar en linea y demás interacción social.
  • ¿Y a Twitter? al menos yo, porque quiero estar informado de todo, lo más pronto posible.
Son servicios diferentes para necesidades diferentes. Wave no fue un hit de popularidad porque aparte de que "se siente" lento, y tiene características totalmente innecesarias (como ver lo que la persona escribe en tiempo real ¿para ver sus errores de ortografía mientras escribe? ) no es lo suficientemente bueno como para convertirse en un reemplazo de Gmail, y además tenias que utilizar "otra cosa", era una pestaña más o una cuenta más... Wave tiene cosas buenas, no digo lo contrario, pero lo bueno en este caso, no supera al "antecesor", en otras palabras, el "alumno" NO supero al "maestro".

"Wave is a mess..."

Wave es una aplicación web diseñada en donde se espera que de sus usuarios (nuevos) emerja una red social, lo cual fue un error.

Entonces viene Google, y responde con un nuevo servicio después del Wave, algo similar, y lo simplifica y crea el Buzz. Unos lo tildan de producto genial y otros de rotundo fracaso. Si tendrá o no éxito, es una cuestión muy subjetiva. Muchos van a coincidir con el amigo @dokshor, que me decía: "ya esta repartida la torta hace rato".
Yo por mi parte, creo que el Buzz será muy utilizado (pero no masivo) por el simple hecho de que ya esta integrado con Gmail, y si no lo quieres, solo le das clic a un pequeño vinculo para deshabilitarlo:

"Apaga el Buzz"

Lo que quiero recalcar, es que es una "funcionalidad extra", como el "chat" que tiene Gmail, Buzz es un plus para Gmail. Habrá mucha gente que lo use, solo por que esta ahí, esta habilitado y no hay necesidad de abrir otra ventana aparte en el navegador. Ese es el poder del "default", este poder es tan grande, que mantiene a los usuarios usando Internet Explorer porque simplemente ya esta instalado en su computadora. Los hace utilizar el Messenger, porque creen que solo con eso se puede chatear. Y hace que Canonical haga un trato para que el Firefox (que viene instalado en Ubuntu), para que utilize a Yahoo! en vez de Google como buscador predeterminado (y hace que Yahoo! pague $$$ por ese pequeño cambio).

Asi mismo, este fenómeno ocurrirá con el correo de facebook. Yo personalmente no lo usaría, realmente me gusta Gmail, no veo razón para dejarlo, pero muchos lo harán porque les resultará mejor tener "Facebook + Correo" en un "solo lugar".

"Solo esperemos que Facebook haga un mejor trabajo con su sistema de correo,
del que ha hecho hasta ahora"

Con Buzz no es de esperar el mismo fenómeno que caracteriza a Twitter: usuarios con cuatro millones de followers (¿alguien realmente le pone atención? ¿tiene algo bueno que decir?), comunidades vibrantes, o "ríos de informacion" para mantenerme al tanto de las ultimas noticias y tener "cierto" grado de interacción social. No creamos que miles de usuarios dejen de usar Twitter para "Buzzear" (lo dejan ellos solos).
Lo que si podemos esperar de Buzz es una interacción "menos masiva", y más integrada y personal (con el cruce de contactos de Gmail y GTalk), algo así como un Blipea, pero solo para los amigos de siempre en Gmail. Desde esa perspectiva, Buzz si es atractivo.
"Buzz no es un Twitter killer, es un plus para Gmail."
Ahora lo que realmente me interesaría saber, es ¿cuantas personas dejaran de usar Gmail, Yahoo! o Msn, para utilizar el @facebook.com como correo principal? ¿Y donde estan los viejos gigantes, y que estaran preparando para competir por los usuarios?

Facebook vs Google vs Twitter

Estas semanas de febrero se han puesto muy interesante Internet. Google y Facebook estan entablando una acalorada batalla para almacenar, guardar y POSEER cada aspecto de las actividades e informacion personal de sus usuario. Michael Arrignton dice que Facebook esta retando a Gmail en su mercado, con el desarrollo de su propio servicio de correo, tiene sentido, es una progresión natural y lógica para Facebook. Ellos tienen la infraestructura, la tecnología y más importante... un grupo de 400 millones de usuarios que no dudaran mucho en utilizar el "@facebook.com" como correo principal (estadísticas de Facebook acá).
Luego Google lanza su servicio Buzz... muchos sugieren que es la respuesta ante el aparente fracaso de Google Wave. Otros que es un intento de competencia contra Twitter. Como todos se estarán imaginando, Google esta intentando incursionar en el mercado de redes sociales.

"Lanzamiento de Buzz"

Google al igual que Facebook, tienen la infraestructura, la tecnología y también a los usuarios. Sin embargo, la dificultad para Google, es el nicho de sus servicios, por ejemplo:
  • ¿A que vas cuando abres una cuenta en Gmail? fácil: vas a abrir una cuenta de correo.
  • ¿Porque abres una cuenta en Facebook? para mantenerme en contacto con viejos amigos, publicar fotos, compartir videos, jugar en linea y demás interacción social.
  • ¿Y a Twitter? al menos yo, porque quiero estar informado de todo, lo más pronto posible.
Son servicios diferentes para necesidades diferentes. Wave no fue un hit de popularidad porque aparte de que "se siente" lento, y tiene características totalmente innecesarias (como ver lo que la persona escribe en tiempo real ¿para ver sus errores de ortografía mientras escribe? ) no es lo suficientemente bueno como para convertirse en un reemplazo de Gmail, y además tenias que utilizar "otra cosa", era una pestaña más o una cuenta más... Wave tiene cosas buenas, no digo lo contrario, pero lo bueno en este caso, no supera al "antecesor", en otras palabras, el "alumno" NO supero al "maestro".

"Wave is a mess..."

Wave es una aplicación web diseñada en donde se espera que de sus usuarios (nuevos) emerja una red social, lo cual fue un error.

Entonces viene Google, y responde con un nuevo servicio después del Wave, algo similar, y lo simplifica y crea el Buzz. Unos lo tildan de producto genial y otros de rotundo fracaso. Si tendrá o no éxito, es una cuestión muy subjetiva. Muchos van a coincidir con el amigo @dokshor, que me decía: "ya esta repartida la torta hace rato".
Yo por mi parte, creo que el Buzz será muy utilizado (pero no masivo) por el simple hecho de que ya esta integrado con Gmail, y si no lo quieres, solo le das clic a un pequeño vinculo para deshabilitarlo:

"Apaga el Buzz"

Lo que quiero recalcar, es que es una "funcionalidad extra", como el "chat" que tiene Gmail, Buzz es un plus para Gmail. Habrá mucha gente que lo use, solo por que esta ahí, esta habilitado y no hay necesidad de abrir otra ventana aparte en el navegador. Ese es el poder del "default", este poder es tan grande, que mantiene a los usuarios usando Internet Explorer porque simplemente ya esta instalado en su computadora. Los hace utilizar el Messenger, porque creen que solo con eso se puede chatear. Y hace que Canonical haga un trato para que el Firefox (que viene instalado en Ubuntu), para que utilize a Yahoo! en vez de Google como buscador predeterminado (y hace que Yahoo! pague $$$ por ese pequeño cambio).

Asi mismo, este fenómeno ocurrirá con el correo de facebook. Yo personalmente no lo usaría, realmente me gusta Gmail, no veo razón para dejarlo, pero muchos lo harán porque les resultará mejor tener "Facebook + Correo" en un "solo lugar".

"Solo esperemos que Facebook haga un mejor trabajo con su sistema de correo,
del que ha hecho hasta ahora"

Con Buzz no es de esperar el mismo fenómeno que caracteriza a Twitter: usuarios con cuatro millones de followers (¿alguien realmente le pone atención? ¿tiene algo bueno que decir?), comunidades vibrantes, o "ríos de informacion" para mantenerme al tanto de las ultimas noticias y tener "cierto" grado de interacción social. No creamos que miles de usuarios dejen de usar Twitter para "Buzzear" (lo dejan ellos solos).
Lo que si podemos esperar de Buzz es una interacción "menos masiva", y más integrada y personal (con el cruce de contactos de Gmail y GTalk), algo así como un Blipea, pero solo para los amigos de siempre en Gmail. Desde esa perspectiva, Buzz si es atractivo.
"Buzz no es un Twitter killer, es un plus para Gmail."
Ahora lo que realmente me interesaría saber, es ¿cuantas personas dejaran de usar Gmail, Yahoo! o Msn, para utilizar el @facebook.com como correo principal? ¿Y donde estan los viejos gigantes, y que estaran preparando para competir por los usuarios?

viernes, febrero 12, 2010

Nuevo Trailer De God Of War III

Para inaugurar mi participación en el blog quiero compartir con ustedes el nuevo trailer de uno de los juegos más esperados para la consola Playstation 3. Según el sitio oficial, God Of War III estará a la venta en Estados Unidos a partir del 16 de marzo en dos versiones: Standard Edition y Ultimate Edition.

Trailer cortesía de: www.gametrailers.com

Nuevo Trailer De God Of War III

Para inaugurar mi participación en el blog quiero compartir con ustedes el nuevo trailer de uno de los juegos más esperados para la consola Playstation 3. Según el sitio oficial, God Of War III estará a la venta en Estados Unidos a partir del 16 de marzo en dos versiones: Standard Edition y Ultimate Edition.

Trailer cortesía de: www.gametrailers.com

Porque no hay (y no habrá) Flash para el iPhone?

"Este es el mensaje que te aparece al navegar al sitio get.adobe.com/flashplayer informándote que no existe una plugin disponible para tu dispositivo"


Leyendo el articulo de GadgetLab me he dado cuenta de muchas razones sólidas por las cuales Apple no permite que se puedan ejecutar aplicaciones Flash en su navegador Safari para el iPhone ni mucho menos como aplicaciones nativas del iPhone/iPod Touch. En si, estas razones se pueden resumir de la siguiente manera:

  • Pérdida de la exclusividad, calidad en el diseño y usabilidad de las aplicaciones
  • No mas necesidad de una App Store centralizada y amarrada a iTunes
  • No mas restricciones ni espera por aprobacion de aplicaciones
  • Baja significativa en el rendimiento y duracion de la bateria
  • Posibles vulnerabilidades del player de Adobe que pudieran servir para hackear el aparato.


Esto demuestra que la falta de Flash no fue nada mas algo que Apple pasó por alto sino que fue una decisión premeditada. Ellos diseñaron el browser del aparato para que no fuera capaz de ejecutar este plugin y sus razones son sólidas. Esto y las
últimas declaraciones de Steve Jobs nos indican que no debemos esperar que Apple esté trabajando en un próximo lanzamiento de Flash para el iPhone.

Adobe Flash es actualmente utilizado en tres areas principales del web: reproductores de video, juegos online y sitios web con interfaces ricas. Estas caracteristicas se estan volviendo cada vez menos necesarias con el avance de otras tecnologias alternas que se estan volvieno un estandar en la web, por lo cual la necesidad de Flash decrece con el tiempo. Veamos algunos ejemplos:

Reproductores de Video: Con la llegada de HTML5 y sus implementaciones nativas de tags como [canvas] y [video], pueda que en un futuro ya no sea necesario utilizar Flash para realizar streamings de multimedia o para juegos online. Tanto la gente de Youtube como los de Vimeo han lanzado ya sus versiones de video players usando tags [video] para browsers que ya poseen soporte para este nuevo standard del HTML.

Asumo que Apple optará en un futuro cercano por agregar soporte completo a las features de HTML5 en el mobile Safari mientras que los sitios que actualmente poseen aplicaciones Flash, las portarán a este nuevo standard, dejándolo de lado.

"Código fuente de un vídeo de Youtube mostrando el tag [video]"

Juegos online: Aceptémoslo. El iPhone y el iPod Touch se estan convirtiendo en una plataforma de juegos capaz de competir con el PSP y el Nintendo DSi, quiza no tanto en calidad y complejidad pero sí en popularidad. De hecho, al momento de escribir este post, leo un artículo que indica que el iPhone se esta volviendo mas popular entre los desarrolladores de videojuegos por encima del Sony PSP y el Nintendo DSi. Es un fenómeno similar al que ocurrió entre el Nintendo Wii y el Sony PS3 en el cual, aunque el segundo tuviera mucho mejor hardware, el primero se volvió mas popular gracias a su simplicidad.



"NFS Undercover para iPhone. Uno de los juegos que mejor demuestra la capacidad que tiene este dispositivo como consola de videojuegos"


Sitios web con interfaces ricas: Antes Flash era la única alternativa para crear sitios web vistosos, con controles ricos y animaciones presentando una agradable experiencia de usuario con un framework bastante fácil de usar para los desarrolladores y diseñadores, permitiendo integrar la capacidad de Flash para crear animaciones basadas en fotogramas y lineas de tiempo, la galeria de controles ricos y el lenguaje de programación ActionScript. Hoy en día hoteles, restaurantes, sitios que promueven peliculas de cine y artistas musicales aun siguen usando Flash para darle vistosidad a sus sitios pero cada vez son mas los que prefieren optar por realizar estos mismos efectos usando nada mas que frameworks Javascript y todas las facilidades que ofrecen los web browsers modernos permitiendo una mejor integración de sus interfaces con servicios del lado del servidor y gastando mucho menos recursos en el cliente, ya que los sitios Flash tienen la caracteristica de consumir gran cantidad de ancho de banda y memoria además de no estar apegado a los estandares del W3C.

Hoy en día vemos que es mucho más conveniente hacer uso de librerías Javascript como Scriptaculous, jQuery o Dojo para interfaces ricas y animadas en lugar de Flash y aun más sabiendo lo que podremos hacer en un futuro cuando HTML5 sea un estandar popular en el web.

Debido a esto, la necesidad de un usuario por tener Flash en su navegador va desapareciendo segun va avanzando el desarrollo de las tecnologías alternas como HTML5 y las iPhone Apps, que como vimos, pueden reemplazar a Flash para las tareas en las cuales usualmente hacíamos uso de este. Por ello concluimos que esta es la razón por la cual los de Apple han decidido no incluir un plugin Flash en su navegador Safari y en su lugar, esperará que su App Store siga creciendo, ofreciendo una gran variedad de videojuegos a sus usuarios, así como también esperan que los desarrolladores se decidan de una vez por todas a reemplazar a Flash por animaciones e interfaces hechas con frameworks Javascript para así desaparecer casi por completo la necesidad de Flash.

Porque no hay (y no habrá) Flash para el iPhone?

"Este es el mensaje que te aparece al navegar al sitio get.adobe.com/flashplayer informándote que no existe una plugin disponible para tu dispositivo"


Leyendo el articulo de GadgetLab me he dado cuenta de muchas razones sólidas por las cuales Apple no permite que se puedan ejecutar aplicaciones Flash en su navegador Safari para el iPhone ni mucho menos como aplicaciones nativas del iPhone/iPod Touch. En si, estas razones se pueden resumir de la siguiente manera:

  • Pérdida de la exclusividad, calidad en el diseño y usabilidad de las aplicaciones
  • No mas necesidad de una App Store centralizada y amarrada a iTunes
  • No mas restricciones ni espera por aprobacion de aplicaciones
  • Baja significativa en el rendimiento y duracion de la bateria
  • Posibles vulnerabilidades del player de Adobe que pudieran servir para hackear el aparato.


Esto demuestra que la falta de Flash no fue nada mas algo que Apple pasó por alto sino que fue una decisión premeditada. Ellos diseñaron el browser del aparato para que no fuera capaz de ejecutar este plugin y sus razones son sólidas. Esto y las
últimas declaraciones de Steve Jobs nos indican que no debemos esperar que Apple esté trabajando en un próximo lanzamiento de Flash para el iPhone.

Adobe Flash es actualmente utilizado en tres areas principales del web: reproductores de video, juegos online y sitios web con interfaces ricas. Estas caracteristicas se estan volviendo cada vez menos necesarias con el avance de otras tecnologias alternas que se estan volvieno un estandar en la web, por lo cual la necesidad de Flash decrece con el tiempo. Veamos algunos ejemplos:

Reproductores de Video: Con la llegada de HTML5 y sus implementaciones nativas de tags como [canvas] y [video], pueda que en un futuro ya no sea necesario utilizar Flash para realizar streamings de multimedia o para juegos online. Tanto la gente de Youtube como los de Vimeo han lanzado ya sus versiones de video players usando tags [video] para browsers que ya poseen soporte para este nuevo standard del HTML.

Asumo que Apple optará en un futuro cercano por agregar soporte completo a las features de HTML5 en el mobile Safari mientras que los sitios que actualmente poseen aplicaciones Flash, las portarán a este nuevo standard, dejándolo de lado.

"Código fuente de un vídeo de Youtube mostrando el tag [video]"

Juegos online: Aceptémoslo. El iPhone y el iPod Touch se estan convirtiendo en una plataforma de juegos capaz de competir con el PSP y el Nintendo DSi, quiza no tanto en calidad y complejidad pero sí en popularidad. De hecho, al momento de escribir este post, leo un artículo que indica que el iPhone se esta volviendo mas popular entre los desarrolladores de videojuegos por encima del Sony PSP y el Nintendo DSi. Es un fenómeno similar al que ocurrió entre el Nintendo Wii y el Sony PS3 en el cual, aunque el segundo tuviera mucho mejor hardware, el primero se volvió mas popular gracias a su simplicidad.



"NFS Undercover para iPhone. Uno de los juegos que mejor demuestra la capacidad que tiene este dispositivo como consola de videojuegos"


Sitios web con interfaces ricas: Antes Flash era la única alternativa para crear sitios web vistosos, con controles ricos y animaciones presentando una agradable experiencia de usuario con un framework bastante fácil de usar para los desarrolladores y diseñadores, permitiendo integrar la capacidad de Flash para crear animaciones basadas en fotogramas y lineas de tiempo, la galeria de controles ricos y el lenguaje de programación ActionScript. Hoy en día hoteles, restaurantes, sitios que promueven peliculas de cine y artistas musicales aun siguen usando Flash para darle vistosidad a sus sitios pero cada vez son mas los que prefieren optar por realizar estos mismos efectos usando nada mas que frameworks Javascript y todas las facilidades que ofrecen los web browsers modernos permitiendo una mejor integración de sus interfaces con servicios del lado del servidor y gastando mucho menos recursos en el cliente, ya que los sitios Flash tienen la caracteristica de consumir gran cantidad de ancho de banda y memoria además de no estar apegado a los estandares del W3C.

Hoy en día vemos que es mucho más conveniente hacer uso de librerías Javascript como Scriptaculous, jQuery o Dojo para interfaces ricas y animadas en lugar de Flash y aun más sabiendo lo que podremos hacer en un futuro cuando HTML5 sea un estandar popular en el web.

Debido a esto, la necesidad de un usuario por tener Flash en su navegador va desapareciendo segun va avanzando el desarrollo de las tecnologías alternas como HTML5 y las iPhone Apps, que como vimos, pueden reemplazar a Flash para las tareas en las cuales usualmente hacíamos uso de este. Por ello concluimos que esta es la razón por la cual los de Apple han decidido no incluir un plugin Flash en su navegador Safari y en su lugar, esperará que su App Store siga creciendo, ofreciendo una gran variedad de videojuegos a sus usuarios, así como también esperan que los desarrolladores se decidan de una vez por todas a reemplazar a Flash por animaciones e interfaces hechas con frameworks Javascript para así desaparecer casi por completo la necesidad de Flash.

miércoles, febrero 10, 2010

Tazas de Café Dignas de un Geek

Pensaba titular este post como "Tazas de Cafe Dignas de un Programador" pero la verdad es que todo aquel que trabaja frente a una computadora siente la imperiosa necesidad de tener una taza de café en su mano izquierda (o en su derecha, si es que son diestros), es como si fuera un accesorio más de la computadora y aunque no se ha comprobado científicamente, yo asumo que el café ayuda a pensar mejor y a aclarar la mente. Yo personalmente dependo del café y esta camiseta resume perfectamente mi situacion:

"Instant Programmer - Just Add Coffee (link)"

Así que en este post les traigo una recopilación de las tazas de cafe dignas de cualquier geek.

Porque cuando tienes una idea en la cabeza, no puedes perder la concentración ni para revolver el café (link):



Que soluciones más malevolas y fabulosas se te podrían ocurrir si bebes café directamente de la cabeza de Darth Vader! (link):



No hay nada más cool(para los geeks, no para la gente normal) que una taza que cambia de color según la temperatura de su contenido (link):



Quien no acompaña su café con un poco de pan dulce o galletas? y si no tienes donde colocarlas? no hay problema! (link):



Una taza con Deja Vú, ya que a final de cuentas, ahí es donde irá a parar el exceso de café (link):


Porque la ocasión lo amerita. En el mundo tambien hay mujeres geek (link):


Porque algunos pasamos todo el día trabajando con beans (link):


Para los aficionados a la fotografía (link):


Es una taza de café? es un mouse? es una taza de café mouse!!! Por el momento solo es un concept design pero yo bien compraría uno (link):


No te durará mucho pero valdrá la pena. Taza de café comestible (link):


Alguna otra que consideran merece estar en la lista?

Tazas de Café Dignas de un Geek

Pensaba titular este post como "Tazas de Cafe Dignas de un Programador" pero la verdad es que todo aquel que trabaja frente a una computadora siente la imperiosa necesidad de tener una taza de café en su mano izquierda (o en su derecha, si es que son diestros), es como si fuera un accesorio más de la computadora y aunque no se ha comprobado científicamente, yo asumo que el café ayuda a pensar mejor y a aclarar la mente. Yo personalmente dependo del café y esta camiseta resume perfectamente mi situacion:

"Instant Programmer - Just Add Coffee (link)"

Así que en este post les traigo una recopilación de las tazas de cafe dignas de cualquier geek.

Porque cuando tienes una idea en la cabeza, no puedes perder la concentración ni para revolver el café (link):



Que soluciones más malevolas y fabulosas se te podrían ocurrir si bebes café directamente de la cabeza de Darth Vader! (link):



No hay nada más cool(para los geeks, no para la gente normal) que una taza que cambia de color según la temperatura de su contenido (link):



Quien no acompaña su café con un poco de pan dulce o galletas? y si no tienes donde colocarlas? no hay problema! (link):



Una taza con Deja Vú, ya que a final de cuentas, ahí es donde irá a parar el exceso de café (link):


Porque la ocasión lo amerita. En el mundo tambien hay mujeres geek (link):


Porque algunos pasamos todo el día trabajando con beans (link):


Para los aficionados a la fotografía (link):


Es una taza de café? es un mouse? es una taza de café mouse!!! Por el momento solo es un concept design pero yo bien compraría uno (link):


No te durará mucho pero valdrá la pena. Taza de café comestible (link):


Alguna otra que consideran merece estar en la lista?

lunes, febrero 08, 2010

Adaptando tu Sitio Para Móviles - Parte 2

Esta es la segunda parte del post anterior de Adaptando tu Sitio Para Moviles - Parte 1, en el cual hablaba de los servicios que tea automatizan este proceso. Ahora explicaremos algunas librerías utiles para crear nuestros sitios móviles por nuestra cuenta.

Para crear una versión de tu sitio orientada a un dispositivo móvil debes considerar ciertas características de la navegación en móviles:

Ancho de banda: Entre estas, el hecho de que estos dispositivos se conectan por WiFi o 3g y el ancho de banda disponible puede ser mucho menor al de una computadora personal, por lo cual tendrás que evitar cargar las páginas con muchas imágenes y mucho contenido.

Contenido no soportado: Debes considerar también que no todos los dispositivos móviles soportan contenido rico como Flash (ehem, iPhones, iPods e iPads) así como tampoco no todos soportan Java, Silverlight, Active X o Adobe Air, entre otros. Hay muchos sitios basados en Flash que ni siquiera con la versión Lite, incluida en algunos móviles, pueden renderizar las animaciones de tu sitio. Especialmente porque, a diferencia de las imagenes y el contenido HTML habitual, las películas de Flash no se ajustan automáticamente al tamaño de la pantalla de tu dispositivo. Los que tienden a utilizar Flash para darle una gran vistosidad a su sitio como por ejemplo restaurantes, hoteles o páginas de artistas podrían considerar realizar estas mismas animaciones usando librerías Javascript como jQuery, Motools o Dojo y aun así no es recomendable colmar la página de tanto adorno y animación.

Procesamiento: El procesador de los dispositivos también te impedirá ejecutar mucho Javascript en tus páginas, es mejor dejar la mayor parte del procesamiento de información en el servidor web. Recuerda que en la actualidad los smartphones más avanzados poseen un procesador de no mas de 1Gz y la verdad es que en mi opinión, no necesitan mas de eso ya que tu smartphone no es una herramienta de trabajo que tendrá que realizar muchos cálculos en tu sitio. Su uso primordial es consumir/producir información, no procesarla.

Dimensiones de la pantalla: Las dimensiones de las pantallas en los dispositivos móviles, si bien hoy en día abarcan toda la superficie de los mismos, es mucho más reducida que la de un monitor de una PC(480x320px en un iPhone, 800x480 en un Nokia N900, 360x480 en un Blackberry Storm y 800x480 en un Google Nexus One). Esto te obligará a distribuir el contenido de tu sitio en un espacio más reducido quizá dividiéndolo en diferentes páginas o eliminándolo si no es tan necesario. En un blog, por ejemplo, ya no se deben incluir los típicos widgets contadores de visitas, shoutboxes, secciones de últimos comentarios, etc. Si se desea hacerlo, podria utilizarse una pagina aparte que sirva como "About".

Interacción con el usuario: Un usuario comunmente interactua con un Smartphone haciendo uso de sus dedos o un Stylus, haciendo "taps" en lugar de clics para abrir vínculos y haciendo "swipe" para mover las scrollbars y visualizar más contenido. Hay ciertos eventos que no se podrán producir desde un Smartphone, por ejemplo el drag&drop (basado en el evento mouseover), combinaciones de teclas con Ctrl-Shift-Alt, scrolling, etc. En esta tabla pueden encontrar una completa referencia sobre los eventos, tags HTML y atributos CSS soportados por la mayoria de navegadores web para móviles.

Librerías

En mi opinión personal, el dispositivo que más ha popularizado su sistema operativo, el cual además revolucionó las interfaces gráficas para dispositivos móviles es hasta la fecha el iPhone. Si deseas que tu aplicación web tenga la apariencia y animaciones similares a las de este dispositivo puedes hacer uso de la libreria jQTouch, la cual es en realidad un plugin para el popular framework de javascript jQuery que simula la apariencia y animaciones propias de las interfaces de un iPhone OS.

Acá puedes ver un demo de las caracteristicas de jQTouch (visualizarlo desde un smartphone) y a continuación puedes ver un vídeo de las features principales de dicha libreria:




"Features generales de jQTouch"

Segun comentan en su sitio, la YUI Library también funciona perfectamente en lo que ellos denominan browsers Grado A.

Otra buena libreria de javascript especializada en el desarrollo de sitios web para móviles es WebAppNet. Esta es otra libreria que simula la UI y animaciones del iPhone OS. Puedes ver un demo de sus features (desde un móvil preferiblemente) en este sitio. A continuación un preview de este demo, visualizado desde un iPod Touch:

"Aplicación Demo que muestra la apariencia y features de la libreria WebAppNet, visualizada desde un iPod Touch"


Por último los invito a leer el siguiente post recomendado para desarrolladores de sitios web para iPhone y otros móviles, con muchas otras ideas a tomar en cuenta a la hora de realizar nuestros sitios. En este otro sitio tambien pueden encontrar documentacion, patrones de diseño y guias para crear sitios para móviles. Además, no te olvides de comprobar la compatibilidad de tu sitio mediante este test del w3c especifíco para sitios web orientados a smartphones.

"Resultados de Mobile Safari en el Test de Compatibilidad de Browsers para Móviles, del w3c"

Si necesitas ofrecerle a tus usuarios algo mas que contenido y los navegadores para móviles no te lo permiten, siempre puedes optar por programar una aplicación específica para smartphones haciendo uso de los SDKs que provee cada productor de smartphones.

Sunsetting Sr. Byte.

El Sr. Byte ha estado más de 5 años inactivo. Digamos que estaba en " code freeze ". Pero ahora es el último release. Quizas no...