Translate

domingo, 3 de julio de 2016

Probando Mint

Como ya había dicho, me baje linux mint 18, y lo probé. Muy bueno!!

Nada más que decir...

Las novedades son muy buenas y todo bajo esa simpleza que lo caracteriza. Cinnamon 3 es muy bueno y estable.

La verdad, muy contento.

Dejo screenshots:







sábado, 2 de julio de 2016

Introducción al Business Intelligence


Me llego esta mail de Universitat Oberta de Catalunya y es muy interesante:

Hola Emanuel,
Nos ponemos en contacto contigo para informarte de que, atendiendo a la petición que nos habéis hecho muchos de vosotros, hemos dado acceso abierto a los contenidos del MOOC.
Creemos que también pueden interesarte otros contenidos en vídeo de nuestra cuenta de Vimeo, por lo que te invitamos a visitarla.
Por otra parte, nos gustaría recordarte que sigues teniendo a tu disposición los recursos siguientes:
  • Notícias y entradas de difusión en Inteligencia de Negocio y Análisis de Datos en nuestro Blog.
  • Toda la información sobre el Máster y los programas de la UOC en Business intelligence.  
Te agradecemos de nuevo tu participación e interés en nuestro MOOC de Introducción al Business intelligence.
Recibe un cordial saludo.
José Ramón Rodríguez
Director de los programas en Inteligencia de negocio y análisis de datos 
Universitat Oberta de Catalunya (UOC)


Yo me perdí el curso pero es muy bueno que compartan los vídeos, y por lo que vi son de muy buena calidad. Muy buena iniciativa.


Ya está entre nosotros Linux Mint 18

Si, ya estoy bajando Mint 18, es una nueva versión de una distro genial. Esta versión esta basada en ubuntu 16.04 y tiene el nombre de Sarah. la mayor novedad es cinnamon 3, que les dejo un video:



Linux Mint 18 llega con un nuevo tema llamado Mint-Y, que le da un aspecto muy atractivo.

Dejo link:
https://www.linuxmint.com/

miércoles, 29 de junio de 2016

Curso de Angular 2

Code school me envío un correo sobre angular 2, la primera clase es gratis.

Dejo más info:

While many web apps were built with Angular 1, the faster and more powerful Angular 2 will soon be the new standard. Play Accelerating Through Angular 2 now to start building the future of the web.
START LEVEL 1

Level 1: Angular 2 Ignition
FREE
Get an introduction to Angular 2 and write your first component with a template.

Level 2: Template Traction
Start with a few structural directives and then transform your view with pipes.

Level 3: Tuning It Up
Make your code more maintainable by organizing it into multiple components, separating your HTML and CSS, creating a data model, and splitting your data into a mock file.

Level 4: Data Binding Boost
Explore how to send data from JavaScript to HTML and HTML to JavaScript using one-way data binding, and then learn how to do both at the same time with two-way binding.

Level 5: Service Fuel Injection
Learn how to create your own services and then how to use the HTTP library to call out to the internet.
Share on Twitter

Encuesta de Stackoverflow


Stackoverflow realizo una encuesta la cual contestaron 56,033 desarrolladores de 173 países.

Los desarrolladores aman Rust. Incluso los desarrolladores de back-end saben JavaScript. Sólo el 7% de los desarrolladores se identifican como "estrellas de rock". La mayoría de los desarrolladores prefieren los perros a los gatos...

Dejo link: http://stackoverflow.com/research/developer-survey-2016

lunes, 27 de junio de 2016

Interfaces Funcionales en Java


La programación funcional tiene un apogeo desde hace tiempo y todos los lenguajes se ven afectado por este éxito, por supuesto Java no es la excepción.

Las interfaces funcionales no son diferentes de la interfaz común.  Ahora con Java 8, podemos tener métodos por defecto en las interfaces con la palabra clave default,  por lo tanto puede haber cualquier número de métodos por defecto en una interfaz; sin embargo, si tiene un sólo una método abstracto se puede considerar como una interfaz funcional. Y podemos utilizar la anotación @FunctionalInterface que si bien es opcional, nos viene bien para documentar.

Por ejemplo:

@FunctionalInterface
public interface MyFuncInterface1{
    public abstract void functionalMethod1();
}

@FunctionalInterface
public interface MyFuncInterface2{
    public abstract void functionalMethod2();
    public default boolean isPresent(){
      return true;
   }
}

Las interfaces funcionales son interfaces con sólo un método abstracto, se deduce inmediatamente que el énfasis se encuentra en lo que hace, es decir es una interfaz que encapsula un comportamiento. Un ejemplo es Runnable :

class RunnableImpl implements Runnable{

   public void run (){
      //do something in a new thread
    }
}

Ahora podemos pasar una instancia de esta clase a un hilo, es más podemos utilizar una clase abstracta:

new Thread(new Runnable(){
   public void run(){
     //do something in this thread
  }
},"NEW-THREAD").start();

Como se puede ver hemos escrito mucho código, solo para pasar una función por parámetro. Por que no usar una expresión Lambda:

new Thread(()->{
   //do something in this thread
}, "NEW-THREAD").start();

Que paso? La interfaz se elimino? En efecto, pudimos pasar sólo la función, el nuevo hilo correría el bloque de código (dentro del método run)

Java 8 proporciona un conjunto completo de interfaces funcionales dentro del paquete java.util.function. Estas interfaces funcionales se adaptan a la mayoría de los requisitos generales de desarrollo diario.

Veamos algún ejemplo:

IntStream intStream = IntStream.of(1,2,3,4,5);
intStream.filter(new IntPredicate() {

           @Override
           public boolean test(int value) {
               if(value%2 != 0)
                   return false;
               return true;
           }
     });

Podemos cambiarlo por:

IntStream intStream = IntStream.of(1,2,3,4,5);
intStream.filter(val -> {
            if (val % 2 != 0)
                return false;
            return true;
               
 });

Interfaces funcionales son un medio de hacer funciones de primer orden, llevando el mundo funcional al orientado a objetos.


domingo, 26 de junio de 2016

Sdkman, The Software Development Kit Manager


SDKMAN! es una herramienta para la gestión de versiones paralelas de múltiples kits de desarrollo de software en la mayoría de los sistemas basados en Unix. Proporciona una interfaz de línea conveniente de comandos (CLI) y la API para la instalación, distribución, eliminar y listar los candidatos.

Sdkman nos permite instalar software en nuestra sdk desintalarlo, chequear versiones. Podemos instalar lenguajes que corren sobre la jdk o sdks de desarrollo como Grails, SBT, etc.

Para instalarlo debemos abrir una terminal y debemos escribir:

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

luego chequear la instalación con el comando:

$ sdk version

Obtener ayuda:  sdk help
Listar lo que podemos instalar: sdk list

Para instalar un entorno por ejemplo: sdk install gradle
Instalar una versión determinada: sdk install scala 2.11.7
Desinstalar una versión determinada: sdk remove scala 2.11.6
Ver las versiones de un sofware: sdk list groovy
Usar una versión determinada: sdk use scala 2.11.6

Que más queres?

SDKMAN! es distribuido bajo licencia Open Source Software: Apache 2

Dejo link: http://sdkman.io/

sábado, 25 de junio de 2016

Clojure, the good parts


Cuando alguien escucha "the good parts" en programación, automáticamente relacionamos con el libro sobre javascript titulado "javascript, the good parts" que nos trataba de convencer de que javascript no era tan terrible. Y no es terrible! (como ven, me convenció)

Me encontré con un buen post sobre Clojure, y me llamo la atención. Dado que no creo que sea terrible, pero si causa mucho recelo en un primer momento un lenguaje que esta lleno de paréntesis.

Dejo link: https://rasterize.io/blog/clojure-the-good-parts.html



jueves, 23 de junio de 2016

Apache TinkerPop es ahora Top-Level Project




Vamos por parte: Que es Apache TinkerPop? Apache Tinkerpop ™ es un framework para computación orientada a grafos para ambas bases de datos de gráficos (OLTP) y sistemas de análisis de gráficos (OLAP).


Un gráfico es una estructura compuesta de nodos y aristas  o relación. Los dos nodos y aristas pueden tener un número arbitrario de pares de claves/valores denominadas propiedades. Los vértices o nodos denotan objetos discretos, tal como una persona, un lugar, o un evento. Los bordes indican las relaciones entre los vértices. Por ejemplo, una persona puede conocer a otra persona, han participado en un evento, y / o estuvo recientemente en un lugar determinado. Propiedades expresan información no relacional sobre los vértices y aristas. Ejemplo propiedades incluyen un vértice que tiene un nombre, una edad y un borde que tiene una marca de tiempo y / o un peso.


Y porque es importante que sea Top-Level Project? Por que con esto Apache nos indica que le va a dar prioridad a este proyecto y que ya salio de la incubadora, es decir esta listo para usar!!


Apache TinkerPop™ es un proyecto open source, distribuido bajo licencia Apache2.


Dejo link: http://tinkerpop.apache.org/

miércoles, 22 de junio de 2016

Eclipse Neon esta con nosotros!!



La fundación Eclipse publico una nueva versión de eclipse llamada Neon. Eclipse Neon provee varios cambios. Entre ellos podemos nombrar un nuevo instalador basado en Eclipse Oomph que permite personalizar nuestra instalación.

Otra gran característica es que se puede cambiar el tamaño del texto con ctrl+shift++ o ctrl+shift+- Por fin!!!!

Además muchas mejoras para los programadores java y c++ .

Yo ya estoy bajando la nueva versión!!

Dejo link: https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-linux64.tar.gz

lunes, 20 de junio de 2016

Cómo el mundo digital está ayudando a reducir la brecha de género


Buenísimo informe publico accenture, me tengo que sacar el sombrero. Con el titulo, "Avanzando hacia la igualdad, cómo el mundo digital está ayudando a reducir la brecha de género"

Por favor leanlo, esta muy bueno: https://www.accenture.com/ar-es/gender-equality-research-2016?src=SOMS&c=car_hsaonlne16_10000200&n=smc_0416


Porque Haskell no implementa dependently typed?

Seguramente se lo han preguntado, si esta tan bueno dependently typed, porque no lo implementa Haskell?

El problema es que debería romper la restricción de fase entre el tipo y niveles de valor que permite Haskell para ser compilado a código máquina eficiente. Con nuestro nivel actual de la tecnología, un lenguaje dependently typed debe correr sobre una maquina virtual o interprete.

Idris es compila a C pero tiene un garage collector, la verdad no se bien como lo hace. Alguien me ayuda?


Que es la arquitectura de software? y porque es tan importante?


Que es la arquitectura de software?

Existen muchas definiciones, pero mucha basta con chequear el conjunto de definiciones que publica el sei (Instituto de ingeniería de software) : http://www.sei.cmu.edu/architecture/start/glossary/community.cfm

Yo tengo una definición personal, la pueden criticar pero no van a poder negar que es simple: La arquitectura de software son las decisiones que tomamos para satisfacer los requerimientos no funcionales (o atributos de calidad)

Hablo de requerimientos no funcionales o atributos de calidad, que sería eso? Bueno, son requerimientos que no describen una funcionalidad, sino que definen atributos para medir la calidad. Veamos un ejemplo:

  • La aplicación no debe demorar más de 50 segundos en listar las ordenes diarias procesadas. 
  • Debe permitir que solo un usuario con permisos pueda autorizar un pedido.
  • Un usuario novato debe ser capaz de crear un pedido en 1 hora. 
  • Debe permitir agregar un campo nuevo a la pantalla en menos de 1 día. 

Como se puede ver los requerimientos no funcionales necesitan decisiones muy importantes para poder satisfacerlos. Las cuales son muy pero muy difícil cambiar luego de haberlas tomado. Por lo tanto es muy importante analizar los requerimientos no funcionales y definir la arquitectura y además documentarla.

Que quede muy claro, olvidarse un requerimiento no funcional puede ser critico y podemos perder un proyecto o atrasarnos mucho. Es decir podemos perder mucho dinero!! Por lo tanto no tomarse el tiempo de analizar la arquitectura es una irresponsabilidad.

Una buena practica es hacer un pequeño cuadro en el cual se listan los requerimientos no funcionales y las decisiones que tomamos para solucionarlos.

Además existe un proceso de desarrollo de arquitectura de software que debe ser respetado:

  • Analizar requerimientos, puff, tenemos que leer todos los requerimientos y detectar los requerimientos no funcionales que muchas veces se ocultan entre los requerimientos funcionales. Luego de encontrarlos debemos documentarlos y checkearlos con los usuarios. 
  • Diseño: Debemos diseñar la solución. 
  • Documentar: Debemos documentar la solución y luego debemos ver si es coherente, además si se entiende. Para esto se puede recurrir a las revisiones por pares. 
  • Evaluación: Esto se va ir haciendo a medida que se diseña y se documenta. A la vez juega un rol importante las revisiones por pares. 
  • Implementación: A trabajar! Pico, pala, sudor, un poco de inspiración y suerte. Debemos programar todo lo que diseñamos, y si algo falla o no se puede implementar volver al inicio de la lista :P 

Como se puede ver el rol de arquitecto de software no es fácil y necesita que los desarrolladores, funcionales y testers, lo ayuden constantemente.


jueves, 16 de junio de 2016

Piso13

Piso13 es un podcast sobre tecnología, se habla de librerías open source, noticias, herramientas, vulnerabilidades de seguridad, lo que sea que nos llame la atención sin barreras de lenguajes.

Tratamos de hacer foco sobre conferencias, eventos y programadores de américa latina.

Se los recomiendo!!

Dejo link: http://13floor.org/podcast/

domingo, 12 de junio de 2016

Comparando Go con Java


Como me gustan las comparativas. Ahora tenemos Go con java.

Empecemos:

Go es compilado a código máquina y se ejecuta directamente. No utiliza una maquina virtual.
Golang tiene una Garbage Collector, pero esto no es un GC completo como en Java, ya que no hay compactación de memoria.
Go tiene clausuras y se pueden escribir funciones que retornen funciones:

package main
import (
    "fmt"
)
func CounterFactory(j int) func() int {
    i := j
    return func() int {
        i++
        return i
    }
}
func main() {
    r := CounterFactory(13)
    fmt.Printf("%d\n", r())
    fmt.Printf("%d\n", r())
    fmt.Printf("%d\n", r())
}

Similar a Python, una función puede retornar muchos resultados.
También se puede escribir:
            a,b = b,a
Go es menos orientado a objeto es como JavaScript.

package main
import (
    "fmt"
)
type A struct {
    a int
}
func (a *A) Printa() {
    fmt.Printf("%d\n", a.a)
}
type B struct {
    A
    n string
}
func main() {
    b := B{}
    b.Printa()
    b.A.a = 5
    fmt.Printf("%d\n", b.a)
}

Go no tiene excepciones, tiene errores. No es necesario los try o catch, veamos un ejemplo:

package main
import (
    "log"
    "os"
)
func main() {
    f, err := os.Open("filename.ext")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
}



Dejo el link: https://dzone.com/articles/comparing-golang-with-java