Archivo de la etiqueta: programación

Sinatra, un framework web para Ruby

sinatra logo

Ruby es un lenguaje de programación que se ha hecho tremendamente conocido (de hecho es el lenguaje más usado en los repositorios de GitHub en estos momentos), Es un lenguaje dinámico y orientado a objetos que es sencillo de aprender. Además, posee diversos frameworks que lo convierte en un lenguaje potente para desarrollar aplicaciones web.

Uno de estos frameworks toma el nombre del célebre artista Frank Sinatra. Se usa en la actualidad por empresas como la BBC o la propia GitHub. Es tremendamente potente y bastante más sencillo que Ruby On Rails, más conocido y complejo. En este artículo veremos una brevísima introducción a qué es trabajar con Sinatra.

Instalación

Lo primero que necesitamos es una instalación de Ruby, para lo cual tenemos varios enlaces en su página oficial dependiendo de nuestro sistema operativo. Una vez instalado ruby podremos agregar nuevos paquetes usando RubyGems, y deberemos ejecutar el siguiente comando desde nuestra consola:

$ gem install sinatra

Descifrando el Hola Mundo

El hola mundo que nos ofrece el framework es muy sencillo, y es lo que podemos encontrar en la página principal. Acudimos a una carpeta cualquiera de nuestro sistema, y creamos un fichero llamado hi.rb:

require 'sinatra'

get '/hi' do
  "Hello World!"
end

Para ejecutar esta aplicación solamente tendremos que escribir el siguiente comando en nuestra terminal:


$ ruby -rubygems hi.rb
== Sinatra has taken the stage ...
>> Listening on 0.0.0.0:4567

A continuación se cargará el servidor de desarrollo de ruby, y solamente tendremos que acudir a localhost:4567 y ver nuestra página en funcionamiento.

El primer valor que se muestra es el comando HTTP al que responde (si recordamos este artículo los diferentes comandos HTTP son get, post, put, delete… ) con lo cual podemos hacer que nuestra aplicación responda a una petición en concreto, lo cual nos puede ser de gran utilidad si estamos desarrollando cualquier tipo de servicio web.

Además de mostrar código, podemos hacer uso de los diferentes motores de visualización que soporta. Uno de ellos se conoce como erb (acrónimo de embebed ruby), y permite tener en una página HTML código ruby.

Para ello editamos nuestra aplicación y agregamos el siguiente código:

...

get '/hello/:id' do
  @name = params[:id]
  erb :hello
end

Además necesitamos crear una carpeta llamada views (que contendrá las vistas de nuestra aplicación) y agregar el fichero, que tendrá extensión erb.



</pre>
<h2>Hello</h2>
<pre>


Esto no es del todo cómodo ya que nos obliga a repetir el código de marcado para cada vista que queramos tener en nuestra aplicación, sin embargo lo que podemos hacer es tener una plantilla que inserte cierto código antes y después de la vista, para lo cual usamos un fichero llamado layout.erb que contendrá la estructura básica del sitio, y actualizaremos el código para mostrar esta diferencia.


    
    

 


El código anterior contiene una etiqueta, yield, que especifica donde se ha de cargar el código específico de nuestra vista. El fichero de la vista actualizado contendría la siguiente información:

</pre>
<h2>Hello</h2>
<pre>

Con esto seríamos capaces de crear un portal básico que responda a ciertos parámetros de entrada.

Pasos adicionales

Tenemos mucho más que poder agregar a nuestra app: Modelos de datos con DataMapper, autorización con Warden, posibilidad de devolver los resultados en formato json (y usarlo entonces como un servicio web)… Las posibilidades son infinitas, pero todo comienza con get “/hi”….

Más información

Tutorial básico de GDB, parte 2

En el post que escribí anteriormente sobre el tema, veíamos una introducción al manejo de GDB con un programa de un único fichero.

En esta entrega vamos a indagar un poco más y vamos a ver cómo se trabaja con diferentes ficheros, y algunos comandos adicionales que nos harán la vida más sencilla, y que nos olvidemos definitivamente de “depurar con printfs“.

Sigue leyendo

Tutorial rápido de GDB

GDB: The Gnu Debugger, amado por algunos, odiado por otros y desconocido entre un público mucho más amplio. Vamos a hacer un pequeño tutorial sobre cómo usar este debugger para depurar un programa sencillo escrito en C.

El programa en función sería este, para probarlo creamos un archivo nuevo y lo guardamos:

#include
int main(){
	int primero;
	int intermedio;
	int resultado;
	intermedio = primero + 4 * 5 - 2;
	resultado = intermedio * 4;
	printf("%d\n",resultado);
}

Compilamos usando

 gcc -ggdb ejemplo.c

Ejecutamos nuestro programa y nos devuelve 15450136, y lo volvemos a ejecutar y devuelve 42352664, algo va mal…

NOTA: Si has descubierto por tí mismo donde falla enhorabuena!, pero vamos a usar el depurador para cuando esos casos no son TAN evidentes.

Vamos a ver qué va mal, para ello abrimos nuestra consola y escribimos

 gdb a.out 

si ejecutamos el comando run se ejecuta un equivalente a escribir en la consola

 ./a.out 

No pasa nada especial, como era de esperar. Vamos a darle un poco más de vida y vamos a agregar nuestro primer breakpoint, que se agregan en función del número de línea en el fichero original. Una vez agregado gdb nos devuelve un mensaje diciendo donde ha agregado el punto de interrupción.

(gdb) break 7
Punto de interrupción 1 at 0x80483cd: file prueba.c, line 7.
 

Si volvemos a ejecutar, veremos que se detiene en la línea que hemos especificado, y nos muestra esta información por pantalla:

Breakpoint 1, main () at prueba.c:7
7		intermedio = primero + 4 * 5 - 2;

La diferencia entre nuestro editor de textos y esto, es que una vez detenidos en la línea podemos escribir

(gdb) print intermedio
$1 = 134513691
(gdb) print primero
$2 = 2654196

y nos mostrará por pantalla el valor de las variables en tiempo de ejecución. Limpio, simple, y no hemos tenido que ensuciar el código llenando la ejecución de printfs. De esta manera podemos ver que el error estaba en que no habíamos inicializado la variable primero, y lo podremos corregir.

Dejo para un posible futuro post el trabajo con estructuras y con múltiples ficheros, pero para una primera aproximación espero que sea útil.