DI

DI – Inyección de Dependencias

La DI es uno de los principios SOLID:

  • S – SRP: Principio de Única Responsabilidad (Single Responsibility Principle)

un objeto solo debería tener una ´única responsabilidad.

  • O – OCP -> Principio Abierto Cerrado (Open Close Principle)

las “entidades de software … deben estar abiertas para su extensión, pero cerradas para su modificación”.

  • L – LSP -> Principio sustitución de Liskov (Liskov Substitution Principle)

los “objetos de un programa deberían ser reemplazables por instancias de sus subtipos sin alterar el correcto funcionamiento del programa”. Ver también diseño por contrato.

  • I – ISP -> Principio de Segregación de la Interface (Interface segregation principle)

“muchas interfaces cliente específicas son mejores que una interfaz de propósito general”.

  • D – DIP -> Principio de Inversión de Dependencia (Dependency inversion principle)

DIP establece que los módulos de alto nivel de un software no deben depender de módulos de bajo nivel, sino que ambos deben depender de abstracciones. De esta forma, se reduce el acoplamiento entre los componentes del software.

 

IoC

Inversión de Control – IoC

La inversión de control – IoC es una forma de programar en la que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales, en los que la interacción se expresa de forma imperativa realizando llamadas a procedimientos o funciones. De esta forma, para poder implementar la IoC, necesitamos un agente externo, normalmente llamado contenedor, que se encargará de realizar las conexiones necesarias entre las clases dependientes. Este agente externo será el encargado de controlar el flujo de la aplicación. De esa forma, podremos realizar la implementación de un código que esté débilmente acoplada.

Nota: Aunque la plataforma Java provee de una gran cantidad de clases y funcionalidades para el desarrollo de aplicaciones, carece de los medios para organizar los bloques básicos en un todo coherente, dejando esta tarea para los arquitectos y desarrolladores. Si bien se pueden utilizar algunos patrones de diseño como Factory, Abstract Factory, Builder, Decorator, and Service Locator para componer las diferentes clases y objetos de la aplicación, estos patrones son simplemente eso: buenas prácticas.

La programación del IoC  se ordena como un proceso donde los objetos definen sus dependencias.

El container injecta estas dependencias cuando crea los objetos beans. Este proceso es lo inverso a que un bean por si mismo controle la instanciación o localización de sus dependencias usando la construcción directa de las clases o algún mecanismo como el patrón service locator.

beans: representan la columna vertebral de las aplicaciones del usuario. Y son las gestionadas por el container. El bean es un objeto que es intanciado, ensamblado y gestionado. Los beans y sus dependencias son reflejados (reflected) en la metadata de la configuración usado por el container.

Spring Framework IoC Container

Packages org.springframework.beans y org.springframework.context son la base del framework.

La interfaz BeanFactory provee mecanismos de configuración.

El ApplicationContext agrega funcionalidad específica (enterprice-specific) e incluye al Bean Factory.

El Container

La interfaz  representa al contenedoe Spring IoC, es el responsable de instanciar, configurar y ensamblar los antes mencionados beans.

El contenedor obtiene las instrucciones de que objetos instanciar, configurar y ensamblar leyendo la metadata de configuración (en XML, annotations or código Java).  La configuración indica los objetos que componen la aplicación y sus interdependencias entre ellos.

 

 

 

 

SOAP vs REST

Por definición REST es un estilo arquitectonico, mientras que SOAP es un protocolo. Ambos constituyen soluciones para la computación distribuida.

Asi, SOAP, es un protocolo estandarizado para el intercambio de mensajes basados en XML. A sido dominante en la Arquitectura Orientada a Servicios – SOA. Utiliza varios protocolos de transporte como HTTP (permite pasar a través de firewalls y proxies) y SMTP.

Sigue leyendo

REST : producir Json

Se pueden construir los beans con jaxb annotations:

@XmlRootElement
@GET 
@Produces("application/json")

 

parte 1:

@Path("/hello")
public class HelloWorldService {
 
 @GET
 @Path("/{param}")
 public Response getMsg(@PathParam("param") String msg) {
    String output = "Jersey say : " + msg;
    return Response.status(200).entity(output).build();
 }
 
 @GET
 @Path("/get")
 @Produces(MediaType.APPLICATION_JSON)
 public Product getProductInJSON(){
    Product product = new Product();
    product.setName("iPad 3");
    product.setQty(999);
    return product;
 }
 
 @POST
 @Path("/post")
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
public Response createProductInJSON(Product product) {
    String result = "Product created : " + product;
    return Response.status(201).entity(result).build();
}
}

 

parte 2:

@Produces("application/json")
@XmlRootElement(name="Product")
public class Product {
  String name;
  int qty;
  public String getName() {
     return name;
  }
  public void setName(String name) {
     this.name = name;
  }
  public int getQty() {
     return qty;
  }
  public void setQty(int qty) {
     this.qty = qty;
  }
}

 

@Produces("application/json")
@XmlRootElement(name="Product")

 

 

 

 

Recordando al Voyager 1

y su hermano Voyager 2, por qué no.

El Voyager 1 es una sonda espacial destinada a explorar el sistema solar. Un objetivo más que ambisioso sino imposible.

View of Voyager 1, with its booms deploying instruments and RTGs extending to the right and left, respectively. The golden record, included to communicate with extraterrestrials, is below the high-gain antenna.

View of Voyager 1, with its booms deploying instruments and RTGs extending to the right and left, respectively. The golden record, included to communicate with extraterrestrials, is below the high-gain antenna. from the Wikimedia Common

Fue lanzada por la NASA el 5 de septiembre de 1977, es decir que lleva 36 años y 26 días (a la fecha de esta publicación) de funcionamiento!

Actualmente se encuentra 125.75 AU (1.881×1010 km) del Sol (25 September 2013). Con lo cual es la máquina más lejana construida por el hombre.

Una de las máquinas con más vida útil que el ser humano haya construido, y casi con seguridad la máquina computacional con más vida operativa jamas construida.

Como parte del Programa Voyager su objetivo más ambisioso fué pasar la heliopausa y entrar en el medio interestelar.

En Septiembre 12, de 2013, la NASA anunció que la Voyager 1 había cruzado la heliopausa y entrado en el espacio interestelar en August 25, de 2012, convirtiendose en la primer máquina hecha por el hombre en lograrlo.[6][7][8][9][10][11] Para 2013, la sonda se desplaza a una velocidad relativa al Sol de aproximadamente  17 km/s (38,000 mph; 61,000 km/h).[12]  Se espera que la sonda continue su misión hasta 2025, cuando su generador no pueda abastecerla de la energía necesaria para operar sus intrumentos.

En su momento el estado-del-arte era usar disquetes de 8 pulgadas . Pero Voyager 1 y 2 son de una época incluso anterior y, siendo 19 mil millones kilometros de distancia, no se pueden hacer reparaciones ni actualizaciones.
Las computadoras de a bordo de las sondas Voyager disponen 69.63 kilobytes de memoria , en total. Equivalente a un archivo jpeg medio de Internet. Los datos científicos de las sondas está codificado en digital en antiguas pistas de cinta en lugar de lo que sea la unidad de estado sólido. Una vez que se ha transmitido a la Tierra , la nave tiene que escribir sobre los datos antiguos con el fin de tener suficiente espacio para nuevas observaciones.

spacecraft diagram

spacecraft diagram

Las máquinas Voyager son capaces de ejecutar sobre 81.000 instrucciones por segundo . Ejemplo, un teléfono inteligente probablemente es cerca de 7.500 veces más rápido que eso. Ellos transmiten sus datos a la Tierra a 160 bits por segundo. Y una conexión de acceso telefónico lenta puede ofrecer, al menos, 20.000 bits por segundo .

Las sondas Voyager siempre están enviando una señal. Voyager 1 tiene un transmisor de 22.4 vatios – algo equivalente a una bombilla de heladera, la potencia se ha reducido a aproximadamente a 0,1 mm de mil millonésima de un Watt. La NASA tiene que utilizar su mayor antena, una antena de 70 metros , o combinar dos antenas de 34 metros , sólo para escuchar las Voyager.

El equipo científico se comunica con el Voyager 1 y 2 todos los días y por lo general necesita por lo menos cuatro horas para ejecutar a través de todas sus pruebas de seguridad y de salud. En un buen día , los investigadores pueden pasar el doble de tiempo enviar comandos y recibir datos. El control original de las naves espaciales y el software de análisis fue escrita en Fortran 5 (posteriormente portado a Fortran 77 ) . Algunos de los software se encuentra todavía en Fortran , aunque otras piezas han sido portados a un tanto más moderno C.

The "family portrait" of the Solar System

The «family portrait» of the Solar System taken by Voyager 1. Wikimedia Commons

Referencias:

Wikipedia[1…12]

Adam Mann. Interestellar 8-Track:How Voyager´s Vintage Tech Keeps Running. Wired.

Datos

Mission type Planetary, heliosphere, and interstellar medium exploration
Operator NASA / JPL
COSPAR ID 1977-084A[1]
SATCAT № 10321[2]
Website voyager.jpl.nasa.gov
Mission duration 36 years and 20 days elapsed
Planetary mission: 3 years, 3 months, 9 days
Interstellar mission: 32 years, 9 months, and 11 days elapsed (continuing)
Spacecraft properties
Manufacturer Jet Propulsion Laboratory
Launch mass 721.9 kilograms (1,592 lb)
Power 420 watts
Start of mission
Launch date September 5, 1977, 12:56:00 UTC
Rocket Titan IIIE
Launch site Cape Canaveral LC-41
Flyby of Jupiter
Closest approach March 5, 1979
Distance 349,000 kilometers (217,000 mi)
Flyby of Saturn
Closest approach November 12, 1980
Distance 124,000 kilometers (77,000 mi)

Multiplos del byte & comparaciones

De qué hablamos cuando nos referimos Kilobytes o Megabytes?

En primer lugar son multiplos de la unidad byte para la información digital.

Un byte consite de 8 bits. Historicamente, el byte es el número de bits usados para condificar un caracter de texto en una computadora y por esta razón es la unidad más pequeña direccionable de memoria en muchas arquitecturas.

ejemplo:

1 ZB = 1000000000000000000000bytes = 10007bytes = 1000exabytes = 1 billion terabytes.
1 EB = 1000000000000000000bytes = 10006bytes = 1000petabytes = 1 billion gigabytes.

Sigue leyendo

Long Tail distribution in a nutshell

The idea of the long tail distribution arrives for the first time thanks to an article of Wired written by Chris Anderson (2004).

It is an statistic distribution -Zipf, Power Law, Pareto distribution, Levy-.

On this distribution a high frequency of «transactions» is followed by a low frequency or low amplitud that diminish gradually in a population.

recomended link:

http://www.longtail.com/about.html

John McCarthy

Was a B.S. in Mathematics in 1948 at Caltech. It was at Caltech that he attended a lecture by John Von Neumann that inspired his future endeavors. McCarthy initially continued his studies at Caltech. He received a Ph.D. in Mathematics from Princeton University in 1951 as a student of Solomon Lefschetz. [1]

In 1961, J.  McCarthy enviosioned that «computation may someday be organized as a public utility»[2].

McCarthy is also credited with developing an early form of time-sharing. His colleague Lester Earnest told the Los Angeles Times: «The Internet would not have happened nearly as soon as it did except for the fact that John initiated the development of time-sharing systems. We keep inventing new names for time-sharing. It came to be called servers.… Now we call it cloud computing. That is still just time-sharing. John started it.»[1]

Somehow this vision foretell the actual cloud computing paradigm and IT trend.

But the reason of cloud computing success is based on the fact that users will access Internet services over lightweight portable devices rather than through some descendant of the traditional desktop PC.

Cloud Computing is moving computing and data away from from desktop and portable PCs into large data centers.

This trend creates a new industry were services will be deliver over Internet.

It is amazing that in the early sixties John could visualize such an idea!

[1] wikipedia.

[2] Dikaiakos, Pallis, Katsaros, Mehra, Vakali. Cloud Computing. Distributed Internet Computing for IT and Scientific Research. IEEE Internet Computing. Publicshed by the IEEE Computer Society. Sept/Oct 2009.

Nature of our Universe

Some facts about the Gell-Mann spech at TED-Physics-The Edge of Knowledge.

  • Existance of a basic unified theory
  • Steps toward unification
  • Symetry

Self-Similarity across scales

Newton said (from Newton’s Optiks):

«For Nature is very consonant and conformable to her self»

Three principles–the conformability of nature to herself, the applicability of the criterion of simplicity, and the «unreasonable effectiveness» of certain parts of mahtematics in describing phisical realit– are thus consequences of the underlaying law of the elementary particles and their interactions. Those three principles need not be assumed as separate metaphisical postulates. instead, they are emergent properties of the fundamentals laws of physics.

¿Por qué necesitamos un superordenador… en la Luna?

título original: «Why We Need a Supercomputer on the Moon»

by Robert McMillan. 10/02/2012  (original)

El tema de este artículo es indudablemente futurista y puede que nunca llegue a realizarse. Aunque no deja de ser interesante, pues nos permite pensar sobre las razones de la viabilidad y utilidad de un proyecto de semejante envergadura. Dado que los problemas que se mencionan son concretos  y permanecen abiertos. La solución planteada aunque hoy imposible (y tal vez permanezca así por una, dos o más décadas)  describe ciertas tecnologías que ya están en fase de exploración. Y a su vez como todo enorme problema, puede dividirse en cuestiones más chicas, que aún así plantean desafíos complejos.

Sigue leyendo

Diseña un sitio como este con WordPress.com
Comenzar