Translate
sábado, 13 de diciembre de 2014
lunes, 8 de diciembre de 2014
Implementar booleanos de Javascript con Haskell
En javascript muchos tipos se comportan como boolenos, por ejemplo el string vacío “” o el cero se comportan como el false.
Nosotros podemos tener el mismo comportamiento en Haskell si lo deseamos, esto gracias a type class o clases de tipos.
Las clases de tipos son una especie de interfaz que define algún tipo de comportamiento. Si un tipo es miembro de una clase de tipos, significa que ese tipo soporta e implementa el comportamiento que define la clase de tipos. La gente que viene de lenguajes orientados a objetos es propensa a confundir las clases de tipos porque piensan que son como las clases en los lenguajes orientados a objetos. Bien, pues no lo son. Una aproximación más adecuada sería pensar que son como las interfaces de Java, o los protocolos de Objective-C, pero mejor.
¿Cuál es la declaración de tipo de la función ==?
ghci> :t (==)
(==) :: (Eq a) => a -> a -> Bool
Interesante. Aquí vemos algo nuevo, el símbolo =>. Cualquier cosa antes del símbolo => es una restricción de clase. Podemos leer la declaración de tipo anterior como: la función de igualdad toma dos parámetros que son del mismo tipo y devuelve un Bool. El tipo de estos dos parámetros debe ser miembro de la clase Eq (esto es la restricción de clase).
La clase de tipos Eq proporciona una interfaz para las comparaciones de igualdad. Cualquier tipo que tenga sentido comparar dos valores de ese tipo por igualdad debe ser miembro de la clase Eq. Todos los tipos estándar de Haskell excepto el tipo IO (un tipo para manejar la entrada/salida) y las funciones forman parte de la clase Eq.
Muy bien! Ahora vamos a intentar implementar el comportamiento de el tipo booleano en diferentes tipos, se nos va hacer bastante sencillo utilizando clase de tipos.
Lo que debemos hacer es crear una clase, que la definimos de la siguiente manera:
class YesNo a where
yesno:: a -> Bool
Muy simple! YesNo es un typeclass que define una función. Esta función toma un argumento y devuelve true cuando se defina. Pero lo importante de la definición es que a no tiene tipo. Cuando realicemos instancias de esta función vamos a definir este tipo.
Instance YesNo Int where
yesno 0 = False
yesno _ = True
De esta manera indicamos como los enteros implementan nuestra clase. De esta manera cuando un entero es 0 devuelve false sino devuelve true.
Instance YesNo [a] where
yesno [] = False
yesno _ = True
También podemos definir el comportamiento para listas. Cuando la lista es vacía devuelve false sino true. Note que no definimos el tipo de la lista tampoco.
Instance YesNo Bool where
yesno = id
En este caso estamos acudiendo a una función de la librería estándar "id", que toma el parámetro y lo retorna.
Podemos definir esta función para cualquier tipo que se nos ocurra...
Y luego podemos probarla:
> yesno “hola”
True
> yesno “”
False
> yesno 0
False
Muy simple!!
viernes, 5 de diciembre de 2014
jueves, 4 de diciembre de 2014
Curso Online en castellano y gratuito sobre AngularJs
Quiero compartir un curso en castellano, gratuito y online de AngularJS.
AngularJS es el framework javascript de moda, esta muy interesante, se los recomiendo.
Dejo el link: http://edutin.com/es/cursos/online/angularjs-2372
AngularJS es el framework javascript de moda, esta muy interesante, se los recomiendo.
Dejo el link: http://edutin.com/es/cursos/online/angularjs-2372
Con que lenguaje de programación ganaría más dinero?
Una interesante pregunta, la gente de quartz decidió responderla a base de una encuesta con la cual mide los salarios de los programadores y en que lenguaje programan.
Dejo la fuente: http://qz.com/298635/these-programming-languages-will-earn-you-the-most-money/
Dejo la fuente: http://qz.com/298635/these-programming-languages-will-earn-you-the-most-money/
Primeros pasos en Qt: Creación de widgets customs
Los widgets customs o componentes visuales pueden ser creados a partir de un componente existente o simplemente extendiendo de QWidget.
En este post vamos a extender uno existente. Supongamos que debemos crear un QSpinBox que permita trabajar con hexadecimales:
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QSpinBox>
class QRegExpValidator;
class HexSpinBox : public QSpinBox
{
Q_OBJECT
public:
HexSpinBox(QWidget *parent = 0);
protected:
QValidator::State validate(QString &text, int &pos) const;
int valueFromText(const QString &text) const;
QString textFromValue(int value) const;
private:
QRegExpValidator *validator;
};
#endif
HexSpinBox hereda la mayoría de los métodos, pero sobreescribe, los que necesita. A la vez sobreescribe el constructor:
#include <QtGui>
#include "hexspinbox.h"
HexSpinBox::HexSpinBox(QWidget *parent)
: QSpinBox(parent)
{
setRange(0, 255);
validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"), this);
}
Setamos el rango desde 0 a 255 es decir 0 a FF. También debemos modificar los botones de tal manera que cuando sea presionados permitan ir navegando entre los números en hexadecimales, es decir luego del 10 siga con A.
Para validar este componente usa el metodo validate que es llamado por QSpinBox.
QValidator::State HexSpinBox::validate(QString &text, int &pos) const
{
return validator->validate(text, pos);
}
Validate solo utiliza la expresión regular para validar. Ahora debemos escribir los métodos que pasen nuestros números a String y viceversa.
QString HexSpinBox::textFromValue(int value) const
{
return QString::number(value, 16).toUpper();
}
QString HexSpinBox::textFromValue(int value) const
{
return QString::number(value, 16).toUpper();
}
Y eso es todo tenemos nuestro primer componente!
En este post vamos a extender uno existente. Supongamos que debemos crear un QSpinBox que permita trabajar con hexadecimales:
#ifndef HEXSPINBOX_H
#define HEXSPINBOX_H
#include <QSpinBox>
class QRegExpValidator;
class HexSpinBox : public QSpinBox
{
Q_OBJECT
public:
HexSpinBox(QWidget *parent = 0);
protected:
QValidator::State validate(QString &text, int &pos) const;
int valueFromText(const QString &text) const;
QString textFromValue(int value) const;
private:
QRegExpValidator *validator;
};
#endif
HexSpinBox hereda la mayoría de los métodos, pero sobreescribe, los que necesita. A la vez sobreescribe el constructor:
#include <QtGui>
#include "hexspinbox.h"
HexSpinBox::HexSpinBox(QWidget *parent)
: QSpinBox(parent)
{
setRange(0, 255);
validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"), this);
}
Setamos el rango desde 0 a 255 es decir 0 a FF. También debemos modificar los botones de tal manera que cuando sea presionados permitan ir navegando entre los números en hexadecimales, es decir luego del 10 siga con A.
Para validar este componente usa el metodo validate que es llamado por QSpinBox.
QValidator::State HexSpinBox::validate(QString &text, int &pos) const
{
return validator->validate(text, pos);
}
Validate solo utiliza la expresión regular para validar. Ahora debemos escribir los métodos que pasen nuestros números a String y viceversa.
QString HexSpinBox::textFromValue(int value) const
{
return QString::number(value, 16).toUpper();
}
QString HexSpinBox::textFromValue(int value) const
{
return QString::number(value, 16).toUpper();
}
Y eso es todo tenemos nuestro primer componente!
viernes, 28 de noviembre de 2014
Effective Go
Quiero compartir este link que va a el libro gratuito Effective Go.
Gracias.
Dejo link: http://golang.org/doc/effective_go.html?utm_content=buffer8f0d2&utm_medium=social&utm_source=plus.google.com&utm_campaign=buffer
Gracias.
Dejo link: http://golang.org/doc/effective_go.html?utm_content=buffer8f0d2&utm_medium=social&utm_source=plus.google.com&utm_campaign=buffer
martes, 25 de noviembre de 2014
Desarrollo Orientado a Objetos con UML
Le quiero dejar un libro sobre la programación orientada a objeto y su modelado con el lenguaje UML.
Dejo el link: http://www.freelibros.org/programacion/desarrollo-orientado-a-objetos-con-uml.html
viernes, 21 de noviembre de 2014
Flow
Flow es un software que permite el chequeo de tipos en script en javascript. Este software te permite encontrar errores de tipos en javascript.
El mecanismo es muy fácil, se crea un script, luego se corre flow y este te indica si hay algún problema.
Por ejemplo dado el siguiente script:
hello.js:5:5,19: string This type is incompatible with hello.js:3:10,15: number
Se puede utilizar tanto en Linux como en OS X.
Dejo links:
http://flowtype.org/
http://flowtype.org/docs/getting-started.html#_
El mecanismo es muy fácil, se crea un script, luego se corre flow y este te indica si hay algún problema.
Por ejemplo dado el siguiente script:
/* @flow */ function foo(x) { return x * 10; } foo('Hello, world!');
Tendremos la siguiente salida:
hello.js:5:5,19: string This type is incompatible with hello.js:3:10,15: number
Se puede utilizar tanto en Linux como en OS X.
Dejo links:
http://flowtype.org/
http://flowtype.org/docs/getting-started.html#_
jueves, 20 de noviembre de 2014
“Rebecca” el nuevo Mint ya esta disponible!!
La nueva versión de Mint se llama “Rebecca” y ya esta disponible para descargar la Release Candidate.
Un aspecto bastante importante de Rebecca es que será LTS, con soporte hasta 2019, una fantástica noticia para los usuarios de esta distribución, destinada a los perfiles más básicos de la informática en general y de GNU/Linux en particular.
Dejo link:
http://www.linuxmint.com/release.php?id=23
martes, 18 de noviembre de 2014
Firefox Developer edition
La verdad muy buena noticia para el desarrollo web, espero que siga creciendo
Dejo link: https://www.mozilla.org/en-US/firefox/developer/
lunes, 17 de noviembre de 2014
Curso online de HTML5
Quiero compartir un curso gratuito de HTML 5 en español.
Dejo link:
http://edutin.com/es/cursos/online/HTML5-147
Ubuntu MATE
Este mes nos trajo muchas noticias, una muy buena es que ya esta disponible la versión de Ubuntu con Mate como entorno de escritorio.
Para el que no sabe, la wikipedia nos indica que "MATE es un ambiente de escritorio derivado del código base de GNOME 2. El nombre proviene de la yerba mate, una especie de acebo, una planta nativa de Sudamérica subtropical que se utiliza para preparar una bebida muy popular y energizante llamada mate. El nuevo nombre fue necesario para evitar conflictos con componentes de GNOME 3"
Si bien lo intente bajar varias veces se corta, voy a porbar el torrent.
Dejo screenshot:
Dejo link: https://ubuntu-mate.org/
Para el que no sabe, la wikipedia nos indica que "MATE es un ambiente de escritorio derivado del código base de GNOME 2. El nombre proviene de la yerba mate, una especie de acebo, una planta nativa de Sudamérica subtropical que se utiliza para preparar una bebida muy popular y energizante llamada mate. El nuevo nombre fue necesario para evitar conflictos con componentes de GNOME 3"
Si bien lo intente bajar varias veces se corta, voy a porbar el torrent.
Dejo screenshot:
Dejo link: https://ubuntu-mate.org/
viernes, 14 de noviembre de 2014
Microsoft hace open source .NET
La Noticia del siglo, si al parecer .net dio un vuelco al mundo open source y para colmo se viene una versión para Linux y Os X. Increíble!! Pero al parecer esto es el comienzo, dado que vamos a tener emuladores android y un sin fin de librerías ahora open source.
Esto es una genialidad, ya me dio ganas de aprender .net!!
Todo indica que microsoft se vio afectado por el crecimiento de otras tecnologías abiertas y no le quedo otra que brindar pelea en el mundo del software abierto.
Esto es solo un anuncio, vamos a ver que nos trae el futuro.
Dejo link:
http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx
jueves, 13 de noviembre de 2014
Buscan debatir en la legislatura entrerriana sobre una Ley de software libre
Solo quiero hacerme eco de una noticia regional que tiene que ver con el software libre.
"En la próxima sesión de la Cámara de Diputados ingresará un proyecto de Ley por el que se buscará establecer los lineamientos de las políticas de incorporación y gestión progresiva de software, confirmó AIM. La iniciativa propone migrar los sistemas informáticos de la administración pública de la provincia a sistemas de software libre. Además, el gobierno deberá promover el desarrollo de la industria."
Esto es un pequeño paso pero muy valorable, espero que se logre llegar a la incorporación de software libre y a la vez no menos importante, que para el proceso de migración se contraten empresas locales, para que el crezca la región también.
Dejo la fuente: http://www.gestionentrerriana.com.ar/noticias_3613.html
Suscribirse a:
Entradas (Atom)