Translate
miércoles, 7 de octubre de 2015
Libro sobre el pasado, el presente y el futuro del Java para conmemorar su 20 aniversario
Quiero hacerme eco de la noticia que leí en javahispano, o'reilly publico un libro gratuito sobre el presente, pasado y futuro de java. El nombre del libro es Java: The Legend Past, Present, and Future
escrito por Ben Evans.
Dejo link:
http://www.javahispano.org/portada/2015/10/7/libro-sobre-el-pasado-el-presente-y-el-futuro-del-java-para.html
http://www.oreilly.com/programming/free/java-the-legend.csp
10 Libros sobre algoritmos que un programador debe leer
Quiero compartir este interesante articulo sobre algoritmo. Los programadores siempre tenemos que reeveer los algoritmos y buscar las buenas soluciones
Dejo link:
http://java67.blogspot.sg/2015/09/top-10-algorithm-books-every-programmer-read-learn.html
SOAP vs REST
Mucho se a dicho de Rest y SOAP pero siempre es bueno aclarar las diferencias entre Rest y SOAP. A mi entender las diferencias son muchas, y no se mezclan, es decir el objetivos de su creación es totalmente diferentes.
Aprovecho y les dejo este cuadrito:
Dejo link:
http://javarevisited.blogspot.sg/2015/08/difference-between-soap-and-restfull-webservice-java.html
Aprovecho y les dejo este cuadrito:
Dejo link:
http://javarevisited.blogspot.sg/2015/08/difference-between-soap-and-restfull-webservice-java.html
Scala Tutorial: Getting Started with Scala
Quiero compartir un pequeño tutorial sobre Scala que esta muy bueno de la gente de Udemy. Empieza muy fácil y es muy bueno para empezar.
Dejo link:
https://blog.udemy.com/scala-tutorial-getting-started-with-scala/
lunes, 5 de octubre de 2015
Reduce el riesgo a fallas con ELM
Ya he hablado de Elm, es un lenguaje funcional que compila a javascript. Bueno hace muy poco leo en infoQ un articulo sobre la reducción de fallas utilizando ELM.
Según este articulo una aplicación Elm, "una vez que se compila, por lo general trabaja en el primer intento sin regresiones o excepciones de tiempo de ejecución".
A la vez este articulo muestra que ELM es más rápido que muchos frameworks javascripts:
Dejo link:
http://www.infoq.com/news/2015/09/elm-introduction-feldman
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:
Dejo algunos gif:
Dejo link:
http://ionide.io/
- 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
|
|
|
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:
Dejo link: https://www.gnome.org/
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!!!
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!!!!
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!
Curso recomendado de Coursera
Me llego el siguiente mail de Coursera, muy buenos cursos:
My Courses Course Catalog | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Suscribirse a:
Entradas (Atom)