lunes, 30 de mayo de 2016

PartialFunction en scala


Imaginemos que queremos definir un pattern matching si bien sabemos como se debe comportar con ciertos valores, no tenemos una comportamiento por default. Veamos un ejemplo:

def toYesOrNo(choice: Int): String = choice match {
    case 1 | 2 | 3 => "yes"
    case 0 => "no"
  }

En este caso si trato de usar la función para un valor que no se encuentra definido en el dominio por ejemplo 5. Esto nos dará un error. Pero si utilizamos PartialFunction, no nos devolverá un error y a la vez podemos ver si esta función funciona con ese valor:

scala> val one: PartialFunction[Int, String] = { case 1 => "one" }
one: PartialFunction[Int,String] = <function1>

scala> one.isDefinedAt(1)
res0: Boolean = true

scala> one.isDefinedAt(2)
res1: Boolean = false

Dejo link:
https://twitter.github.io/scala_school/pattern-matching-and-functional-composition.html

miércoles, 25 de mayo de 2016

The Elements of Web Design


Codescholl nos trae un nuevo curso esta vez de diseño web.
Les dejo los temas:

Course Overview

  1. Level 1 on The Elements of Web Design

    LEVEL 1 FREE LEVEL 2 Videos | 10 Challenges
    User Discovery

    Begin the design process by identifying and testing your hypothesized target audience.
  2. Level 2 on The Elements of Web Design

    LEVEL 2 2 Videos | 13 Challenges
    Navigating Sites

    Avoid nuclear meltdowns by learning how to organize your content and establish good navigation practices.
  3. Level 3 on The Elements of Web Design

    LEVEL 3 3 Videos | 14 Challenges
    Usability Design

    Learn to create a positive bond with your users with smart, user-related web pages.
  4. Level 4 on The Elements of Web Design

    LEVEL 4 1 Video | 6 Challenges
    Mobile Best Practices

    Yield some positive reactions with tips for designing with mobile in mind.


Completed The Elements of Web Design
COMPLETE THESE LEVELS TO UNLOCK

Course Completion Badge

Learn how to design user-centered websites that are purposeful and easy to use.


Dejo link:
https://www.codeschool.com/courses/the-elements-of-web-design


Un montón de cursos en coursera sobre Scala



"Program on a Higher Level" es la especialización que lanzo coursera sobre tecnologías ligadas a Scala.

Los cursos son:

  • Functional Programming Principles in Scala
  • Functional Program Design in Scala
  • Parallel programming
  • Big Data Analysis with Scala and Spark
No hay excusas a estudiar!!


Dejo link:
https://www.coursera.org/specializations/scala?utm_content=buffere5926&utm_medium=social&utm_source=linkedin.com&utm_campaign=buffer

Paradigmas de programación

Me encontré en Internet con la siguiente taxonomía de paradigmas de programación y ejemplos de lenguajes. Me pareció por demás interesante, por lo que lo comparto:



Otra cosa que me pareció interesante la definición de paradigma:

Un paradigma de programación es un enfoque a la programación de una computadora basado en una teoría matemática o un conjunto coherente de principios. Cada paradigma admite un conjunto de conceptos que hace que este sea mejor para un determinado tipo de problema.

Dejo link:
https://continuousdevelopment.wordpress.com/2010/02/21/162/

Top de 100 librerías Java


Leyendo dzone me encontré con un articulo por demás interesante. Aprovecho a recomendarles dzone cada vez esta mejor. Tiene una producción muy grande de artículos, imposible leer todo...

Volviendo al tema la gente de dzone tomo las dependencias de los 3862 proyectos más populares de GitHub, y a partir de esos datos han creado un informe sobre las 100 librerías Java más populares.



Como se puede ver junit esta primero cómodo. 

Dejo link: 


Estructuras inmutables en java


Si bien no es algo super novedoso pero la verdad es que muchos desarrolladores no saben que se puede modelar estructuras inmutables en Java.

En java hay muchas estructuras inmutables podemos pensar en los String, Integer, BigDecimal or BigInteger.

Estas estructuras representan datos que sería impensable que cambie su estado interno. Es decir son objetos que representan un valor. Podemos pensar en el patrón ValueObject que describe Martin Fowler.

Estas estructuras deben devolver una copia de ellos mismos si desean devolver un resultado pero nunca deben cambiar su valor interno.

Pensemos en representar un objeto fracción para esto debemos codificar una clase:

public class Rational {
    private int num;   // the numerator
    private int den;   // the denominator

    // create and initialize a new Rational object
    public Rational(int numerator, int denominator) {
        if (denominator == 0) {
            throw new RuntimeException("Denominator is zero");
        }
        int g = gcd(numerator, denominator);
        num = numerator   / g;
        den = denominator / g;

    }

    // return string representation of (this)
    public String toString() {
        if (den == 1) return num + "";
        else          return num + "/" + den;
    }

    // return (this * b)
    public Rational times(Rational b) {
        return new Rational(this.num * b.num, this.den * b.den);
    }


    // return (this + b)
    public Rational plus(Rational b) {
        int numerator   = (this.num * b.den) + (this.den * b.num);
        int denominator = this.den * b.den;
        return new Rational(numerator, denominator);
    }

    // return (1 / this)
    public Rational reciprocal() { return new Rational(den, num);  }

    // return (this / b)
    public Rational divides(Rational b) {
        return this.times(b.reciprocal());
    }


   /***************************************************************************
    *  Helper functions
    ***************************************************************************/

    // return gcd(m, n)
    private static int gcd(int m, int n) {
        if (0 == n) return m;
        else return gcd(n, m % n);
    }

}

Como se puede ver cada vez que hacemos una operación devolvemos una copia del objeto:

    // return (this + b)
    public Rational plus(Rational b) {
        int numerator   = (this.num * b.den) + (this.den * b.num);
        int denominator = this.den * b.den;
        return new Rational(numerator, denominator);
    }

Esto nos permite no cambiar el estado interno de los objetos.


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:


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


Quiero recomendarles este post sobre Elixir. En este post se revisan cosas básicas desde como instalar Elixir a hacer un primer programa.

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

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:

  • 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
Oracle University
COMPARTIRLinkedInTwitterFacebookgoogleplusemail
Expert Seminar
Fecha: 
26 y 27 de Mayo 2016
Horario: 
8.30 h.
ubicacion
Ubicación: 
Aula Mazz Soluciones 
La seguridad en las bases de datos hoy en día ya no es una opción, es una necesidad. En el mundo actual donde existen leyes y regulaciones, no podemos estar expuestos a riesgos. Participe de este seminario donde aprenderá:
Temas:
  • Aspectos básicos de seguridad en base de datos Oracle 11g y 12c Standard y Enterprise Edition
  • Cómo construir una política de seguridad en Oracle DB
  • Colocar la seguridad en los datos de manera independiente de las aplicaciones que lo consuman
  • Construcción de una política de seguridad y auditoria para Oracle Database
  • Encriptado de datos y enmascaramiento
  • Seguridad avanzada con Database Vault
  • Auditoria centralizada con Audit Vault
Audiencia:
  • Especialistas / arquitectos de seguridad informática
  • DBAs
  • Jefes de sistemas
  • Jefes de desarrollo.
Información sobre costos y otros detalles aquí:

mariela.cerbino@oracle.com 
daiana.lopez@oracle.com 
Cupos limitados
Certificado de Asistencia Oracle.
  
Agenda
agenda
Día 1
Introduction to Database Security & Requirements

Choosing Security Solutions

Standard Database Security , News in 12c

Advanced Database Security, Virtual Private Database & OLS

Transparent Data Encryption

Oracle Data Masking
Día 2
Database Vault Overview

Implementing Database vault

Using Database Vault

Audit Vault Overview

Configuring & Managing Audit Vault

Using Audit Vault
Prepararse en seguridad para el presente y el futuro es una apuesta segura para las empresas y los profesionales.
¡Lo esperamos el 26 y 27 de mayo!
Aula Mazz Soluciones
Parana 425 Piso 5 (C1017AAI)
Capital Federal, Argentina
Oracle
Oracle
Oracle Corporation - Worldwide Headquarters
500 Oracle Parkway, OPL - E-mail Services
Redwood Shores, CA 94065, United States
COMPARTIR
LinkedInTwitterFacebookgoogleplusemail
Entre em contato | Avisos Legais e Termos de Uso | Política de Privacidade

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

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/