Translate
miércoles, 10 de octubre de 2012
javafxcommunity.com
Oracle abrió un sitio para compartir información y hacer comunidad sobre JavaFX, dejo el link: http://community.java.net/community/javafx
martes, 9 de octubre de 2012
WebPlataform.org
WebPlataform.org es una gran idea la W3C junto a las empresas grandes como Google, Facebook, Microsoft, Opera, Mozilla, Nokia, HP, Adobe y Apple, abrieron una comunidad para desarrolladores con el objetivo de hacer una web mejor.
"Somos una comunidad abierta de desarrolladores que crean recursos para una web mejor, sin importar la marca, el navegador o plataforma. Cualquiera puede contribuir y cada persona que lo hace, nos hace más fuertes. Juntos podemos seguir impulsando la innovación en la Web para servir a un bien mayor. Se inicia aquí, contigo."
De esta forma se presenta esta web que promete tener muchos recursos para desarrolladores web, dejo un video:
"Somos una comunidad abierta de desarrolladores que crean recursos para una web mejor, sin importar la marca, el navegador o plataforma. Cualquiera puede contribuir y cada persona que lo hace, nos hace más fuertes. Juntos podemos seguir impulsando la innovación en la Web para servir a un bien mayor. Se inicia aquí, contigo."
De esta forma se presenta esta web que promete tener muchos recursos para desarrolladores web, dejo un video:
lunes, 8 de octubre de 2012
Nuevo libro gratuito sobre Big Data y Cloud Computing
"Acaba de ser editado este nuevo material/libro académico con licencia commons 3.0 en ES y CAT por la Universitat Oberta de Catalunya (UOC). Mi humilde aportación para ayudar a personas con ganas de emprender, permitiéndoles hacer una entrada rápida a estas nuevas tecnologías que ya están aquí y que quizás puedan ser una herrramienta más en su viaje hacia nuevos retos. Pero junto con la UOC esperamos también que sea útil para todos aquellos alumnos (y personas en general) que quieran tener una visión introductoria de estos temas que son de tanta actualidad. Esperamos que sea un buen punto de partida y en el documento encontrarán referencias en cada apartado para poder profundizar más en el tema si se desea."
Así comienza su post Jordi Torres, en el cual nos deja un link a su libro gratuito de big data y cloud computing:
http://www.jorditorres.org/nuevo-libro-sobre-big-data-y-cloud-computing/
JSON-LD (JavaScript Object Notation for Linking Data)
JSON-LD es una extensión de JSON que le da la capacidad de representar datos semánticos de nuestras paginas. JSON-LD es un método de transporte de Linked Data con JSON. Ha sido diseñado para ser tan simple y conciso posible, sin dejar de ser legible. Además, era una meta que requiere el menor esfuerzo posible de desarrolladores para transformar su JSON simple y llano a semánticamente rica JSON-LD.
Es muy simple, veamos un ejemplo:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/workplaceHomepage",
"@type": "@id"
},
"person": "http://xmlns.com/foaf/0.1/Person"
},
"@id": "http://me.markus-lanthaler.com",
"@type": "person",
"name": "Markus Lanthaler",
"homepage": "http://www.tugraz.at/"
}
Dejo un video:
Dejo links:
http://json-ld.org/
http://en.wikipedia.org/wiki/JSON-LD
http://en.wikipedia.org/wiki/Linked_data
Es muy simple, veamos un ejemplo:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/workplaceHomepage",
"@type": "@id"
},
"person": "http://xmlns.com/foaf/0.1/Person"
},
"@id": "http://me.markus-lanthaler.com",
"@type": "person",
"name": "Markus Lanthaler",
"homepage": "http://www.tugraz.at/"
}
Dejo un video:
Dejo links:
http://json-ld.org/
http://en.wikipedia.org/wiki/JSON-LD
http://en.wikipedia.org/wiki/Linked_data
JSONiq: The JSON Query Language
JSONiq es un nuevo lenguaje de consulta construido sobre xquery, como SQL o LinQ tiene funcionalidad de let, for, group by, where, etc. Veamos un ejemplo:
let $stats := db:find("stats")
for $access in $stats
where $access("response_time") > 5
group by $url := $access("url")
return
{
"url": $url,
"avg": avg($access("response_time")),
"hits": count($access)
}
También permite updates:
let $dbj := collection("users")[ .("name") = "Deadbeat Jim" ]
return insert json { "status" : "credit card declined" } into $dbj
Esta muy bueno que se estandarice la forma de consultar datos json, este estándar esta en pañales pero ya tiene una implementación en el producto Zorba. Promete gran futuro!!
Fuente:
http://www.infoq.com/news/2012/10/JSONiq
Links:
http://www.jsoniq.org/
http://jsoniq.org/docs/spec/en-US/html-single/index.html
http://jsoniq.org/grammars/jsoniq.xhtml
http://www.zorba-xquery.com/html/index
domingo, 7 de octubre de 2012
Currying
Currying es una técnica de transformación de una función con múltiples argumentos de tal manera que se puede llamar como una cadena de funciones cada uno con un único argumento.
Vamos a explicarlo con un ejemplo, supongamos que tenemos una función f(x,y) para evaluar esta función la llamamos de la siguiente forma f(2,3) por ejemplo. Suponiendo que no tenemos el valor de y se podría definir una función g(y) = f(2,y). De esta forma cuando llamamos a g(3) = f(2,3)
No parece una técnica muy potente, simplemente definimos una función como una segunda función con parámetros fijos, pero esta técnica con clousures puede ser muy útil y nos permite componer funciones a partir de otras.
Oficialmente cada función de Haskell solo puede tomar un parámetro. Todas las funciones que aceptan más de un parámetro hacen uso de currying. Cuando tenemos una función con dos parámetros en realidad por ejemplo:
max 4 5
es igual que llamar
(max 4) 5
(max 4) es una función que devuelve el parámetro si es mayor a 4 o 4 si es menor.
Por ejemplo en Haskell se puede definir una función double de la siguiente manera:
mult :: Int -> Int -> Int
mult x y = x * y
double = mult 2
En la pagina de scala podemos encontrar el siguiente ejemplo:
object CurryTest extends Application {
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) xs
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int)(x: Int) = ((x % n) == 0)
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
println(filter(nums, modN(2)))
println(filter(nums, modN(3)))
}
Noten que la función modN es llamada con un parámetro por lo tanto devuelve una función del tipo Int => Boolean que luego se utiliza en la función filter.
Currying es una técnica que nos facilita la vida y cobra gran potencia junto a el uso de clousures.
Dejo links:
http://www.scala-lang.org/node/135
http://www.engr.uconn.edu/~jeffm/Papers/curry.html
http://blog.gnucom.cc/2010/currying-in-f/
http://www.haskell.org/haskellwiki/Currying
http://en.wikipedia.org/wiki/Currying
sábado, 6 de octubre de 2012
VOTE!!! Give JBoss Application Server a new name!
Me llego un mail de la gente de Red Hat al parecer van a cambiar el nombre de su producto estrella JBoss y quieren consultar a la comunidad cual es el mejor nombre para el servidor Open Source. Ojo van a cambiar el nombre de su servidor pero la versión de la comunidad; el servidor comercial va seguir llamándose JBoss.
Creo que Red Hat esta haciendo el mismo movimiento que hizo con Red Hat en su momento, tener una versión para la comunidad Fedora y otra para facturar Red Hat.
Vamos a ver como sigue esta historia, por ahora a votar el mejor nombre!
Dejo el link:
https://sso.jboss.org/login?service=https%3A%2F%2Fwww.jboss.org%2Frename.html
miércoles, 3 de octubre de 2012
Tipando Javascript con TypeScript
TypeScript es un lenguaje que corre sobre javascript; muy similar a javascript pero con la salvedad de que TypeScript es un lenguaje fuertemente tipado. Es decir esta librería nos da un sistema de tipado para el lenguaje Javascript, además nos da clases; para poder utilizar la orientación a objetos por medio de clases como estamos más acostumbrados, no por prototipado.
En la pagina oficial de TypeScript se puede ver el siguiente ejemplo:
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("world");
var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
alert(greeter.greet())
}
document.body.appendChild(button)
A la vez, permite que las IDEs nos ayuden a escribir en código. Esta librería/lenguaje (no se como llamarlo) es gratuita y open sources.
Dejo links:
http://www.infoq.com/news/2012/10/typescript
http://www.typescriptlang.org/
5 editores de código online y gratuitos (IDEs)
Ya hable anteriormente de las IDES online, las cuales nos permiten tener nuestro código en la nube y nos facilita la comunicación con servicios en la nube. Anteriormente hable de Cloud 9 (la ide de George Harrison) ahora quiero compartir este link con 5 IDES en la nube:
http://www.elwebmaster.com/general/5-editores-de-codigo-online-y-gratuitos-ides
Play Framework + Eclipse + Postgresql + Mercurial
Simplemente quiero compartir este tutorial que esta muy completo: http://www.welinux.cl/notas/public/alawelinux.html
Que pasaría si no existiría el Null??
Es una pregunta tonta, ya que el null nació como una forma de representar la nada misma. Es decir el null es necesario pero, no creen que esta sobre valorado? ¡esta en todos lados! En javacript por ejemplo se tiene que preguntar si esta definida la variable; porque una variable puede no estar definida; pero además la variable puede ser nula por lo tanto tengo que preguntar si es distinta de null. Para citar otro ejemplo en java la lucha diaria contra NullPointerException...
No es un problema de la tecnología sino que no nos tomamos el tiempo de definir que puede ser nulo y que no, si existen valores por defecto, etc. Pero la tecnología nos puede ayudar y en este caso me parece correcto el camino que tomo C# o .net; en el cual se puede definir que una variable no puede ser nula (non-nullable) o se puede definir un valor por defecto cuando no se asigna nada; cosa que se puede hacer en las bases de datos hace años.
Es interesante como en Eiffel se puede definir un contrato en el cual queda claro que por ejemplo para que esta función funcione es necesario que el parámetro no sea nulo y que sea mayor a 0. Dandole seguridad y tranquilidad a los desarrolladores. Me debo un buen post sobre Eiffel.
En conclusión cuando tenemos más tiempo hacemos las cosas mejor; por eso es importante tomarse el tiempo de definir que campos pueden ser nulos y cuales pueden tener datos por defecto. Y esta bueno que la tecnología nos ayude a definir estas restricciones y mejor sería que nos obligue a definirlo.
Dejo links:
http://www.infoq.com/news/2012/10/Null-CSharp
http://twistedoakstudios.com/blog/?p=330
lunes, 1 de octubre de 2012
Python 3.3.0 fue lanzado oficialmente
Python, un lenguaje de programación multiplataforma que permite a los usuarios trabajar con más rapidez e integrar los sistemas más eficazmente, acaba de alcanzar la versión 3.3.0.
Dejo links:
http://www.python.org/
http://www.python.org/download/releases/3.3.0/
Jenkins para Google App Engine
"Integración continua en la nube para aplicaciones Java y Python" Esta es la premisa del nuevo servicio de CloudBees, básicamente lo que proveen es un Jenkins en la nube para nuestras aplicaciones app engine.
Desarrollado por Jenkins y más de 600 plugins de la comunidad, CloudBees ofrece el servicio se integración continua en la nube para ayudar a construir y entregar rápidamente software de calidad.
Abra que probarlo dejo el link: https://appengine.cloudbees.com/
BackTrack, el Linux para los chicos malos
BackTrack es una distro Linux para la auditoria de seguridad y relacionada con la seguridad informática en general. Es un Linux con muchas herramientas para auditar la seguridad de tus aplicaciones, tu red, etc.
Fue incluida en el puesto 7 de la famosa lista "Top 100 Network Security Tools" de 2006.
Dejo un video:
Dejo link: http://www.backtrack-linux.org/
sábado, 29 de septiembre de 2012
Lazy evaluation, la ventaja de los perezosos
Lazy evaluation o evaluación perezosa permite que un bloque de código sea evaluado luego, esto nos permite realizar código más performante en ciertas situaciones. Vamos con un ejemplo, supongamos que tengo la función multiplicación
mult(a, b) = a * a
Si llamara a esta función de la forma mult(8, 5+2) se ejecutaría así:
mult(8, 5+2)
mult(8,7)
8*8
64
Pero si ejecutamos el código de forma perezosa
mult(8, 5+2)
8 * 8
64
En este caso la ejecución perezosa fue más eficiente que la normal.
Para poner otro ejemplo si tengo la función loop
loop(x) = loop(x)
Esta función nunca termina, veamos que pasa si ejecutamos mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
... hasta el infinito y más allá...
Pero si ejecutamos de forma perezosa
mult(2, loop(2))
2 * 2
4
Termina y nos da el resultado.
La evaluación perezosa viene del paradigma funcional, es una característica de Haskell y también de Scala. Dándole gran potencia al lenguaje.
Dejo link:
http://en.wikipedia.org/wiki/Lazy_evaluation
mult(a, b) = a * a
Si llamara a esta función de la forma mult(8, 5+2) se ejecutaría así:
mult(8, 5+2)
mult(8,7)
8*8
64
Pero si ejecutamos el código de forma perezosa
mult(8, 5+2)
8 * 8
64
En este caso la ejecución perezosa fue más eficiente que la normal.
Para poner otro ejemplo si tengo la función loop
loop(x) = loop(x)
Esta función nunca termina, veamos que pasa si ejecutamos mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
... hasta el infinito y más allá...
Pero si ejecutamos de forma perezosa
mult(2, loop(2))
2 * 2
4
Termina y nos da el resultado.
La evaluación perezosa viene del paradigma funcional, es una característica de Haskell y también de Scala. Dándole gran potencia al lenguaje.
Dejo link:
http://en.wikipedia.org/wiki/Lazy_evaluation
Suscribirse a:
Entradas (Atom)