Translate

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

miércoles, 5 de junio de 2013

Spring Framework 4.0 fue anunciado

La gente de spring no para y anuncia una nueva versión de su framework; que al parecer va tener su primer release candidate en septiembre de este año. Y es sorprendente si tenemos en cuenta que es un cambio importante de versión, con soporte a Java 8 y JEE 7, más un plus de funcionalidad.

Spring sigue creciendo, que se viene? Soporte a Java 8 es decir:

  • JSR-335 Lambda expressions.
  • JSR-310 La nueva Api de fechas de java 8
  • Y soporte al nuevo bytecode de java 8, para soportar Lambdas. 

Soporte a JEE 7 es decir:

  • JSR-343 JMS 2.0.
  • JSR-338 JPA 2.1.
  • JSR-349 Bean Validation 1.1.
  • JSR-236 Java EE 7 Enterprise Concurrency support.
  • JSR-356 Spring's WebSocket endpoint mode.

Que más agregar? Esperamos con ansias esta nueva versión.

Dejo link:
http://blog.springsource.org/2013/05/21/spring-framework-4-0-m1-3-2-3-available/
http://www.infoq.com/news/2013/06/Spring_Framework_4.0_Announced

martes, 4 de junio de 2013

Distro Picker, una gran idea para saber cual es tu distro ideal


Seguro que no sabes que instalar, te gustan todas las distros de linux. Algo que te puede ayudar es el Distro Picker. Es muy facil de usar, completas que escritorio te gusta más, que manejador de paquetes, para que lo vas a utilizar y listo. Te tira tu distro ideal.

Dejo link:
http://tuxradar.com/content/distro-picker-0

Manual de Ubuntu


Si instalaste ubuntu y no tenes idea de la vida, ni que es linux este manual es para vos. Un manual para principiantes y totalmente en castellano

Dejo link:
http://issuu.com/jarodriguez/docs/manual_ubuntu

99 Bottles of Beer


Como sabrán me gusta muchos los lenguajes de programación pero mucho más la cerveza. Por lo tanto quiero compartir el siguiente sitio que trata de lenguajes de programación aunque su nombre referencia a la cerveza.

En este sitio se recopilan ejemplos de un programa que debe imprimir la letra de la canción: 99 Bottles of Beer. Fácilmente en este sitio podemos comparar lenguajes de programación.

Dejo el link:
http://www.99-bottles-of-beer.net


domingo, 2 de junio de 2013

Processing

Processing es un lenguaje de programación y entorno de desarrollo de código abierto para las personas que desean crear imágenes, animaciones e interacciones. Desarrollado inicialmente con el objetivo de generar bocetos de software y para enseñar los fundamentos de la programación informática en un contexto visual, Processing se fue convirtiendo en una herramienta para la generación de trabajo real y profesional. Hoy en día, hay decenas de miles de estudiantes, artistas, diseñadores, investigadores y aficionados que utilizan processing para el aprendizaje, creación de prototipos de software y generación de software real.

Bueno pero que se puede hacer con Processing? Todo lo que tenga que ver con manipulación de imagenes, animaciones, etc. Les dejo unos vídeos:






Dejo link:
http://www.processing.org/