miércoles, 30 de septiembre de 2015

ionide una IDE para F#

Si adaptamos Atom para programar en F# que nos queda? Ionide es la respuesta. Un entorno de desarrollo para F# que nos ofrece:

  • syntax highlighting
  • error highlighting
  • autocompletion
  • tooltips
  • integración con F# de forma interactiva (como un RELP) 
  • Scaffolding

Dejo algunos gif:




Dejo link:
http://ionide.io/

Nuevo curso de Html 5

HTML5 XSeries Program – W3Cx

HTML5 XSeries Program from W3Cx
Master the most in-demand and fastest growing job skill today. Build new programming skills or sharpen existing ones in this two part XSeries Program from the W3C, creators of HTML5. For entrepreneurs, start-ups and large organizations, HTML5 knowledge is key to developing websites, mobile apps, video games and more. This hands-on course will teach you new techniques that you can start applying right away. Secure your future as a 21st-century developer and enroll today. 
Learn More

domingo, 27 de septiembre de 2015

Teoría de Categorías explicado por Erik Meijer

Erik Meijer es un groso, no voy a exponer su cv en este blog, solo voy a decir que le envidio mucho las remeras. Erik nos explica la Teoría de Categorías :


jueves, 24 de septiembre de 2015

Se viene GNOME 3.18

Hace varios post hable sobre Gnome y dije que no estaba bueno, bueno me equivoque. La verdad es que encontraron el camino, había que tenerles paciencia se esta poniendo muy bueno y si no mira este vídeo:



domingo, 20 de septiembre de 2015

Python 3.5 trae nuevas características

Recientemente se anuncio python 3.5 que trae nuevas características, nuevos módulos, mejoras en librerías estandar y seguridad.

Vamos a mostrar un poco la nueva sintaxis:

Corrutinas con sintaxis asincrónica-esperar: que permite a los desarrolladores escribir código como si fuera secuencial. De hecho, el compilador incorpora a través de una secuencia de corrutinas, por lo que es efectivamente concurrente. Veamos el siguiente ejemplo:

async def read_data(db):
data = await db.fetch('SELECT ...')
if (data...)
    await api.send(data ...')

Un operador que permite expresar multiplicación entre matrices:

S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
instead of:
S = dot((dot(H, beta) - r).T, dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))

Desembalaje, que pretende extender el uso permitido del operador * y hacer posible el uso de múltiples veces en llamadas a funciones, o en el interior de tuplas:

>>> print(*[1], *[2], 3)
1 2 3
>>> dict(**{'x': 1}, y=2, **{'z': 3})
{'x': 1, 'y': 2, 'z': 3}


>>> *range(4), 4
(0, 1, 2, 3, 4)

Como primer pantallazo, son noticias muy buenas!!!


jueves, 17 de septiembre de 2015

10 tips para los que se inician en Python


Quiero compartir un post sobre tips para los que se inician en python. Esta muy bueno, fácil de entender y muy útil.

Dejo link:
http://www.techbeamers.com/top-10-python-coding-tips-for-beginners/


lunes, 14 de septiembre de 2015

Bazel


Bazel es la herramienta que Google utiliza para construir la mayoría de su software. Esta es de código abierto.

 Según Google, Bazel está dirigido a construir "código de forma rápida y fiable" y es "fundamental para la capacidad de Google dado que es una empresa grande y que crece rápidamente"

Antes de la construcción de Bazel, Google construía su software utilizando Makefiles que no le daba mayor confiabilidad. Además, en comparación con los Makefiles, Bazel ofrece conceptos de alto nivel, como "test", "C ++ binario", las nociones de "plataforma de destino" y "host plataforma ", etc.

Bazel soporta varios lenguajes en los que estan c++, java, rust, scala o groovy.

Dejo link:
http://bazel.io/

domingo, 13 de septiembre de 2015

Introducción a ScalaTest


Vamos a hacer algunos test con ScalaTest. Empecemos haciendo una clase:

case class Guest(name: String)

case class Room(number: Int, guest: Option[Guest] = None){ room =>

  def isAvailable(): Boolean = ???

  def checkin(guest: Guest): Room = ???

  def checkout(): Room = ???

}

/*
 * We will automatically create 10 rooms
 * if these are not specified.
 */
case class Hotel(
  rooms: List[Room] = (1 to 10).map(n => Room(number=n)).toList){

  def checkin(personName: String): Hotel = ???

}

Hemos hecho una clase Hotel que contiene 10 habitaciones. El ??? significa que el metodo no fue definido, pero me permite compilar. Vamos a trabajar bien TDD.

Antes que nada agregamos el framework al proyecto utilizando sbt:

libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"

Ahora vamos a hacer una clase común para reutilizar métodos comunes:

package org.me.hotel

import org.scalatest.{FlatSpec,Matchers}

abstract class UnitTest(component: String) extends FlatSpec
  with Matchers{

  behavior of component

}

Como se puede ver hicimos una clase padre o general para todos los tests, esta extiende de FlatSpec e implementa Matchers.

A la vez le pasamos por parámetro el nombre del componente a probar. Si quisieramos utilizar esta clase lo hariamos de la siguiente manera:

class MyClassUnitTest extends UnitTest("MyClass")

A la vez utilizamos Matchers dado que nos provee expresiones más cercanas a los humanos como:

(2+2) should equal (4)
(2+2) shouldEqual 5
(2+2) should === (4)
(2+2) should be (4)
(2+2) shouldBe 5

Bueno ahora definimos nuestro test:

package org.me.hotel

class RoomTest extends UnitTest("Room") {

  it should "provide info about its occupation" in {
    Room(1).isFree() shouldEqual true
    Room(1,None).isFree() shouldEqual true
    Room(1,Some(Guest("Bruce"))).isFree() shouldEqual false
  }

  it should "allow registering a new guest if room is free" in {
    val occupiedRoom = Room(1).checkin(Guest("James"))
    occupiedRoom.isFree shouldEqual false
    occupiedRoom.guest shouldEqual(Option(Guest("James")))
  }

  it should "deny registering a new guest if room is already occupied" in {
    an [IllegalArgumentException] should be thrownBy {
      Room(1,Some(Guest("Barbara"))).checkin(Guest("Bruce"))
    }
  }

  it should "deny checking out if room is already free" in {
    an [IllegalArgumentException] should be thrownBy {
      Room(1).checkout()
    }
  }

  it should "allow checking out if room is occupied by someone" in {
    val room = Room(1,Some(Guest("Carmine")))
    val freeRoom = room.checkout()
    freeRoom.isFree shouldEqual true
  }

}

Como se puede ver los test quedan escritos casi en lenguaje natural.

Si corremos los tests nos darán un error:

> test
[info] RoomTest:
[info] Room
[info] - should provide info about its occupation *** FAILED ***
[info]   scala.NotImplementedError: an implementation is missing
[info]   at scala.Predef$.$qmark$qmark$qmark(Predef.scala:252)
[info]   at org.me.hotel.Room.isFree(Room.scala:6)
[info]   at org.me.hotel.RoomTest$$anonfun$1.apply$mcV$sp(RoomTest.scala:6)
[info]   at org.me.hotel.RoomTest$$anonfun$1.apply(RoomTest.scala:5)

...

[info] Run completed in 699 milliseconds.
[info] Total number of tests run: 15
[info] Suites: completed 6, aborted 0
[info] Tests: succeeded 3, failed 12, canceled 0, ignored 0, pending 0
[info] *** 12 TESTS FAILED ***
[error] Failed tests:
[error]   org.me.hotel.RoomTest
[error]   org.me.hotel.HotelTest
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 6 s, completed 12-ago-2015 16:08:47

Ahora a hacer que nuestras clases pasen sus tests, Suerte!!!!


martes, 8 de septiembre de 2015

Este sábado 12 empieza el #HackathonLitoral2015 en Santa Fe. Inscribite!

Quería invitarlos al hackathon litoral: 
Traé tu idea al Hackathon Litoral 2015!  Santa Fe / Paraná
En la tercera edición del Hackathon Litoral, logramos algo que soñábamos: unir a las ciudades de Santa Fe y Paraná en dos eventos y así potenciar la comunidad.
 
Te invitamos a traer tus ideas para mejorar la vida en la ciudad. Primero nos encontramos en el GDG IOT DevFest, para aprender a armar prototipos funcionales y formar los equipos.
Sumate el sábado 12 de septiembre a las 8:30 am en la Facultad de Ingeniería y Ciencias Hídricas, Universidad Nacional del Litoral. [Ciudad Universitaria, Ruta Nacional N° 168 - Km. 472,4, Santa Fe]



 
Una semana después nos reencontramos en el Hackathon, para pasar las próximas 36 horas diseñando los prototipos. El evento se realizará en el Club Social en Paraná, desde el viernes 18 de septiembre a las 7:00 PM hasta el sábado 19 a las 10:00 am. [San Martín 958, Paraná, Entre Ríos]



¿Cómo me inscribo?
 
bit.ly/hack-litoral
 

¿Cuáles son los temas de este Hackathon?
 
• Comidas
• Cultura
• Ciudad Verde
• Transporte
• Educación
 
¿A quiénes se convoca?
 
Estudiantes, Tecnólogos, Desarrolladores, Emprendedores, Diseñadores, Curiosos, Inquietos, Creativos, Cocineros, Cerveceros, Amantes de los viajes, Hoteleros, Agentes de Viaje, Doctores, Organizaciones Sociales, Nutricionistas, Turistas, Bloggeros, Twitteros, Periodistas.
 
¿Cómo es la dinámica?
El objetivo del evento es armar equipos para presentar prototipos funcionales que solucionen problemas concretos usando tecnología y diseño.
Debido a la naturaleza colaborativa del evento no habrá ganadores, perdedores, premios o un jurado que evalúe las ideas.
Todos tienen la posibilidad de crear con la ayuda de los participantes el equipo de mentores.
 
¿Dónde encuentro más información?
 

  

¡Te esperamos!

Curso recomendado de Coursera

Me llego el siguiente mail de Coursera, muy buenos cursos:

Ready to learn something new?
   My Courses  Course Catalog
We have recommendations for you
We combed our catalog and found courses and Specializations that we think match your interests. Browse our recommendations below, and start learning something new today.

Recommended Specializations

Java Programming: An Introduction to SoftwareJava Programming: An Introduction to Software
Duke University • Available Now
Python for EverybodyPython for Everybody
University of Michigan • Available Now
Java Programming: Object-Oriented Design of Data StructuresJava Programming: Object-Oriented Design of Data Structures
University of California, San Diego • Available Now
Emerging Technologies: From Smartphones to IoT to Big DataEmerging Technologies: From Smartphones to IoT to Big Data
Yonsei University • Available Now
View All Specializations

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