Integrar Twitter Bootstrap con Ruby on Rails

Twitter Bootstrap es un framework que nos ayuda a desarrollar de forma rápida aplicaciones web. Provee una amplia variedad de código CSS y Javascript para implementar layouts, navegaciones y formularios, así como soporte para diseño adaptativo (Responsive Web Design).

Una opción para usar Bootstrap es la de descargarnos desde la página del framework el CSS y el Javascript e importarlos en el directorio /app/assets/ de nuestro proyecto rails, pero esta no sería la mejor manera de hacerlo si usamos Rails. Twitter Boostrap está escrito con LESS, que es un preprocesador de CSS similar al que usa Rails (SASS), así que si queremos aprovechar todo el potencial de Bootstrap, deberíamos usar un lenguaje como LESS, en lugar de ficheros estáticos. Para integrar LESS con Rails debemos usar varias gemas, como twitter-bootstrap-rails, que es la que yo he usado, aunque hay otras opciones.

Para integrar Bootstrap debemos partir de una aplicación rails ya creada mediante la orden rails new [nombre_app], así como algún modelo del tipo rails g scaffold product name price:decimal –skip-stylesheets. Hemos utilizado la opción --skip-stylesheets porque queremos utilizar las CSS de Bootstrap en lugar de la que sería generada automáticamente. Después, generamos la tabla en base de datos con rake db:migrate. Una vez hecho esto ya es posible ejecutar la aplicación pero con un aspecto nada atractivo todavía. Es hora de integrar Bootstrap.

Lo primero que hay que hacer es añadir la gema twitter-bootstrap-rails al fichero Gemfile que se encuentra en el directorio raíz de la aplicación.

/Gemfile
# Gems used only for assets and not required
# in production environments by default.
group :assets do
        gem 'sass-rails',   '~> 3.2.3'
        gem 'coffee-rails', '~> 3.2.1'

        # See https://github.com/sstephenson/execjs#readme for more supported runtimes
        # gem 'therubyracer'

        gem 'uglifier', '>= 1.0.3'
        gem 'twitter-bootstrap-rails'
end

Instalamos twitter-bootstrap-rails y sus dependencias (libv8 y less-rails) ejecutando bundle install. Una vez ejecutada la orden anterior, llamamos al generador para finalizar el proceso de instalación y colocar Bootstrap (javascript, css) en el directorio /app/assets.

$ rails g bootstrap:install
insert  app/assets/javascripts/application.js
create  app/assets/javascripts/bootstrap.js.coffee
create  app/assets/stylesheets/bootstrap_and_overrides.css.less
gsub  app/assets/stylesheets/application.css
gsub  app/assets/stylesheets/application.css

En el directorio css está situado el fichero bootstrap_and_overrides.css.less, que es el sitio ideal para personalizar nuestros estilos de la aplicación. De echo, si ejecutamos a continuación la aplicación, veremos que la misma tiene otro aspecto, aunque aún es mejorable.

A partir de ahora empezaríamos a diseñar el layout de la aplicación. Editaremos el fichero application.html.erb para incluir el header (encabezado) de todas las páginas de la aplicación:

/app/views/layouts/application.html.erb 
<!DOCTYPE html>
<html>
    <head>
            <title>Store</title>
            <%= stylesheet_link_tag    "application", :media => "all" %>
            <%= javascript_include_tag "application" %>
            <%= csrf_meta_tags %>
    </head>
    <body>
        <div class="container">
                <%= yield %>
        </div>
    </body>
</html>

Con el código insertado entre los tags head mejoramos el comportamiento de HTML5 para versiones anteriores de Internet Explorer, e incluimos los META para incluir Responsive Design para su mejor visualización en los dispositivos móviles. A partir de este momento podemos incorporar cualquier elemento que aparece en la sección de componentes de Bootstrap siguiendo la documentación existente, de manera fácil e intuitiva y utilizando el fichero bootstrap_and_overrides.css.less para personalizar los estilos.

Lo Básico

Si nunca has utilizado Bootstrap debes saber que utiliza un sistema de rejilla de 12 columnas, lo que facilita la creación de un layout especificando la anchura de cada columna. Este layout será responsive, por lo que si modificamos el ancho de la ventana, el contenido se adaptará al nuevo ancho, ideal para visualizar el diseño con un smartphone o tablet. Un ejemplo sería el siguiente, que crea una barra lateral con tamaño de 3 columnas (span3) y el contenido de nuestra aplicación en 9 columnas (span9).

 /app/views/layouts/application.html.erb 
<!DOCTYPE html>
<html>
    <head>
            <title>Store</title>
            <%= stylesheet_link_tag    "application", :media => "all" %>
            <%= javascript_include_tag "application" %>
            <%= csrf_meta_tags %>
    </head>
    <body>
        <div class="container">
                 <div class="row">
                      <div class="span9"><%= yield %></div>
                      <div class="span3">
                         <h2>About Us</h2>
                         <p>Lorem ipsum dolor sit amet, 
consectetur adipisicing elit, sed do eiusmod tempor incididunt 
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 
consequat. Duis aute irure dolor in reprehenderit in voluptate 
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
occaecat cupidatat non proident, sunt in culpa qui officia deserunt 
mollit anim id est laborum.</p>        
                      </div>
                 </div>
       </div>
    </body>
</html>

Para añadir una barra de navegación responsive en la parte superior de la pantalla, cuyo menú se colapse en un icono desplegable con los enlaces del menú cuando el ancho de la ventana se reduzca, Bootstrap incluye estilos para el siguiente código:

/app/views/layouts/application.html.erb
<div>
    <div>
        <div>
            <a data-toggle="collapse" data-target=".nav-collapse">
                <span></span>
                <span></span>
                <span></span>
            </a>
            <a href="#">Some Store</a>
            <div>
                <ul>
                    <li><%= link_to "Browse Products", products_path %>
                          </li>
                    <li><%= link_to "Price List" %></li>
                    <li><%= link_to "Contact Us" %></li>
                    <li><%= link_to "Cart" %></li>
                </ul>
            </div>
        </div>
    </div>
</div>

 

somestore

En este post hemos visto como integrar Bootstrap en una aplicación rails mediante twitter-bootstrap-rails, como personalizar los estilos en el fichero bootstrap_and_overrides.css.less mediante LESS y como incorporar componentes básicos en nuestra aplicación.

JScrollPane, Barras de Scroll en Divs

¿Necesitas incluir barras de scroll a una o más capas dentro de tu página? En este post encontraréis una posible solución utilizando un plugin jQuery llamado jScrollPane.

¿Necesitas incluir barras de scroll a una o más capas dentro de tu página? En este post encontraréis una posible solución utilizando un plugin jQuery llamado jScrollPane.

En ocasiones llenamos nuestras páginas de de mucho contenido dentro de uno o varios divs. Más tarde nos damos cuenta de que el área reservada en un div para mostrar ciertos elementos o texto se ha quedado pequeño, y al crecer la página la página deja de verse correctamente. Tanto si este es tu problema como si únicamente quieres incluir scroll a una capa este plugin de jQuery te ayudará.

Lo primero que debemos hacer es descargarlo desde http://jscrollpane.kelvinluck.com/#download, necesitaremos lo siguiente:

  • jquery.jscrollpane.css. Estilos básicos CSS necesarios para hacerlo funcionar
  • jquery.jscrollpane.min.js. Es la versión reducida del fichero javascript de jScrollPane. Podemos usar el fichero sin minimizar, de manera que nos permita ver el código y los comentarios sobre el mismo.
  • Obviamente, la librería jQuery.
  • jquery.mousewheel.js. Opcional. Es el plugin mousewheel, para hacer scroll con la rueda que incorporan la mayoría de los ratones.
  • mwheelIntent.js. Opcional. Es el plugin mWheelIntent para mejorar la usabilidad usando la rueda del ratón.

El uso es muy sencillo, después de descargar los ficheros necesarios los incluimos en el head de nuestro código html:

<!-- estilos jScrollPane -->
<link type="text/css" href="jquery.jscrollpane.css" rel="stylesheet"/>

<!-- versión de jQuery  -->
<script type="text/javascript" src="jquery.min.js"></script>

<!-- El plugin mousewheel plugin - opcional - provee soporte para la rueda del ratón -->
<script type="text/javascript" src="jquery.mousewheel.js"></script>

<!-- Fichero javascript de jScrollPane -->
<script type="text/javascript" src="jquery.jscrollpane.min.js"></script>

Ahora tenemos que inicializar jScrollPane al cargar la página de la forma:

<script type="text/javascript">
	$(document).ready(function($){
		var pane = $("#cajafechas")
		pane.jScrollPane();
		var api = pane.data('jsp');
		api.scrollToBottom();
	});
</script>

En el ejemplo tenemos una capa con el id cajafechas, a la que aplicamos el plugin. Esta capa se va completando con fechas de forma dinámica, cuando el número de fechas sea muy grande, aparecerán las barras de scroll. Bastaría con poner la línea $("#cajafechas").jScrollPane();, pero necesitamos que al iniciar la página el scroll se desplace al final. Para ello llamamos a un método del API, scrollToBottom().

Hay muchas formas de usar jScrollPane (animaciones, estilos de barra, etc), bien a través de parámetros de configuración o bien a través del API. En la página del desarrollador se pueden encontrar multitud de ejemplos.

 

Cuándo Adquirir una Licencia Comercial de MySQL

MySQL tiene licencia dual. ¿Qué quiere decir esto? Por una parte es libre, y por otra es comercial. Puedes obtener el software de MySQL bajo licencia GPL (v.2) o puedes comprar una licencia. Está muy extendida la sensación de que si ganas dinero con MySQL hay que comprar una licencia comercial.

A raíz de la publicación del post sobre la instalación de un servidor LAMP en Ubuntu, apareció un comentario en el mismo en el que el autor me solicitaba información acerca de si es obligatorio comprar una licencia comercial de MySQL al instalar en un cliente el sistema Ubuntu junto con este servidor.

MySQL tiene licencia dual. ¿Qué quiere decir esto? Por una parte es libre, y por otra es comercial. Puedes obtener el software de MySQL bajo licencia GPL (v.2) o puedes comprar una licencia. Está muy extendida la sensación de que si ganas dinero con MySQL hay que comprar una licencia comercial. Esto no es correcto del todo.

MySQL se distribuye bajo la licencia GPL, no es una licencia fácil de entender, por esto mismo MySQL confunde a muchos desarrolladores. ¿Hay que pagar para poder vender un producto que funciona con MySQL? Únicamente se requiere una licencia comercial en estos dos escenarios:

  1. Si queremos modificar el código de MySQL y queremos redistribuir estas modificaciones cobrando por ellas.
  2. Si queremos incluir MySQL dentro de nuestro software como uno solo. Hay que tener en cuenta que no significa que no podamos conectarnos con MySQL, si no que no podemos incluirlo en nuestro software. Por ejemplo, WordPress trabaja con PHP y se conecta a MySQL, pero no lo distribuye.

Muy importante. Si quieres incluir MySQL dentro de tu software y distribuirlo conjuntamente y no deseas comprar una licencia comercial, puedes hacerlo, pero tu software deberá estar licenciado de la misma forma, acogiéndote a la licencia GPL y liberar el código.

O sea, para cualquier otra cosa, no necesitamos una licencia comercial. Las siguientes cosas están permitidas bajo la licencia GPL:

  • Gestionar un negocio que te reporte beneficios usando MySQL
  • Modificar su código fuente como se desee.
  • Vender y distribuir MySQL (hay que hacerlo bajo licencia GPL también).
  • Redistribuir las modificaciones realizadas.

Otros puntos importantes que la licencia no obliga:

  • No requiere redistribuir las modificaciones realizadas a MySQL
  • No requiere de una licencia GPL del software que se conecta a MySQL
  • No obliga a que todo el software en su empresa también sea GPL

Para aclarar las ideas acerca de la licencia GPL, puedes consultar las FAQ de la licencia. Cómo observaréis todo software libre puede no ser gratis, dependiendo de la licencia bajo la que se acoja. El motor de base de datos PostgreSQL, por ejemplo, es otra alternativa para entornos de producción que se distribuye bajo su propia licencia, muy similar a la licencia MIT y mucho menos restrictiva que la GPL.

Repositorio de Eclipse en Dropbox

Cuando desarrollamos un proyecto, uno de los problemas que nos podemos encontrar es el de llevar con nosotros el código del mismo. Ya sea almacenado en un sistema de almacenamiento en la nube o en un dispositivo USB, puede ocurrir que se nos olvide actualizarlo o bien que nos dejemos el USB olvidado. Una solución pasa por usar Dropbox para almacenar el repositorio de Eclipse.

Cuando desarrollamos un proyecto, uno de los problemas que nos podemos encontrar es el de llevar con nosotros el código del mismo. Ya sea almacenado en un sistema de almacenamiento en la nube o en un dispositivo USB, puede ocurrir que se nos olvide actualizarlo o bien que nos dejemos el USB olvidado.

Una solución pasa por usar Dropbox para almacenar el repositorio de Eclipse. Dropbox, como ya analicé en otro post, es un servicio de almacenamiento online gratuito hasta 2 Gb con un programa de sincronización integrado. Funciona en los tres sistemas operativos más utilizados (Windows, Mac y Linux). Simplemente con tener conexión a Internet puedes instalar la aplicación (o acceder al servicio vía navegador). Se trata pues de una buena solución para llevar el código contigo. Dropbox lo puedes obtener en la página www.dropbox.com.

Uno de los IDEs más utilizados en el desarrollo de aplicaciones es Eclipse. Veamos cómo configurar un repositorio dónde almacenar nuestros proyectos cuyo código se va a sincronizar en todas los equipos dónde tengamos instalado Dropbox.

Una vez que tengamos instalada la aplicación podemos crear una carpeta donde almacenar el proyecto. Para ello abrimos la carpeta Dropbox y creamos una carpeta con el nombre que deseemos, por ejemplo Eclipse.

En el caso de que ya tengamos un proyecto y queremos pasarlo a Dropbox y modificar Eclipse para que abra el nuevo repositorio seguiremos los siguientes pasos:

  1. Abrimos Eclipse normalmente y borramos el proyecto del workspace, pero cuando aparezca el cuadro de diálogo pidiendo la confirmación debemos estar seguros de no marcar la casilla para borrar también los contenidos del disco.
  2. Una vez borrado, navegamos con el explorador de archivos de Windows (o el equivalente en los diferentes Sistemas Operativos) hasta la carpeta del repositorio actual, y movemos la carpeta con el proyecto que acabamos de borrar, a la carpeta que hemos creado en Dropbox.
  3. Volvemos a Eclipse y seleccionamos File -> Switch Workspace -> Other…
  4. Seleccionamos la carpeta que hemos creado en Dropbox y pulsamos Ok.
  5. Esto hace que Eclipse se reinicie para cargar el nuevo repositorio.
  6. Una vez cargado seleccionamos File -> Import… -> General -> Existing Projects into Workspace, desde el menú.
  7. En la caja de texto Select root directory, seleccionamos la carpeta del nuevo repositorio dentro de Dropbox y en la lista de proyectos aparecerá el proyecto copiado. Lo seleccionamos y pulsamos Finish.
  8. Repetiremos los pasos del 3 al 7 para cada uno de los equipos que utilicemos (casa, oficina, portátil, etc.).

En el caso de que no tuviéramos un proyecto previo el proceso sería más sencillo. Simplemente realizaríamos los pasos 3 al 5 en cada uno de los equipos.

La sincronización entre las diferentes máquinas puede llevar algo de tiempo. Si modificamos el código en el trabajo y queremos recuperarlo cuando lleguemos a casa, simplemente refrescamos el workspace desde Eclipse y ya estará preparado para trabajar desde donde lo dejamos. Con 2 Gb. es más que suficiente para almacenar tus proyectos, aunque si necesitas más espacio puedes aumentarlo (Ver tarifas).

Otra de las características de Dropbox es que puedes hacer pública la carpeta y compartir enlaces entre las personas que tú autorices a la misma para compartir el código.

Cómo ves esta solución nos puede sacar de un apuro cuando no tenemos el código pero disponemos de una conexión a Internet y cuando queremos trabajar con el mismo desde diferentes equipos.

 

Gantter.com: La alternativa online a Microsoft Project

Si pensamos en una herramienta para la gestión de proyectos, a todos nos viene a la cabeza Microsoft Project. Aunque no es la única, sí es la más popular y la más extendida entre los profesionales para planificar y gestionar sus proyectos. Gantter.com es una aplicación web 2.0 para la planificación de proyectos que se integra, si así lo deseas, con Google Docs. Puedes pensar que Gantter es similar a MS Project sin que los usuarios tengan que comprar ni instalar nada, tan sólo utilizando su navegador.

Si pensamos en una herramienta para la gestión de proyectos, a todos nos viene a la cabeza Microsoft Project. Aunque no es la única, sí es la más popular y la más extendida entre los profesionales para planificar y gestionar sus proyectos.

Hace ya varios meses me encontraba realizando mi labor profesional en las instalaciones de un cliente en el que necesitaba la planificación de las tareas del proyecto, que habíamos realizado previamente en MS Project y no disponíamos de licencia para utilizar la herramienta. Descubrí entonces gantter.com.

Gantter.com es una aplicación web 2.0 para la planificación de proyectos que se integra, si así lo deseas, con Google Docs. Puedes pensar que Gantter es similar a MS Project sin que los usuarios tengan que comprar ni instalar nada, tan sólo utilizando su navegador. Hay que decir qué es compatible con todos los navegadores del mercado.

Comenzar a utilizarlo es muy sencillo. Después de un rápido registro (no es obligatorio, podremos utilizarla sin identificarnos) aparecerá una pantalla con el típico diagrama de Gantt en el que comenzaremos añadiendo las tareas e introduciendo las dependencias entre ellas. También podemos establecer los calendarios con el horario de trabajo y los días de vacaciones, así como asignar recursos a las tareas y algunas acciones avanzadas.

Pantalla de Gantter.com con un diagrama de Gantt

Una característica importante que hace la herramienta más atractiva si cabe es la opción de importar proyectos en el formato MS Project (.mpp), por lo que podemos trabajar con ellos, almacenarlos en la nube de Gantter (también en Google Docs como ya comenté) o volverlo a exportar en formato mpp de nuevo. En el caso de querer almacenarlo en tu dispositivo físico, puedes exportar y descargar tu proyecto en formato xml.

Permite compartir proyectos con otros colaboradores, de manera que les llegará una notificación para hacerles saber que compartes con ellos dicha planificación de tareas. Actualmente Gantter soporta más de 11 idiomas (y creciendo). Las funcionalidades son las mismas, sólo cambia la interfaz basada en el idioma seleccionado por el usuario.

En resumen, una herramienta muy completa y muy a tener en cuenta con las siguientes características:

  • Herramienta de planificación con gestión de tareas, recursos y calendarios.
  • No requiere instalación de software. Soporte para todos los navegadores.
  • Almacenar y compartir en la nube.
  • Se integra con Google Docs.
  • Posibilidad de importar/exportar ficheros MS Project (mpp).
  • Disponible en múltiples idiomas.