Archivo

Archivo para la categoría ‘programación’

Book review: HTML5 up and running, by Mark Pilgrim

Jueves, 2 de septiembre de 2010

HTML5 up and running

Thanks to O’Reilly I got the chance to review the book ‘HTML5 up and running‘, by Mark Pilgrim. Please read below to get an idea on what to expect about this new title from O’Reilly ($34.99).

Synopsis:

HTML5 is a set of technologies that came together as HTML, JavaScript and the Internet in general evolved. The author tries to explain how all the pieces fit together along with some important history lessons.

This is a practical and fun book, so keep your computer on all the times while you read it.

How is it organized:

  1. How did we get there?: History of some web standards, where they succeeded and where they failed because of being impractical. If you want to learn more about the history of software usability and common pitfalls then this is a must.
  2. Detecting HTML5 features: How to deal with different HTML5 compatibility levels (oh yeah, you thought the nightmares are over, think again!). Lots of boilerplate code, but still a foundation of things to come.
  3. What does it all mean?: Explains the structure of an HTML document, along changes that are mean to make it easier to maintain and create.
  4. Let’s call it a draw(ing surface): In my opinion the best chapter of the book. This is where HTML5 (with JavaScript) overlaps and competes with other technologies like JavaFx and Flash. There are examples, but I was left wanting more code to show how some features work. Also, I got the impression than mouse events are a pain in the neck to handle in HTML5, something than is easily accomplished in JavaFX or Flash.
  5. Video on the web: Very detailed explanation of most popular formats, how they ‘embedded’ video magic works, how royalties licenses can break your pocket. Pay attention to the upcoming WebM format
  6. You are here (and so everybody else): Describes the Geolocation API. This is a tricky subject and the author shows how the different browser API complexity can be handled with third party libraries and also how to deal with important issues like permissions (the user doesn’t want to tell where it is), precision, timeouts and others. Code is simple enough to understand the basics and move forward.
  7. The past, present, and future of local storage for web applications: The author tries to explain the new local storage API, which is a great improvement over cookies. Quickly explains several important limitations (storage size, everything is saved as strings) and suggest how to use Google Gears instead, which is not a bad thing.
  8. Let’s take this offline: Caching website contents for offline use. Can improve the user experience a lot, but as the author says the developer work here is a tough one as debugging is very primitive. Offline mode requires careful thinking of what server side and client side settings to change, plus not all the browsers support this feature (like IE8). Google Gears comes to the rescue
  9. A form of madness: New form elements and how to use them so even users of old browsers can have a ‘degraded’ experience. You will be probably changing ALL your form pages after reading this chapter, very useful :)
  10. “Distributed”, “Extensibility”, and other fancy words: This is all about how to use ‘microdata’ to decorate existing HTML and embed extra information without breaking your documents. Very interesting indeed as this information can easily end up displayed on the search engine or consumed by other applications that interact with your web application.
  11. Missing things:

    Sometimes I felt than there were too many mentions of Open Source frameworks to do repetitive tasks, one has to wonder if HTML5 is mature enough or if you just rather use tools like Modernize and Google Gears and forget about the browser madness (there is still plenty). Also more complex programming examples feel missing, specially for the canvas chapter (still the code shown is simple and good to the point so you can say this is a minor fault).

    Conclusion:

    The book is easy to read, well written and does a very good job explaining what is the set of technologies that made HTML5. It is not a book for beginners as it assumes you know how to code a little in JavaScript and at least you wrote an page in HTML4 before. It is not an advanced book either on the topics covered but will definitely will give you a good head start if you want to go deep on this new set of technologies.

    Kodegeek stars: 4 of 5.

internet, kodegeek, programación

Más fotos del Java Road Trip

Jueves, 26 de agosto de 2010

Bueno, Oracle publicó más fotos del Java road trip en Flickr, del cual les habia hablado ya dos meses atrás en New York. Como pueden ver por cada conjunto, el “Java bus” se ha movido por varias ciudades, incluso tienen un avión :)

No sé, pero yo no he visto el primer RubyBus o C#Bus (Esta bien, está bien sólo estoy bromeando aquí :) )

java, javafx, oracle, programación , , ,

Trucos unix: Herramientas de Java poco conocidas

Jueves, 5 de agosto de 2010

No puedo creer que estas las utilizo a diario y nunca las habia mencionado en el blog; En fin, el kit de desarrollador de Oracle (JDK) cuenta con unas cuentas joyas que usted puede llamar de la línea de comandos.

Por ejemplo, para ver la lista de procesos de Java, en vez de hacer esto:

1
2
auyan:~ josevnz$ ps aux|grep -i java|grep -v grep
josevnz    176   0.0  1.5   717716  62436   ??  S     5:49AM   0:02.52 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java -Djava.library.path=/Library/Frameworks/JavaFX.framework/Versions/1.2/lib/desktop -Dfile.encoding=MacRoman -classpath /Library/Frameworks/JavaFX.framework/Versions/1.2/lib/shared/javafxrt.jar:/Users/josevnz/Documents/workspace/mytests/dist/Main.jar com.sun.javafx.runtime.main.Main MainJavaFXScript=com.kodegeek.blog.totalbodyweight.app.Main

Utilice a jps:

1
2
3
4
auyan:~ josevnz$ jps -lm|grep -v 'sun.tools'
112 
176 com.sun.javafx.runtime.main.Main MainJavaFXScript=com.kodegeek.blog.totalbodyweight.app.Main
148

Ambas muestran que el PID de mi programa es el 176, pero ¿cual es más fácil?

¡Amor a primera vista! :)

Hay muchas otras, pero les dejo con este articulo de IBM el cual hace un mejor trabajo describiendo las herramientas.

–José

java, oracle , , ,

NetBeans 6.9 ya está afuera, JUnit no incluido en JavaFX

Viernes, 18 de junio de 2010

Para quienes han seguido el asunto de NetBeans (el cual ya salió en su versión final 6.9) y la cucaracha de JUnit, este es el resultado: JUnit no es soportado en proyectos de JavaFX.

Uno de los desarrolladores de NetBeans me mostró en el reporte de la cucaracha en donde está desactivado.

¿Entonces, cual es la solución? Bueno, algo inconveniente pero que funciona, simplemente cree un proyecto de Java (no JavaFX) y entonces desde allí incluya sus pruebas de unidad.

Pero como una foto dice más que mil palabras les dejo el ejemplo abajo, creado con uno de los ‘magos de código’ (wizzards) de NetBeans:


¡Misterio resuelto!

java, javafx, opensource, oracle, programación , ,

Java Road Trip Stop en la ciudad de Nueva York

Martes, 15 de junio de 2010

My cool T-Shirt!
Me gané una franela y un libro (Real-Time Java Programming , de eric J. Bruno. Muy contento)

Bueno, hoy comenzó oficialmente el Java Road Trip Stop en la ciudad de Nueva York. Este evento, el cual contó con la participación de New York City Java Meetup Group, es una iniciativa de Oracle para demostrar los últimos avances de Java en dispositivos como el Amazon Kindle, JavaFX en la televisión y entre otras cosas.

What is the Java Bus?
Oracle se acuerda de los desarrolladores de Sun, muestra su fe en Java

¿Pero, de verdad hubo algo bueno o fué sólo propaganda de Oracle, con los respectivos tragos gratis?

Nada que ver. La charla tuvo mucha substancia, y lo mejor fué lo que cada uno de sus expositores tuvo que ofrecer.

Timothy F in Java best practices
Timothy explicó lo que no se debe hacer en su charla de las mejores prácticas

Timothy F se encargó de romper el hielo con una presentación de las mejores prácticas (III), en este caso el manejo de código duplicado. Su explicación práctica de como utilizar patrones de diseño como Strategy, Visitor e incluso factory fué muy valiosa, definitivamente pienso utilizar esos tips en mi código de ahora en adelante.

Brian Goetz, Java concurrency in practice
Brian nos explicó cosas como el proyecto Da Vinci, Coin y otros en el nuevo JDK 7

Después le toco el turno a Brian Goetz (el autor de ‘Java Concurrency in Practice’) al bate. Brian explicó con mucha emoción y detalles los aspectos técnicos del nuevo JDK 7, las diferencias con el Java SE 7 (no es lo mismo, el JDK es una referencia de implementación) y de las cosas buenas, en especial de productividad, concurrencia, soporte de otros lenguajes como JRuby, Scala y maquillaje del lenguaje que vienen pronto (nos adelanta que un anunció importante viene en JavaOne de este año).

Me posing for the camera (II)
El Java Road Trip continua este Miércoles y luego se moverá a otras ciudades en los Estados Unidos

La organización del evento estuvo impecable, pudimos ver el “Java Bus” (tiene tecnología Java, y una pantalla de datos la cual usa JavaFX), regalaron libros a los asistentes (me gané uno por preguntón :) ) pero sobre todo el nivel de asistencia de los asistentes fué alto, todo en un ambiente relajado. Tampoco me puedo quejar de la oportunidad de hacer contactos con otros programadores de distintas areas de la industria.

IMG_8640.JPG
Java Meetup, muy buena experiencia, seguro me verán escribiendo más sobre este evento que ocurre al menos una vez al mes en NYC

¿Volveré a ir a un Java Meetup? Claro que sí. De verdad vale la pena y si usted vive cerca de Nueva York y le gusta Java entonces no debería perdérselo. En cuanto al Java Road Trip le recomiendo que vaya al sitio web y los siga desde Twitter, Facebook y otros.

java, oracle, programación , , ,

NetBeans 6.9: JUnit aún está roto

Domingo, 13 de junio de 2010

Después de probar varias soluciones que leí en la red y de ver como aún la versión 6.9 RC2 aún tiene esta cucaracha me decidí a reportar el problema.

La cucaracha es la 187528.

Si tu eres uno de los afectados te invito a comentar esta cucaracha, de esta manera los desarrolladores de NetBeans le darán más prioridad ;)

–José

java, javafx, opensource, programación

Optimizaciones del lado del cliente en aplicaciones web

Sábado, 12 de junio de 2010

(Si señor, no todo es en el lado del servidor)

Hace poco me tocó tratar con una empresa Venezolana de desarrollo de páginas web, debido a un sitio web con el cual tengo el gusto de trabajar. En una de las discusiones técnicas uno de sus programadores este sostenía que el uso de técnicas como compresión de archivos no era necesaria y que en muchos casos podía afectar a los usuarios finales. El cache en todo caso se encargaba de mejorar la experiencia después de la primera carga.

Una verdad a medias debo decir; Si el archivo a entregar al usuario es muy pequeño (por el orden de 1KB) entonces la compresión puede afectar negativamente el rendimiento ya que el archivo comprimido resultante puede ser más grande o el esfuerzo por descomprimir en tiempo real es costoso en CPU comparado con el tiempo que toma en bajárselo.

¿Pero que pasa si tiene mucho archivos pequeños? (pista, póngalos juntos en un sólo archivo, más eficiente)
¿Qué pasa si los archivos si son grandes? (compresión estática, dinámica)

Primero que nada, no hay balas de plata, cada solución tiene cosas buenas y cosas malas. A continuación les enumero algunas, en particular las que apliqué (les dejo Google para que busquen la explicación de que hace cada una de ellas, me gusta más mostrar los pedazos de código):

  • Compresión en HTTP usando PHP gzip: Esto lo ponen en la cabecera de sus archivos de PHP.
    1
    
    < ?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>;

    Lo que hace esto es definir el mime-type de la página como un archivo comprimido y inicia la compresión en el lado del servidor.

  • Si usa Apache, entonces pídale que comprima sus archivos en HTTP con gzip o mod_deflate
  • Si tiene Javascript u hojas de estilo grandes quizas no necesita comprimir los archivos con gzip, quizas pueda optimizarlos con yui compressor (hay otras implementaciones):
    1
    2
    
    # Primero hacemos un respaldo de todos los archivos, copiandolos a .orig. Luego iniciamos la conversión
    auyan:yuicompressor-2.4.2 josevnz$ for file in `find /Users/josevnz/Documents/bocaproyectos/currentwebsite/ -name '*.css.orig' -follow|sed 's#.orig##'`; do java -jar /Users/josevnz/Downloads/yuicompressor-2.4.2/build/yuicompressor-2.4.2.jar --nomunge --type css -o $file --verbose ${file}.orig && echo $file; done

    El tamaño se redujo considerablemente, sin usar gzip:

    1
    2
    3
    
    auyan:yuicompressor-2.4.2 josevnz$ ls -l /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css.orig
    -rwx---r-x@ 1 josevnz  josevnz  2624 Jun 12 20:55 /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css
    -rwx---r-x@ 1 josevnz  josevnz  3893 May 31 15:37 /Users/josevnz/Documents/bocaproyectos/currentwebsite//css/style.css.orig

De nuevo no tiene que tomar mi palabra en serio. ¿Pero que tal la gente de Google? También hágase amigo de herramientas como FireBug.

¿Qué otros consejos tiene sobre la optimización de contenido en el lado del cliente que quiera compartir? (*hay un montón y este pequeño escrito no pretende ser una guía sobre todo lo que puede hacer*)

–José

internet, java, programación

¿Como ver que localizaciones están disponibles en Java?

Lunes, 7 de junio de 2010

Un programa realmente tonto, pero que a veces me encuentro escribiendo más de una vez:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Locale;
 
public class ShowLocale {
        public static void main(String [] args) {
                for (Locale locale: Locale.getAvailableLocales()) {
                        // Get the 2-letter language code
                        String language = locale.getLanguage();
                        // Get the 2-letter country code; may be equal to ""
                        String country = locale.getCountry();
                        // Get localized name suitable for display to the user
                        String locName = locale.getDisplayName();
                        System.out.println(String.format("%s %s %s", language, country, locName));
                }
        }
}
1
2
auyan:~ josevnz$ java -cp . ShowLocale|grep -i vene
es VE Spanish (Venezuela)

Que lo disfruten ;)

java

Pido ayuda a todos los internautas: BocaProyectos.com

Domingo, 6 de junio de 2010

Saludos a los pocos lectores de este humilde blog :)

Necesito de su ayuda, estamos lanzando una nueva versión de http://bocaproyectos.com y queremos su opinión. En particular comenten que les gusta, que no, problemas de velocidad, funcionalidad rota, en fin ¡cualquier cosa relacionada con el sitio!

Muy agradecido con su valiosa ayuda :)

–José

kodegeek, php, programación, venezuela

Adios NetBeans 6.9, hola Eclipse Ganymede + Exadel JavaFX plugin

Domingo, 6 de junio de 2010

Instalando el plugin para Eclipse de JavaFX

¿Será que Exadel mejorará el soporte de JavaFX en Eclipse?


La última gota que derramo el vaso; NetBeans 9.6 beta se cayó en medio de una operación sencilla, sin correr ni siquiera JavaFX. Me tiene realmente irritado que ni siquiera puedo crear mis pruebas de JUnit, así que moví todo mi proyecto a Eclipse. Las pruebas de JUnit las hice en un momento pero ahora me encuentro que tengo que montar soporte JavaFX 1.3.

¿Será sencillo?
¿Será mejor que NetBeans 6.9?

No tengo nada en contra de NetBeans, de hecho yo lo utilicé mucho antes que Eclipse (cuando se llamaba Forte). Hay un grupo de gente dedicada a corregir errores, pero quiero ver si al fin puedo terminar este proyecto en vez de pasar el tiempo reiniciando mi IDE.

Como si todo fuera tan fácil; Resulta que el plugin de Exadel para Eclipse se tira 3 peos dando un mensaje de error que dice ‘bad .class version‘.

Vamos a ver si lo resuelvo hoy mismo, ¡sino no me quedará otra que seguir trabajando con JavaFX 1.2!

java, javafx, opensource, programación