CAVAAC: Calculo de tubos neumaticos

Fecha: Noviembre 2013

Descripción:
Proyecto escolar para la materia de ingeniería de software. Aplicación web para el calculo de tuberías para actuadores o cilindros neumáticos.

Recursos:

  • Ruby on rails (2 y 4.0.1 respectivamente)
  • Bootstrap 2
  • Heroku

Enlaces:
CAVAAC – http://cavaac.herokuapp.com/

Código
GitHub – https://github.com/ricardo-raog/cavaac

Imagenes:
cavaac-shotcavaac-shot2

SpeakPy: Asistente por voz

Fecha: Mayo 2014

Versión: 0.6

Descripción:
SpeakPy es un script hecho en Python que te permitira dar ordenes a tu Raspberry Pi utilizando los servicios de reconocimiento de voz de Google, aunque puede ser usado en cualquier sistema Linux.

Recursos:
-Python
-Bash scripting

Código:
Github – https://github.com/ricardo-raog/SpeakPy

Vídeo:

Aumentar velocidad de aplicación Rails en Heroku con Unicorn

El creado de Ruby ahora trabaja en Heroku.

¿Qué es Heroku?

Heroku es una plataforma como servicio (SaaS), que nos permite alojar aplicaciones desarrolladas en distintos lenguajes como: Python, Ruby, Scala y Java sin preocuparnos demasiado por la infraestructura gracias a su sencillo gestor de Add-ons a demás de soportar MongoDB y PostreSQL para bases de datos. Su sistema esta basado en Debian sobre Amazon Web Services y lo mejor de todo es que es gratuito para aplicaciones pequeñas, si requieres mayor poder puedes comprar dynos (es el contenedor encargado de ejecutar un comando especifico, es como un proceso)según tus necesidades.

¿Qué es Rack?

Es una interfaz modular y adaptable para el desarrollo de aplicaciones web en Ruby. Permite manejar peticiones y respuestas HTTP de la forma más simple posible. Es utilizado por frameworks como Ruby on Rails y Sinatra

¿Que es Uicorn?

Rails fue diseñado para responder una petición a la vez, aunque con el tiempo se ha ido modificando para soportar concurrencia. Sin embargo aun no se ha implementado por completo y muchas aplicaciones no lo soportan. Ruby incluye WEBrick como servidor y es el que tu aplicación utiliza en este momento, lo cual esta bien para desarrollo pero en el entrono de producción las cosas cambian y es necesario exprimir al máximo de Heroku, para eso tenemos a unicorn.

Unicorn es un servidor HTTP para aplicaciones basadas en Rack y por lo tanto Ruby. Se aprovecha de las ventajas que ofrecen los sistemas tipo Unix y a demás nos permite ejecutar procesos Ruby de forma concurrente en cada dyno de Heroku. Es por eso que se recomienda usar unicorn si tu aplicación se encuentra en Heroku.

Instalación

Añadimos unicorn a nuestro Gemfile.

gem 'unicorn'

Procfile es un archivo dónde especificamos que comandos se ejecutaran en nuestros dynos

Creamos un archivo Procfile (si es que aun no lo tenemos), en la raíz de nuestra aplicación. Y añadimos lo siguiente para que Heroku ejecute nuestra aplicación con unicorn:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Creamos nuestro archivo en config/unicron.rb y agregamos.

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

De forma general; es estamos indicando que ejecute 3 procesos por dyno de un máximo de 4, que pre-cargue la aplicación para reducir los tiempos de inicio de cada proceso y  como iniciar o terminarlos. Para más información clic aquí.

¡Listo! realizamos el deploy con git. En mi caso la velocidad aumento considerablemente al cargar el sitio desde un dispositivo móvil Android y un poco menos en escritorio.

 

Referencias:

Process Types and the Procfile | Heroku Dev Center

Deploying Rails Applications With Unicorn | Heroku Dev Center

Unicorn en Heroku | Blog botti.co

Errores de validación en Rails con Bootstrap

Si estas utilizando la gema “twitter-bootstrap-rails” (que aún se mantiene en la versión 2 de Bootstrap) te has dado cuenta que al crear un scaffold y añadirle validaciones estas muestran un mensaje de error en tu formulario.

validation_scaffold

Bien pues al darle estilo a las vistas con Bootstrap:

rails g bootstrap:themed calculos -f

No se muestran los errores de validación.

Esto es por que el comando anterior en especial la parte -f sobreescribe las vistas. Borrando la parte de el código que mostraba los errores con el scaffold tradicional, basta con añadir este fragmento

<!-- Errores en la validación -->
<%= form_for @calculo, :html => { :class => 'form-horizontal' } do |f| %>
  <% if @calculo.errors.any? %>
    <div class="alert fade in alert-error">
      <h2><%= pluralize(@calculo.errors.count, "errore") %> impiden realizar este cálculo:</h2>
      <ul>
      <% @calculo.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %

Y dentro de nuestro modelo ya podemos añadir nuestras validaciones y el mensaje a mostrar:

validates :dato1, :dato2, :presence => {:message =>; "no puede estar vacio"}

Ahora los errores en la validación se muestran así.

validation_bootstrap

Instalar Ruby on Rails en Debian Wheezy con RVM

ruby

¿Qué es Ruby?

Ruby es un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad. Su elegante sintaxis se siente natural al leerla y fácil al escribirla. Es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro “Matz” Matsumoto.

Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.

Ruby_on_Rails_logo

¿Qué es Rails?

Ruby on Rails es un entorno de desarrollo web (framework) de código abierto que está optimizado para la satisfacción de los programadores y para la productividad sostenible. siguiendo el modelo MVC (Modelo – Vista – Controlador). Los principios fundamentales de Ruby on Rails incluyen No te repitas (del inglés Don’t repeat yourself, DRY) y Convención sobre configuración.

No te repitas significa que las definiciones deberían hacerse una sola vez. Convención sobre configuración significa que el programador sólo necesita definir aquella configuración que no es convencional.

¿Qué es RVM?

Ruby Version Manager nos permite instalar varias versiones de Ruby y sus gemas para después “swichear” entre ellas.

¿Por qué usar RMV?

  • Tenemos varias versiones de Ruby sin ocasionar conflictos
  • Podemos usar la versión que queramos dependiendo de las necesidades del proyecto
  • Nos permite actualizar de una forma más cómoda si se libera una nueva versión

Instalando en Debian Wheezy

Instalaremos RVM, Rails y Ruby estable con el siguiente comando:

\curl -L https://get.rvm.io | bash -s stable --rails

Esta es una instalación para un usuario y obtendremos una carpeta .rvm en nuestro home. Ejecuta este comando con tu usuario normal, nada de root o sudo

Toma un tiempo, mientras podemos ir por un café 😉

ACTUALIZACIÓN {

Al parecer hay un bug al instalar Rails en Debian y derivadas, no es algo muy grave solo toma más tiempo la instalación y hace mayor uso del procesador cuando llega a esta parte

Installing ri documentation for rails-4.0.0

Una alternativa sería instalar RVM y Ruby luego instalar Rails sin la documentación

gem install rails --no-ri --no-rdo


}

Una vez terminada la instalación cargamos RVM.

source ~/.rvm/scripts/rvm

Los comando en la terminal son subprocesos de esta, cuando se ejecuta un subproceso que modifica una variable de entorno los cambios desaparecen cuando termina el proceso. Si usamos el comando source no se ejecuta como un subproceso y permite mantener las modificaciones en las variables de entorno aun después de que el comando o script termine.

Para revisar que no nos falten dependencias

rvm requirements

Una vez instaladas las dependencias faltantes (si es que las hay) editaremos algunos archivos. RVM creo un archivo en home .bash_profile con lo siguiente dentro:

[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;&amp; source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

Lo copiamos al final del archivo .bashrc y eliminamos .bash_profile

¿Ahora qué?

Conocer las versiones disponibles de Ruy

rvm list known

Conocer las versiones instaladas

rvm list

Instalar una nueva versión

rvm install version_de_ruby

Cambiar de versión

rvm use version_de_ruby

 

Referencias:

Ruby es… | ruby-lang.org/es

El desarrollo web que nomolesta | rubyonrails.org/es

Install Ruby on Debian Wheezy using RVM | Circuidipity