Leyendo sobre C# en infoQ parece ser que quieren agregar contratos, pero que serían los contratos? En un momento de mi vida yo escribí sobre contratos, escribí algo como esto:
"Eiffel es el lenguaje pionero en el diseño por contrato. Diseño por contrato es un concepto basado en la calidad del software.
Diseño por contrato es una metafora de como los objetos deben colaborar entre ellos. La metafora se puede explicar como un cliente que debe contratar un servicio; lo cual lo hace por medio de un contrato.
El proveedor debe proporcionar un producto determinado o servicio y tiene derecho a esperar hasta que el cliente pague.
El cliente debe pagar y tiene derecho a obtener el producto o servicio.
Ambas partes deben cumplir con ciertas obligaciones, tales como las leyes y reglamentos, aplicables a todos los contratos."
Volviendo a C# han decidido implementar un mecanismo de programación basada en contratos de la siguiente manera:
public int Insert(T item, int index)
requires index >= 0 && index <= Count
ensures return >= 0 && return < Count
{ … }
Lo que esta haciendo acá es asegurarse de que index sea mayor a 0 y menor a count.
Dejo link: http://www.infoq.com/news/2015/05/CSharp-7-contract
Translate
viernes, 22 de mayo de 2015
WCF es Open Source
Ya esta no? mucha publicidad a microsoft para este humilde blog. Pero que más decir para mi es impensable lo que esta pasando con microsoft y disculpen que sea tan entusiasta, si no soy entusiasta con esto, con que? WCF open source, no lo veía ni en figuritas.
Para el que no conoce, Windows Communication Foundation (WCF) es un marco de trabajo para la creación de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrónicos de un extremo de servicio a otro. Un extremo de servicio puede formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser un servicio hospedado en una aplicación. Un extremo puede ser un cliente de un servicio que solicita datos de un extremo de servicio.
La verdad es que desconozco las partes técnicas de WCF pero me atrevo a copiar las librerías que han liberado:
Dejo link: http://www.infoq.com/news/2015/05/WCF-Open-Source
Para el que no conoce, Windows Communication Foundation (WCF) es un marco de trabajo para la creación de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrónicos de un extremo de servicio a otro. Un extremo de servicio puede formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser un servicio hospedado en una aplicación. Un extremo puede ser un cliente de un servicio que solicita datos de un extremo de servicio.
La verdad es que desconozco las partes técnicas de WCF pero me atrevo a copiar las librerías que han liberado:
- ServiceModel.Primitives
- ServiceModel.Http
- ServiceModel.NetTcp
- ServiceModel.Duplex
- ServiceModel.Security
Dejo link: http://www.infoq.com/news/2015/05/WCF-Open-Source
jueves, 21 de mayo de 2015
Si los lenguajes fueran autos.
En el blog hubo varias comparaciones de lenguajes de programación y comparándolo con varias cosas. Ahora llega una comparación con autos.
Dejo el link: http://crashworks.org/if_programming_languages_were_vehicles/
lunes, 18 de mayo de 2015
RabbitMQ, una cola de mensajería open source
Ya he hablado ciento de veces JMS en resumen podemos decir:
Cuando necesitamos comunicar 2 aplicaciones por medio de una red, se hace prioritario que las dos aplicaciones estén disponibles, por ejemplo cuando una aplicación se comunica con otra por medio llamados a procedimientos remotos (COM, CORBA, DCE y EJB) la aplicación receptora del mensaje debe estar activa, si esto no es así no recibirá nunca el mensaje. En ocasiones es poco probable poder realizar una comunicación sincrónica. La mensajería asíncrona es una forma de enviar mensajes indirectamente de una aplicación a otra sin esperar una respuesta.
JMS ofrece a las aplicaciones Java la opción de comunicarse de forma asíncrona. Cuando los mensajes se envían de forma asíncrona, el cliente no tiene que esperar a que el servicio procese el mensaje, ni a que el mensaje sea entregado. El cliente envía si mensaje y después continua con la suposición de que el servicio finalmente lo recibirá y procesará.
Cuando nosotros enviamos una carta no la enviamos por nuestros propios medios sino que la enviamos por medio del servicio postal. Ponemos la dirección la estampilla y listo. De forma similar, la vía indirecta el la clave de JMS. Cuando una aplicación envía información a otra mediante JMS, no hay vinculo directo entre ambas aplicaciones. En su lugar, la aplicación emisora coloca el mensaje en manos de un servicio que garantiza su entrega a la aplicación receptora. Hay dos conceptos principales en JMS: corredores de mensaje (message brokers) y destinos.
Cuando una aplicación envía un mensaje, lo entrega a un corredor de mensajes. El corredor de mensajes es la respuesta JMS a la oficina de correos. EL corredor de mensajes se asegurará de que el mensaje sea entregado en el destino especificado, dejando que el emisor siga con sus asuntos.
Cuando enviamos un correo es importante poner la dirección para que el servicio postal sepa dónde debe ser entregada. De igual forma, en JMS, los mensajes tienen una dirección con un destino. Los destinos son como los buzones donde se colocan los mensajes hasta que alguien llega a recogerlos.
No obstante, a diferencia de las direcciones postales, que indican una persona especifica o una calle, los destinos son menos específicos. A los destinos solo les incumbe donde sera recogido el mensaje, no quien lo recogerá. De esta forma los destinos son como enviar una carta dirigida “al residente”.
En JMS, hay dos tipos de destinos: colas y temas. Cada uno de estos está asociado a un modelo de mensajería concreto, bien de punto a punto (para colas) o bien de emisor a suscriptor (para temas)
Punto a Punto: cada mensaje tiene exactamente un emisor y un receptor. Cuando se entrega el mensaje al corredor de mensajes, este lo pone en una cola, cuando el receptor pide el mensaje este es eliminado de la cola.
Emisor a suscriptor: El mensaje es enviado a un tema todos los suscriptores del tema recibiran una copia del mensaje.
La comunicación asíncrona a través de JMS ofrece diversas ventajas sobre la comunicación sincrónica:
- La comunicación sincrónica implica una espera.
- El cliente no esta acoplado a la disponibilidad del servicio
- El cliente no esta acoplado a la ubicación del servicio
La implementación más utilizada en java es ActiveMQ pero leyendo sobre RabbitMQ, quede sorprendido, entre sus características podemos decir:
- Robusto
- Fácil de utilizar
- Multiplataforma
- Soporte comercial y open source
Ojo no es solo utilizable desde Java, podemos utilizarlo desde multiples plataformas: Ruby, .net, python, erlang, haaskell, Go, C++, Node.js, PHP y todos los lenguajes java (scala, groovy, etc)
Veamos un ejemplo, vamos a tener 2 aplicaciones una que envía hecha en python y la otra que recibe hecha en java;
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print " [x] Sent 'Hello World!'"
Ahora vamos a hacer un cliente en java:
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.QueueingConsumer;
public class Recv {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv)
throws java.io.IOException,
java.lang.InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" [x] Received '" + message + "'");
}
}
}
Muy bueno!!
Dejo Link:
martes, 12 de mayo de 2015
ATOM, A hackable text editor for the 21st Century
Hace tiempo que utilizo ATOM pero nunca se me ocurrió hacer un post a este excelente editor.
Entre sus características podemos nombrar:
- Multiplataforma
- Integrado con node.js
- Con un diseño modular, se pueden instalar más de 50 plugins
- Bueno, tenemos un montón de cosas que son esperables de un editor, Snippets, File system browser, Code folding...
Simplemente se baja y se instala y en pocos minutos se van a sentir como en casa.
Dejo link: https://atom.io/
lunes, 11 de mayo de 2015
Una nueva edición del ranking de lenguajes TIOBE
Se publico una nueva versión del ranking TIOBE, en este ranking se publican los lenguajes más utilizados y Java volvió a tomar la punta. Pero lo sigue bastante cerca C. Para ver más detalle:
Dejo link:
jueves, 7 de mayo de 2015
Unmasking HTML Emails, el nuevo curso gratuito de codeschool
Codeschool nos deja otro curso gratuito:
Dejo link: http://campus.codeschool.com/courses/unmasking-html-emails/
Dejo link: http://campus.codeschool.com/courses/unmasking-html-emails/
¿Podrá ser Dart y no Java el futuro de Android?
No era de esperar? Google es dueño de dos lenguajes Go y Dart. Tiene latente la amenaza de denuncias por patentes utilizando java, si bien todo eso ya paso Oracle no es una empresa que reconozca que perdio y se va a quedar en el molde.
A la vez java es un lenguaje que evoluciona a su ritmo, ritmo que Google debe esperar.
Por lo tanto, yo que google, cambio de lenguaje hace rato. Lo raro es que se haya inclinado por dart y no por go. Tendrá pensado en algún futuro hacer la plataforma Android multilenguaje? Lo veo bastante fácil y abarcaría a todo tipo de desarrolladores.
Dejo un link a un buen articulo: http://hipertextual.com/2015/05/dart-android
A la vez java es un lenguaje que evoluciona a su ritmo, ritmo que Google debe esperar.
Por lo tanto, yo que google, cambio de lenguaje hace rato. Lo raro es que se haya inclinado por dart y no por go. Tendrá pensado en algún futuro hacer la plataforma Android multilenguaje? Lo veo bastante fácil y abarcaría a todo tipo de desarrolladores.
Dejo un link a un buen articulo: http://hipertextual.com/2015/05/dart-android
Java vs Javascript
Muchas veces se refieren a javascript como java o confunden los dos lenguajes como si tuvieran algo que ver. Cosa que me saca de mis casillas.
No soy quien para juzgar estos dos grandes lenguajes, a mi entender ninguno es mejor solo fueron hechos para objetivos diferentes, para hacer diferentes cosas. En fin leí este resumen y me pareció bastante acertado:
I was trying to explain to someone the difference between Java and JavaScript. "It is like the difference between Star Trek and Star Wars."
Java is Star Trek. It was first, and it is all uniforms, regulations, and red alerts. JavaScript is Star Wars. Grit, chaos, and mysticism.
No soy quien para juzgar estos dos grandes lenguajes, a mi entender ninguno es mejor solo fueron hechos para objetivos diferentes, para hacer diferentes cosas. En fin leí este resumen y me pareció bastante acertado:
I was trying to explain to someone the difference between Java and JavaScript. "It is like the difference between Star Trek and Star Wars."
Java is Star Trek. It was first, and it is all uniforms, regulations, and red alerts. JavaScript is Star Wars. Grit, chaos, and mysticism.
sábado, 2 de mayo de 2015
Visual Studio Code, editor de código de Microsoft para Windows, OS X y GNU/Linux
Como sabrán venimos acompañando el movimiento de microsoft a open source. Ahora un notición liberaron un editor multiplataforma, para linux, Windows y OS X.
No solo eso, sino que se puede programar en diferentes lenguajes, ya sean propios de Microsoft como C#, F# y Visual Basic, o de otros como PHP, Phyton, Perl, SQL, shell scripting en Bash y Java. También soporta html y Css. Además se integra con GIT.
Que más decir, impensado, por lo menos para mí. Vamos a tener que probarlo.
Dejo link: https://code.visualstudio.com/
viernes, 1 de mayo de 2015
10 funcionalidades de Java 8 de las que no has oído hablar
Quiero recomendarles este articulo de java 8 de la gente de javahispano, dado que nos da otra mirada de java 8.
Les dejo el link: http://www.javahispano.org/portada/2015/4/28/10-funcionalidades-de-java-8-de-las-que-no-has-oido-hablar.html
El dificil trabajo de llevar un mundo estocástico a uno binario
Como sabrán vivimos en un mundo imperfecto, donde el cambio es el rey y señor. En ese mundo el profesional informático debe especificar requerimientos, hacer estimaciones y vivir.
Esto provoca muchos problemas, los cuales son los más caros sino se los detecta a tiempo. Como sabrán un defecto en los requerimientos provoca el mayor coste de retrabajo, no solo porque desarrollamos algo que no se usa sino porque tenemos que removerlo y luego volverlo a desarrollar. O podemos modificarlo, lo que conlleva que insertemos muchísimos bugs y la funcionalidad quede con vicios.
Por lo tanto lo que se hace normalmente es hacerle muestras a el usuario de lo que estamos trabajando, lo importante de esto es que el usuario debe tener el conocimiento y estar preparado para entender que es solo una carcasa que falta terminar.
Utilizando scrum por ejemplo deberíamos tener un compromiso mayor de los usuarios, es más un usuario debe ser parte del equipo pero esto no sucede con normalidad, el problema es que un proyecto que utiliza scrum pocas veces es vendido como un proyecto scrum, por lo tanto se trata de adaptar scrum a una fecha de entrega y a no tener un usuario como parte del equipo lo que conlleva a un desastre.
Scrum pide muy pocas cosas y deberíamos respetarlas o no hacer scrum. Y si no tenemos la suerte de trabajar con scrum, debemos tratar de lograr un compromiso con el usuario, hacer entregas tempranas, validar los requerimientos, revisión por pares etc.
domingo, 26 de abril de 2015
Ideone
Ideone Es una pagina web donde se pueden ejecutar programas de forma online en diferentes lenguajes. Esta muy buena si buscas aprender. La lista de lenguajes es larga:
- Ada
- Common Lisp (clisp)
- JavaScript (rhino)
- Prolog (gnu)
- Assembler
- D
- JavaScript (spidermonkey)
- Prolog (swi)
- Assembler
- D (dmd)
- Lua
- Python (Pypy)
- AWK (gawk)
- Erlang
- Nemerle
- R
- AWK (mawk)
- F#
- Nice
- Scala
- bc
- Factor
- Nimrod
- Scheme (chicken)
- Brainf**k
- Falcon
- Node.js
- Scheme (guile)
- C++ 4.3.2
- Forth
- Ocaml
- Smalltalk
- C99 strict
- Fortran
- Octave
- Tcl
- CLIPS
- Go
- Oz
- Text
- Clojure
- Groovy
- PARI/GP
- Unlambda
- COBOL
- Icon
- Perl 6
- Whitespace
- COBOL 85
- Intercal
- Pike
Web Frameworks Benchmark 2015
InfoQ publico un benchmark por demás interesante sobre frameworks web. Básicamente este benchmark compara frameworks web de diferentes lenguajes y tecnologías. Y la velocidad se mide en request por segundo.
Veamos el benchmark:
Como es de esperar cuando hablamos de performance el ganador es C y le sigue C++.
Otra cosa que saco de este benchmark es que existen varios Framework que no conozco. Tendré que estudiar más.
Dejo link: http://www.infoq.com/news/2015/04/web-frameworks-benchmark-2015
Veamos el benchmark:
Como es de esperar cuando hablamos de performance el ganador es C y le sigue C++.
Otra cosa que saco de este benchmark es que existen varios Framework que no conozco. Tendré que estudiar más.
Dejo link: http://www.infoq.com/news/2015/04/web-frameworks-benchmark-2015
Disponible Debian 8 ‘Jessie’
Me hago eco de una gran noticia, esta disponible Debian 8 Jessie, sin dudas viene con novedades más que interesantes, para muchos la versión más innovadora de los últimos años.
Entre las versiones de las aplicaciones y librerías:
- Apache 2.4.10
- Asterisk 11.13.1
- GIMP 2.8.14
- an updated version of the GNOME desktop environment 3.14
- GNU Compiler Collection 4.9.2
- Icedove 31.6.0 (an unbranded version of Mozilla Thunderbird)
- Iceweasel 31.6.0esr (an unbranded version of Mozilla Firefox)
- KDE Plasma Workspaces and KDE Applications 4.11.13
- LibreOffice 4.3.3
- Linux 3.16.7-ckt9
- MariaDB 10.0.16 and MySQL 5.5.42
- Nagios 3.5.1
- OpenJDK 7u75
- Perl 5.20.2
- PHP 5.6.7
- PostgreSQL 9.4.1
- Python 2.7.9 and 3.4.2
- Samba 4.1.17
- Tomcat 7.0.56 and 8.0.14
- Xen Hypervisor 4.4.1
- the Xfce 4.10 desktop environment
- more than 43,000 other ready-to-use software packages, built from nearly 20,100 source packages.
Vamos a tener que probarlo!
Dejo link: https://www.debian.org/News/2015/20150426
Suscribirse a:
Entradas (Atom)