Como todos los años quiero desearles feliz navidad y prospero año. Nos seguimos leyendo en le 2017.
Translate
sábado, 31 de diciembre de 2016
viernes, 30 de diciembre de 2016
Un resumen de Scala for the Impatient, parte 5
Uso avanzado de loops y loops por comprensión
Me costo mucho buscar la traducción de “for Comprehensions” por lo tanto decidí poner “por comprensión”. Si le parece mal me avisan y lo cambio.
Como vimos el operador for es mucho más rico en scala que en java o C.
Se puede tener múltiples generadores de la forma variable <- expresión separados por ;
for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
// Prints 11 12 13 21 22 23 31 32 33
cada generador puede tener su condición:
for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")
// Prints 12 13 21 23 31 32
También se puede usar n cantidad de variables:
for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")
// Prints 13 22 23 31 32 33
Con la palabra yield se puede retornar una colección que este formada por el resultado de cada iteración:
for (i <- 1 to 10) yield i % 3
// Yields Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
Este tipo de loops se denominan “por compresión”. De esta forma podemos generar diferentes colecciones:
for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
// Yields "Hieflmlmop"
for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
// Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p')
En el ejemplo podemos ver que la lista generada es compatible con la primer variable que se itera.
Me costo mucho buscar la traducción de “for Comprehensions” por lo tanto decidí poner “por comprensión”. Si le parece mal me avisan y lo cambio.
Como vimos el operador for es mucho más rico en scala que en java o C.
Se puede tener múltiples generadores de la forma variable <- expresión separados por ;
for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
// Prints 11 12 13 21 22 23 31 32 33
cada generador puede tener su condición:
for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")
// Prints 12 13 21 23 31 32
También se puede usar n cantidad de variables:
for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")
// Prints 13 22 23 31 32 33
Con la palabra yield se puede retornar una colección que este formada por el resultado de cada iteración:
for (i <- 1 to 10) yield i % 3
// Yields Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
Este tipo de loops se denominan “por compresión”. De esta forma podemos generar diferentes colecciones:
for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
// Yields "Hieflmlmop"
for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
// Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p')
En el ejemplo podemos ver que la lista generada es compatible con la primer variable que se itera.
jueves, 29 de diciembre de 2016
Clojure: El arte de la abstración
Quiero compartir con ustedes un articulo sobre Clojure y como nos ayuda a pensar un problema.
Dejo el link:
http://www.slideshare.net/alexmiller/clojure-the-art-of-abstraction-7161663
martes, 27 de diciembre de 2016
TypeScript 2.1 fue liberado
Si bien la verdad no me gusta para nada el framework typescript, tengo que reconocer que es muy usado más que nada por los que usan Angular o React.
Que nos trae de nuevo la versión 2.1:
- Funciones asíncronas: Esto significa que puede utilizar async / await en ES3/ES5 sin necesidad de utilizar otras herramientas.
- Object Rest & Spread: facilita mucho la copia parcial, merge y la selección de objetos.
- Tipos keyof and Lookup
- Tipos Mapped
- Y más!!
Por lo visto se viene con todo!!
Dejo link:
https://blogs.msdn.microsoft.com/typescript/2016/12/07/announcing-typescript-2-1/
https://www.infoq.com/news/2016/12/typescript-2-1-released
lunes, 26 de diciembre de 2016
Un resumen de Scala for the Impatient, parte 4
Bloques de código y asignaciones.
Un Bloque de código son un conjunto de expresiones. En scala los bloques de código, están delimitados por llaves {} y a diferencia de java o C los bloques de código retornan valor. Gracias a esto podemos inicializar un valor a partir de una expresiòn:
val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) }
Como ya dijimos un bloque de código que no devuelva valor retornara Unit. La asignación no retorna valor por lo tanto si hacemos lo siguiente:
val x = y = 2
x no va a contener nada o Unit
Por lo tanto un bloque que termine en asignación sera de tipo Unit :
{ r = r * n; n -= 1 }
Input y Output.
Para imprimir algo podemos utilizar la función print o println :
print("Answer: ")
println(42)
Similar a :
println("Answer: " + 42)
También podemos utilizar print como C:
printf("Hello, %s! You are %d years old.\n", "Fred", 42)
Podemos leer una linea de tipo String con ReadLine, a la vez podemos leer teniendo en cuenta el tipo de lo que leemos con readInt, readDouble, readByte, readShort, readLong, readFloat, readBoolean, o readChar.
Loops.
Scala tiene el while similar a java o c:
while (n > 0) {
r = r * n
n -= 1
}
Scala no cuenta con el for con el formato (inicializar; condición; incrementar o actualizar) si necesitamos esta expresión tenemos 2 opciones o utilizar el while o podemos usar el for de esta forma:
for (i <- 1 to n)
r = r * i
Si recuerdan “1 to n” retorna un rango de 1 hasta n inclusive, por lo tanto i va tomar un valor del rango por iteración. Por supuesto i no puede ser val debe ser var
Si necesitamos iterar hasta n-1 podemos utilizar “until” que retorna un rango de 1 hasta n excluyendo a n.
val s = "Hello"
var sum = 0
for (i <- 0 until s.length) // Last value for i is s.length - 1
sum += s(i)
En el siguiente ejemplo no es necesario un indice podemos iterar por los caracteres directamente.
var sum = 0
for (ch <- "Hello") sum += ch
Un Bloque de código son un conjunto de expresiones. En scala los bloques de código, están delimitados por llaves {} y a diferencia de java o C los bloques de código retornan valor. Gracias a esto podemos inicializar un valor a partir de una expresiòn:
val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) }
Como ya dijimos un bloque de código que no devuelva valor retornara Unit. La asignación no retorna valor por lo tanto si hacemos lo siguiente:
val x = y = 2
x no va a contener nada o Unit
Por lo tanto un bloque que termine en asignación sera de tipo Unit :
{ r = r * n; n -= 1 }
Input y Output.
Para imprimir algo podemos utilizar la función print o println :
print("Answer: ")
println(42)
Similar a :
println("Answer: " + 42)
También podemos utilizar print como C:
printf("Hello, %s! You are %d years old.\n", "Fred", 42)
Podemos leer una linea de tipo String con ReadLine, a la vez podemos leer teniendo en cuenta el tipo de lo que leemos con readInt, readDouble, readByte, readShort, readLong, readFloat, readBoolean, o readChar.
Loops.
Scala tiene el while similar a java o c:
while (n > 0) {
r = r * n
n -= 1
}
Scala no cuenta con el for con el formato (inicializar; condición; incrementar o actualizar) si necesitamos esta expresión tenemos 2 opciones o utilizar el while o podemos usar el for de esta forma:
for (i <- 1 to n)
r = r * i
Si recuerdan “1 to n” retorna un rango de 1 hasta n inclusive, por lo tanto i va tomar un valor del rango por iteración. Por supuesto i no puede ser val debe ser var
Si necesitamos iterar hasta n-1 podemos utilizar “until” que retorna un rango de 1 hasta n excluyendo a n.
val s = "Hello"
var sum = 0
for (i <- 0 until s.length) // Last value for i is s.length - 1
sum += s(i)
En el siguiente ejemplo no es necesario un indice podemos iterar por los caracteres directamente.
var sum = 0
for (ch <- "Hello") sum += ch
miércoles, 21 de diciembre de 2016
Un resumen de Scala for the Impatient, parte 3
Estructura de Control y funciones
Expresión condicional
Scala tiene la expresión condicional if/else similar a java o c, sin embargo esta expresión retorna un valor. Por ejemplo:
if (x > 0) 1 else -1
Esta expresión retorna 1 o -1 con lo que podemos hacer
val s = if (x > 0) 1 else -1
y esto es similar a
if (x > 0) s = 1 else s = -1
En el segundo ejemplo s es un var, dado que cambia su valor.
El operador ternario de java y c funciona de forma similar que el if de scala.
Toda expresión en scala tiene un tipo, por lo que la expresión del ejemplo anterior es de tipo Int. Si tenemos una expresión que retorna diferentes tipos, scala lo tipara por el padre común.
if (x > 0) “positivo” else -1
En este caso scala va a tipar esta expresión a Any dado que es el ancestro común entre Int y String. (luego hablaremos de los tipos)
Si tenemos la expresión:
if (x > 0) 1
En el caso del “else” no retornamos nada, en scala todo retorna un valor y la nada es un valor que tiene un tipo similar a void de c o java. Este tipo es la clase Unit que tiene un valor y el mismo se escribe con dos paréntesis (), por lo tanto podemos afirmar que el siguiente ejemplo es igual al anterior:
if (x > 0) 1 else ()
Técnicamente hablando no es igual a void, void significa “sin valor” y Unit es un valor que significa “sin valor”, parece lo mismo pero no lo es, Unit es similar a tener cero pesos en la billetera y void a no tener billetera.
Terminación de sentencias
Como pudieron ver en scala no es necesario el punto y coma es opcional, similar a javascript. Sin embargo si deseamos escribir 2 expresiones en una linea, estamos obligados a usar el punto y coma.
if (x > 0) { a = 1; j= 6 }
El punto y coma es necesario para separar las 2 lineas pero no al finalizar, dado que se encuentra la llave que cierra }
Si deseamos escribir una expresión en 2 lineas esta debe terminar en un simbolo, como por ejemplo:
s = s0 + (v0 * 0,1) +
t * 5 + s0
En la practica no es común tener expresiones tan largas o estas deberían ser una función.
Muchos programadores procedentes de Java o C ++ son inicialmente incómodos acerca de omitir puntos y comas. Si usted prefiere tenerlos, simplemente póngalos en - no hacen ningún daño.
Expresión condicional
Scala tiene la expresión condicional if/else similar a java o c, sin embargo esta expresión retorna un valor. Por ejemplo:
if (x > 0) 1 else -1
Esta expresión retorna 1 o -1 con lo que podemos hacer
val s = if (x > 0) 1 else -1
y esto es similar a
if (x > 0) s = 1 else s = -1
En el segundo ejemplo s es un var, dado que cambia su valor.
El operador ternario de java y c funciona de forma similar que el if de scala.
Toda expresión en scala tiene un tipo, por lo que la expresión del ejemplo anterior es de tipo Int. Si tenemos una expresión que retorna diferentes tipos, scala lo tipara por el padre común.
if (x > 0) “positivo” else -1
En este caso scala va a tipar esta expresión a Any dado que es el ancestro común entre Int y String. (luego hablaremos de los tipos)
Si tenemos la expresión:
if (x > 0) 1
En el caso del “else” no retornamos nada, en scala todo retorna un valor y la nada es un valor que tiene un tipo similar a void de c o java. Este tipo es la clase Unit que tiene un valor y el mismo se escribe con dos paréntesis (), por lo tanto podemos afirmar que el siguiente ejemplo es igual al anterior:
if (x > 0) 1 else ()
Técnicamente hablando no es igual a void, void significa “sin valor” y Unit es un valor que significa “sin valor”, parece lo mismo pero no lo es, Unit es similar a tener cero pesos en la billetera y void a no tener billetera.
Terminación de sentencias
Como pudieron ver en scala no es necesario el punto y coma es opcional, similar a javascript. Sin embargo si deseamos escribir 2 expresiones en una linea, estamos obligados a usar el punto y coma.
if (x > 0) { a = 1; j= 6 }
El punto y coma es necesario para separar las 2 lineas pero no al finalizar, dado que se encuentra la llave que cierra }
Si deseamos escribir una expresión en 2 lineas esta debe terminar en un simbolo, como por ejemplo:
s = s0 + (v0 * 0,1) +
t * 5 + s0
En la practica no es común tener expresiones tan largas o estas deberían ser una función.
Muchos programadores procedentes de Java o C ++ son inicialmente incómodos acerca de omitir puntos y comas. Si usted prefiere tenerlos, simplemente póngalos en - no hacen ningún daño.
martes, 20 de diciembre de 2016
Los cinco principios de la gestión moderna de proyectos
La gente de oracle sigue enviado buenos drafts para lectura en el verano, ahora sobre principios de la gestión moderna de proyectos:
Ver este mensaje en un navegador Web
|
SEV100483926_MCC100483922_S3
|
Oracle Corporation - Worldwide Headquarters, 500 Oracle Parkway, OPL - E-mail Services, Redwood Shores, CA 94065, United States
Su privacidad es importante para nosotros. Puede administrar las suscripciones de sus correos electrónicos o puede desuscribirse de todos los correos de Oracle Marketing en cualquier momento. Sepa que desuscribirse de las comunicaciones de Marketing no afecta el envío de comunicaciones importantes de negocios en su relación actual de negocios con Oracle como Actualizaciones de seguridad, Avisos de registros para eventos, Administración de cuentas y Comunicaciones de Soporte/Servicios. |
lunes, 19 de diciembre de 2016
Un resumen de Scala for the Impatient, parte 2
Sobrecarga de operadores.
La sobrecarga de operadores en scala es más simple, dado que un operador no es más que un método de un objeto. Es decir:
a + b
Es la forma simplificada de :
a.+(b)
Scala no tiene problema en que un método pueda llamase con símbolos tales como +, *, -, %, etc.
Por lo general podemos escribir
objeto método objeto
igual a smalltalk o
objeto.metodo(objeto)
igual a java o c
Otra diferencia importante es que no tenemos los operadores ++ o -- de java o c. Solo tenemos += o
-=
counter+=1
Otra diferencia es que podemos usar operadores para objetos BigInt o BigDecimal:
val x: BigInt = 1234567890
x * x * x // Yields 1881676371789154860897069000
Llamando funciones y métodos
Scala tiene funciones además de métodos. Es más sencillo utilizar funciones matemáticas como min o pow en Scala que en Java; no es necesario llamar a métodos estáticos de una clase.
sqrt(2) // Yields 1.4142135623730951
pow(2, 4) // Yields 16.0
min(3, Pi) // Yields 3.0
Las funciones matemáticas están definidas en el paquete Math que se puede importar:
import scala.math._
Scala no tiene métodos estáticos, pero tiene el concepto de objetos singletones, que son eso objetos que nacen con una sola instancia.
Los métodos que no necesitan parámetros, no necesitan los paréntesis que cierran y abren "()" por ejemplo:
"Hello".distinct
Aplicar un método.
En Scala, es común usar una sintaxis que se parece a una llamada de función. Por ejemplo si a un string lo llamamos con un parámetro entero este retornara el char en posición, similar a llamar a charAt de java o el operador [] en C. Por ejemplo:
"Hello"(4) // Yields 'o'
Esto funciona porque StringOps implemento el método apply :
def apply(n: Int): Char
Este método no es necesario llamarse, es decir se llama de forma implícita, pero podemos llamarlo y funciona:
"Hello".apply(4)
Usar método apply para construir objetos es común es scala, por ejemplo el array:
Array(1, 4, 9, 16) // retorna un array
Seguimos en la parte 3.
La sobrecarga de operadores en scala es más simple, dado que un operador no es más que un método de un objeto. Es decir:
a + b
Es la forma simplificada de :
a.+(b)
Scala no tiene problema en que un método pueda llamase con símbolos tales como +, *, -, %, etc.
Por lo general podemos escribir
objeto método objeto
igual a smalltalk o
objeto.metodo(objeto)
igual a java o c
Otra diferencia importante es que no tenemos los operadores ++ o -- de java o c. Solo tenemos += o
-=
counter+=1
Otra diferencia es que podemos usar operadores para objetos BigInt o BigDecimal:
val x: BigInt = 1234567890
x * x * x // Yields 1881676371789154860897069000
Llamando funciones y métodos
Scala tiene funciones además de métodos. Es más sencillo utilizar funciones matemáticas como min o pow en Scala que en Java; no es necesario llamar a métodos estáticos de una clase.
sqrt(2) // Yields 1.4142135623730951
pow(2, 4) // Yields 16.0
min(3, Pi) // Yields 3.0
Las funciones matemáticas están definidas en el paquete Math que se puede importar:
import scala.math._
Scala no tiene métodos estáticos, pero tiene el concepto de objetos singletones, que son eso objetos que nacen con una sola instancia.
Los métodos que no necesitan parámetros, no necesitan los paréntesis que cierran y abren "()" por ejemplo:
"Hello".distinct
Aplicar un método.
En Scala, es común usar una sintaxis que se parece a una llamada de función. Por ejemplo si a un string lo llamamos con un parámetro entero este retornara el char en posición, similar a llamar a charAt de java o el operador [] en C. Por ejemplo:
"Hello"(4) // Yields 'o'
Esto funciona porque StringOps implemento el método apply :
def apply(n: Int): Char
Este método no es necesario llamarse, es decir se llama de forma implícita, pero podemos llamarlo y funciona:
"Hello".apply(4)
Usar método apply para construir objetos es común es scala, por ejemplo el array:
Array(1, 4, 9, 16) // retorna un array
Seguimos en la parte 3.
sábado, 17 de diciembre de 2016
Un resumen de Scala for the Impatient
Como ya conté, estoy leyendo Scala for the Impatient, y se me ocurrió hacer un resumen. No pienso ser muy correcto en el resumen.
Solamente voy a escribir los temas que me gustaron más y me sorprendieron. Cosa de no evitar que lean un buen libro.
Sin más empezamos:
Empecemos por el principio, el libro recomienda como instalar scala, pero yo por una cuestión de gusto dejo que los busquen ustedes por su cuenta.
Otra buena opción es bajar scala Ide, que es un entorno de desarrollo para scala y permite ejecutar código.
Declarando variables y valores
En scala podemos nombrar valores, es decir a un valor determinado ponerle un nombre:
scala> val answer = 8 * 5 + 2
answer: Int = 42
Con val pusimos un nombre por lo que ese nombre no puede ser usado para otro valor. Es decir se comporta como una constante.
scala> answer = 0
<console>:6: error: reassignment to val
Si necesitamos declarar una variable debemos utilizar la palabra "var"
var counter = 0
counter = 1 // OK, can change a var
Como pudieron notar no le dijimos el tipo a la variable, pero tiene un tipo dado que scala es de tipado estático, lo que sucedio es que el compilador infirio el tipo. Pero si queremos le podemos indicar el tipo:
val greeting: String = null
val greeting: Any = "Hello"
Tipos comunes
Como Java, scala cuenta con tipos tales como Byte , Char , Short , Int , Long , Float y Double, además Boolean. Sin embargo no existe el concepto de valores primitivos, es decir todo es un objeto, en serio. Veamos un ejemplo:
1.toString() //"1"
O mejor aun:
1.to(10) // Yields Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Scala no necesita wrapper types. El compilador se encarga de estos problemas, como debería ser. A la vez el compilador castea tipos de forma automática, por ejemplo el tipo Int a RichInt.
Algo que me falto aclarar es que hay clases RichInt, RichDouble, RichChar, y así sucesivamente. Cada uno de ellos tiene un pequeño conjunto de métodos de conveniencia para actuar sobre sus primos pobres: Int, Double o Char. El método "to" que has visto anteriormente es en realidad un método de la clase RichInt.
Luego continuaremos en la parte 2.
Dejo link:
http://fileadmin.cs.lth.se/scala/scala-impatient.pdf
jueves, 15 de diciembre de 2016
Curso gratuito de Xamarin
Hola Pablo,
¿Se te ocurre un mejor regalo de Navidad que una App multiplataforma? Eso imaginábamos…
¿Ya conoces Xamarin? ¡Queremos que sepas más!, con este fin hemos diseñado el siguiente curso online gratuito, en colaboración con campusMVP, para que conozcas las mejores prácticas en el desarrollo de mobile apps con Xamarin y back-end en Azure.
Mediante este curso interactivo podrás aprender a desarrollar tu propia app de manera interactiva, con retos mensuales, ejercicios y seguimiento con tutores.
El objetivo es que tras el curso tengas el conocimiento necesario para desarrollar una app completa.
El curso arrancará en enero y las plazas son limitadas, por lo que te recomendamos te registres cuanto antes para poder acceder al mismo: https://aka.ms/aprende-xamarin-gratis.
Y además… habrá alguna que otra sorpresa y regalos una vez finalice el curso. ¿Qué más se puede pedir?
¡Celebrapp la Navidapp con Xamarin!
Un abrazo,
miércoles, 14 de diciembre de 2016
Oracle Premier Support for MySQL: Rely on The Experts & Get Unique Benefits
Me llego este mail y lo quiero compartir con ustedes:
View this message in a Web browser |
| |||||||||
|
|
domingo, 11 de diciembre de 2016
Las 5 distros Linux que cambiaron el software libre
Quiero compartir el siguiente artículo dado que coincido mucho con él sobre 5 distros que cambiaron las cosas, es decir dieron un empujón al software libre:
- MCC Interim, la primera distro
- Slackware, la más veterana
- Debian, el abuelo de Linux
- Red Hat, la que demuestra que se puede ganar dinero con el software libre
- Ubuntu, la distro de escritorio más popular
Me parece que le hace justicia a las distros que le dierion un vuelco al software libre, sin más dejo el link: http://www.omicrono.com/2016/12/distros-linux-mas-importantes/?utm_source=dlvr.it&utm_medium=gplus
miércoles, 7 de diciembre de 2016
Lua en Python
Lua se puede embeber en python. Lua es un lenguaje muy bueno, pensado en la simplicidad y es script.
Hace poco leí un articulo sobre como correr lua en python, y me pareció una idea muy buena. La utilidad ?? pensaran ustedes, bueno más allá de nuestra diversión podemos guardar código lua y ejecutarlo y podemos hacer que gente no tan interiorizada con la programación, modifique este código. Se me ocurre reglas de facturación que son muy cambiantes, por ejemplo.
Veamos un ejemplo:
from lupa import LuaRuntime
lua = LuaRuntime()
lua_code = """
function (size)
a = {}
b = {}
st = os.clock()
for i=0, size-1 do
a[i] = math.random(size)
end
for i=0, size-1 do
b[i] = math.random(size)
end
print("LUA init: "..(os.clock()-st))
st = os.clock()
for i=0, size-1 do
if a[i] ~= b[i] then
a[i] = a[i] + b[i]
end
end
print("LUA sum: "..(os.clock()-st))
end
"""
test = lua.eval(lua_code)
size = 5000000
test(size)
Y listo!!
Dejo link: http://alexeyvishnevsky.com/?p=248&imm_mid=0eb43e&cmp=em-prog-na-na-newsltr_20161203
Un Enfoque Moderno hacia la Gestión de Proyectos
Me llego este mail desde oracle:
Ver este mensaje en un navegador Web
|
SEV100483926_MCC100483922_S1
|
domingo, 4 de diciembre de 2016
43 páginas no tan conocidas para aprender algo nuevo
El titulo es una copia del post original que quiero compartir. Es un resumen bastante bueno de páginas para aprender cosas o hacer cursos, las cuales están un tanto ocultas o no son tan famosas.
Dejo el link: http://www.xataka.com/otros/43-paginas-no-tan-conocidas-para-aprender-algo-nuevo
jueves, 1 de diciembre de 2016
Try PHP
La gente de codeschool va por más y ahora nos brinda un curso de PHP :
|
|
Suscribirse a:
Entradas (Atom)