Translate

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/

miércoles, 5 de agosto de 2015

Cursos gratuitos en codeschool

Me llego este mail de codeschool y me pareció interesante compartirlo, como pueden ver hay cursos para todos los gustos y gratis!

Learn for Free
Build a strong coding foundation by playing through our collection of free courses:
Try Ruby
 
Try Ruby
Discover the basics of this simple yet powerful programming language
PLAY NOW
Try jQuery
 
Try jQuery
Learn the building blocks of jQuery.
PLAY NOW
Try Git
 
Try Git
Be introduced to the basic concepts of Git version control.
PLAY NOW
Try SQL
 
Try SQL
Learn basic database manipulation with SQL.
PLAY NOW
Try R
 
Try R
Test-drive data visualization in the R language.
PLAY NOW
Try Objective C
 
Try Objective C
Explore the language that powers iOS and Mac apps.
PLAY NOW
JavaScript Road Trip Part 1
 
JavaScript Road Trip Part 1
Get an introduction to the basics of the JavaScript language.
PLAY NOW
Shaping Up With Angular.js
 
Shaping Up With Angular.js
Shape up your script with Angular.js.
PLAY NOW
Rails for Zombies Redux
 
Rails for Zombies Redux
Learn Ruby on Rails, an open-source framework.
PLAY NOW
Discover DevTools
 
Discover DevTools
Sharpen your dev process with Chrome DevTools.
PLAY NOW
Discover Drive
 
Discover Drive
Take the Google Drive API for a spin.
PLAY NOW
Exploring Google Maps for iOS IOS
 
Exploring Google Maps for iOS
Zip around and learn how to use the Google Maps SDK for iOS.
PLAY NOW

Nuevos cursos de Python y R

Me llego la siguiente oferta de cursos de edx :
Plus courses in astronomy, mobile development, writing, economics, physics and more. 
Introduction to Computer Science and Programming Using Python – MITx
Introduction to Operations Management
Learn the world's most popular programming language. Discover the basics of the versatile and widely popular Python programming language in this introductory computer science course from MIT. You'll learn how computer science principles can be applied to develop innovative solutions to solve real-world problems.
Learn More
Introduction to R – Microsoft
Knowledge Management and Big Data in Business
Master the leading language in data science and statistics. Learn the programming skills data analysts use around the world to map marketing trends, analyze financial data and more. Through this interactive course from Microsoft, you'll practice your new skills and quickly build the knowledge to become a successful number cruncher.
Learn More

More great courses from world experts. 
Introduction to Mobile Application Development Using Android
Introduction to Mobile Application Development Using Android

HKUSTx – July 28, 2015

Learn More
English Grammar and Style
English Grammar and Style


UQx – July 26, 2015

Learn More
Thermodynamics
Thermodynamics


IITBombayX – August 4, 2015

Learn More
Introduction to Solar Systems Astronomy
Introduction to Solar Systems Astronomy - Credit Eligible

ASUx – August 20, 2015

Learn More
Financial Programming and Policies, Part 1
Financial Programming and Policies, Part 1

IMFx – August 5, 2015

Learn More
Introduction to Bioelectricity
Introduction to Bioelectricity


PurdueX – August 24, 2015 

Learn More