Seguir a Miguel Gomez Cuesta en Twitter Seguir a Miguel Gomez Cuesta en Linkedin Seguir a Miguel Gomez Cuesta en Google+ Contactar a Miguel Gomez Cuesta por Correo Electrónico

viernes, 30 de marzo de 2018

Java - Java 10





Oracle lanza Java 10 en Marzo 2018 con funcionalidades muy interesantesLa características principales que trae la nueva versión son:
  • Variable local de tipo Inferido: (JEP-286) Introduce var a Java, algo que es común en otros lenguajes como JavaScript. Como el compilador puede inferir el tipo de una variable, ya no será necesario establecer el tipo explícitamente para variables locales. 
  • Ejemplo:  var x = new ArrayList<String>();

  • Extensión de CDS (Class Data Sharing): (JEP-310CDS se introdujo en versiones anteriores para mejorar el rendimiento del arranque de JVM y reducir el uso de recursos cuando se ejecutan varias JVM en la misma máquina física o virtual.
  • Extensión del Unicode Language: (JEP-314) Mejoras en la clase java.util.Locale y Api's relacionados. Por ejemplo: Equiquetas para tipo de moneda, primer día de la semana, sobreescritura de región y zona horaria.
  • Formato de versionamiento basado en tiempo: (JEP-322) El nuevo formato hará más comprensible la numeración de futuras versión de la jdk.
  • Certificados raiz: (JEP-319) Se proporcionará un conjunto por defecto de CA (Autoridades Certificadoras)
  • GC (Recolector de Basura) completamente Paralelo para G1: (JEP-307) G1 es un recolector de basura de baja latencia, sin embargo en determinadas ocasiones no era del todo eficiente. A partir de esta versión el rendimiento será mejora ya que podrá realizar recolecciones completas de forma paralela.
  • Interfaz del GC Recolector de Basura: (JEP-304) Define un interfaz limpio que permite la integración de forma rápida y sencilla.
  • Manejo de hilos: (JEP-312) Permite la parada de hilos de forma individual y económica en lugar de la parada completa de todos los hilos.
  • Reservar memoria Heap: (JEP-316) Permite a la JVM reserva diferentes tipos de memoria además de la memoria volátil. Esto permite aprovechar de una forma más eficiente los recursos hardware del sistema.
  • Unificación de Repositorios: (JEP-296) Mientras que en Java9 hay 8 repositorios, en Java10 se unificará todo en un único repositorio haciendo posible realizar un único coomit completo para cambios en módulos dependientes.

Java - Java 9



Las características principales incluidas en Java 9 son:
  • Project Jigsaw: Persigue modularizar la plataforma para que sea más escalable para una amplia gama de dispositivos, facilitar a los desarrolladores la construcción y el mantenimiento de las librerías y aplicaciones de gran tamaño, y mejorar la seguridad, el mantenimiento y el rendimiento. 
  • JSON Light Weight: Dado que el uso de JSON está cada vez más extendido la nueva versión incluirá un API para trabajar con este formato de forma mucho más ligera y optimizada.
  • Optimización de la JVM: Se esperan mejoras en el rendimiento enfofocadas a la gestión de la memoria caché y optimizaciones del compilador 
  • Java Shell: Herramienta interactiva para la evaluación de fragmentos de código
La modularidad es uno de los funcionalidades más relevantes que aporta Java 9 y que permite crear aplicaciones modulares y sostenibles.  Recomendamos el curso ofrecido a través del portal de formación de oracle sobre "Explotando la Modularidad y otras nuevas funcionalidades " 





sábado, 4 de febrero de 2017

Aprendizaje Máquina - Conceptos básicos

  • La Inteligencia Artificial es el futuro.
  • La inteligencia Artificial es ciencia ficción.
  • La inteligencia Artificial esta presente desde hace tiempo en nuestras vidas.

Según un interesante estudio realizado por la consultora Ovum, el aprendizaje máquina o machine learning será el gran elemento disruptor del año 2017.

Diferencias entre AI vs ML vs DL


Diferencias entre inteligencia artificial, aprendizaje máquina y aprendizaje profundo


Uno de los principales impedimentos a la hora de aprender sobre una nueva tecnología, un nuevo paradigma o un campo totalmente desconocido para nosotros es la gran cantidad de conceptos nuevos a los que nos vemos sometidos, por ello es importante aclarar las diferencias en los conceptos básicos e ir avanzando en nuestro conocimientos poco a poco.



  • Inteligencia ArtificialEs el concepto más amplio de los tres y se define como la inteligencia exhibida por máquinas. Una máquina inteligente es la que percibe su entorno y lleva a cabo acciones que maximicen sus posibilidades de éxito para conseguir un objetivo o tarea. En general, este término se aplica cuando una máquina imita las funciones de los humanos , como por ejemplo: aprender, resolver problemas, hacer predicciones...

  • Aprendizaje MáquinaEs la práctica de utilizar algoritmos para analizar datos, aprender de ellos, y luego hacer una predicción acerca de algo en el mundo. La máquina es "entrenada" utilizando grandes cantidades de datos y algoritmos que le dan la capacidad de aprender a realizar predicciones.


  • Aprendizaje Profundo: Es una especialización del aprendizaje maquina. El Aprendizaje profundo descompone las tareas de manera que hacen que cualquier cosa pueda ser realizada por una máquina. 

miércoles, 4 de mayo de 2016

Java - Certificación - Estructura de clases y tipos

Certificación Java


La siguiente colección de artículos tienen como objetivo formarte y prepararte para lograr la certificación Java OCA (Oracle Certified Associate Java) para la última versión disponible de JavaSE 8.

Las principales fuentes utilizadas para elaborar estos artículos son los libros de referencia para la preparación de la certificación:


Si todavía no conoces el lenguaje Java pero tienes algo de conocimiento de otros lenguajes de programación, esta es tu oportunidad de aprenderlo de una manera amena.

Si ya conoces el lenguaje Java, pero nunca te has atrevido a preparar la certificación porque nunca has tenido el tiempo suficiente para prepararlo, aquí te ayudaremos a reducir el tiempo y consultar todas tus dudas.

Si ya dominas el lenguaje Java pero frecuentemente olvidas algunas de las características del lenguaje o dudas a la hora de desarrollar un nuevo programa. Estos artículos te servirán como guía de referencia de las funcionalidades del lenguaje que necesitas recordar para trabajar a diario y ser más productivo.

domingo, 24 de abril de 2016

Java - Evolución - Pasado - Presente - Futuro

Pasado


En Diciembre de 1950 Patrick Naughton, ingeniero de Sun Microsystems, reclutó a varios colegas entre ellos JamesGosling y Mike Sheridan para trabajar sobre un nuevo proyecto conocido como "El proyecto verde".  El objetivo era desarrollar una nueva tecnología para programar la siguiente generación de dispositivos inteligentes bajo las siguientes premisas:

  • Debería usar el paradigma de la programación orientada a objetos.
  • Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.
  • Debería incluir por defecto soporte para trabajo en red.
  • Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
  • Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.


El resultado fue el lenguaje Java, actualmente elegido por 9 millones de desarrolladores y implantado en 7.000 millones de dispositivos.

miércoles, 6 de abril de 2016

Patrones de diseño - Agrupación GoF - Gang of Four

 Antes de nada te pedimos que participes en la encuesta "Patrones de diseño de software"

Gang of Four


En 1994 los ahora conocidos como la banda de los cuatro (GoF) se unieron para publicar el libro "Design Patterns: Elements of Reusable Object Oriented Software", en él describen soluciones simples y elegantes a problemas específicos del diseño orientado a objetos. Fue escrito por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides

Gang of Four


Erich Gamma lideró el desarrollo de la plataforma Eclipse y fue creador junto a Kent Beck del framework de pruebas JUnit. Erich tiene un doctorado en Ciencias de la Computación de la Universidad de Zurich. Actualmente se encuentra trabajando para Microsoft en el equipo de Visual Studio.

Richard Helm fue consultor de tecnología en DMR. Allí aplicó de forma activa los patrones de diseño orientados a sistemas comerciales. Anteriormente trabajaba en el departamento de Tecnología de IBM. Tiene numerosas publicaciones internacionales y escribe regularmente en el Diario del Dr. Dobb. Además fue miembro del comité de OOPSLA (conferencia sobre programación orientada a objetos). Richard tiene un  doctorado en Ciencias de la Computación de la Universidad de Melbourne. Actualmente se encuentra trabajando de nuevo en IBM.

Ralph Johnson ha estudiado la programación orientada a objetos y la forma en que ha evolucionado durante los últimos 10 años. Ha estado involucrado en el desarrollo de un sistema operativo orientado a objetos  y un compilador de tipo Smalltalk. Ralph tiene un doctorado por la Universidad de Cornell. Ha participado como presidente de varias ediciones de la conferencia de OOPSLA. Actualmente está trabajando en el Departamento de Ciencias de la Computación de la Universidad de Illinois desarrollando un framework para contabilidad.

John Vlissides falleció 24 de noviembre de 2005. Fue investigador en el IBM T. J. Centro de Investigación Watson. Sus investigaciones incluyen framework, herramientas y técnicas de diseño orientado a objetos. Anteriormente John estuvo en el Departamento de Sistemas de Computación de la Universidad de Stanford. John tiene un doctorado en ingeniería eléctrica de la Universidad de Stanford.

Referencias

Los patrones aquí expuestos se basan en el libro “Patronesde Diseño” que escribieron GoF y que todavía hoy en día sigue siendo una de las principales referencias sobre el desarrollo de software y los patrones de diseño.


viernes, 18 de marzo de 2016

Patrones de Diseño - Introducción

 Antes de nada te pedimos que participes en la encuesta "Patrones de diseño de software"


Introducción


Los patrones de diseño son una pieza fundamental en el desarrollo del software. Un patrón de diseño en software es un problema que ocurre una y otra vez en nuestro entorno y que puede resolverse repetidamente del mismo modo sin necesidad de implementar una solución diferente cada vez. Es decir, los patrones de diseño son soluciones exitosas y contrastadas a problemas comunes.


Un patrón de diseño tiene 4 elementos esenciales:

Elementos que forman un patrón de diseño


Nombre del patrón: Permite describir en pocas palabras un problema de diseño junto con sus soluciones y consecuencias. Tener un vocabulario de patrones nos permite diseñar con mayor abstracción y tener un lenguaje común para compartir, transmitir y documentar a otros compañeros de profesión. A su vez se pueden identificar fácilmente sus puntos fuertes y sus inconvenientes para decidir cuál es la mejor elección en cada caso.

Problema: Describe cuando se debe aplicar el patrón, explicando el problema y el contexto. En ocasiones el problema incluye una serie de requisitos que deben producirse para que tenga sentido aplicar el patrón.

Solución: Describe los elementos que constituyen, las relaciones, responsabilidades y colaboraciones entre ellos. El patrón proporciona una descripción abstracta de un problema de diseño y como se resuelve a través de una serie de elementos. En el caso de Java y los lenguajes de programación orientados a objetos, estos elementos serán los interfaces, clases y objetos.

Consecuencias: Son las ventajas e inconvenientes de aplicar el patrón. Son fundamentales para evaluar las alternativas de diseño y comprender los costes y beneficios de aplicar cada patrón. Incluyen entre otras el impacto sobre la flexibilidad, extensibilidad y potabilidad de un sistema.

martes, 16 de febrero de 2016

Web Semántica - Lenguaje SPARQL

Datos enlazados (Linked Open Data)


Para el W3C, el concepto Linked Open Data (Datos enlazados) es la forma que tiene la Web Semántica de vincular los datos que están distribuidos por toda la Web.

En el siguiente enlace podemos ver un diagrama con las bases de datos públicas y la representación de las relaciones entre ellas. Es decir, podemos ver la manera en que las bases de datos se apoyan en otras bases de datos enlazado la información de ambas para aprovecharse de la reutilización de información común.

lunes, 8 de febrero de 2016

Web Semantica - Modelo de Datos

Modelo de Datos

Es el Lenguaje que nos permite describir la estructura de los datos y las restricciones que estos deben cumplir
Una primera propuesta para cumplir estos requisitos es el Vocabulario RDF Schema

RDF Schema

Es un vocabulario RDF donde cada palabra tiene un significado bien definido y estandarizado. Su función es proveer de los elementos básicos comunes para la descripción de diferentes dominios.

Los elementos básicos de RDFS son las clases, los tipos o instancias y las propiedades.

Clase: Conjunto de recursos que tienen características comunes y una representación en el mundo real. Ejemplo: Clase Persona, Clase Libro

Tipo o instancia: Un elemento de la clase es identificado como una instancia de la clase. 

Propiedad: Puede utilizarse de dos maneras.
    • Puede indicar el valor de un atributo para un recurso.
    • Puede indicar la relación entre dos recursos.

@prefix rdf: https://www.w3.org/1999/02/22-rdf-syntax-ns#
@prefix : http://www.ejemplo.org 

:Libro rdf:type rdfs:Class . 
:Fecha_Publicacion rdf:type rdf:Property .
:Escrito_Por rdf:type rdf:Property .
:La_Biblia rdf:type :Libro .
:Don_Quijote rdf:type :Libro .


lunes, 1 de febrero de 2016

Web Semantica - Conceptos y Vocabularios RDF

Conceptos fundamentales:


A continuación vamos a presentar los conceptos fundamentales para entender la web semántica.

RDF: 

Es el lenguaje propuesto por el W3C para representar información sobre recursos en la web, entre sus principales características están:
  • Está basado en el uso de grafo dirigidos y etiquetados.
  • Puede ser procesado por un computador.
  • Los elementos principales para construir un grafo RDF son las URI y los literales

URI

Uniform Resource Identifier es un identificador de un recurso en la web. Un recurso puede ser una página web, una persona, un libro, una ciudad, una película, …

Nota: URL (Uniform Resource Locator) es un tipo de identificador más específico de URI. URL es un identificador de una página web, es decir, es un tipo de URI más concreto.

La Estructura general de un URI es protocolo://autoridad/camino
Ej: http://dbpedia.org/resource/Lionel_Messi


lunes, 25 de enero de 2016

Web Semántica - Introducción

La Web actual está formada por un conjunto de documentos enorme, en su mayoría páginas web escritas en lenguaje HTML. Cabe destacar que la utilización de este lenguaje trae como desventaja
una mala representación semántica de los datos


La Web actual es, un extraordinario medio para el acceso al conocimiento explícito, servicios, entretenimiento, comercio y negocios electrónicos, entre otros. 

Por este motivo las tecnologías que la hacen posible la web actual han tenido una gran evolución para garantizar la facilidad de su uso. Sin embargo, la cantidad de información que se pueda encontrar en Internet se ha convertido en algo incalculable, por lo cual los motores de búsquedas se han visto obligados a cambiar la forma en la que se recupera dicha información.


Big Data


Características de la Web Actual:

Heterogénea: Existen múltiples organizaciones que generan datos de forma independiente y por tanto con formatos y estructura diferente

Masiva: La cantidad de información existente es enorme y sigue creciendo

Voluble: Cada día es publicada y borrada una cantidad enorme de información. Esta información cambia muy rápido y cada vez más gracias a las redes sociales

Humana: En general, la información esta estructurada para personas y solo puede ser interpretada y comprendida correctamente por una persona .

martes, 5 de enero de 2016

JPA - API Criteria

Introducción:

Antes de que los lenguajes como JPQL llegarán a estandarizarse, el método más común para la construcción de consultas era a través de un API de programación.

Con la llegada de JPQL los API de construcción de consultas se siguen manteniendo debido a que dan acceso a unos características adicionales que no proporciona todavía JPQL

Criteria nos permite construir consultas que estandarizan muchos de las características que existen en aplicaciones con persistencia de datos.

Criteria no es simplemente una traducción de JPQL al lenguaje de programación Java

Criteria adopta las mejores prácticas como por ejemplo encadenamiento de métodos y hace un uso completo de las características del lenguaje de programación Java


domingo, 20 de diciembre de 2015

JPA - Lenguaje JPQL II (continuación)

Tipos de Sentencias:

  1. SENTENCIAS SELECT
  2. SENTENCIAS AGGREGATE
  3. SENTENCIAS UPDATE
  4. SENTENCIAS DELETE

Seguimos aprendiendo sobre el resto de sentencias que podemos encontrarnos: Aggregate, Update y Delete

JPA - Lenguaje JPQL


El Java Persistence Query Language (JPQL) es el lenguaje estándar de consultas de JPA. Es un lenguaje diseñado para combinar la simplicidad de la semántica y sintaxis del lenguaje SQL con la expresividad de un lenguaje orientado a objetos.

Introducción:

JPQL no es SQL. A pesar de las similitudes en los dos lenguajes en términos de estructura y palabras clave hay diferencias importantes.

Las similitudes en los lenguajes son intencionadas ya que permite a los desarrolladores con conocimientos de SQL que la curva de aprendizaje sea menor, sin embargo, la naturaleza orientada a objetos del lenguaje JPQL requiere un manera de pensar diferente.

JPQL es un lenguaje de consulta de entidades/objetos en lugar de tablas y registros. El lenguaje nos proporciona una manera de expresar consultas en términos de entidades y sus relaciones operando sobre las entidades en lugar de sobre el modelo de BBDD.

JPQL es portable, es decir, puede ser traducido al dialecto SQL utilizado por la mayoría de BBDD


JPQL permite abstraernos de la BBDD, es decir, las consultas son escritas sobre el modelo de entidades/objetos sin necesidad de conocer como estas son mapeadas a la BBDD.


domingo, 22 de noviembre de 2015

JPA - Las Relaciones

Conceptos fundamentales: 

Antes de comenzar y para entender bien las diferentes relaciones entre entidades debemos tener claro los siguientes conceptos.

Rol: Define cual de las entidades de la relación es origen y cuál es la entidad destino.

Dirección: Define si la relación entre dos entidades es unidireccional o bidireccional. Es decir, si existe la relación en ambos sentidos o solamente en uno de ellos y en este segundo caso identifica a la entidad origen y destino.

Cardinalidad: Indica la cantidad de entidades que existen en cada lado de la relación. Puede ser uno o muchos

Ordinalidad: Indica si un atributo es obligatorio o opcional

Columnas de Unión: En términos de base de datos una relación entre dos tablas significa que una tabla referencia a otra tabla. Una columna que referencia a una clave primaria de otra tabla se denomina “clave externa”.
En JPA estas columnas las llamamos “columnas de unión” y la anotación @JoinColum es utilizada para configurar este tipo de columnas

viernes, 30 de octubre de 2015

Introducción a JPA

¿Que es JPA?

JPA (API de Persistencia en Java) es el estándar en Java que define una abstracción que nos permite realizar la integración entre el sistema orientado a objetos de Java y el sistema relacional de nuestra base de datos. Para más detalles consultar la especificación JPA – JSR 338

JPA realiza por nosotros toda la conversión entre nuestros objetos y las tablas de una base de datos. Esta conversión se llama ORM (Mapeo Relacional de Objetos) y puede configurarse a través de metadatos (XML) o anotaciones.

JPA establece un interface común que es implementada por un “JPA Provider” concreto. De modo que es el Proveedor JPA el que realiza el trabajo. Entre los proveedores JPA más conocidos se encuentran Hibernate, Eclipse Link, TopLink, OpenJPA

Diagrama de capas de una aplicación Web

Entradas populares