Translate
lunes, 23 de mayo de 2016
Lazy Vals en Scala
Scala permite la palabra clave especial lazy delante de val con el fin de que no inicialice la constante con el valor, si no que este valor se calcule cuando realmente se necesite.
Es decir, si yo tengo lo siguiente:
lazy val a = 2 + 2
val b = a +2
En este caso a se va a calcular en la linea 2 y no en la 1.
Pero esto como funciona?
Dada la expresión 2 + 2, la expresión aún no se evalúa cuando estamos asignando. En el primer acceso (y sólo en la primer acceso) la expresión se evalúa y se devuelve como el resultado (4 en este caso). En cuanto a los accesos posteriores el resultado almacenado de la evaluación se almacena en caché y será devuelto en su lugar, nin necesidad de evaluar 2 veces.
Esta característica llamada "evaluate once" es muy fuerte. Sobre todo si tenemos en cuenta un escenario de multiproceso: Que debería ocurrir si dos subprocesos tienen acceso a nuestro val perezoso al mismo tiempo? Teniendo en cuentade que la evaluación se produce sólo una vez, tenemos que introducir algún tipo de sincronización con el fin de evitar una multiplicidad de evaluaciones de nuestra expresión. En la práctica, esto significa la expresión suma será evaluado por un hilo, mientras que el otro(s) tendrá que esperar hasta que la evaluación se ha completado, después puede ver el resultado evaluado.
Con la palabra synchronized podemos decir que este campo sea sincronizado.
martes, 17 de mayo de 2016
Lo que esta pasando con la ciencia en Argentina.
No soy de compartir estas cosas y menos de querer meter el blog en política. Pero si apoyo la educación libre, la investigación sin cadenas, la posibilidad de compartir todo conocimiento. De esta única manera vamos a crecer como sociedad.
Quita de subsidios y becas, nos afecta a todos. Sin más los dejo con este video:
Quita de subsidios y becas, nos afecta a todos. Sin más los dejo con este video:
lunes, 16 de mayo de 2016
Apache Hadoop Cookbook
Quiero compartir este ebook de Hodoop.
En este libro podemos encontrar una recopilación de ejemplos basados en Hadoop que ayudarán a poner en marcha sus proyectos. Este libro cubre una amplia gama de temas, desde la instalación y configuración, para el almacenamiento en caché distribuido y streaming. Con este libro, usted será capaz de obtener sus propios proyectos en marcha y funcionando en un tiempo mínimo.
Dejo link: https://www.javacodegeeks.com/wp-content/uploads/2016/05/Apache-Hadoop-Cookbook.pdf
Empezando con Elixir
Les recuerdo que Elixir es un lenguaje moderno que corre en la maquina virtual de Erlang. Es muy moderno y sus conceptos son innovadores.
Dejo link: https://www.toptal.com/elixir/getting-started-elixir-programming-language
domingo, 15 de mayo de 2016
Introducción a la Programación con Swift
La universidad de Toronto dicta un curso sobre Swift por medio de coursera. Es bastante interesante dado que no he visto muchos cursos de swift gratuitos.
Si bien es gratuito para obtener el certificado se debe pagar un pequeño arancel.
Dejo link: https://www.coursera.org/learn/swift-programming
miércoles, 11 de mayo de 2016
Después de un año utilizando Node.js en producción
Quiero compartir un post bastante interesante sobre una experiencia, de una persona con Node.js. Básicamente esta persona venia del mundo python y se paso a Node.js. Luego de un año en producción volvió a python.
No deja de ser una experiencia más pero creo fervientemente que javascript no fue diseñado como un lenguaje para servidores o para describir entidades. No confundan, soy muy fanático de javascript pero he trabajado toda mi vida con el para dar interactividad a paginas web y creo que para eso es genial. Ahora desde mi experiencia no creo que sea bueno para interactuar con base de datos, definir estructuras de objetos, etc.
Dejo link:
http://geekforbrains.com/post/after-a-year-of-nodejs-in-production
No deja de ser una experiencia más pero creo fervientemente que javascript no fue diseñado como un lenguaje para servidores o para describir entidades. No confundan, soy muy fanático de javascript pero he trabajado toda mi vida con el para dar interactividad a paginas web y creo que para eso es genial. Ahora desde mi experiencia no creo que sea bueno para interactuar con base de datos, definir estructuras de objetos, etc.
Dejo link:
http://geekforbrains.com/post/after-a-year-of-nodejs-in-production
Porque Javascript es tan popular?
JavaScript es un lenguaje de procedimientos similar a C, COBOL, C ++, Python, C# y Java. JavaScript no es muy diferente a estos lenguajes pero tiene un complejidad en el código.
Si preguntamos sobre el lenguaje de programación más compleja, muchos dirán que es JavaScript. ¿Por qué? ¿Cuál es la razón por la que les hace para nombrar JavaScript como el lenguaje de programación más compleja?
La complejidad se explica como el porcentaje medio de código que está profundamente anidado en cada proyecto. A la vez Javascript es el lenguaje que necesita mayor asistencia para los programadores juniors.
JavaScript es todavía una necesidad para todos los desarrolladores que buscan construir página web interactivas. Y es entendible que se utilice en la capa de presentación, pero es muy extraño que día a día avance la construcción de sitios Node. Pienso que javascript no fue concebido para esto, pero el mercado se empeña a que lo usemos.
Que opinan?
domingo, 8 de mayo de 2016
Kotlin for Scala Developers
Quiero recomendarles una lectura sobre Kotlin desde la perspectiva de un programador scala, es muy interesante
Dejo link:
http://www.51zero.com/blog/2016/4/14/kotlin-for-scala-developers
OCL, poniendo restricciones a nuestros modelos en UML
No acostumbro hacer post de modelado, pero en la maestria estamos viendo OCL y me gusto mucho. Por lo general no nos damos cuenta lo incompletos que son nuestros modelos UML y cuando tenemos que delegar la tarea de programación es cuando surgen los problemas.
Sin restricciones claras alguien que no piense como yo puede cometer errores. Para definir las restricciones se invento OCL (Object Constraint Language).
OCL es un lenguaje para la descripción formal de expresiones en los modelos UML. Y las expresiones pueden ser invariantes, precondiciones, postcondiciones, inicializaciones, guardias, reglas de derivación, así como consultas a objetos para determinar sus condiciones de estado.
OCL completa UML y le da un grado mayor de detalle a nuestros modelos. Cuando hago expresiones OCL me da la impresión que estoy programando y esto es entendible porque estoy bajando un nivel.
Algunas cuestiones a tener en cuenta:
Veamos un ejemplo de definición de un invariante para no ser tan abstractos.
context Ejemplar
inv: self.id > 0 and self.id < 999999
En el siguiente ejemplo vemos que la expresión tiene un contexto, que es el objeto, donde se aplica la expresión. Luego se detalla un invariante donde decimos que el id del ejemplar tiene que estar entre 1 y 999999. Veamos otro ejemplo:
context: Publicación
inv: self.autor.nombre.size>0 and self.autor.apellido.size >0
Estamos diciendo que una publicación debe tener un autor con un nombre y un apellido (al menos)
Por este post estamos. Más adelante revisaremos más expresiones OCL.
Dejo link: http://www.omg.org/spec/OCL/
Sin restricciones claras alguien que no piense como yo puede cometer errores. Para definir las restricciones se invento OCL (Object Constraint Language).
OCL es un lenguaje para la descripción formal de expresiones en los modelos UML. Y las expresiones pueden ser invariantes, precondiciones, postcondiciones, inicializaciones, guardias, reglas de derivación, así como consultas a objetos para determinar sus condiciones de estado.
OCL completa UML y le da un grado mayor de detalle a nuestros modelos. Cuando hago expresiones OCL me da la impresión que estoy programando y esto es entendible porque estoy bajando un nivel.
Algunas cuestiones a tener en cuenta:
- OCL no es un lenguaje de programación.
- OCL es tipado, cada expresión OCL tiene un tipo.
- La evaluación de una expresión es atómica.
Veamos un ejemplo de definición de un invariante para no ser tan abstractos.
context Ejemplar
inv: self.id > 0 and self.id < 999999
En el siguiente ejemplo vemos que la expresión tiene un contexto, que es el objeto, donde se aplica la expresión. Luego se detalla un invariante donde decimos que el id del ejemplar tiene que estar entre 1 y 999999. Veamos otro ejemplo:
context: Publicación
inv: self.autor.nombre.size>0 and self.autor.apellido.size >0
Estamos diciendo que una publicación debe tener un autor con un nombre y un apellido (al menos)
Por este post estamos. Más adelante revisaremos más expresiones OCL.
Dejo link: http://www.omg.org/spec/OCL/
lunes, 2 de mayo de 2016
Seminario de seguridad en base de datos oracle
Me llego este mail y lo quiero compartir por que es muy buena:
Ver este mensaje en un navegador Web
|
Probando ElementaryOs
Sigo probando linux ahora elementaryOS muy lindo sistema operativo basado en Ubuntu. Es un sistema operativo que nació para los usuarios de apple pero ahora a tomado una personalidad propia.
Es muy recomendable el único problema es que la ultima versión no esta del todo estable. Al parecer tiene bugs. No lo pude comprobar en persona. Pero en mi caso nunca pude configurar la resolución de la pantalla. Por lo que me quedo 400x600 :(
Pero más allá de mi primera impresión deben probarlo porque es muy usable y bonito. Todo concuerda y esta integrado.
Dejo screenshots:
Dejo link:
https://elementary.io/es/
Es muy recomendable el único problema es que la ultima versión no esta del todo estable. Al parecer tiene bugs. No lo pude comprobar en persona. Pero en mi caso nunca pude configurar la resolución de la pantalla. Por lo que me quedo 400x600 :(
Pero más allá de mi primera impresión deben probarlo porque es muy usable y bonito. Todo concuerda y esta integrado.
Dejo screenshots:
Dejo link:
https://elementary.io/es/
jueves, 28 de abril de 2016
AragonDB, una base multimodelo
Así que este post se parece a los post OPADNoSQL (otro post aburrido de NoSQL) pero esto no es así. No no, les quiero presentar a AragonDB que es una base de datos NoSQL multimodelo. Es decir te ofrece varios mundos, con un modelo adaptable a varias realidades.
Aragon es una base de datos libre y de código abierto. Esta esta conformada por modelo de datos flexible que puede ser visto como una base documental o orientada a grafos o clave-valor.
ArangoDB es una "base de datos documental"; que básicamente proporciona acceso a los documentos que se almacenan en colecciones. En NoSQL no hay necesidad de definir un esquema de antemano. Los documentos en ArangoDB se identifican por una única clave, lo que permite el almacenamiento de clave / valor. Pueden ser conectados, lo que le permite tratar y consultarlos en forma de grafos. Por lo tanto, se puede elegir el modelo que mejor se adapte a sus necesidades o combinar los modelos de una manera conveniente.
Además ofrece una Api de consulta extensible basado en javascript. Como es tradición ofrece un lenguaje de consulta llamado ArangoDB Query Language
Y todo open source y de acceso gratuito. Que más queres?
Dejo link: https://www.arangodb.com
miércoles, 27 de abril de 2016
Ahora paseo por Ubuntu Gnome 16
Con Gnome tengo un problemita, nunca me gusto del todo gnome 3 y creo que el triunfo de distros como Mint, solusOs, elementaryOs son un claro reflejo de que no soy el único.
Por lo tanto empece a probar con un tanto de escepticismo pero al poco tiempo cambio un poco mi visión. Tema principal, ningún error, es decir corre sobre Ubuntu 16 y esta estable, cosa que no me paso con Ubuntu con Unity.
Gnome shell es un poco duro para las personalizaciones pero me encontré con muchas extensiones que me permitieron darle un toque personal. La gente de gnome a pensado las cosas para ocultar la potencia de su escritorio para darle una seguridad al usuario novato.
Sin más dejo unos screenshots:
Dejo link: https://extensions.gnome.org/
Por lo tanto empece a probar con un tanto de escepticismo pero al poco tiempo cambio un poco mi visión. Tema principal, ningún error, es decir corre sobre Ubuntu 16 y esta estable, cosa que no me paso con Ubuntu con Unity.
Gnome shell es un poco duro para las personalizaciones pero me encontré con muchas extensiones que me permitieron darle un toque personal. La gente de gnome a pensado las cosas para ocultar la potencia de su escritorio para darle una seguridad al usuario novato.
Sin más dejo unos screenshots:
Dejo link: https://extensions.gnome.org/
domingo, 24 de abril de 2016
Me di una vuelta por Ubuntu 16
Como ya lo dije ando buscando distro y la salida de Ubuntu 16, me vino al pelo. Entonces decidí probarlo.
Pero la verdad es que me sentí un tanto desilusionado, tiene varios errores. Por lo menos lo rompí con solo configurar el menú.
Salvo este detalle, la versión esta buena. Trae novedades muy buenas como un nuevo sistema de archivos o mejoras en la interfaz.
Acá pueden ver que desapareció el menú para nunca más volver:
Pero la verdad es que me sentí un tanto desilusionado, tiene varios errores. Por lo menos lo rompí con solo configurar el menú.
Salvo este detalle, la versión esta buena. Trae novedades muy buenas como un nuevo sistema de archivos o mejoras en la interfaz.
Acá pueden ver que desapareció el menú para nunca más volver:
jueves, 21 de abril de 2016
Ya está con nosotros Ubuntu 16.04 LTS!
Hace muy poco baje Ubuntu 15.10 para probarlo y hoy me encuetro con que hay otro release.
Entre las ventajas de la nueva versión se encuentra un nuevo sistema de archivos y la personalización de unity totalmente integrada.
Dejo link para bajarlo: http://cdimage.ubuntu.com/
Descarga directa
Suscribirse a:
Entradas (Atom)