Translate

domingo, 6 de septiembre de 2015

Haciendo fácil la minería de datos con Rapidminer

Si es raro un post de minería de datos en este blog. Les cuento que estoy haciendo un curso y me llamo la atención gratamente este producto.

Supongamos que necesitas saber reglas para un problema, por ejemplo que persona no debes darles créditos. Entonces que haces:

  • Te instalas, rapidminer
  • Importas datos históricos
  • Generas el árbol con algún algoritmo y tenes las reglas. Y listo!

Si bien estoy simplificando mucho la historia, en la herramienta es así. Luego al ser un trabajo empírico debes hace muchas comparaciones con la realidad.

Esas reglas las podes utilizar con algún motor de reglas como Jboss drools o programarlas.

Rapidminer trae muchas herramientas de diferente índole, para limpiar datos, generar reglas, hacer arboles de decisión, importar datos, etc.

Tiene una versión comercial y otra open source y gratuita.

Dejo link:
https://rapidminer.com/

Blog.scalac.io


Quiero compartir con ustedes una excelente pagina que contiene un montón de recursos sobre scala y Akka, tal vez ya la conocen scalac.io

Dejo link: http://blog.scalac.io/

Pequeña introducción a Wolfram

Bueno, si tomamos un lenguaje para navegar en el conocimiento y brindar conocimiento; sin duda; Wolfram es la respuesta.

Ente las características de Wolfram podemos nombrar:

  • Fue diseñado para ser utilizado de forma interactiva. 
  • Tiene alrededor de 5000 funciones incorporadas.
  • Expresiones simbólicas, por ejemplo podríamos pasar por parámetro un gráfico o guardarlo en una variable. 
  • Las listas se indican por medio de llaves, tiene listas por comprensión y maneja indices negativos. 

Les dejo un tutorial muy bueno!! Al final de cada ítem pueden validar si entendieron.

Dejo link:
http://www.wolfram.com/language/fast-introduction-for-programmers/
http://reference.wolfram.com/language/

jueves, 3 de septiembre de 2015

Aprende Html 5 gracias W3C y EDX


Me llego esta propuesta de curso y esta tan buena que la quiero compartir:


Course Update from:
Learn HTML5 from W3C
Go to Course

Dear all,
We're back! And we need your help in getting the word out.
We are again teaching how to build powerful Web sites and apps with HTML5. If you are tuned into tech news, you've surely been recently exposed to a flurry of articles encouraging developers to ditch other technologies in favor of HTML5.
picture of the HTML5 logo and the text saying: "I've seen the future in my Web browser"
Register for the new edition of the course! (to start on 5 October 2015)
Please use this link to tell your friends on Facebook and this link to share on Twitter.
Thank you.
Best,
Marie-Claire and Michel.

Go to Course

domingo, 30 de agosto de 2015

Usando Clojure para hacer aplicaciones Android


Se puede desarrollar una aplicación Android con Clojure? Claro!

Leyendo InfoQ, llego a un articulo sobre desarrollo de android con Clojure y esta muy bueno.

Básicamente tenemos 2 caminos para construir aplicaciones:

  • lein-droide: un plugin Leiningen que funciona como una herramienta de construcción para proyectos Clojure-Android y se ocupa de los procesos de recursos de embalaje, la creación de un archivo APK, firmarlo, etc.
  • Neko: un conjunto de herramientas que envuelve algunas partes de Java API de Android para que sean más idiomática para utilizar en Clojure.


Dejo link:
http://www.infoq.com/news/2015/08/clojure-native-android-apps

ADVENTURES IN WEB ANIMATIONS

Adventures in Web AnimationsQuería compartir un curso de la gente de codeschool, sobre animaciones web. Es gratuito por lo que aprovechen, dejo link:

http://campus.codeschool.com/courses/adventures-in-web-animations

domingo, 23 de agosto de 2015

Haciendo Juegos con ELM

Anteriormente hable de ELM un lenguaje funcional que tenia la particularidad de compilar a HTML, javascript y CSS.

Este lenguaje no solo nos permite hacer paginas web, sino tambien juegos que como sospecharan corren en HTML con ayuda de javascript.

Les dejo la siguiente pagina que es muy interesante:
http://gelatindesign.co.uk/developing-games-in-elm/functional-programming/

miércoles, 19 de agosto de 2015

Pizza as a Service

Quiero compartir con ustedes este genial ejemplo de Pizza como servicio. Me tome la liberta de copiar del post original:

SAP publico un excelente gráfico realizado por un  Software Architect de IBM donde se presenta la analogía de los servicios en la nube como si de una Pizza se tratara, me pareció excelente esta explicación, sobre todo cuando estamos con una persona ajena a IT y debemos explicar que es cada cosa y donde quedan sus datos.


Dejo link:
http://menghi.biz/2015/08/14/pizza-as-a-service/

lunes, 17 de agosto de 2015

Postgrest

Algo que me llamo la atención de CouchDB es que exponía sus datos con una API Rest, me pareció fantástico, porque la verdad es que no remplazaría a la capa de aplicación 100% de las veces. Pero para alguna aplicación pequeña. Además si todas las bases usan esta técnica, las aplicaciones no deberían saber si se comunican con una base, con otro sistema, ni es necesario saber  que base de datos es. Muchas ventajas!

Postgrest permite hacer esto con postgres, provee una API Rest para comunicarse con la base y de esta forma poder acceder a los datos a través de REST.

Cualquier base de datos Postgres puede utilizar este programa, solo es necesario llamarlo de la siguiente manera:

postgrest  --db-host localhost  --db-port 5432     \
           --db-name my_db      --db-user postgres \
           --db-pass foobar     --db-pool 200      \
           --anonymous postgres --port 3000        \
           --v1schema public

Podríamos
hablar de muchas ventajas como:

  • Seguro, puede utilizar https y provee autenticación.
  • Autodocumentado
  • Rapido


Dejo link:
https://github.com/begriffs/postgrest

domingo, 16 de agosto de 2015

Que es la Metaprogramming?


O Metaprogramación, en castellano.

Voy a tomar un post muy bueno sobre metaprogramación en Ruby. Empecemos definiendo la metaprogramación, que es? código que escribe código, y listo.

Como pueden sospechar no es una característica solo de Ruby, en realidad es de muchos lenguajes. Sin embargo es mucho más fácil, hacer metaprogramación en lenguajes dinámicos e interpretados.  Si no fuéramos puristas podríamos pensar que por ejemplo un Proxy de spring en Java es metaprogramación, ya que spring genera una clase al vuelo (en tiempo de ejecución) y la implementa. Por lo tanto genera código, por lo tanto es metaprogramación.

Otra virtud necesaria en lenguaje para que la metaprogramación sea útil o sea más útil, es que el lenguaje sea reflexivo o se pueda inspeccionar los objetos, en castellano, los objetos pueden decirte si responden mensajes o que atributos tiene, etc. El etc quiere decir que podemos modificar algunos métodos o hacer macana como romper el encapsulamiento pero recuerda:

“With great power comes great responsibility.”

Pero vuelvo a Ruby y para esto voy a copiar un poco de código. jeje!

Vamos a hacer un método que limpie una cadena, limpie la cadena de caracteres extraños:

def to_alphanumeric(s)
    s.gsub(/[^\w\s]/, '')
end

puts to_alphanumeric("A&^ar$o%n&* (is&*&))) t&*(*he B0&*S**^S)")
# => "Aaron is the B0SS"

En Ruby tenemos clases abiertas (como smalltalk) por lo que podemos poner este método en la clase String.

class String
    def to_alphanumeric
        gsub(/[^\w\s]/, '')
    end
end

puts "A&^ar$o%n&* (is&*&))) t&*(*he B0&*S**^S)".to_alphanumeric
# => "Aaron is the B0SS"

Las clases abiertas no son la panacea, podemos hacer desastre. Podemos reescribir métodos de clases propias de ruby. Esto se llama Monkeypatching.

Modelo de Objetos

Antes de seguir debemos ver la jerarquia de clases de Ruby:


Parece complejo, pero no lo es, veamos los detalles:

  • Tenemos 3 instancias de la clase MyClass (obj1, obj2, obj3)
  • MyClass tiene una clase Class, esto es porque las clases tambien son objetos. 
  • Los objetos tienen una clase que es MyClass. 
Cadena de ancestros


Bueno, recuerden esto porque ahora nos vamos a analizar, la herencia en especial la cadena de ancestros en ingles Ancestors Chain.

Este diagrama es fácil de entender:



Cuando se llama a un método, Ruby va directamente a la clase del receptor (en este caso libro) y luego en cadena a los antepasados, hasta que cualquiera encuentre el método o llegue al final de la cadena.

En este diagrama, un objeto b es creado de una instancia de la clase libro. Libro tiene 2 módulos: imprimir y documentos. Libro hereda de la clase Object, que es la clase que casi todos heredan en Ruby. Objeto incluye un módulo llamado Kernel. Y, por último, el objeto hereda de BasicObject - el padre absoluto de cada objeto en Ruby.

Ya aburrí muchísimo con la introducción, pero en esta parte deberían tener claro el modelo de objetos y la cadena de ancestros.  Si no lo tienen en claro bueno, deberían volver a leerlo.

Métodos

En Ruby podemos crear métodos de forma dinámica y a la vez llamar método de forma dinámica, tambien. Vamos por parte, primero ver crear métodos de forma dinámica.

¿Por qué queremos definir dinámicamente métodos? Tal vez para reducir la duplicación de código, o para añadir funcionalidad a otros objetos por ejemplo ActiveRecord (la herramienta ORM por defecto en Rails) lo utiliza en gran medida. Veamos un ejemplo:

class Book < ActiveRecord::Base
end

b = Book.new
b.title

Si estas familiarizado con ActiveRecord esta linea de código no le resultara extraña. Pero nunca definimos el atributo title, pero lo podemos utilizar, como? Bueno ActiveRecord por medio de metaprograming define un atributo de forma dinámica, dado que title es un atributo de la tabla.

Normalmente, llamando title en esta clase debería lanzar error NoMethodError - pero ActiveRecord añade dinámicamente métodos al igual que estamos a punto de hacer. ActiveRecord es un excelente ejemplo de cómo se puede utilizar metaprogramming al máximo.

Crear nuestros propios métodos:

def foo
    puts "foo was called"
end

def baz
    puts "baz was called"
end

def bar
    puts "bar was called"
end

foo
baz
bar

# => foo was called
# => baz was called
# => bar was called

Si, si estamos duplicando codigo. Usemos metaprogramming:

%w(foo baz bar).each do |s|
    define_method(s) do
        puts "#{s} was called"
    end
end

foo
baz
bar

# => foo was called
# => baz was called
# => bar was called

Llamar un método de forma dinámica:

%w(test1 test2 test3 test4 test5).each do |s|
    define_method(s) do
        puts "#{s} was called"
    end
end

# New Code

(1..5).each { |n| send("test#{n}") }

# => test1 was called
# => test2 was called
# => test3 was called
# => test4 was called
# => test5 was called

Como se puede ver con send llamamos un método de forma dinámica. Y send es un método de Object.

class OKCRB
    def is_boss?
        puts "true"
    end
end

okcrb = OKCRB.new
okcrb.send("is_boss?")

# => true

Ojo acá!! send nos permite llamar a métodos privados por lo que podemos romper el encapsulamiento. Si no queremos hacer esto, podemos llamar a public_send que no nos permite llamar métodos privados.

Que pasa si hacemos esto:

class Book
end

b = Book.new
b.read

Por supuesto obtendremos un error, un NoMethodError. Ahora bien podemos hacer lo siguiente:

class Book
    def method_missing(method, *args, &block)
        puts "You called: #{method}(#{args.join(', ')})"
        puts "(You also passed it a block)" if block_given?
    end
end

b = Book.new

b.read
b.read('a', 'b') { "foo" }

# => You called: read()
# => You called read(a, b)
# => (You also passed it a block)

BasicObject#method_missing nos permite controlar el error NoMethodError. De esta forma, el error nunca sucede y aquí podemos hacer lo que deseemos.

Este es un pequeño y humilde resumen de metaprograming en Ruby, es decir por hoy estamos!!

Dejo link:
https://thesocietea.org/2015/08/metaprogramming-in-ruby-part-1/

miércoles, 12 de agosto de 2015

10 sitios para aprender Swift

Swift es el nuevo lenguaje de apple y se  viene con todo. La verdad es que era necesario dar otra opción a Object C. Por lo tanto es necesario aprender Swift.

Quiero compartir estos 10 sitios para aprender Swift. Ojo esta pagina la copie, les dejo la fuente a bajo.

Learn Swift Programming on Treehouse

Learn Swift on Treehouse
Swift: Learn the new programming language for iOS and OS X
Learn Here

Learn Swift on Lynda

Learn it on Lynda.com
Explore Swift courses on Lynda. They have 7 Swift courses organized into chapters and divided into short individual videos, so you can learn a new skill from start to finish or find a quick answer.
Learn Here

The Swift Programming on TutsPlus

Learn to Code with tutsplus
TutsPlus offers a short course in Swift programming, subscribe to view or buy this course for only $15.
Learn Here

SoSoSwift Resources

SoSoSwift Resources
The internet’s most comprehensive Swift resource. It acts as a vast repository of details offering a range of videos, code cases, blogs and code libraries.
Learn Here

Stanford University Developing iOS 8 Swift Apps

https://www.youtube.com/watch?v=XXhcJKKDOtI
Develop iOS apps in Swift
Learn Here

iOS 9 and Swift Mastery: Build 9 Apps with Swift

iOS 9 and Swift Mastery: Build 9 Apps with Swift
Learn how to work with Apple’s fun new language “Swift”, and go from a newbie to transforming your ideas into real apps
Learn Here

Learn iOS8 and Swift App Programming

Learn iOS8 and Swift App Programming
Be an Expert in latest iPhone iOS8 Programming with Swift & Xcode, SpriteKit, SQLite, HealthKit, SceneKit & OpenGL – ES
Learn Here

Apple Watch – Go From Newbie to Pro by Building 15 Apps

Apple Watch - Go From Newbie to Pro by Building 15 Apps
Learn how to develop real world Apple Watch apps with WatchKit and Swift. No prior programming experience required.
Learn Here

Swift programming for iOS with Parse. Practical examples.

Swift programming for iOS with Parse. Practical examples.
In this course you will learn all about user Sign up, Sign in, Sign out, Password Reset and more with Swift and Parse
Learn Here

Learn Swift at iTunes U

SoSoSwift Resources
Subscribe to the University of Plymouth’s Swift programming course through iTunes U and learn how to use the language in a series of practical videos that, introduces functions organically as they arise in the process of building real applications.
Learn Here





Dejo el link:
http://devboxpro.com/10-swift-sites-that-will-make-you-a-programming-ninja/

Introducción a Python




Les quiero dejar un libro gratuito sobre Python. Para la gente que comienza a programar. 

Dejo link: 

SORM vs Slick

No conocía SORM pero me parece muy bueno y esto se puede ver fácilmente cuando lo comparas con otro framework de persistencia.

Dejo el link:
http://sorm-framework.org/SORM-vs-Slick.html

domingo, 9 de agosto de 2015

Apache Storm


Hace algo de tiempo, hable de Apache Storm pero nunca pude hacer un post que se merece.

Apache Storm hace que sea fácil procesar de manera fiable flujos ilimitados de datos, es como Hadoop pero para datos en tiempo real, es decir. Apache Storm es simple, se puede utilizar con cualquier lenguaje de programación, y es muy divertido de usar!

Apache Storm se puede utilizar en diferentes situaciones: sistemas analíticos en tiempo real, machine learning onlines  o en tiempo real, RPC distribuida, ETL, y más.

Apache Storm es rápido: como  punto de referencia podemos tomar un registró : más de un millón de tuplas procesadas por segundo por nodo. Es escalable y tolerante a fallos, garantiza serán procesados los datos, y es fácil de instalar y operar.

Apache Storm  se integra con las tecnologías de gestión de colas y de bases de datos. Una topología de Apache Storm consume flujos de datos y procesa aquellas corrientes en formas arbitrariamente complejas y esto puede ser entrada de otro procesamiento.


Ah y se distribuye bajo licencia Apache, que más queres?

Dejo link:
https://storm.apache.org/