Template para proyecto web usando Java, Bootstrap, Spring MVC y Oracle JET.

Si alguna vez has querido tener un proyecto web hecho con Java, Bootstrap y Spring MVC seguramente te habrás encontrado con una gran cantidad de opciones referentes a versiones, IDEs de desarrollo, base de datos, herramientas para templates, Javascript y hojas de estilo.

Si este es tu caso y tú simplemente quieres bajar código para empezar a desarrollar una página web estás de suerte. Lo único que vas a necesitar es descargar Netbeans 8 y descargar el código de un template que subí a Github.

Netbeans lo puedes descargar de aquí:
https://netbeans.org/downloads/

El código lo puedes descargar desde Github:
https://github.com/sawbona/kfe

Mi objetivo es seguir haciendo cambios al código para hacerlo cada vez más funcional así como ir agregando documentación sobre la arquitectura y herramientas que elegí para este template.

Así que si pueden descargar el proyecto (kfe-template) y quieren dar comentarios o sugerencias, todas serán bienvenidas.

Saludos!

Evolución controlada o ¿por qué html 5 no es suficiente?

Evolución controlada o ¿por qué html 5 no es suficiente?

A pesar de que hoy en día las aplicaciones web siguen teniendo un gran auge considero que una gran verdad es que el trabajo realizado por empresas como Google, Apple o Windows en el ambiente de los sistemas operativos móviles, terminará por relegar a un segundo plano los desarrollos web “tradicionales”.

Hoy en día las páginas web ofrecen una flexibilidad y facilidad increíble para desarrollar aplicaciones que con un mismo código (html, css y javascript) se pueden ejecutar en un número casi infinito de dispositivos de manera casi idéntica y casi transparente para los desarrolladores. Es decir, las tecnologías que envuelven a la especificación de HTML5 ha logrado aquel sueño lejano, distante y casi inalcanzable de Java: Write once, run anywhere.

Sin embargo y a pesar de todas las ventajas que ofrece un desarrollo web y el increíble auge de Javascript como el lenguaje casi universal, existe un gran problema: la especificación de HTML5 se encuentra en una constante evolución “controlada”.

Evolución controlada

“Evolución” y “controlada” son casi términos opuestos, contradictorios, opuestos a lo que muchos (o al menos yo) me imagino. Pero la realidad es que algo parecido ocurre con la especificación HTML5. Detrás de esta especificación existe un grupo no poco numeroso de empresas que tratan de ponerse de acuerdo en cuál debería ser el rumbo de dicha especificación. Y como en todo grupo de personas que trabajan juntos siempre existirán discrepancias, conflictos e intereses de cada una de las partes y son estos conflictos y desacuerdos los que generan el mayor problema de esta, tan afamada, especificación: tiene un crecimiento lento.

Y tener un crecimiento lento en un mundo donde para el año 2020 habrán más de 5 mil millones de dispositivos móviles conectados a Internet puede pesar mucho. Y es ahí donde entran los sistemas operativos como Android, iOS y Windows Mobile.

La realidad es que la gran ventaja de tener un sistema operativo desarrollado por una sola empresa es un gran handicap. Tanto Apple como Google pueden tomar decisiones sobre sus sistemas operativos sin necesidad de preguntarle a nadie. Y es ahí donde tienen su mayor ventaja.

Los sistemas operativos desarrollados por Apple y Google…. y ¿Windows? tienen acaparado el mercado de teléfonos inteligentes y tener acaparado un mercado donde las ventas ascienden a los miles de millones de dólares y con un mar de usuarios ansiosos de probar más y nuevas cosas es un negocio que nadie quiere perder.

Es por esto que las grandes empresas buscan atraer a verdadera herramienta generadora ingresos: los desarrolladores de aplicaciones.

Tener a un desarrollador cautivo en tu ecosistema es quizá uno de los negocios más rentables para los vendedores de Smartphones. ¿Y qué mejor forma de cautivarte que ofreciéndote buenos ingresos, herramientas fáciles de usar y nuevo hardware anualmente para hacer tus aplicaciones más poderosas y versátiles? En fin… ¿qué mejor que obligar convencer a los desarrolladores para utilizar un lenguaje bello como Swift, Java o C# pero cuyo único inconveniente es que tendrías que hacer uso de cierta plataforma en específico? Al final la miel es más dulce que la hiel =)

¿A qué voy con todo esto?

La respuesta es sencilla, hoy en día desarrollar aplicaciones web es un requisito deseable en muchos trabajos pero, desde mi punto de vista en 20 años o menos (seguramente menos), poder comprender las bondades de HTML 5 será un requisito obligatorio y aquellos programadores que tengan un amplio conocimiento en el desarrollo de aplicaciones nativas para Él dispositivo de la(s) empresa(s) dominante(s) en turno, serán aquellos aquellos que destaquen sobre el resto.

Dicho lo cual…

No dejes de buscar… de programar… de aprender.

Avoir

Un reto sencillo: una tabla con encabezado fijo y cuerpo con scroll

Un reto sencillo: una tabla con encabezado fijo y cuerpo con scroll

Hace poco tiempo algunos amigos del trabajo se estuvieron peleando con un tema que podría parecer muy sencillo: ¿cómo hacer una tabla con un encabezado fijo donde el scroll solo se aplique al cuerpo de la tabla?

La pregunta parece muy sencilla y algunos quizá puedan pensar que es incluso trivial implementar una tabla así y para ser sinceros la primera vez que lo leí parecía demasiado sencillo como para haber invertido más de un par de minutos en esto.

Existen algún par de soluciones, pero si quieren ver las dos mejores que encontré pueden ver estos dos links:

http://www.imaputz.com/cssStuff/bigFourVersion.html#

https://www.tjvantoll.com/2012/11/10/creating-cross-browser-scrollable-tbody/

Tengo que decir que este comportamiento no es para nada estándar en ningún navegador y de igual forma dar soporte para navegadores antiguos resulta bastante complicado por lo que considero que si es necesario hacer uso de este comportamiento se aseguren que vaya a ser sobre navegadores recientes.

Una vez que hemos revisado algunas opciones que tenemos me gustaría plantear una solución alterna que hace uso de bootstrap.

Básicamente consiste en tener dos tablas contiguas donde la segunda la envolvemos en un div al que le hacemos un overflow para hacer el efecto de scroll. Lo único especial que tiene este acercamiento sería poner el tamaño de las columnas de cada tabla con un col-md-x de bootstrap del tamaño que necesitemos. En el caso de mi ejemplo tengo 3 columnas cada una con un tamaño de col-md-4 con un resultado tan simple pero eficaz. El último toque consiste en reducir el margen entre la primera tabla y el div para que parezcan que son un mismo elemento.

Captura de pantalla 2016-01-31 a las 1.49.50 p.m.

Pueden ver el código completo aquí.

Y bueno, con eso termino mi entrada de esta semana. Espero que a alguien le sea de utilidad. Cualquier duda o comentario son bienvenidos a dejar un comentario.

Saludos y happy coding.

 

Porque también de anime viven los programadores: The Seven Deadly Sins

Porque también de anime viven los programadores: The Seven Deadly Sins

Hola de nuevo y bienvenidos una vez más a mi blog, en esta ocasión me gustaría platicar sobre un tema adicional a la programación que me gusta: el ánime.

Mi gusto culposo por el anime

Como ya sabrán o habrán podido deducir de mis dos entradas anteriores, mi trabajo y sobre todo lo que me apasiona es la programación.

Durante los últimos diez años de mi vida me he dedicado a aprender todo lo que he podido sobre nuevas tecnologías y lenguajes de programación; pero, hay algunas otras cosas que me gustan y sobre las que me gustaría escribir en este blog: una de esas cosas es el anime.

Muchos años han pasado desde el primer anime que vi en televisión abierta y muchos otros desde los días en que uno de mis mejores amigos me prestaba algunos de los mejores animes que he visto en mi ya más que longeva vida (samurái-champloo y chobbits).

No me considero un fan, ni si quiera soy una persona que los vea con demasiada frecuencia, pero la realidad es que los pocos o muchos animes que he visto los he disfrutado mucho. He visto algunos con historias impresionantes, dramas pasionales, grandes historias de amistad, peleas increíbles, universos alternos y futuros devastadores que son un vistazo a cómo nos imaginamos nuestro propio futuro; es decir todo un espectáculo para la mente de muchos programadores que conozco (incluyéndome).

Bueno, una vez que he explicado el por qué de este post, entremos en materia y déjenme hablar sobre el tema de este post: The Seven Deadly Sins.

The Seven Deadly Sin by Netflix

Estoy casi seguro que algunas personas que conozco dirán que The Seven Deadly Sins (Nanatsu no Taizai) no es un anime de verdad ya que es una producción de Netflix, empresa americana que poco o nada puede saber sobre cómo hacer anime. Pero la realidad es que durante los últimos años Netflix ha realizado grandes producciones que demuestran que son capaces de contar historias que atrapen a su público y que son un punto diferenciador que está logrando que cada vez más consumidores los elijan sobre otras plataformas streaming o canales de pago; basta con ver las últimas críticas a las producciones como Jessica Jones, House of Cards o Daredevil, las cuales les recomiendo que vean si no lo han hecho ya.

The Seven Deadly Sins cuenta la historia de la princesa Elizabeth Liones quien después de huir durante días llega a una taberna cuyos dueńos son un particular chico de cabello rubio y una puerquita un poco mal humorada, capaz de hablar (súper lol) y pero muy simpática.

Al llegar a la taberna, Elizabeth lleva puesta una armadura gigante lo cual hace pensar a los clientes que ella es uno de los 7 pecados capitales: los 7 criminales más poderosos y sanguinarios del reino de Britannia. La alarma suena en el pueblo iniciando así una movilización de los soldados para encontrar y capturar a la princesa Elizabeth.

Cuando los soldados arriban a la taberna en busca de la princesa, esta sale huyendo por lo que los soldados comienzan a perseguirla en medio del bosque. Durante la persecución la princesa Elizabeth recibe ayuda del joven dueño de la taberna y de Hawk, la simpática puerquita antes mencionada. En ese momento hace su aparición Twigo un imponente guerrero quién con un solo movimiento de espada es capaz de cortar una enorme montaña por la mitad. Cuando la princesa decide que no hay otra opción más que su muerte el joven dueño de la taberna la protege desviando el ataque de Twigo con una facilidad que sorprende a Elizabeth.

Después del ataque de Twigo, el dueño de la taberna le revela su nombre a Elizabeth: Meliodas. Al mismo tiempo Twigo se recupera del primer encuentro con Meliodas e incorporándose decide atacar nuevamente; Meliodas rechaza su ataque, el encuentro entre de ambos guerreros genera una enorme explosión que da como resultado la derrota de Twigo y la puesta a salvo de Elizabeth. Una vez que ha terminado esta primera pelea Elizabeth y Meliodas deciden que juntos iniciarán la búsqueda de los Siete Pecados Capitales ya que esta será la única forma en que se podrá evitar el surgimiento de una enorme amenaza en donde se verán involucrados los poderosos Guerreros Sagrados y altos miembros del gobierno de Britannia.  Todo esto hace que Meliodas le haga una importante promesa a Elizabeth: él la protegerá y la acompañará durante toda su búsqueda.

Como podrán leer la historia quizá tenga varios clichés usados regularmente en muchos animes, libros o cualquier otra historia épica que se cuente. Sin embargo en The Seven Deadly Sins, el director Tensai Okamura sabe mezclar las peleas magistrales con muchos toques de humor (¿un puerco que habla?) así como las relaciones personales y de amor y amistad de los personajes que van apareciendo durante toda la serie lo que hace que los 24 capítulos que dura la primera temporada se vayan uno tras otro sin que se haga en ningún momento cansada.

Un punto muy importante que hay que comentar sobre esta serie es que no es una serie para niños ya que el anime tiene algunos toques de fan-service y bastante violencia que harán las delicias de varios espectadores pero que quizá no sea lo más “apropiado” para que la veas con tu sobrinito y tu abuelita en una comida familiar.

Finalmente tengo que decir que la animación es increíble. Los dibujos, los modelos de los personajes, las batallas, el color, en fin, en cada pequeño detalle se puede apreciar que hubo presupuesto suficiente para su realización. Nada que ver con la terrible animación del capítulo 5 de Dragon Ball súper.

En fin. Si disfrutaron de historias como Fullmetal-Alchemist y Avatar The Last Airbender creo que la historia de The Seven Deadly Sins les gustará. Por mi parte es todo y espero que leernos la siguiente semana ya con un post sobre programación.

Muchos saludos y no dejen de programar.

 

Beginning Angular.js, Andrew Grant, Apress: Una breve crítica.

Hola, muy buenos días internautas de todo el planeta.

Beginning Angular.js

El día de hoy quisiera escribir una breve reseña sobre el libro Beginning Angular.js. Como seguramente ya habrán notado esta es la segunda semana que escribo sobre un recurso para aprender Angular.js. Esto se debe a que en el proyecto donde estoy trabajando se está haciendo un gran uso de Angular.js por lo que mi deber es irme poniendo al corriente sobre este framework y las opciones que ofrece.

El título del libro de hoy es Beginning Angular.js de un tal Andrew Grant y de la editorial Apress. La edición es del año 2014 y cubre la versión de Angular.js 1.2.15.

Una de las principales diferencias respecto a mi anterior entrada sobre el curso Shaping-Up With Angular.js es la versión de Angular.js que se utiliza. En el curso de Gregg Pollack se utiliza la versión 1.5.x cuya principal diferencia respecto a la versión 1.2.x de este libro corresponde al uso de la notación “<Controller> as <alias>” la cual será la forma estándar en la que se deben declarar los controladores en las directivas de Angular.js. A pesar de que esta notación se introdujo a partir de la versión 1.2 de Angular.js es hasta hace poco tiempo que dicha notación se ha empezado a popularizar entre los desarrolladores. Basta ver las siguientes entradas en Stackoveflow para notarlo: this vs $scope in Angular.js ControllersAngular: Should I use this or $scope.

El contenido del libro de Andrew Grant es el siguiente:

  1. Chapter 1: JavaScript You Need to Know.
  2. Chapter 2: The Basics of AngularJS
  3. Chapter 3: Introduction to MVC
  4. Chapter 4: Filters and Modules
  5. Chapter 5: Directives
  6. Chapter 6: Working with
  7. Chapter 7: Services and Server
  8. Chapter 8: Organizing Views
  9. Chapter 9: AngularJS Animation 
  10. Chapter 10: Deployment Considerations 

He remarcado en anaranjado los capítulos 1, 9 y 10 referentes a JavaScript, AngularJs Animation y Deployment Considerations. Estos 3 temas no se encuentran incluidos dentro de los capítulos del curso de Gregg Pollack. Para ser sinceros creo que el capítulo sobre JavaScript está un poco forzado dentro del libro ya que un requisito indispensable para poder utilizar Angular.js es que tus conocimientos sobre JavaScript sean sólidos y aprender todo lo necesario de JavaScript para utilizar Angular.js en un solo capítulo creo que es demasiado optimista.

Sin embargo, tanto el capítulo 9 y 10 sobre AngularJS Animation y Deployment Considerations son temas que no se tocan para nada en el curso de Shaping-Up With Angular.js, por lo que su lectura es muy recomendada. A manera de resumen AngularJS Animation es una interfaz que expone Angular.js para realizar animaciones mediante el uso de directivas y, por otro lado, el capítulo sobre Deployment Considerations introduce algunos trucos con los que cuenta Angular.js para utilizar distintas configuraciones dependiendo de si el ambiente en que estás trabajando es desarrollo o producción.

Lo importante

Finalmente, el punto más importante de este libro es el que comentaba unas líneas más arriba: la ausencia del uso de la notación “<Controller> as <alias>”. Esto es muy importante ya que en todo el libro de Andrew Grant se hace uso de la notación tradicional mediante el uso de la variable $scope. Para alegría de muchos el uso de esta notación se encuentra presente en la mayoría de los ejemplos, demos, tutoriales y demás recursos que se encuentran actualmente en la red, por lo que es muy importante poder entender las diferencias entre ambas notaciones y sobre todo el poder leer un ejemplo en una notación y poder replicarlo en la otra notación de manera correcta. Por otro lado parece que esta notación va de salida por lo que el número de ejemplos en internet que hacen uso de la notación “<Controller> as <alias>” va creciendo día con día.

Ya para finalizar el libro de Andrew Grant es realmente pequeño, a penas 191 páginas y por lo tanto su lectura es realmente rápida y sirve muy bien de complemento para el curso de Shaping-Up With Angular.js del que ya había hablado anteriormente.

Si tienen tiempo no dejen de leer este libro y, sobre todo, si necesitas entender la diferencia entre el uso de this y $scope en el contexto de Angular.js este libro te ayudará a entenderlo por medio de, casi, los mismos ejemplos que usa Gregg Pollack.

Por mi parte es todo y espero que puedan aprovechar este libro.

Nos vemos la siguiente semana, saludos.

Shaping-up With Angular.js, un curso para aprender Angular.js

Shaping-up With Angular.js, un curso para aprender Angular.js

El curso en cuestión

https://www.codeschool.com/courses/shaping-up-with-angular-js

Reseña

Tengo que decir que debido a mi anterior trabajo, me ha sido un poco difícil utilizar cursos y herramientas en línea para aprender alguna tecnología y hasta el momento tampoco había encontrado una fuerte razón para utilizarlos.

La mayor parte del tiempo he leído libros (digitales y físicos) sobre los temas que me interesan: Effective Java, MVC 3 y 4, Entity Framework, Objective-C, Swift entre otros; sin embargo, en estos días que he tenido un poco más de tiempo libre y acceso a internet encontré el curso de Shaping Up With Angular.js de Code School.

Para ser sinceros es el primer curso en línea que encuentro que me ha entretenido lo suficiente para terminarlo por completo. El curso consta de 5 temas principales los cuales se presentan por capítulos (o niveles):

  1. Flatlander’s Gem Store. Introducción a Angular.js y el uso básico de controladores y directivas.
  2. Built-in Directives. Uso de filtros y controladores un poco más avanzado.
  3. Forms. Formularios, validaciones, binding y módulos.
  4. Custom Directives. Directivas personalizadas.
  5. Services. Servicios e inyección de dependencias.

El profesor es un tal Gregg Pollack que la verdad se ve que disfruta mucho haciendo los videos (pueden ver algunos bloopers al final de algunos videos) y tanto él como los asistentes técnicos se mueren de risa en algunos puntos específicos de los videos lo cual hace muy amena su visualización.

Después de la ver cada video viene una sección de ejercicios los cuales constan de una serie de tareas las cuales deben cumplir para obtener puntos. Existe un botón para evaluar tu respuesta que te ayuda a averiguar en qué te has equivocado. La evaluación no es perfecta ya que si metes código basura en tus javascript o html el sistema solo te dirá que existe un error, pero si tu respuesta está muy cercana a la respuesta final el sistema te da valiosos tips para que corrijas tu respuesta (me pregunto ¿cómo habrán implementado esto?).

Otro punto importante es que si de plano no puedes, o no quieres, pasar un nivel puedes comprar las respuestas haciendo uso de los puntos que has ganado de respuestas anteriores lo cual le da ese toque de gamification que tanto me gustó. Tus resultados los puedes compartir en tu LinkedIn o en algunas otras redes sociales para presumir a tus amigos, vecinos y compañeros de trabajo; también puedes guardar tu progreso creando una cuenta en el sitio lo cual es de mucha ayuda ya que si te cansas puedes retomar tu curso exactamente en el punto que lo habías dejado.

La verdad es que usualmente los cursos que solo vienen en video (Youtube) son útiles para aprender ciertas cosas, de igual forma los libros son necesarios en algunos casos; sin embargo, creo que para aprender sobre nuevos temas de programación siempre es necesario hacerlo por partes (un capítulo a la vez), además de que el poder realizar ejercicios donde apliques lo aprendido ayuda a consolidar la información en tu cerebro, finalmente el tener una herramienta donde no tengas que preocuparte por recordar el segundo exacto del video donde estaba el ejercicio que estabas resolviendo es una excelente ayuda.

Todo esto se resuelve muy bien en el curso de Shaping Up With Angular.js ya que mezcla de una forma muy acertada el uso de los videos y clases muy amenas con la ejecución de ejercicios escritos, por lo que si estás muy aburrido y no tienes nada que hacer estas vacaciones o si tienes una urgencia de aprender Angular.js (como yo) puedes darle una oportunidad a este curso y estoy seguro que no te decepcionará.

Por el momento eso es todo, saludos espero que puedan disfrutar el curso.