Similar que la función help de python, en clojure existe doc, con esta función podemos ver documentación de otra función, como por ejemplo:
=> (doc str)
-------------------------
clojure.core/str
([] [x] [x & ys])
With no args, returns the empty string. With one arg x, returns
x.toString(). (str nil) returns the empty string. With more than
one arg, returns the concatenation of the str values of the args.
nil
Por supuesto que doc muestra lo que esta documentado de la función, no hace magia, si no documentamos nuestras funciones doc no puede mostrar nada.
Otras veces no sabemos que función utilizar y para esos casos esta find-doc que pasandole una expresión regular busca las funciones que se le parecen:
=> (find-doc "reduce")
-------------------------
clojure.core/areduce
([a idx ret init expr])
Macro
Reduces an expression across an array a, using an index named idx,
and return value named ret, initialized to init, setting ret to the
evaluation of expr at each step, returning ret.
-------------------------
clojure.core/reduce
([f coll] [f val coll])
f should be a function of 2 arguments. If val is not supplied,
returns the result of applying f to the first 2 items in coll, then
applying f to that result and the 3rd item, etc. If coll contains no
items, f must accept no arguments as well, and reduce returns the
result of calling f with no arguments. If coll has only 1 item, it
is returned and f is not called. If val is supplied, returns the
result of applying f to val and the first item in coll, then
applying f to that result and the 2nd item, etc. If coll contains no
items, returns val and f is not called.
-------------------------
...
nil
Translate
domingo, 6 de octubre de 2013
Importar librerias en clojure
Clojure se organiza en namespaces
que son similares a los paquetes de java.
Tenemos diferentes formas de
importar librerías o paquetes:
- Require, de esta forma le indicamos a Clojure que necesitamos una librería Clojure va a verificar que esta este en el classpath, se usa de la siguiente manera:
- Refer, con refer hacemos es que no tengamos que escribir todo el nombre de la librería. Solo usamos las funciones que fueron importadas. Lo que hacemos con refer es referenciar un namespace, creando mapeos para todos los nombres al actual namespace:
(refer 'com.mi.libreria)
- Use, es la aplicación de los 2 anteriores, Clojure se fija que la librería este en el classpath y también no es necesario escribir el nombre librería al llamar una función. Use tiene una bandera llamada reload, con la que le decimos que si importo ya una librería que la recargue si esta librería tuvo un cambio, se actualizara.
(use 'com.mi.libreria)
Veamos un ejemplo:
(use 'examples.introduction)
->nil
(take 10 fibs)
->(0 1 1 2 3 5 8 13 21 34)
viernes, 4 de octubre de 2013
Firefox OS
El mercado de los moviles esta que arde, todos se quieren quedar con algo de la torta, un producto que esta ganando adeptos es Firefox OS. Que nos ofrece mira esta infografia:
miércoles, 2 de octubre de 2013
Jtype, dando tipos a javascript
Tal vez se acuerdan de TypeScript, era un framework javascript para dar tipos a Javascript, este framework esta impulsado por microsoft. Jtype tiene la misma idea, llevar javascript al mundo de las clases, con herencia y todo lo que ya conocemos.
Basta de chacharas y veamos un ejemplo:
// get the precompiled person class var cachedPerson = localStorage.getItem('Person'); // compile the person class var Person = $$(cachedPerson ? cachedPerson : '', function($fName, $lName, $age) { // set the readonly fields (cast the string arguments) this.firstName = $$.asString($fName); this.lastName = $$.asString($lName); // set the protected field (cast the number arguments) this._age = $$.asInt($age); }, { 'public readonly firstName': '', 'public readonly lastName': '', 'protected _age': 0, 'public getFullName': function() { // return the concatenated full name return this.firstName + ' ' + this.lastName; }, 'public virtual triggerOneYearOlder': function() { // increment the protected field this._age++; }, 'public age': { 'get': function() { // return the protected field return this._age; }, 'set': function($v) { // if the incoming property value is valid, set the protected field if ($v > 0) this._age = $v; } } }); // if the person class was not cached, store a local copy of the precompiled export string if (!cachedPerson) localStorage.setItem('Person', $$.export(Person)); // get the precompiled employee class var cachedEmployee = cachedPerson && localStorage.getItem('Employee'); // compile the employee class var Employee = $$(cachedEmployee ? cachedEmployee : '', Person, function($fName, $lName, $age, $salary) { // call the base constructor this.__base($fName, $lName, $age); // set the protected salary field this._salary = $salary; }, { 'protected _salary': 0, 'public override triggerOneYearOlder': function() { // increment the protected age field (by calling the base method) this.__base.triggerOneYearOlder(); // increase the salary by three percent this._salary *= 1.03; }, 'public salary': { 'get': function() { // return the salary return this._salary; } } }); // if the employee class was not cached, store a local copy of the precompiled export string if (!cachedEmployee) localStorage.setItem('Employee', $$.export(Employee)); // instantiate a person object var p = new Person('John', 'Doe', 30); // check that the values were set console.log(p.firstName);// John console.log(p.lastName);// Doe console.log(p.age);// 30 // get a protected field console.log(p._age);// undefined // set a readonly field (throws an exception in debug mode) //p.firstName = 'Jane'; (uncomment to try it out) // set an invalid property value p.age = -40; // check that the field and property didn't change console.log(p.firstName);// John console.log(p.age);// 30 // set a valid property value p.age = 40; // check that the property did change console.log(p.age);// 40 // invoke a method console.log(p.getFullName());// John Doe // invoke a virtual method p.triggerOneYearOlder(); // check that the age was incremented (by the virtual method) console.log(p.age);// 41 // instantiate an employee object var e = new Employee(p.firstName, p.lastName, p.age, 75000); // check that the inherited values were set console.log(e.firstName);// John console.log(e.lastName);// Doe console.log(e.age);// 41 // get an inherited protected field console.log(e._age);// undefined // set an inherited readonly field (throws an exception in debug mode) //e.firstName = 'Jane'; (uncomment to try it out) // check that the field didn't change console.log(e.firstName);// John // get a declared field (not inherited) console.log(e.salary);// 75000 // cast the employee object as a person object e = e.as(Person); // check the types of both person objects console.log(p instanceof Person);// true console.log(p instanceof Employee);// false console.log(e instanceof Person);// true console.log(e instanceof Employee);// true // check that both person objects don't have the derived property console.log(p.salary);// undefined console.log(e.salary);// undefined // invoke an overridden method e.triggerOneYearOlder(); // cast the person object as an employee object e = e.as(Employee); // check that the age was incremented (by the base method) console.log(e.age);// 42 // check that the salary increased 3% (by the overridden method) console.log(e.salary);// 77250
Dejo link
:https://github.com/gaulinsoft/jTypes
https://www.facebook.com/JTypes
https://github.com/gaulinsoft/jTypes
martes, 1 de octubre de 2013
Download Free ebook
He recibido de una empresa llamada Attune el siguiente mail y lo comparto:
SugarJ, endulzando Java...
SugarJ el objetivo de SugaJ es hacer más natural escribir código en los lenguajes. Pongamos un ejemplo, si te toca escribir un XML en java, te vas a encontrar que java no fue hecho para eso; pero existen librerías que utilizan mecanismos que hacen más fácil, por ejemplo escribir un XML en java. Lo que pretende hacer SugarJ es agregar azúcar sintético por medio de librarías.
Las librerías que contienen azúcar sintáctico conservan la compatibilidad y auto-aplicabilidad de las librerías convencionales: azúcar sintáctico puede estar compuesta mediante la importación de múltiples librerías, azúcar sintáctico puede ser utilizado en el desarrollo de una librerías que exporta en sí azúcar sintáctico. De esta forma podremos generar DSL con librerías.
Este framework o libreía no solo existe para Java, también existe SugarHaskell.
Dejo link:
http://www.informatik.uni-marburg.de/~seba/projects/sugarj/
lunes, 30 de septiembre de 2013
Rest con PHP, más fácil imposible!!
Me toco diseñar una API REST con PHP y la verdad me da vergüenza decir que trabaje, porque es sumamente fácil,lo primero hacemos nuestra función PHP, para el ejemplo un listado de paises:
$db = new DB(); //Con este objeto me conecto a la base
$db->conectar();
$sql = 'SELECT * FROM `paises` ORDER BY `nombre`'; //Listo los paises por ejemplo
$consulta = $db->query($sql);
while ($fila = mysql_fetch_array($consulta)) {
$paises[] = $fila;
}
$data["paises"] = $paises;
echo json_encode($data); // lo imprimo formato json.
Y listo, claro que no es rest puro pero es util para publicar una función. Si quieren usar Rest puro pueden usar el metodo $_SERVER['REQUEST_METHOD'] y de esta forma saber el metodo, y si tenemos un controlador podemos hacer:
$method = $_SERVER['REQUEST_METHOD'];
// Dependiendo del método de la petición ejecutaremos la acción correspondiente.
switch ($method) {
case 'GET':
// código para método GET
break;
case 'POST':
$arguments = $_POST;
// código para método POST
break;
case 'PUT':
// código para método PUT
break;
case 'DELETE':
// código para método DELETE
break;
}
Y esto lo podemos consumir con javascript y si usamos jquery es una papa:
$.ajax({
type: "GET",
dataType: "JSON",
url: "listar_paises",
success: function(data)
{ //hacer algo
},
error: function()
{ alert("Error recuperando la lista de Paises");
}
});
Y listo!!
sábado, 28 de septiembre de 2013
GNU: 30 años de libertad
La noticia es un poco vieja pero no quiero dejar pasar la oportunidad de unirme al festejo de los 30 años de la organización GNU!
Y en los 30 años quiero recordar las palabras de Richard Stallman: '¡Unix Libre! A partir del próximo Día de Acción de Gracias comenzaré a escribir un sistema de software completo compatible con Unix llamado GNU (que significa 'Gnu No es Unix'), y lo distribuiré libremente para que todos puedan usarlo. Son muy necesarias las contribuciones de dinero, programas y equipos'.
Getting Started Apache CXF Web Service
Quiero compartir una guía para utilizar Apache CXF, el framework de apache para hacer web service. Que lo disfruten!
Dejo link:
http://www.attuneuniversity.com/ebook/getting-started-with-apache-cxf-web-service.pdf
miércoles, 25 de septiembre de 2013
Aprender de seguridad informatica con Python
Quiero dejarles estos 3 libros que están muy buenos sobre seguridad informática y como testearla con python.
Dejo link:
http://comunidad.dragonjar.org/f150/aprende-python-con-estos-3-libros-15131/
martes, 24 de septiembre de 2013
Ceylon 1.0 beta
Y con ustedes...
Pa ra ra ra ra...
Ceylon 1.0 beta. Con 3 añitos de desarrollo se libero una version beta del lenguaje Ceylon con todas las características. Lo que quiere decir que el lenguaje implemento toda la especificación. Tanto para la maquina virtual Java como a Javascript. Además de esta versión del lenguajes, también se libero un versión de su IDE. Con muchas nuevas características.
Dejo links:
http://ceylon-lang.org/blog/2013/09/22/ceylon-1/
http://ceylon-lang.org/documentation/1.0/spec/
Pa ra ra ra ra...
Ceylon 1.0 beta. Con 3 añitos de desarrollo se libero una version beta del lenguaje Ceylon con todas las características. Lo que quiere decir que el lenguaje implemento toda la especificación. Tanto para la maquina virtual Java como a Javascript. Además de esta versión del lenguajes, también se libero un versión de su IDE. Con muchas nuevas características.
Dejo links:
http://ceylon-lang.org/blog/2013/09/22/ceylon-1/
http://ceylon-lang.org/documentation/1.0/spec/
domingo, 22 de septiembre de 2013
Instalar oracle 12c en Open Suse 12.3
Open Suse me gusto mucho, es un sistema robusto y tiene varias herramientas para configurarlo; es un sistema ideal para instalar nuestra base de datos Oracle 12c.
Primero tenemos que bajar la base de datos de oracle: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen
Luego hacemos un usuario llamado oracle
Luego creamos tres carpetas /oradata , /oracle y /oraInventory y le damos permiso al nuevo usuario.
Luego vamos al /etc/hosts y agregamos el nombre del servidor:
127.0.0.1 localhost oracle
Descoprimimos los 2 zips, podemos utilizar unzip o por interfaz gráfica, como quieran.
Oracle necesita que instalemos algunas librerías. Podemos usar la consola, pero yo voy a usar YAST2:
Tenemos que instalar estas librerías: (paciencia!)
binutils-2.21.1-0.7.25
gcc-4.3-62.198
gcc-c++-4.3-62.198
glibc-2.11.3-17.31.1
glibc-devel-2.11.3-17.31.1
ksh-93u-0.6.1
libaio-0.3.109-0.1.46
libaio-devel-0.3.109-0.1.46
libcap1-1.10-6.10
libstdc++33-3.3.3-11.9
libstdc++33-32bit-3.3.3-11.9
libstdc++43-devel-4.3.4_20091019-0.22.17
libstdc++46-4.6.1_20110701-0.13.9
libgcc46-4.6.1_20110701-0.13.9
make-3.81
sysstat-8.1.5-7.32.1
xorg-x11-libs-32bit-7.4
xorg-x11-libs-7.4
xorg-x11-libX11-32bit-7.4
xorg-x11-libX11-7.4
xorg-x11-libXau-32bit-7.4
xorg-x11-libXau-7.4
xorg-x11-libxcb-32bit-7.4
xorg-x11-libxcb-7.4
xorg-x11-libXext-32bit-7.4
xorg-x11-libXext-7.4
Luego vamos al directorio donde deszipiamos los instaladores y hacemos "sh runInstall" y seguimos el siguiente wizard:
y suerte!
Dejo link:
http://docs.oracle.com/cd/E16655_01/install.121/e17720/pre_install.htm#BABFDGHJ
Primero tenemos que bajar la base de datos de oracle: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html?ssSourceSiteId=ocomen
Luego hacemos un usuario llamado oracle
Luego creamos tres carpetas /oradata , /oracle y /oraInventory y le damos permiso al nuevo usuario.
Luego vamos al /etc/hosts y agregamos el nombre del servidor:
127.0.0.1 localhost oracle
Descoprimimos los 2 zips, podemos utilizar unzip o por interfaz gráfica, como quieran.
Oracle necesita que instalemos algunas librerías. Podemos usar la consola, pero yo voy a usar YAST2:
Tenemos que instalar estas librerías: (paciencia!)
binutils-2.21.1-0.7.25
gcc-4.3-62.198
gcc-c++-4.3-62.198
glibc-2.11.3-17.31.1
glibc-devel-2.11.3-17.31.1
ksh-93u-0.6.1
libaio-0.3.109-0.1.46
libaio-devel-0.3.109-0.1.46
libcap1-1.10-6.10
libstdc++33-3.3.3-11.9
libstdc++33-32bit-3.3.3-11.9
libstdc++43-devel-4.3.4_20091019-0.22.17
libstdc++46-4.6.1_20110701-0.13.9
libgcc46-4.6.1_20110701-0.13.9
make-3.81
sysstat-8.1.5-7.32.1
xorg-x11-libs-32bit-7.4
xorg-x11-libs-7.4
xorg-x11-libX11-32bit-7.4
xorg-x11-libX11-7.4
xorg-x11-libXau-32bit-7.4
xorg-x11-libXau-7.4
xorg-x11-libxcb-32bit-7.4
xorg-x11-libxcb-7.4
xorg-x11-libXext-32bit-7.4
xorg-x11-libXext-7.4
Luego vamos al directorio donde deszipiamos los instaladores y hacemos "sh runInstall" y seguimos el siguiente wizard:
Si tienen licencia deben llenar el mail.
Le pongo skip porque no quiero que se actualice.
Acá llenamos todos los datos, el password también!
y suerte!
Si todo va bien Oracle nos pedirá correr unos scripts:
Solo hay que logearse como root y correrlos.
Luego configuramos la instancia. Y listo!
http://docs.oracle.com/cd/E16655_01/install.121/e17720/pre_install.htm#BABFDGHJ
¿Qué es la CDPedia?
Que sucede con las escuelas o personas que no tienen acceso a internet? No pueden acceder a la wikipedia? En realidad si pueden acceder y gracias a CDpedia un proyecto de pyar. Trascribo lo que dice la pagina:
Es un proyecto de Python Argentina para acceder a la información de la Wikipedia en castellano aunque no tengas una conexión a Internet.
Toda la información incluída fue obtenida de Wikipedia durante Diciembre del 2012, y es una foto del contenido on-line en un momento dado. Te sugerimos acceder a la información directamente en la Wikipedia Web si es que necesitás información actualizada de uno de los temas.
Importante: la CDPedia es Software Libre, te recomendamos (y te agradecemos) que copies estos discos y archivos, y los regales a tus amigos, familia y conocidos. La información debe ser libre, así mejoramos la calidad de nuestra educación.
Dejo link:
Dejo video:
jueves, 19 de septiembre de 2013
MonoGame - Write Once, Play Everywhere!
Poco he escrito de Mono y de juegos; y poco se en verdad. Pero nunca es tarde para aprender. Sisi ya se han escuchado en otro lado: Write Once, Play Everywhere! pero es no es solo parte del marketing, mono permite llevar la plataforma .net a cualquier lugar. Y como sabrán el framework para hacer juegos en .net es XNA.
Monogame es una implementación Open Source del framework Microsoft XNA 4 Framework. El principal objetivo es llevar la plataforma para hacer juegos para Xbox 360, Windows & Windows Phone a Linux, Mac, Android, etc.
Dejo link:
http://monogame.codeplex.com/
Monogame es una implementación Open Source del framework Microsoft XNA 4 Framework. El principal objetivo es llevar la plataforma para hacer juegos para Xbox 360, Windows & Windows Phone a Linux, Mac, Android, etc.
http://monogame.codeplex.com/
lunes, 16 de septiembre de 2013
10 libros para aprender Python
Dejo una buena pagina para aprender Python, en ella se describen 10 libros muy buenos para aprender Python.
Dejo link: http://www.leettips.org/2013/02/top-10-free-python-pdf-ebooks-download.html
Dejo link: http://www.leettips.org/2013/02/top-10-free-python-pdf-ebooks-download.html
Suscribirse a:
Entradas (Atom)