Translate

miércoles, 8 de octubre de 2014

Multiple Dispatch

Quiero recomendarles el siguiente articulo "Multiple Dispatch" si estan interesados en que es el double Dispach y por que es interesado.

sábado, 4 de octubre de 2014

ExpressionBuilder

Cuando realizamos Unit test necesitamos crear componentes o objetos para testear, no se puede
mockear todo. Una muy buena idea es construir nuestros objetos con builders. A la vez podemos reutilizar estos builder en diferentes tests.

Una idea muy buena son los ExpressionBuilders, que son builders que simulan un DSL para construir objetos. Es muy Elegante:

customer.newOrder()
  .with(6, "TAL")
  .with(5, "HPK").skippable()
  .with(3, "LGV")
  .priorityRush();

Esto se logra haciendo que el builder contenga la instancia que debe construir y cada vez que se llama a with o otro método que setea la instancia, devolvemos this, para poder encadenar los llamados. 

Queda de esta forma:

public class OrderBuilder {
  private Order subject = new Order();
  private OrderLine currentLine;

  public OrderBuilder with(int quantity, String productCode) {
    currentLine = new OrderLine(quantity, Product.find(productCode));
    subject.addLine(currentLine);
    return this;
  }

  public OrderBuilder skippable() {
    currentLine.setSkippable(true);
    return this;
  }

  public OrderBuilder priorityRush() {
    subject.setRush(true);
    return this;
  }

  public Order getSubject() {
    return subject;
  }
}

Por supuesto que esta técnica no solo se puede utilizar en unit test... 

jueves, 2 de octubre de 2014

MySQL ofrece una API REST

Si, si, MySQL ofrece una API REST. Toma tu torta! leyendo infoQ me encontré con la noticia de que existe un plugin, para agregar una API REST, este plugin se encuentra en MySql labs.

Esta API nos permite acceder a nuestra información por medio de REST. De hecho lo que hacemos es hacer una consulta con una url:

SQL: SELECT * FROM simple ORDER BY id
URL: http://127.0.0.1:8080/sql//SELECT+%2A+FROM+simple+ORDER+BY+id

Además se puede hacer CRUD, y se puede utilizar JSON.

Dejo link: http://www.infoq.com/news/2014/09/MySQL-REST


miércoles, 1 de octubre de 2014

Ceylon roadmap


Charan charan !! Ceylon 1.0 ha sido liberado!!

Y el equipo de Ceylon sigue trabajando, la versión 1.1 va a estar centrada en mejoras de rendimiento e interoperabilidad y la versión 1.2 añadirá nuevas características del lenguaje.

A prestar atención!!

Dejo link:
http://ceylon-lang.org/documentation/1.0/roadmap/

domingo, 28 de septiembre de 2014

sábado, 27 de septiembre de 2014

PureScript, un lenguaje que lleva la programación funcional al browser

PureScript es un lenguaje similar a Haskell que compila a javascript, por lo que puede ser ejecutado por un browser y interactuar con una pagina web.


PureScript fue creado por Phil Freeman, quien se inspiro en Haskell para hacer este lenguaje. El cual nos trae de Haskell las siguientes características:

  • Inferencia de tipos.
  • Higher Kinded Polymorphism, no supe como traducirlo, pero sería un mecanismo de abstracción sobre constructores.
  • Pattern matching
  • Type Classes: tan poco me conversia la traducción, un mecanismo de abstracción sobre las estructuras de datos que permite utilizarlos sin tener que pensar directamente en la estructura de los datos en sí.
El código esta en github y es de licencia MIT.

Dejo link:

miércoles, 24 de septiembre de 2014

Soporte nativo para Json en java 9?

Al parecer en Java 9 vamos a tener soporte nativo para JSon. Es decir que vamos a poder utilizar una Api nativa para procesar Json.

 Históricamente, Java ha sido una plataforma de elección para el procesamiento de XML, pero en los últimos años el mundo se ha movido más y más hacia los datos JSON siendo consumida y devuelta por los servicios web basados ​​en REST simples. Java ha bajado un poco detrás de la curva de otros lenguajes, y es este déficit que JEP 198 espera abordar.

Dejo link: http://www.infoq.com/news/2014/09/CoreJSONJava9

domingo, 21 de septiembre de 2014

Primeros pasos en Qt: Qt Designer


Qt designer es una herramienta pensada para el diseño de interfaces de forma cómoda y fácil.

Una de las ventajas de la utilización de Qt Designer es que permite a los programadores una gran libertad para modificar sus diseños sin ser forzados a cambiar su código fuente. Al desarrollar escribiendo solo código C++, los cambios en el diseño pueden llevar mucho tiempo. Con Qt Designer, no se pierde tiempo, simplemente regenera el código fuente que ha cambiado.
Las Interfaz de usuario (ventanas) se guarda en un archivo .ui (un formato de archivo basado en XML), mientras que la funcionalidad personalizada se implementa mediante subclases.

Supongamos que debamos acceder a cualquier componente que hemos diseñado desde el diseñar. Debemos llamarlos desde un objeto generado, que se construye en el constructor y es de igual tipo que la ventana, no estoy siendo muy claro, veamos un poco de código para expresarme mejor:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    ui->pushButton->setText("Chau!!");
}

En el ejemplo para acceder a pushButton tuvimos que utilizar el objeto ui que es la ventana.


Aprendiendo Ruby on Rails 4.0

Sin preámbulos, quiero compartir el libro con ustedes, si bien el libro no esta terminado es totalmente gratuito y en español. Por lo tanto suscribanse!!

Dejo un extracto:

"Conoce como desarrollar aplicaciones web con un enfoque de afuera hacia adentro - Outside-in - con el marco de trabajo de Ruby on Rails 4.0.

Aprender de la naturalidad de un languaje de programación como Ruby y de cómo Ruby on Rails 4.0 explota nuestra productividad."

Dejo link:
http://railsenespanol.co/


jueves, 18 de septiembre de 2014

domingo, 14 de septiembre de 2014

Primeros pasos en Qt: Signals y Slots a fondo

El mecanismo de signals y slots es fundamental para qt. Los Slots son muy similares a las funciones comunes, pueden ser virtuales, sobrecargados, privados, protegidos y públicos. Además pueden ser invocados como cualquier otra función de c++ y sus parámetros pueden ser de cualquier tipo. La diferencia con las funciones es que los Slots pueden ser invocados automáticamente desde una señal.

La conexión entre signal y slot es así:

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

Donde sender y receiver son objetos de tipo QObjects, además signal y slot se pasan como parámetro sin parámetros, solo el nombre de la función.

Una signal puede llamar a diferentes slots y un slot puede ser llamado por diferentes funciones. Veamos unos ejemplos:

Una signal puede llamar a diferentes slots:

connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updateStatusBarIndicator(int)));

Un slot es llamado por diferentes signal: 
connect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()));
connect(calculator, SIGNAL(divisionByZero()), this, SLOT(handleMathError()));

Una signal puede conectar otra signal:
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));
Cuando la primera señal es emitida, la segunda es emitida.

Una conexión puede ser removida: 
disconnect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError()));

Algo muy importante es que la signal y el slot o signal a la que es conectada debe tener la misma cantidad de parámetros y del mismo tipo. Si el slot o signal a la que es conectada tiene más parámetros, simplemente sera ignorados. Si los parámetros son de diferente tipo qt lanzara una advertencia cuando se compila y un error en tiempo de ejecución.

El mecanismo de signals y slots, no esta limitado a el diseño de interfaces de usuarios, también se puede usar en el modelado heredando de QObject.

sábado, 13 de septiembre de 2014

Linux for Hank

Quiero compartir este video que habla de la historia de un usuario que desea mejorar su vida  y elige el mejor sistema operativo de la historia:

jueves, 11 de septiembre de 2014

Que lenguaje debo aprender??

Siempre que se desea aprender un lenguaje se debe saber si se utiliza y donde, les dejo una gráfica que esta buena. La encontré en la web, no es de mi autoria pero en linea general esta bien.



Ojo donde dice scale es scala...

miércoles, 10 de septiembre de 2014

Curso básico de Less


Less es a css lo que PHP a html...

Una reflexión antes de sugerirles este curso que dicta la empresa DevCode; según ellos:

"En el curso básico de Less aprenderás a trabajar las hojas de estilo con funcionalidades de un lenguaje de programación para el desarrollo Frontend. Después de hacer este curso no podrás escribir CSS sin él preprocesador."

Les dejo el link:
http://devcode.la/cursos/curso-basico-de-less/?utm_source=googleplus&utm_medium=img&utm_campaign=imgLes0less01


martes, 9 de septiembre de 2014

Active records vs DAO



Cuando debemos almacenar datos nos surge la duda existencial donde meto los métodos que guardan los datos? Para resolver este problema existen 2 patrones muy utilizados:

Active record o registros activos es un patrón que dice que el objeto es encargado de auto guardarse, cosa que no es muy lógica pero es así. Este patrón tiene varias desventajas, la más importante es que el modelo queda "sucio" con el modo de almacenar los datos. Este es el patrón que utiliza rails para acceder a base de datos.

DAO, o objeto para acceso de datos (la traducción se debería checkear) Este patrón indica que el objeto no tiene la responsabilidad de guardarse, sino que existe otro objeto que es encargado de guardar, y recuperar datos. Este patrón es más flexible y abstrae a los objetos del modo y donde se guarden.

Obviamente que no todos los problemas son iguales, por lo tanto cada patrón tiene su punto fuerte, si la idea es hacer algo flexible que abstraiga del modo de guardarse, el patrón DAO es el mejor (y mi preferido). Ahora bien la aplicación es pequeña y no existe necesidad de cambiar el almacén de datos. active record puede ser una solución.