Translate

domingo, 23 de junio de 2013

Bottle: Python Web Framework


Se acuerdan de Sinatra? no el cantante! Sinatra el framework web de ruby; básicamente la idea es poder hacer una pagina web con muy poco esfuerzo. Es como un DSL para realizar paginas web; para que puede servir esto? para hacer prototipos o tambien puede ser muy practico para colgar servicios rest con json y consumirlo con javascript. La idea de sinatra  se extrapolo a otros frameworks, tecnologias y lenguajes; como por ejemplo Bottle que es el sinatra para Python.

Bottle es un micro framework rápido, sencillo y ligero para Python. Se distribuye como un módulo y esta formado por un único archivo y no tiene dependencias distintas de la biblioteca estándar de Python.

Veamos un ejemplo de un hola mundo con bottle:

from bottle import route, run, template

@route('/hello/<name>')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Y listo tenemos una pagina!

Como podemos ver en ejemplo por medio de @route indicamos la url y le decimos que nos van a pasar el nombre por la url, es decir usamos url restfull. Luego retornamos la pagina web. Podemos formar json y devolver json para hacer una API Rest o podemos utilizar template para hacer paginas webs. Genial!

Y si enviamos un mensaje con este framework va a ser...


Dejo link:
http://bottlepy.org
http://bottlepy.org/docs/dev/index.html


viernes, 21 de junio de 2013

The People Who Support Linux: You

La gente de linux.com compartió una genial infografía que describe quienes participan en el proyecto Linux:

Dejo el link:
http://www.linux.com/news/featured-blogs/185-jennifer-cloer/724867-the-people-who-support-linux-you

Dejo la infografía:

infogfx people linux final

miércoles, 19 de junio de 2013

Huayra, el linux más Argentino que el mate!


En visperas del día de la bandera vamos a hablar de un Linux Argentino, como Peron, como el mate, como nosotros.  Esté es el sistema operativo que se utiliza en las netbooks  de el programa del gobierno "conectar igualdad", no voy a dar mi opinión sobre este programa. Pero si les dejo esta reseña del sistema operativo:

Basado en Debian GNU/Linux, Huayra es más seguro, más ágil y desarrollado en Argentina teniendo en cuenta las necesidades tantos de estudiantes como de docentes y manteniendo nuestra identidad nacional. Huayra  toma su nombre del vocablo quechua que significa viento: viento de cambios, vientos de libertad, vientos de soberanía tecnológica. Además de ser un sistema operativo libre, Huayra ha sido pensado y desarrollado para el uso de la comunidad educativa. A través de él puede accederse a una gran variedad de programas y aplicaciones educativas.  

Es un tanto extraño el termino soberanía tecnológica; pero bueno la verdad es que es muy bueno que se haya optado por una alternativa libre y se haya decidio invertir en software libre. En mi opinión es un buena decisión.

Un poco de info técnica:

Para ello decidimos basarnos en Debian, una distribución de GNU/Linux que:

  • - Permite ser adaptada a necesidades propias para diseñar distribuciones específicas.
  • - No depende de ninguna empresa o corporación y sus formas de gobierno se encuentran documentadas y son permeables al ingreso de nuevos actores.
  • - Posee cerca de 25 mil paquetes de software y soporta más de 10 arquitecturas de hardware.
  • - Cuenta con un gran comunidad de voluntarios a nivel mundial.
  • - Posee un sistema de control de calidad fiable y bien documentado.
  • - Es la metadistribución origen de otras grandes distribuciones como Ubuntu, Guadalinex, Canaima, Knopix, etc.

Detalles Técnicos de Huayra

  • - Basada en Debian
  • - Entorno de escritorio: Gnome Shell
  • - Licencia: Mayormente GNU GPL
  • - Repositorios propios y abiertos
  • - Documentación propia
  • - Tema de ventanas propio


Dejo link:
http://huayra.conectarigualdad.gob.ar/
http://www.conectarigualdad.gob.ar/

domingo, 16 de junio de 2013

Que curso puedo hacer?

Que curso puedo hacer? y si hago este o aquel curso, sera difícil, fácil, cuantas horas me puede llevar por semana?

Para responder estas preguntas existen redes sociales de cursos on line... Muy bueno! Donde la gente opina de cursos que ha hecho y deja su puntuación,  además agrega cuantas horas le consume y que dificultad tiene.

Dejo los links:
http://knollop.com/
http://coursetalk.org/

Simplify IT and Unleash Innovation




Oracle nos regala una guía para simplificar nuestro trabajo, obviamente con sus productos; pero vale la pena darle una ojeada. Lo único malo es que hay que hacerse un usuario, es gratuito, pero hay que hacerlo :(











Dejo el link:
http://www.oracle.com/webapps/dialogue/ns/dlgwelcome.jsp?p_ext=Y&p_dlg_id=11705213&src=7011103&Act=103

sábado, 15 de junio de 2013

Racket


Como les aconseje en el siguiente post : http://emanuelpeg.blogspot.com.ar/2013/06/introduction-to-systematic-program.html; un curso que esta muy bueno en cursera es "Introduction to Systematic Program Design". En este curso se utiliza el lenguaje Racket.

Racket es un lenguaje de la familia de lisp/scheme, multiparadigma y es un lenguaje de propósito general que se utiliza para la enseñanza, investigación y para cualquier otra cosa. Tiene un entorno que se llama DrRacket, funciona en diferentes plataformas; yo lo estoy corriendo en Linux sin problemas.

Como se pueden imaginar al ser un lenguaje derivado de lisp es funcional, pero también fue influido por scheme y eiffel. De este ultimo toma la programación dirigida por contratos. A la vez soporta macros y es muy extensible. Una cosa curiosa es que soporta elementos gráficos, en realidad me resulta curioso a mi, podemos hacer esto:

(require 2htdp/image)
(triangle 80 'solid 'red)

y dibujara un triangulo.

Esta muy bueno para enseñar programación funcional y también para introducir a los alumnos a programación dirigida por contratos.

También tiene funciones similares a doctest de python es decir podemos hacer:

;; devuelve la suma de dos nros
(check-expect (suma 2 3) 5)
(check-expect (suma 5 3) 8)
(check-expect (suma 2 30) 32)
(check-expect (suma 2 -3) -1)

(define (suma nro1 nro2)
  (+ nro1 nro2)
 )

y haciendo esto la ide nos devolverá: "All 4 tests passed!"

Es lanzado con licencia LGPL por lo tanto lo podemos usar para hacer proyectos GPL y también comerciales.

Dejo links:
http://racket-lang.org/
https://en.wikipedia.org/wiki/Racket_(programming_language)

Dejo unas fotos de la IDE:



Javapocalypse

Un divertido vídeo de javaZone:


jueves, 13 de junio de 2013

martes, 11 de junio de 2013

Aprender couchdase

Si queres aprender couchbase solo tenes que ir a:  http://www.couchbase.com/learn donde podrás encontrar mucha información, webinars, papers,  presentaciones.

domingo, 9 de junio de 2013

Introduction to Systematic Program Design

Quiero recomendar el siguiente curso de coursera "Introduction to Systematic Program Design", que explica como diseñar programas. Esta muy orientado a la programación funcional, se usa un lenguaje llamado racket que es un derivado de Lisp, también se basa en un libro: "How to Design Programs". A primera vista esta muy bueno.

Dejo un video:


Dejo links:
https://class.coursera.org/programdesign-001
http://www.ccs.neu.edu/home/matthias/HtDP2e/
http://htdp.org/
http://racket-lang.org/


Libro oficial del administrador de Debian en español para su descarga


Quiero compartir este libro que es gratuito y vale la pena su difusión.

Dejo el link:
http://www.4shared.com/office/iY4NOc8Z/Hertzog_R__Mas_R_-_El_libro_de.html

y la fuente:

http://www.rinconinformatico.net/libro-oficial-del-administrador-de-debian-en-espanol-para-su-descarga/

sábado, 8 de junio de 2013

Las Ides del futuro...

Leyendo infoQ me encontre con una noticia de una idea que se desarrollo sobre OpenGL, me parecio buena pero muy inutil. La verdad es que creo que no hay mayores inovaciones en los entornos de desarrollo.  No he utilizado IntelliJ que según lo que sé esta bastante bueno. Que agregarían a las IDES del futuro?

Dejo video:


Dejo link:

10 cosas que un desarrollador debe conocer de couchdase

Couchdase es un producto que nació como la fusión de memdase y couchDB. La empresa Membase Inc. anuncio que se funcionaría con CouchOne. Uniendo también sus productos memdase y couchDB.

Como desarrolladores debemos saber los siguientes 10 items:


  • Acceso a los documentos en Couchbase es consistente: Couchbase garantiza una fuerte consistencia, asegurándose de que todas las lecturas y escrituras de un documento en particular van a un solo nodo de un clúster. 
  • Las escrituras son asíncronas por defecto, pero se puede controlar: Por defecto, las escrituras en Couchbase son asíncronas - replicación y persistencia suceden en background, y el cliente es notificado de un éxito o un fallo. Los cambios se guardan en la memoria y se vacían en el disco y replican en otros nodos Couchbase de forma asíncrona.
  • Couchbase tiene operaciones atómicas para contar y anexar
  • Un cubo es equivalente a una base de datos. Puede almacenar objetos de características o atributos diferentes en el mismo cubo. Así que si usted se está moviendo de un RDBMS, debe almacenar los registros de varias tablas en un solo cubo. Recuerde que debe crear un atributo "type" que ayudará a diferenciar los distintos objetos almacenados en el cubo y crear índices en ellos. Se recomienda comenzar con un cubo y crecer a más grupos cuando sea necesario
  • Trate de usar 5 o menos cubos en Couchbase. Nunca más de 10: Documentos no tienen un esquema fijo, varios documentos con diferentes esquemas pueden estar en el mismo cubo. La mayoría de las implementaciones tienen un bajo número de cubos (normalmente 2 ó 3) y sólo unos pocos más de 5. Aunque no existe un límite duro en el software, el máximo de 10 cubos previene problemas de performance.
  • El bloqueo optimista o pesimista, ¿cuál debería elegir? Si su aplicación necesita de bloqueo, considere primero el uso de CAS (bloqueo optimista) antes de usar (bloqueo pesimista) GETL. Pero recuerde, bloqueo no puede ser bueno para todos los casos.
  • Utilice las operaciones multi-get: Una vez que la aplicación cliente tiene una lista de los ID de documento, el enfoque de mayor rendimiento para recuperar artículos a granel con una petición de varios GET. Esto funciona mejor que un bucle de serie que trata de obtener para cada elemento de forma individual y de forma secuencial.
  • Mantenga las bibliotecas de cliente actualizadas: Asegúrese de que usted está utilizando la biblioteca de cliente más reciente. Bibliotecas de cliente Couchbase están disponibles en Java,. NET, C / C + +, Ruby, Python y PHP.
  • Modelar los datos mediante documentos JSON: Couchbase Server es compatible con JSON y el formato de documento binario. En primer lugar, tratar de modelar sus datos mediante JSON. Documentos JSON se pueden indexar y consultar. Puede almacenar blobs binarios y consulta gama off de los nombres clave. Comience por la creación de documentos de objetos a nivel de aplicación.
  • Utilice índices efectivamente: Use acceso clave primaria tanto como sea posible. Couchbase tiene claves y metadatos en la memoria - accesos de datos son rápidos.
Dejo link:



jueves, 6 de junio de 2013

Limitar un conjunto de datos agrupados




El problema es simple,queremos los 5 primeros mails de las personas, tenemos una tabla personas y una tabla mails. y la tabla mails conoce a la tabla personas.  Algo importante es que queremos los últimos mails, es decir los más nuevos.


Como podemos solucionar esto? con oracle la tenemos fácil porque existe el rank, la función rank va rankeando los resultados de una query, los rankea por una condición; por ejemplo los mails por persona:


SELECT RANK () OVER (PARTITION BY persona_id ORDER BY fecha DESC) orden,
persona_id,
email
FROM emails

Ahora bien si queremos limitar la cantidad de mails debemos hacer:

select persona_id, email from
(SELECT RANK () OVER (PARTITION BY persona_id ORDER BY fecha DESC) orden,
persona_id,
email
FROM emails)
WHERE orden < 5

Se pueden hacer muchas cosas muy buenas con rank y over. Over se puede utilizar también con el count.

Y todo gracias a Facundo Torres!!

Dejo links:
http://www.techonthenet.com/oracle/functions/rank.php
http://www.orafaq.com/node/55
http://www.oracle-base.com/articles/misc/rank-dense-rank-first-last-analytic-functions.php