Un servidor web en 30 líneas de código

Interesante este post de Oren Eini. Es un código escrito en Boo (lenguaje tipo Python para .NET):

import System.Net
import System.IO

if argv.Length != 2:
	print "You must pass [prefix] [path] as parameters"
	return

prefix = argv[0]
path = argv[1]

if not Directory.Exists(path):
	print "Could not find ${path}"
	return

listener = HttpListener()
listener.Prefixes.Add(prefix)
listener.Start()

while true:
	context = listener.GetContext()
	file = Path.GetFileName(context.Request.RawUrl)
	fullPath = Path.Combine(path, file)
	if File.Exists(fullPath):
		context.Response.AddHeader("Content-Disposition","attachment; filename=${file}")
		bytes = File.ReadAllBytes(fullPath)
		context.Response.OutputStream.Write(bytes, 0, bytes.Length)
		context.Response.OutputStream.Flush()
		context.Response.Close()
	else:
		context.Response.StatusCode = 404
		context.Response.Close()

Y ejecutando el comando:

$ booi prueba.boo http://localhost:8085/ ~/Escritorio/

tenemos funcionando un webserver localmente. Me acuerdo como en una de las charlas de alguna de las jornadas Python en Santa Fe el disertante hacía algo similar. La verdad, muy útil este tipo de código.

Zaspe# 0.0.3

Ayer vino Sebastián a casa. Mientras tomábamos unos mates me comentó que en un evento en el que participó utilizó Zaspe#. Si si, ¡Zaspe# tiene un usuario! 😛 En realidad, quizá unos cuantos, ya que en la página de download del proyecto figuran 80 descargas al día de hoy. No no, no fui yo quien realizó las descargas para hacerles creer que algunas personas tienen algún tipo de interés, al parecer, de verdad lo tienen 🙂 Quizá al probarlo se dieron cuenta de que todavía le falta bastante, si bien es posible registrar personas, eventos y llevar las asistencias. Lo más importante, que me comentaba el Seba, son los reportes, algo de lo que carece.

Esta aplicación me sirvió más a mí para aprender Gtk con Mono que al usuario que en un principio me había pedido este desarrollo.

En fin, Sebastián me mencionó algunos bugs que tenía la versión 0.0.2, de lo que era consciente, y ya estaban corregidos en trunk. Por lo tanto, decidí realizar este release. El proyecto está bastante parado, el problema, como dije, son los reportes. Hubo avances con MonoReporter, pero todavía nada suficiente como para poder generar listados de personas, de eventos, asistencias, etc.