Translate
martes, 17 de febrero de 2015
Aleatoriedad en Haskell
Muchas veces necesitamos un numero aleatorio, tanto para hacer un juego o para simulación. En lenguajes imperativos esto es muy fácil, podemos utilizar una función que nos devuelva un numero aleatorio. Pero en la programación funcional, esto no es tan fácil, dado que la programación funcional se sostiene en un pilar que se llama "transparencia referencial"
La transparencia referencial es muy importante, lo que dice es que todas las funciones debe devolver el siempre mismo valor dado un parámetro determinado. Esto no siempre es así en la programación imperativa porque podemos tener estados, y esos estados pueden cambiar el comportamiento de una función, les muestro un ejemplo para ser más claro:
var a = 2;
var c = 3;
function ejemplo(paremetro) {
if (a == 2) {
return ++parametro;
}
return --parametro;
}
> ejemplo(a)
3
> ejemplo(2)
1
La función utiliza una variable global, y dado el estado de esa variable incrementa el parámetro o lo decrementa.
Bueno, recuerda, Haskell es un lenguaje funcional puro. Esto hace un poco complicado obtener números aleatorios.
Si hacemos la función:
randomNumber :: (Num a) => a
randomNumber = 4
No será muy útil como función de números aleatorios ya que siempre nos devolverá el mismo 4, aunque puedo asegurar que ese 4 es totalmente aleatorio ya que acabo de lanzar un dado para obtenerlo.
Esto me hace acordar un chiste:
¿Qué hacen demás lenguajes para generar número aparentemente aleatorios? Bueno, primero obtienen algunos datos de tu computadora, como la hora actual, cuanto y a donde has movido el ratón, el ruido que haces delante del computador, etc. Y basándose en eso, devuelve un número que parece aleatorio. La combinación de esos factores (la aleatoriedad) probablemente es diferente en cada instante de tiempo, así que obtienes números aleatorios diferentes.
Así que en Haskell, podemos crear un número aleatorio si creamos una función que tome como parámetro esa aleatoriedad y devuelva un número (o cualquier otro tipo de dato) basándose en ella.
Utilizaremos el módulo System.Random. Contiene todas las funciones que calmaran nuestra sed de aleatoriedad. Vamos a jugar con una de las funciones que exporta, llamada random. Su declaración de tipo es random :: (RandomGen g, Random a) => g -> (a, g) ¡Wau! Hay nuevas clases de tipos en esta declaración. La clase de tipos RandomGen es para tipos que pueden actuar como fuentes de aleatoriedad. La clase de tipos Random es para tipos que pueden tener datos aleatorios. Un dato booleano puede tener valores aleatorios, True o False. Un número también puede tomar un conjunto de diferentes valores alotarios ¿Puede el tipo función tomar valores aleatorios? No creo. Si traducimos la declaración de tipo de random al español temos algo como: toma un generador aleatorio (es decir nuestra fuente de aleatoriedad) y devuelve un valor aleatorio y un nuevo generador aleatorio ¿Por qué devuelve un nuevo generador junto al valor aleatorio? Lo veremos enseguida.
Para utilizar la función random, primero tenemos que obtener uno de esos generadores aleatorios. El módulo System.Random exporta un tipo interensante llamado StdGen que posee una instancia para la clase de tipos RandomGen. Podemos crear un StdGen manualmente o podemos decirle al sistema que nos de uno basandose en un motón de cosas aleatorias.
Para crear manualmente un generador aletario, utilizamos la función mkStdGen. Tiene el tipo Int -> StdGen. Toma un entero y basándose en eso, nos devuelve un generador aleatorio. Bien, vamos a intentar utilizar el tandem random mkStdGen para obtener un número aleatorio.
ghci> random (mkStdGen 100)
<interactive>:1:0:
Ambiguous type variable `a' in the constraint:
`Random a' arising from a use of `random' at <interactive>:1:0-20
Probable fix: add a type signature that fixes these type variable(s)
¿Qué pasa? Ah, la función random puede devolver cualquier tipo que sea miembro de la clase de tipos Random, así que tenemos que decir a Haskell exactamente que tipo queremos. Recuerda también que devuelve un valor aleatorio y un generador.
ghci> random (mkStdGen 100) :: (Int, StdGen)
(-1352021624,651872571 1655838864)
¡Por fin, un número que parece aleatorio! El primer componente de la dupla es nuestro número aleatorio mientras que el segundo componente es una representación textual del nuevo generador ¿Qué sucede si volvemos a llamar random con el mismo generador?
ghci> random (mkStdGen 100) :: (Int, StdGen)
(-1352021624,651872571 1655838864)
Por supuesto. El mismo resultado para los mismos parámetros. Vamos a probar dándole como parámetro un generador diferente.
ghci> random (mkStdGen 949494) :: (Int, StdGen)
(539963926,466647808 1655838864)
Genial, un número diferente. Podemos usar la anotación de tipo con muchos otros tipos.
ghci> random (mkStdGen 949488) :: (Float, StdGen)
(0.8938442,1597344447 1655838864)
ghci> random (mkStdGen 949488) :: (Bool, StdGen)
(False,1485632275 40692)
ghci> random (mkStdGen 949488) :: (Integer, StdGen)
(1691547873,1597344447 1655838864)
Esto es muy bueno!!
Dejo la fuente: http://aprendehaskell.es/content/EntradaSalida.html#aleatoriedad
Simplificando la interacción con Windows desde Linux con Winconn
Algunas veces necesitamos una aplicación que solo corre en Windows. Y no hay caso necesitamos esa aplicación y no una que la sustituya. Por lo que debemos crear una maquina virutal.
Winconn simplifica la administración, creación y integración con escritorios remotos Windows.
Entre las características podemos nombrar:
- Podemos crear y gestionar perfiles de aplicación remotas
- Acceder a carpetas de la aplicación remota como locales
- Redirección de impresora local
- Crear acceso directos en el escritorio para sus aplicaciones remotas
- Las aplicaciones remotas integradas en el menú
- Indicador de aplicación para una rápida ejecución de aplicaciones
- Importación de aplicaciones remotas, empaquetados en archivos RDP
Una característica no tan buena es que corre en Ubuntu o los derivados. Tal vez podrían ampliar la distribución a otras distros.
Dejo link:
http://stanev.org/winconn/
Dejo un vídeo:
viernes, 13 de febrero de 2015
Cual es el mejor lenguaje para a prender programación funcional?
Me encontré con esta pregunta en internet y me resulta muy interesante...
Yo pienso en scala, haskell o sml . También es buena idea utilizar un lenguaje de tipado débil como Lisp o erlang...
Pero admito que me gusta aprender lenguajes, tal vez el más completo es Haskell. Pero esta es una opinión personal.
Seria muy interesante que opinen, les dejo el link:
http://www.slant.co/topics/485/~what-are-the-best-languages-for-learning-functional-programming
jueves, 12 de febrero de 2015
Construir Aplicaciones Web con Go
Quiero compartir el libro para construir aplicaciones Web con Go.
Go es el lenguaje que embandera Google y esta tomando muchísimo lugar y como es esperado tambien sector Web.
Por lo tanto esta bueno leer este libro.
Les dejo este link:
http://codegangsta.gitbooks.io/building-web-apps-with-go/
Go es el lenguaje que embandera Google y esta tomando muchísimo lugar y como es esperado tambien sector Web.
Por lo tanto esta bueno leer este libro.
Les dejo este link:
http://codegangsta.gitbooks.io/building-web-apps-with-go/
lunes, 9 de febrero de 2015
.NET CoreCLR es Open Source y se mudo a GitHub
Microsoft sigue seduciendo a la comunidad open sources. Ahora tomo la decisión de publicar el corazón de .net en GitHub.
Que más se puede decir? Más que sorprendido y pienso que es un gran paso al open source.
Dejo link: https://github.com/dotnet/coreclr
domingo, 8 de febrero de 2015
Spring 4 y Java 8
Spring 4 soporta java 6,7 y 8 con lo que eso significa. Ahora podemos utilizar spring con Clausuras. Y no solo eso sino todos los beneficios de java 8.
Podemos utiliza clasuras and la Api de DataTime. Además el operador diamante y repeating annotations.
Es muy bueno que Spring se acople y adapte a la nueva versión de Java.
Top 10 lenguajes de programación según IEEE Spectrum
IEEE Spectrum es un indice que se calcula con varias fuentes, google, github, etc. Según este indice el lenguaje más popular es Java y luego C. Pueden ver el detalles de los lenguajes en la siguiente imagen:
miércoles, 4 de febrero de 2015
4 libros para aprender AngularJS
So lo quiero hacerme eco de un post muy interesante sobre libros de AngularJS.
Dejo link: http://www.jquerybyexample.net/2015/02/4-free-ebooks-to-learn-angularjs.html
lunes, 2 de febrero de 2015
Profiling R
Algo que me resulto sumamente interesante de R es que el lenguaje tiene unas funciones para buscar problemas de performance. Me parece muy buena idea, permite que sin herramientas visuales podemos verificar la performance.
La función system.time nos permite saber cuanto demora una función determinada, veamos un ejemplo:
system.time(for(i in 1:m) t.test(X[i, ] ~ grp)$stat)
#> user system elapsed
#> 1.575 0.011 1.599
system.time(
for(i in 1:m) t.test(X[i, grp == 1], X[i, grp == 2])$stat
)
#> user system elapsed
#> 0.406 0.000 0.408
Otra función que nos permite buscar problema de performance es Rprof. Con Rprof podemos setear R para que funcione a modo de profiling. De esta forma R se ejecuta el código, de un modo que nos indica el tiempo que se ejecutan las funciones. Es ideal para buscar problemas de performance.
Luego de esta pequeña introducción a código para hacer profile, me quedo con la idea de introducir funciones que nos permiten buscar problemas de performance. Es una gran idea, los lenguajes podrían copiar esta idea. Y a la vez eliminan la necesidad de IDEs.
Dejo links:
http://www.stat.berkeley.edu/~nolan/stat133/Fall05/lectures/profilingEx.html
sábado, 31 de enero de 2015
Gradle una herramienta para construir aplicaciones con la potencia y flexibilidad de Ant y con la gestión de dependencia de Maven
Ya escribí anteriormente a Gradle, es una herramienta que permite crear proyectos en Java o Groovy. Similar a Maven, es más utiliza los repositorio de Maven.
Si vemos la pagina web nos dice más o menos lo siguiente:
"Gradle es un sistema de automatización de compilación de código abierto. Gradle puede automatizar la creación, prueba, publicación, distribución y más de paquetes de software u otro tipo de proyectos, tales como sitios web generados estáticos, documentación generada o de hecho cualquier otra cosa.
Gradle combina la potencia y flexibilidad de Ant con la gestión de dependencias como Maven"
Pero, como utilizamos esta herramienta? Si utilizaron Maven anteriormente, instalar Gradle es muy similar. Se debe bajar esta herramienta y luego se debe agregar la carpeta a la variable PATH, en linux tenemos el archivo .profile y podemos hacer algo así:
export GRADLE_HOME=/java/gradle-2.2.1
export PATH=$GRADLE_HOME/bin:$PATH
Si vemos la pagina web nos dice más o menos lo siguiente:
"Gradle es un sistema de automatización de compilación de código abierto. Gradle puede automatizar la creación, prueba, publicación, distribución y más de paquetes de software u otro tipo de proyectos, tales como sitios web generados estáticos, documentación generada o de hecho cualquier otra cosa.
Gradle combina la potencia y flexibilidad de Ant con la gestión de dependencias como Maven"
Pero, como utilizamos esta herramienta? Si utilizaron Maven anteriormente, instalar Gradle es muy similar. Se debe bajar esta herramienta y luego se debe agregar la carpeta a la variable PATH, en linux tenemos el archivo .profile y podemos hacer algo así:
export GRADLE_HOME=/java/gradle-2.2.1
export PATH=$GRADLE_HOME/bin:$PATH
Y luego hacemos que tome estos cambios con source
source .profile
Luego podemos probar esto de la siguiente manera:
$ gradle -v
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time: 2014-11-24 09:45:35 UTC
Build number: none
Revision: 6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
Groovy: 2.3.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_11 (Oracle Corporation 25.11-b03)
OS: Linux 3.11.0-12-generic amd64
Por hoy estamos, en siguientes post vamos a crear proyectos y ejecutar tareas.
Dejo link: http://gradle.org/
jueves, 29 de enero de 2015
Aprender y enseñar con Teachlr
Teachlr es una pagina web en la cual se puede enseñar o aprender de forma gratuita. Todos tenemos cosas para aprender y para enseñar, y esta pagina es para hacer esto.
En esta pagina existen varios cursos de computación general, y tambien de programación HTML o CSS, en fin de todo.
Dejo el link: https://teachlr.com/
lunes, 26 de enero de 2015
Spring Boot
Es raro que no haya escrito antes de Spring Boot dado que es un subproyecto de Spring muy útil. Este proyecto nos ayuda a comenzar un proyecto rápidamente.
Como saben crear un proyecto Spring con todo configurado no es fácil y conlleva tiempo. Con Spring Boot podemos crear diferentes proyectos rápidamente. Ojo luego debemos trabajar un poco para personalizar nuestro proyecto pero el trabajo más grueso ya esta hecho.
Algo que me falto decir es que Spring Boot utiliza maven o Gradle, se pueden crear proyectos como arquetipos.
Entre las características podemos nombrar:
- Podemos utilizar jetty o tomcat embebido.
- No necesitamos tocar configuraciones de Maven
- Tenemos un proyecto listo para ejecutar, con mínimas configuraciones.
Dejo link:
sábado, 24 de enero de 2015
h4ckademy
Hack es una palabra tillada y no me simpatiza. Pero me hago eco de la nueva pagina web para aprender programación. Simplemente eso, porque el Kick-off es en febrero.
Dejo link: http://www.h4ckademy.com/
jueves, 22 de enero de 2015
Lazy evaluation en R
R es un lenguaje funcional y a la vez tiene la característica de evaluación perezosa, es decir que no ejecuta código solo hasta que lo necesita. Parece rara esta característica pero es muy útil.
Supongamos lo siguiente:
> fx <- function() {
+ print("codigo muy costoso...")
+ }
> fx
function() {
print("codigo muy costoso...")
}
> fx()
[1] "codigo muy costoso..."
> otraFx <- function (i, f) { if (i > 10) f() }
> otraFx(2,fx)
> otraFx(20,fx)
[1] "codigo muy costoso..."
>
Por lo tanto la función fx no se ejecuta si no es necesario, otro ejemplo:
> f <- function(x) {
10
}
> f(stop("This is an error!"))
> [1] 10
Podemos forzar que ejecute el código, con force (que original) :
> f <- function(x) {
force(x)
10
}
> f(stop("This is an error!"))
#> Error in force(x): This is an error!
Una interesante característica, sin más dejo link:
http://adv-r.had.co.nz/Functions.html
Supongamos lo siguiente:
> fx <- function() {
+ print("codigo muy costoso...")
+ }
> fx
function() {
print("codigo muy costoso...")
}
> fx()
[1] "codigo muy costoso..."
> otraFx <- function (i, f) { if (i > 10) f() }
> otraFx(2,fx)
> otraFx(20,fx)
[1] "codigo muy costoso..."
>
Por lo tanto la función fx no se ejecuta si no es necesario, otro ejemplo:
> f <- function(x) {
10
}
> f(stop("This is an error!"))
> [1] 10
Podemos forzar que ejecute el código, con force (que original) :
> f <- function(x) {
force(x)
10
}
> f(stop("This is an error!"))
#> Error in force(x): This is an error!
Una interesante característica, sin más dejo link:
http://adv-r.had.co.nz/Functions.html
sábado, 17 de enero de 2015
jueves, 15 de enero de 2015
Rust 1.0 Alpha Released
Hace muy poco que hable sobre Rust y que paso? Un nuevo release de Rust 1.0 fue liberado. Ojo es la versión Alpha. Así es de poderoso este blog...
A la pregunta de en que andaba Rust, bueno están trabajando. Y han liberado una versión alpha.
Les dejo el release note.
Dejo link:
http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html
martes, 13 de enero de 2015
Python vs. R, Cual debo aprender primero?
Udacity es un sitio que dicta cursos de forma gratuita y es más que recomendable. Y quien no mejor para aconsejarnos que aprender primero Python o R, si nos vamos a dedicar a analizar datos.
Como sabrán los lenguajes más utilizados para el análisis de datos son Python y R. R no me sorprende para nada dado que el propósito del lenguaje es analizar datos. No es un lenguaje de propósito general, en cambio Python si es un lenguaje de propósito general, que cada vez más esta ganando lugar en la comunidad cientifica.
Yo me pregunto porque Python esta ganando tanto terreno en el plano científico, tal vez en otro post. Lo que yo pienso es que debe ser por la facilidad de uso, otra característica no se. Escucho opiniones.
Me ido por las ramas, lo importante es que dejo este interesante link, que si les cuenta cual es la ventaja de aprender uno o otro. No pienso contar el final.
Dejo link:
http://blog.udacity.com/2015/01/python-vs-r-learn-first.html?utm_content=buffer4eca6&utm_medium=social&utm_source=plus.google.com&utm_campaign=update
En que anda Rust?
Recuerdan a Rust? La verdad es que me había olvidado de este lenguaje, fue que en la encuesta de infoQ sobre "quien ocupara el lugar de C?" lo vi. Ahora tuve un poco de tiempo y decidí ver en que andaba...
Para los que no recuerdan Rust es un lenguaje similar a C pero más evolucionado, con muchas características interesantes. Como por ejemplo pattern matching, inferencia de tipo, clausuras, etc...
A la vez es multiparadigma, se puede programar de modo funcional o imperativo y tambien orientado a objetos. Pero por ejemplo no se encuentra mucha info de la programación orientada a objeto en rust.
Yo lo veo como un c++++, es decir con capacidades que hacen fácil programar pero a la vez tiene una orientación a tareas de bajo nivel. A la vez existe mucha documentación, lo que hace de este lenguaje un digno competidor de go.
Por ultimo les dejo unos ejemplos de rustbyexample :
// This is a comment, and will be ignored by the compiler
// You can test this code by clicking the "Run" button over there ->
// or if prefer to use your keyboard, you can use the "Ctrl + Enter" shortcut
// This code is editable, feel free to hack it!
// You can always return to the original code by clicking the "Reset" button ->
// This is the main function
fn main() {
// The statements here will be executed when the compiled binary is called
// Print text to the console
println!("Hello World!");
}
Otro ejemplo:
fn main() {
let x = 5u32;
let y = {
let x_squared = x * x;
let x_cube = x_squared * x;
// This expression will be assigned to `y`
x_cube + x_squared + x
};
let z = {
// The semicolon suppresses this expression and `()` is assigned to `z`
2 * x;
};
println!("x is {:?}", x);
println!("y is {:?}", y);
println!("z is {:?}", z);
}
Otro ejemplo:
fn main() {
let number: i32 = 13;
// TODO ^ Try different values for `number`
println!("Tell me about {}", number);
match number {
// Match a single value
1 => println!("One!"),
// Match several values
2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
// Match an inclusive range
13...19 => println!("A teen"),
// Handle the rest of cases
_ => println!("Ain't special"),
}
let boolean = true;
// Match is an expression too
let binary: i32 = match boolean {
// The arms of a match must cover all the possible values
false => 0,
true => 1,
// TODO ^ Try commenting out one of these arms
};
println!("{} -> {}", boolean, binary);
}
Dejo link:
https://github.com/rust-lang/rust
http://doc.rust-lang.org/book/
http://www.rust-lang.org/
http://rustbyexample.com/
lunes, 12 de enero de 2015
ng-book
Quiero dejarles un link para descargar un buen libro de angular.
Dejo link:
http://www.creativealys.com/2015/01/11/the-complete-book-on-angularjs/
Dejo link:
http://www.creativealys.com/2015/01/11/the-complete-book-on-angularjs/
jueves, 8 de enero de 2015
Curso Gratuito de Fundamentos de Programación
Solo quiero hacerme eco de este curso que los que comienzan en la programación no se lo pueden perder.
Dejo link:
http://www.maestrodelacomputacion.net/curso-gratuito-fundamentos-de-programacion/
miércoles, 7 de enero de 2015
Corriendo R en la plataforma Java con Renjin
Como ven estoy a full con R, supongamos que queremos hacer una aplicación que realice análisis estadístico, y tengamos mucho trabajo por ese lado, pero por el otro se quiere que la aplicación sea web y tenga web services, ect.
Por un lado esta bueno utilizar R para la parte estadística pero por el otro sería bueno usar java donde tenemos todo ya más armado. Por lo tanto podemos usar Renjin que es un lenguaje que corre en la plataforma Java y que es muy similar a R.
Lo que nos permite hacer rengin es ejecutar R desde java y ver los resultados, y a la vez nos resuelve las diferencia de tipos y otros detalles. Por ejemplo:
engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))");
engine.eval("print(df)");
engine.eval("print(lm(y ~ x, df))");
Si nuestro proyecto java utiliza maven podemos utilizar lo agregando las siguientes dependencias:
Dejo link: http://www.renjin.org/
Por un lado esta bueno utilizar R para la parte estadística pero por el otro sería bueno usar java donde tenemos todo ya más armado. Por lo tanto podemos usar Renjin que es un lenguaje que corre en la plataforma Java y que es muy similar a R.
Lo que nos permite hacer rengin es ejecutar R desde java y ver los resultados, y a la vez nos resuelve las diferencia de tipos y otros detalles. Por ejemplo:
engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))");
engine.eval("print(df)");
engine.eval("print(lm(y ~ x, df))");
Si nuestro proyecto java utiliza maven podemos utilizar lo agregando las siguientes dependencias:
<dependencies>
<dependency>
<groupId>org.renjin</groupId>
<artifactId>renjin-script-engine</artifactId>
<version>0.7.0-RC7</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>bedatadriven</id>
<name>bedatadriven public repo</name>
<url>http://nexus.bedatadriven.com/content/groups/public/</url>
</repository>
</repositories>
Dejo link: http://www.renjin.org/
martes, 6 de enero de 2015
Aprendiendo R en R con Swirl
He comenzado un curso en coursera sobre el lenguaje de programación R que esta ganando mucho espacio en el campo de la estadística. En fin en este curso utilizan swirl es un paquete de R que trae ejercicios en de R que se ejecutan en el entorno de R o se puede utilizar con R studio.
Ha simple vista esta muy bueno y se hace muy interactivo el aprendizaje.
Instalarlo es sumamente fácil, solo tenes que ir a la consola de R y escribir:
> install.packages("swirl")
> library("swirl")
> swirl()
Y Listo!!
Dejo el link:
http://swirlstats.com/
lunes, 5 de enero de 2015
Lua Cookbook
Lua es un lenguaje imperativo muy liviano y a la vez extensible, que se hizo famoso porque con el podemos personalizar la interfaz gráfica de World of Warcraft. Pero a la vez se utiliza en numerosas aplicaciones.
Quiero compartir el cookbook de Lua que se puede acceder de forma online:
http://stevedonovan.github.io/lua-cookbook/
miércoles, 31 de diciembre de 2014
lunes, 29 de diciembre de 2014
Codecademy en español
Como lo oyes codecademy ahora tiene cursos en español, la pagina indica la siguiente leyenda: "Aprendé los conceptos y la sintaxis de los lenguajes de programación más conocidos"
Esto es genial, podes tomar cursos de Ruby, Python, HTML, JQuery, Javascript y PHP; de forma gratuita y en castellano, que más queres?
A estudiar!!!
Dejo el link:
http://www.codecademy.com/es/learn
viernes, 26 de diciembre de 2014
Papa noel nos trajo a Qt 5.4
Si bien el release de Qt 5.4 es anterior a navidad no tuve tiempo de hacer el post que le correspondía.
Qt 5,4 viene con varias mejoras entre las que podemos nombrar, muchas mejoras en el área de tecnología web:
- Qt WebEngine: basado en Chromium, los widgets pueden embeber HTML y renderizarlo
- Qt WebChannel: Permite por ejemplo desarrollar clientes web que soporten comunicación WebSocket con el servidor.
- Qt WebView: Una API que permite embeber un browser en la aplicación de forma nativa.
Además soporte completo para el runtime de windows lo que se conoce como "Qt for WinRT" esta integración es tanto para Windows phone como Windows 8.
Una nueva licencia! Qt ha decidido moverse a LGPLv3 .
Nuevas funciones para manejo gráfico... Y más y más!!!
Y como si fuera poco ha anunciado Qt creator 3.3, que permitirá crear aplicaciones para Android y iOS.
Dejo link:
http://qt-project.org/wiki/Qt-5.4-release
MailRelay, la forma más fácil y rápida de hacer publicidad por email
No es muy común esta clase de post en el blog pero estuve probando esta herramienta y me gusto mucho. Y quiero compartirla con ustedes.
MailRelay es una herramienta de envío de emails. No! No es un cliente de correo, es una plataforma de email marketing avanzado con características de gran alcance. Te permite crear, enviar y gestionar tus boletines enviados vía emails con estadísticas completas, a la vez podes analizar el comportamiento del suscriptor.
Email marketing?? Si, tambien se lo conoce como ciberbuzoneo o en inglés: e-mailing es un método de marketing directo que utiliza el correo electrónico como medio de comunicación comercial para enviar mensajes a una audiencia. De esta forma podes tener al tanto a tus clientes de las novedades de tu empresa, nuevos productos, ofertas, etc...
Con MailRelay podemos crear boletines y enviárselas a un grupo de suscriptores, a la vez la herramienta analiza el comportamiento del subscriptor, de esta forma podemos saber cual es el articulo más visitado, y que suscriptores vieron que articulo pudiendo analizar las necesidades de los clientes según esta información.
MailRelay no solo permite crear campañas de email marketing sino que tambien darle un correcto seguimiento y tener un contacto real con los clientes. Y es muy importante este seguimiento tanto para fidelizar al cliente como para estimular las ventas.
Entre otras ventajas podemos nombrar:
- Un seguimiento inteligente de los clientes: con esta herramienta podes saber que necesita cada suscriptor y podemos hacer un seguimiento de los clientes y sus necesidades.
- No vamos a ser catalogados como spam: Mailrelay cumple con todas las normas de correo electrónico anti-spam, haciendo que la puntuación antispam sea menos posible.
- Templates para nuestros boletines: Mailrelay cuenta con una completa biblioteca de templates gratuitos que podemos utilizar.
- SMTP de alto rendimiento: Mailrelay nos ofrece un servicio smtp que se distingue por su alto rendimiento.
- Facilidad de uso: No es necesario que contrates a un programador o un diseñador gráfico, cualquier persona puede utilizar este servicio.
- Atención personalizada: Recibe atención personalizada y respuesta inmediata a tus dudas.
Como conclusión les aconsejo que vean con buenos ojos a Mailrelay dado su excelente soporte y sus ofertas. Y además es un excelente producto.
Dejo un video:
Dejo links:
miércoles, 24 de diciembre de 2014
martes, 23 de diciembre de 2014
Google anuncia Android Studio 1.0 y recomienda abandonar Eclipse

Estaba leyendo javahispano y me tope con esta noticia. Y me puse a descargar Android Studio.
Me parece que el cambio era sabido, más que nada porque las ultimas versiones de eclipse vienen con una calidad no muy buena.
Personalmente creo que es una gran apuesta de google y un gran paso para IntelliJ IDEA. Bueno a probarla!!
Dejo link: http://developer.android.com/sdk/index.html
Muchos Libros en GIT!!
Sin más dejo el link:
Antergos Linux
Antergos es una distro de origen Gallego, comenzó como Cinnarch y luego decidió que el usuario elija el entorno de escritorio por lo que tuvo que cambiar de nombre.
Es una distro derivada de arch por lo tanto es rolling release y además utiliza pacman como administrador de paquetes.
Antergos es una distro simple que se basa en la idea de darle opciones al usuario y que el elija que instalar y que no. Cosa que me parece fantástica.
Además esta distribución viene con PacmanXG4 que es una GUI de Pacman, es muy potente y permite tener nuestros paquetes actualizados e instalar software fácilmente.
Tiene un potente instalador gráfico y te pregunta qué entorno de escritorio utilizar siendo por defecto Gnome 3 con Gnome shell. Con respecto a Gnome shell a mejorado muchísimo pero a mi modo de ver las cosas le falta bastante.
Dejo link: http://antergos.com/
Dejo screen shots:
Es una distro derivada de arch por lo tanto es rolling release y además utiliza pacman como administrador de paquetes.
Antergos es una distro simple que se basa en la idea de darle opciones al usuario y que el elija que instalar y que no. Cosa que me parece fantástica.
Además esta distribución viene con PacmanXG4 que es una GUI de Pacman, es muy potente y permite tener nuestros paquetes actualizados e instalar software fácilmente.
Tiene un potente instalador gráfico y te pregunta qué entorno de escritorio utilizar siendo por defecto Gnome 3 con Gnome shell. Con respecto a Gnome shell a mejorado muchísimo pero a mi modo de ver las cosas le falta bastante.
Dejo link: http://antergos.com/
Dejo screen shots:
jueves, 18 de diciembre de 2014
Cual es el próximo lenguaje nativo?
InfoQ esta haciendo una encuesta sobre cual va ha ser el lenguaje nativo del futuro, es decir que lenguaje va a ser el proximo C o C++. Y me llamo mucho la atención que en la lista de poxibles candidatos esten lenguajes como Haskell o OCaml. Y a la vez que hayan sido votados.
Por alguna razón no me imagino el lenguaje moderno y declarativo como Haskell, como el próximo lenguaje nativo.
Dejo link:http://www.infoq.com/research/next-native-language?utm_source=infoqresearch&utm_campaign=r-dir#
Por alguna razón no me imagino el lenguaje moderno y declarativo como Haskell, como el próximo lenguaje nativo.
Dejo link:http://www.infoq.com/research/next-native-language?utm_source=infoqresearch&utm_campaign=r-dir#
miércoles, 17 de diciembre de 2014
Vodexx, un nuevo portal de noticias de Java
Leyendo javahispano me encontré con un nuevo portal de noticias sobre Java llamado Vodexx. Por lo que se ve tiene alta calidad de noticias. Pero escoba nueva barre bien. Esperemos que siga así.
Les dejo el link: https://www.voxxed.com/
domingo, 14 de diciembre de 2014
Manjaro Linux
Volví con mi juego favorito, probar distros de linux!!
Como ustedes saben yo soy devoto de debian y sus derivados (Ubuntu, Mint, etc) Pero la verdad que quede sorprendido con Manjaro, un Arch muy fácil de utilizar.
Los puntos más admirables para mi es su interfaz muy amigable, Xfce es muy bueno. Nada que envidiarle a distros más pesadas. Y además tiene otras ventajas:
La instalación es muy rápida, y básica para que podamos luego instalar lo que queramos.
Sin más dejo link:
http://manjaro.org/
Y screenshots:
Como ustedes saben yo soy devoto de debian y sus derivados (Ubuntu, Mint, etc) Pero la verdad que quede sorprendido con Manjaro, un Arch muy fácil de utilizar.
Los puntos más admirables para mi es su interfaz muy amigable, Xfce es muy bueno. Nada que envidiarle a distros más pesadas. Y además tiene otras ventajas:
- Es rolling release, eso es fantástico, tenemos las ultimas versiones siempre.
- Es muy liviano, rápido y ágil. Fácil de usar y estas productivo en poco tiempo.
La instalación es muy rápida, y básica para que podamos luego instalar lo que queramos.
Sin más dejo link:
http://manjaro.org/
Y screenshots:
Suscribirse a:
Entradas (Atom)























.png)






















