Latest Entries »

Rama de la economía que utiliza métodos estadísticos para estudiar y cuantificar mediante datos reales los fenómenos económicos, brindando así indicios sobre la pertinencia de las teorías científicas elaboradas por los economistas .

A word of explanation regarding the term econometrics may be in order. Its definition is implied in thestatement of the scope of the [Econometric] Society, in Section I of the Constitution, which reads: “The  Econometric Society is an international society for the advancement of economic theory in its relation to statistics and mathematics…Its main object shall be to promote studies that aim at a unification of the theoretical-quantitative and the empirical-quantitative approach to economic problems…” But there are several aspects of the quantitative approach to economics, and no single one of these aspects, taken by itself, should be confounded with econometrics. Thus, econometrics is by no means the same as economic statistics. Nor is it identical with what we call general economic theory, although a considerable portion of this theory has a definitely quantitative character. Nor should econometrics be taken as synonomous with the application of mathematics to economics. Experience has shown that each of these three view-points, that of statistics, economic theory, and mathematics, is a necessary, but not by itself a suficient, condition for a real understanding of the quantitative relations in modern economic life. It is the unification of all three that is powerful. And it is this unification that constitutes econometrics .

 

Para que sirve la econometria :

  • Prediccion
  • Estimacion de Relaciones Causales
  • Contraste de Teorias Economicas
  • Evaluacion de Politicas

Hay dos características que distinguen la Econometría de lo que sería la  estadística aplicada a la economía :

  1. Los datos económicos son no experimentales.  No podemos clasificar a los individuos o las empresas como si fueran “grupos experimentales” y “grupos de control”. Los individuos son  libres y se auto-seleccionan en grupos  (nivel educativo, ocupación,  etc. ). Precisamente la Econometría tiene en cuenta esta circunstancia,  es decir tiene en cuenta el comportamiento del individuo, sus decisiones.
  2. Los modelos económicos (simples o sofisticados) son cruciales para interpretar los resultados estadísticos en las aplicaciones econométricas. 

De lo espuesto anteriormente se pueden plantear algunas preguntas :

  • ¿Cómo y por qué las matemáticas y la estadística se han extendido a la economía? 
  • ¿El uso de las matemáticas y la estadística, qué problemas económicos han podido resolver, o son capaces de hacerlo? ¿Qué impacto metodológico, si lo hubiere, ha dado origen la aplicación de esos métodos a la econometría y al pensamiento económico?,
  • ¿cómo ha evolucionado la econometría? y ¿Podrá la econometría, en base a la evolución de sus métodos, eventualmente alcanzar su objetivo de hacer del análisis económico un proceso científico completo?

Los primeros Econometristas : Ragnard Frisch, Jan Tinbergen, Oskar Morgenstern .

 

 

 

 

 

 

 

 

 

 

 

 

 

La historia de C

El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre “C” porque muchas de sus características fueron tomadas de un lenguaje anterior llamado “B“.

Hay muchas leyendas acerca del origen de C y el sistema operativo con el que está íntimamente relacionado, Unix. Algunas de ellas son:

  • El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides. Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no teníasistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador. Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.
  • La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.

En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).

Ritchie diseñó, desde 1970 a 1972 junto a Brian Kernighan, un lenguaje que permitía realizar una programación estructurada en la que se podían economizar las expresiones a usar y con el que los desarrolladores podrían contar con un buen conjunto de operadores y tipos de datos para programar tanto en alto como en bajo nivel de manera simultánea. Ente sus características:

  • Núcleo de lenguaje simple que incluye funciones matemáticas y de manejo de archivos proporcionadas por bibliotecas
  • Lenguaje flexible que permitía programar de manera estructurada y no estructurada
  • Inclusión de un sistema de tipos que impedía la realización de operaciones sin sentido
  • Acceso a memoria de bajo nivel mediante el uso de punteros
  • Conjunto reducido de palabras reservadas
  • Paso de parámetros a funciones por valor
  • Tipos de datos agregados (struct) que permitían combinar, bajo un mismo tipo, datos de tipos distintos y manejarlos como uno solo.

El lenguaje C ofrecía diversos tipos de datos: “CHAR” (carácter), “INT” (enteros), “FLOAT” (números reales en precisión simple), y “DOUBLE” (números reales en precisión doble) a los que posteriormente se añadieron los tipos “SHORT” (números enteros de tamaño menor a un INT), “LONG” (números enteros de tamaño mayor a un INT), “UNSIGNED” (Enteros sin signo), y “ENUMERACIONES” que junto a las estructuras, las uniones y las tablas y matrices componían un variado juego de tipos de datos con los que abordar múltiples problemas.

Veamos un par de ejemplos :


/* Este es un ejemplo muy elelemtal de programa C 	*/
/* multiplica dos matrices, utilizando indices		*/

#include <stdio.h>

/* Definimos un tipo: matriz cuadrada de 2x2 */
typedef	int matriz2x2[2][2];

/* Declaramos las matrices a multiplicar */
matriz2x2 A ;
matriz2x2 B ;

/* Declaramos e inicializamos la matriz resultado */
matriz2x2 R = {0, 0, 0, 0};

/* Declaramos prototipos de funciones utilizadas en el programa */
void Entra_Mat2x2( matriz2x2 M );
void Mult_Mat2x2( matriz2x2 H, matriz2x2 F, matriz2x2 G);
void Visu_Mat2x2( matriz2x2 M );
main()
{

	/* Introducimos valores de las matrices a multiplicar */
	Entra_Mat2x2( A );
	Entra_Mat2x2( B );

	/* Multiplicamos matrices */
	Mult_Mat2x2( A, B, R );

	/* Visualizamos matriz resultado */
	Visu_Mat2x2( R );

}

/* Funcion para entrar por teclado los valores de una matriz	*/
/* Cuadrada de dimension 2					*/
void Entra_Mat2x2( matriz2x2 M )
{
	int i,j;

	/* Recorremos la matriz para introducir los valores */
	/* Fijate en los valores de los indices */
	for (i=0; i<2; i++) {
		printf("\n");
		for(j=0; j<2; j++) {
			printf("(%d,%d) = ",i,j);
			scanf("%d",&M[i][j]);
		}
	}

	printf("\n\n");

	return;

}

/* Funcion que multiplica dos matrices cuadardas de dimension 2 */
/* A y B son las matrices a multiplicar 			*/
/* En R se deposita el resultado 				*/
void Mult_Mat2x2( matriz2x2 A, matriz2x2 B, matriz2x2 R )
{
	int i, j, q;

	/* Bucles anidados para calcular el producto */
	/* Fijate en los indices i y j */
	for (i=0; i<2; i++)
		for (j=0; j<2; j++)
			for (q=0; q<2; q++)
				R[i][j] += A[i][q]*B[q][j];

	return;

}

/* Esta es una funcion que visualiza el contenido de una matriz	*/
/* Cuadrada de dimension 2					*/
void Visu_Mat2x2( matriz2x2 M )
{
	int i,j;

	/* Bucle para recorrer la matriz a visualizar */
	for (i=0; i<2; i++) {
		printf("\n");
		for (j=0; j<2; j++)
			printf("(%d,%d) = %d ",i,j,M[i][j]);
	}

	printf("\n\n");

	return;

}

Y ahora su version usando punteros :


/* Este es un ejemplo muy elelemtal de programa C 	*/
/* Hace lo mismo que ejemplo1, solo que utiliza		*/
/* punteros para recorrer las matrices			*/

#include <stdio.h>

/* Definimos un tipo: matriz cuadrada de 2x2 */
typedef	int matriz2x2[2][2];

/* Declaramos las matrices a multiplicar */
matriz2x2 A ;
matriz2x2 B ;

/* Declaramos e inicializamos la matriz resultado */
matriz2x2 R = {0, 0, 0, 0};

/* Declaramos prototipos de funciones utilizadas en el programa */
void Entra_Mat2x2( matriz2x2 M );
void Mult_Mat2x2( matriz2x2 H, matriz2x2 F, matriz2x2 G);
void Visu_Mat2x2( matriz2x2 M );
main()
{

	/* Introducimos valores de las matrices a multiplicar */
	Entra_Mat2x2( A );
	Entra_Mat2x2( B );

	/* Multiplicamos matrices */
	Mult_Mat2x2( A, B, R );

	/* Visualizamos matriz resultado */
	Visu_Mat2x2( R );

}

/* Funcion para entrar por teclado los valores de una matriz	*/
/* Cuadrada de dimension 2					*/
void Entra_Mat2x2( matriz2x2 M )
{
	int i,j;
	int *p;

	/* Bucle de lectura de valores de la matriz */
	p = &M[0][0];
	for (i=0; i<2; i++) {
		printf("\n");
		for(j=0; j<2; j++) {
			printf("(%d,%d) = ",i,j);
			scanf("%d",p);
			p++;
		}
	}

	printf("\n\n");

	return;

}

/* Funcion que multiplica dos matrices cuadardas de dimension 2 */
/* A y B son las matrices a multiplicar 			*/
/* En R se deposita el resultado 				*/
void Mult_Mat2x2( matriz2x2 A, matriz2x2 B, matriz2x2 R )
{
	int i, j, q;
	int *p_A, *p_B, *p_R, *aux;

	p_R = (int *)R; /* Esto es un ejemplo de cast */

	/* Bucles anidados que realizan el producto entre matrices */
	for (i=0; i<2; i++) {
		p_A = (int *)A + i*2; /* Aritmetica de punteros!! */
		for (j=0; j<2; j++) {
			aux = p_A;
			p_B = (int *)B + j; /* Aritmetica de punteros !! */
			for (q=0; q<2; q++) {
				(*p_R) += (*aux) * (*p_B);
				aux++;
				p_B += 2;
			}
			p_R++;
		}
	}

	return;

}

/* Esta es una funcion que visualiza el contenido de una matriz	*/
/* Cuadrada de dimension 2					*/
void Visu_Mat2x2( matriz2x2 M )
{
	int i,j;
	int *p;

	p = (int *)M;

	/* Bucle para visualizar los valores de la matriz */
	for (i=0; i<2; i++) {
		printf("\n");
		for (j=0; j<2; j++)
			printf("(%d,%d) = %d ",i,j,*p++);
	}

	printf("\n\n");

	return;

}


El Lenguaje C se ha utilizado mucho para para la programación en sistemas UNIX aunque también se ha utilizado en el desarrollo de sistemas operativos como Windows o GNU/Linux y en el desarrollo de aplicaciones de escritorio como GIMP. Tampoco es raro verlo en sistemas empotrados (control de procesos industriales, ascensores, sistemas de monitorización, etc) o como base de kits de desarrollo de microcontroladores (abstrayendo al usuario de la programación en ensamblador). Además, como decía al inicio, es un lenguaje muy especial dentro del mundo de la ingeniería puesto que se sigue enseñando en los primeros cursos de estos estudios y nunca ha dejado de ser utilizado.

 

La primera pregunta natural seria :

  • ¿ Como instalo software en linux?En el mundo Linux hay dos formas naturales de hacer este proceso de instalacion, la primera es instalar los paquetes a partir del codigo fuente (http://www.tuxfiles.org/linuxhelp/softinstall.html) , la otra forma es usar algun gestor de paquetes (Con él podemos instalar muchisimos programas de forma inmediata usando los repositoriosdesde Internet o desde un CD. Por ejemplo, en Ubuntu puedes instalar aplicaciones yendo alCentro de software (o también instalando el gestor de paquetes Synaptic)).

    Las ventajas que tiene usar el sistema de paquetes es que te permite instalar, desinstalar y actualizar los programas de forma muy sencilla, ya que cada programa está formado por uno o varios paquetes que el gestor de paquetes controla que funcionen bien, además si la aplicación que instalas depende de otros paquetes extra, el gestor los añadirá automáticamente.

    Para tener un  mejor manejo y comprension de esto es sufiente con leer la documentacion presentada por la gente de Ubuntu .

    https://help.ubuntu.com/community/Repositories/Ubuntu

     

La pregunta inicial es para que o porque cambiariamos nuestro sistema operativo – que en la mayoria de los casos es windows – a uno nuevo, la respuesta a esta pregunta se repite en muchos articulos que se pueden encontrar facilmente. Tal vez la decision es mas sencilla de tomar si es que tenemos una necesidad . En la mayoria de los casos esa necesidad es academica , por el simple hecho de que en una tesis no podemos usar software pirata . Analizemos el caso de alguien que desea desarrollar el tema de Mecanica de Fluidos Computacional (http://en.wikipedia.org/wiki/Computational_fluid_dynamics). En esta rama de la matematica ampliamente usada y con muchos campos de aplicacion el desarrollo de una simulacion es primordial para poder mostrar los resultados . Para ello una de las herramientas que se usa (casi por defecto)  es matlab, pero como es de esperarse no es la unica . Independiente de la opcion que se tome para desarrollar una simulacion de este tipo, el mejor escenario es desarrollarla sobre un entorno linux .

Este maravilloso sistema operativo se lo debemos a muchas personas, pero a mi parecer deberiamos mencionar a los siguientes 4 :

  1. Brian Kernigham : http://www.cs.princeton.edu/~bwk/


  2. Dennis Ritchie : 
  3. Linus Torvalds
  4. Richard Stallman

Lo primero que deberiamos aprender es como manejar el sistema operativo desde la consola :

 

Esta consola nos va otorgar acceso a un ambiente de trabajo :

  • Nombre de usuario
  • Directorio Personal
  • Shell

Esta informacion es almacenada en algunas variables del sistema :

  • USER
  • HOME
  • SHELL

Por jemplo , las podemos consultar de la siguiente manera

  • echo $USER
  • echo $HOME
  • echo $SHELL

Una manera grafica de entender el sistema de archivos es la siguiente :

Algunos Comando Basicos de la Shell :

  • ls : Lista el contenido de un directorio
  • ls -l : Muestra una lista con mas detalle
  • cd <path>  : Cambia de directorio
  • cd ..  : Se ubica en el directorio inmediato superior
  • pwd : Muestra el actual directorio de trabajo
  • clear : Limpia la pantalla
  • mkdir <dirname> : Crea un directorio
  • rmdir <dirname> : Remueve (Borra) un directorio
  • rm <filename>  : Remueve (Borra)  un archivo
  • mv <src> <dest> : Mueve un archivo
  • cp <src> <dest> : Copia un archivo
  • ln -s <src> <link> : Crea un link
  • touch <filename> : Crea un archivo y regresa a la consola .
  • ps : Muestra todos los procesos
  • ps u : Muestra tus procesos
  • kill <id>  : Mata el proceso con id

Una vez que ya se tiene alguna (poca, en realidad) experiencia manejando el sistema operativo ya se tiene que comenzar a editar , para ello existen muchas  opciones (http://en.wikipedia.org/wiki/Editor_war) . Las mas comunes en la comunidad hacker son las siguientes :

  • Emacs : Extensible y personalisable
  • Vi : Ubicuo : Disponible para todos los sistemas (Muy conocido por su rapidez y ligereza)
  • Nano : Simple, no se necesita recordar nada.

 

Con esto ya estamos listos para programar.

Un componente básico de los algoritmos es la iteración. Esta palabra implica repetición, ya que iterar significa ejecutar repetidamente  algunos pasos elementales de un algoritmo acercándose, paso a paso, a la solución. Para realizar un programa de ordenador es muy  conveniente localizar los pasos que se repiten y anidarlos dentro de un sistema iterativo.

La opción al uso de algoritmos iterativos es el uso de la recursividad en funciones. Estas implican una escritura más sencilla (corta), tanto para su implementación como para su entendimiento, pero en contraparte, utilizan mucho más recursos de sistema que una iteración debido a que necesitan, además del uso del procesador, la pila del sistema para “apilar” los diversos ámbitos de cada función.

Ejemplo de uso de un algoritmo iterativo en C

int
gcd_iter(int u, int v) {
  int t;
  while (v) {
    t = u; 
    u = v; 
    v = t % v;
  }
  return u < 0 ? -u : u; /* abs(u) */
}

Ejemplo de uso de un algoritmo iterativo en Fortran

subroutine gcd_iter(value, u, v)
  integer, intent(out) :: value
  integer, intent(inout) :: u, v
  integer :: t
 
  do while( v /= 0 )
     t = u
     u = v
     v = mod(t, v)
  enddo
  value = abs(u)
end subroutine gcd_iter

Ejemplo de uso de un algoritmo iterativo en python

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q,r = b/a,b%a; m,n = x-u*q,y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
    return b, x, y

Costes de Tiempo y Espacio

 La caracterıstica basica que debe tener un algoritmo es que sea correcto, es decir, que produzca el resultado deseado en tiempo finito.  Adicionalmente puede interesarnos que sea claro, que esté bien estructurado, que sea fácil de usar, que sea fácil de implementar y que sea eficiente.

Entendemos por eficiencia de un algoritmo la cantidad de recursos de cómputo que requiere; es decir, cúal es su tiempo de ejecución y qué cantidad de memoria utiliza. A la cantidad de tiempo que requiere la ejecución de un cierto algoritmo se le suele llamar coste en tiempo mientras que a la cantidad de memoria que requiere se le suele llamar coste en espacio.
Es evidente que conviene buscar algoritmos correctos que mantengan tan bajo como sea posible el consumo de recursos que hacen del  sistema, es decir, que sean lo más eficientes posible. Cabe hacer notar que el concepto de eficiencia de un algoritmo es un concepto relativo, esto quiere decir que ante dos algoritmos correctos que resuelven el mismo problema, uno es más eficiente que otro si consume menos recursos. Por tanto, podemos observar que el concepto de eficiencia y en consecuencia el concepto de coste nos permitirá comparar  distintos algoritmos entre ellos.

En general, ¿cómo podemos elegir entre un algoritmo y otro si ambos resuelven el mismo problema?

Una posibilidad es hacerlo mediante pruebas empíricas. En este caso habría que traducir ambos algoritmos a un lenguaje de programación, realizar medidas del tiempo de ejecución de los programas cuando se aplican a un conjunto de muestras de entrada y a  partir de estas medidas intentar inferir el rendimiento de los programas. Pero este método tiene varios inconvenientes ya que los resultados dependen:

  • del subconjunto de pruebas escogidas
  • del ordenador en el que se realicen las pruebas
  • del lenguaje de programación utilizado o
  • del compilador, entre otros factores.

Además, no siempre es fácil implementar un algoritmo (algunos pueden ser muy largos o complicados), por tanto, en muchas ocasiones puede ser muy útil poder predecir cómo va a comportarse un algoritmo sin tenerlo que implementar. Para ello es conveniente analizar un algoritmo matemáticamente.

Coste de los algoritmos iterativos

Las siguientes reglas facilitan el cálculo o el análisis del coste de los algoritmos iterativos en el caso peor.

El fenómeno de la nube llegó hace tiempo para quedarse definitivamente entre nosotros. Nos facilita el trabajo y el ocio en muchos sentidos. Servicios como Dropbox trabajan en esta línea para facilitarnos el acceso remoto a nuestros archivos desde cualquier lugar del mundo y desde cualquier dispositivo con conexión a la Red. OwnCloud sigue esa filosofía pero con la particularidad indicada por su nombre: se trata de una aplicación web open source mediante la cual podremos crear nuestro almacén remoto privado, donde podremos guardar todo lo que queramos siempre que haya espacio suficiente en nuestro disco duro. De este modo, no será necesario utilizar servicios de terceros y tendremos control absoluto sobre quién accede a “nuestra nube”.

Anuncio Oficial :

Boston, MA – May 22, 2012 – ownCloud, the popular open source file sync and share project,today released version 4 of its community edition – adding innovations and enhancements that make the popular project even more flexible, secure and innovative.

ownCloud 4 – built through active community support – adds innovative features like file versioning, – which actively saves files, allowing users to “rollback” to previous versions – and a new API — giving developers an easy, stable and supported way to develop applications on top of ownCloud capabilities.

The latest version, updated from ownCloud 3 released January 30, also enables users to view Open Document Format (ODF used by LibreOffice, Apache OpenOffice and others) files – quickly and easily without having to download them – something only ownCloud offers.

In addition, ownCloud 4 includes an “experimental” feature for mounting of external file systems – including Dropbox, FTP and Google Drive as well as other popular consumer applications – enabling users to have all their file sync and share tools in a single ownCloud interface.

“Version 3 represented a great technology leap forward. As our community continues to grow, Version 4 has benefited greatly, and the result is the most innovative and flexible sync and share platform to date,” said Frank Karlitschek, founder ofownCloud. “The latest ownCloud offers features businesses and service providers have been asking for, and adds new features and applications that meet the needs of the community and will greatly enhance our upcoming commercial editions.”

With more than 450,000 users, ownCloud offers the ease-of-use of Dropbox with more flexibility and security. ownCloud users can run their own file sync and share services on their own hardware and storage, use popular public hosting and storage offerings, or both.

El protocolo TCP

¿ Que es un protocolo?

Imagina que deseas viajar alrededor del mundo , si vas para Inglaterra , debes aprender el ingles . Si te animas y vas para Alemania, entonces necesitas saber aleman. Si vas para Rusia , entonces necesitas saber ruso . Si vas para Japon, necesitas aprender japones . Si vas a viajar por todo el mundo , necesita saber todas las lenguas ? . Es logico que no, basta con saber un idioma universal , para el caso de nuestro ejemplo es el ingles.

Ahora imagina la cantidad de computadores dispersos por todo el globo terraqueo que tienen acceso a internet . Te vas a encontrar con diversos fabricantes , varias plataformas , muchos sistemas operativos , en fin . Una infinidad de caracteristicas diferentes .¿ Como hacer para que esta cantidad de maquinas puedan conversar  entre si? .

La analogia del primer parrafo es muy parecida a lo que ocurre en internet, con tanta cantidad de maquinas presentes es necesario que todas hablen un lenguaje universal . A esa lengua le damos el nombre de protocolo.

Hay varios protocolos , como el netbeui  (usado al princiop en Windows 3.11  y Windows 9x) , o ipx/spx (Red Novel) y el TCP/IP . El uso de TCP/IP como protocolo patron se debe al hecho de que es Open Source, claro tambien es rapido y estable . El modelo OSI es la guía mejor conocida y más ampliamente utilizada para la visualización de entornos de red. Los fabricantes se ajustan al modelo OSI cuando diseñan sus productos para red. Éste ofrece una descripción del funcionamiento conjunto de hardware y software de red por niveles para posibilitar las comunicaciones. El modelo también ayuda a localizar problemas proporcionando un marco de referencia que describe el supuesto funcionamiento de los componentes.

Las 7 capas del modelo OSI

Imagina que el presidente de una empresa necesita mandar una carta al presidente de otra empresa en otro continente . El escribe la carta y la manda a su secretaria, esta a su vez digita la carta en la computadora, la imprime  y la coloca en un sobre, para luego entregarsela al mensajero . El mensajero lleva la carta a la oficina de correos . El funcionario en la oficina de correos pesa la carta, le coloca un sello postal y la almacena con otras cartas dirigidas a diferentes lugares del globo terraqueo .  La cartas son separadas y encaminadas a sus respectivos lugares por el encargado. La carta es colocada en un avion  junto con otras cartas  y el avion levanta vuelo con direccion a otro continente . Al llegar el proceso inverso es realizado hasta que la carta llegue al otro presidente .

El presidente de la empresa de origen no necesita saber donde se encuentra el otro presidente . El mensajero de la empresa que recibe la  carta sera quien entregue la carta a la persona indicada , quien direccionara la carta hasta las manos del presidente para quien esta dirigida la carta .

El mensajero no sabe de que se trata la correspondencia, apenas sabe que tiene que entregarla a un determinado departamento (Administracion de la empresa) . La oficina de correo a su vez no sabe quien esta enviando la carta , ni quien es el destinatario, mucho menos el contenido de la carta .

La misma analogia sirve para un protocolo. El modelo OSI define 7 capas, donde la primera es la parte fisica de la red y la ultima es la aplicacion . Cada capa tiene una funcion en particular .

  1. Primera Capa : Fisica. Es donde esta la parte fisica de la red : tarjetas de red, cables, antenas, conectores, etc .
  2. Segunda Capa : Enlace. Responsable por la codificacion de los datos deacuerdo con el medio por donde va viajar (cable, fibra, radio, etc.)
  3. Tercera Capa : Red. Responsable por la identificacion de origen y destino de las maquinas en la red.
  4. Cuarta Capa : Transporte. Responsable de garantizar que un paquete llegue a su destino.
  5. Quinta Capa : Sesion. Identificar el aplicativo responsable por el paquete.
  6. Sexta Capa : Presentacion. Responsable del cifrado de los datos, entre otras funciones.
  7. Septima Capa : Aplicacion. Los programas.

Las Cuatro Capas de TCP/IP

  1. Primera Capa : Fisica. La capa de enlace está situada en la parte inferior de la pila. Es la responsable de transmitir y recibir porciones de información (a menudo llamdos marcos o paquetes). Dos ejemplos de protocolos de esta capa son Ethernet y el PPP (Point-to-Point Protocol, Protocolo punto a punto). Aquí se transmite la información por el medio físico (cable, etc).
  2. Segunda Capa: Red. La capa de red se sitúa encima de la capa fisica. Es la responsable de encaminar y direccionar porciones de datos. Estas porciones se llaman datagramas.Los protocolos que funcionan en esta capa son:
    • IP: protocolo que lleva el dato de un nodo a otro. Si es físicamente posible siempre llega.
    • ARP: Protocolo que averigua la mac de destino a partir de la ip
    • RARP: Protocolo que averigua la IP a partir de la mac
    • ICMP: Cuando un usuario envía datagramas a un equipo remoto y este no los recibe o los recibe mal por diversas circunstancias el protocolo ICMP se encargará de enviar un mensaje de error al host de origen.
  3. Tercera Capa : Transporte.La capa de transporte está situada encima de la capa de red. Es la encargada de asegurarse que los datos “vienen de” y “se dirigen a” los procesos correctos de un host. Los datos se manipulan en unidades, a menudo llamadas segmentos (pero a veces llamadas también datagramas). Los protocolos que funcionan en esta capa son:
    • TCP: Se encarga de comprobar que los datos que se reciben son correctos. Para ello se establece una conexión entre el emisor y el receptor que garantiza que la información sea correcta y si no lo es se vuelve a solicitar. Envía los datos en paquetes (paquete tcp). Esta comunicación se hace entre un puerto que escucha y un puerto que transmite. Estos puertos son llamados sockets.
    • UDP: Se encarga de enviar una determinada información. Esta información es llamada paquetes udp. No se establecen conexiones por lo que no se garantiza que la información llegue.
  4. Cuarta Capa : Aplicacion .La capa de aplicación está situada en la parte superior de la pila, con frecuencia se implementa en aplicaciones de usuario. Los datos de la capa de aplicación se manipulan en unidades, generalmente llamdas mensajes. Muchos protocolos (y programas asociados) forman parte de esta capa. Protocolos que funcionan en esta capa son: http, telnet, ftp, etc.

 

Aqui dejo un video para entender de manera grafica lo explicado lineas arriba .

 

 

” The Blue Waters project will deliver a supercomputer capable of sustained performance of 1 petaflop on a range of real-world science and engineering applications. It is expected to be one of the most powerful supercomputers in the world .” 

En el 2007, la Universidad de Illinois y la NCSA seleccionaron a la empresa IBM como proveedor de este proyecto, pero en el 2011 IBM interrumpio la ejecucion del proyecto afirmando que los costes asociados con el desarrollo de esta maquina son demasiado grandes .Luego de este inconveniente la empresa HPC Cray Inc se hace cargo del proyecto.

El fabricante de supercomputadoras Cray Inc. ha presentado el nuevo modelo XK6, un sistema híbrido que combina CPUs AMD y GPUs de NVIDIA, en un sistema con potencial para alcanzar un rendimiento de 50 petaflops, el más poderoso del mercado.

El supercomputador de Cray emplea interconexiones de alta velocidad Gemini junto a los nuevos microprocesadores Opteron 6200 con hasta doce núcleos de AMD y gráficas dedicadas profesionales Tesla serie 20, optimizadas para cálculos en coma flotante, funciones GPGPU y en general capaces de aprovechar las capacidades de cómputo de las GPUs.

16-core 64-bit AMD Opteron 6200 Series processors & NVIDIA Tesla X2090 GPU

El componente estrella del Cray XK6 es indudablemente la nueva Tesla de NVIDIA equipada con 6 Gbytes de memoria dedicada GDDR5, 512 núcleos CuDA siendo capaz de alcanzar un rendimiento de 665 Gigaflops en coma flotante de doble precisión para batir todos los récords en computación científica.

Frente a modelos anteriores como el XE6, Cray ha sustituido cuatro de los ocho sockets para procesadores Opteron incluyendo el mismo número de unidades Tesla. Cada nodo incluye dos chips de interconexión de alta velocidad Gemini.La red de interconexión Gemini, presentada por primera vez en un paper de Chamberlain, Franklin y Krchnavek de 1998 (Design of an optically interconnected multicomputer) es mixta, combinando tecnología de conmutación de circuitos para señales ópticas (para el transporte de datos) y conmutación de paquetes para señales electrónicas (idem para control de datos). La topología original en estos papers inciales es de tipo Banyan.

Citando al Profesor  Mark A. Franklin :

“Optical technology has long been considered appealing for constructing high-speed interconnects in digital systems. However, although optical interconnects have significantly increased bandwidths, the complexity and cost of such systems coupled with the inability of processor interfaces to cope with high optical data rates usually negates any expected bandwidth advantages. Optical component designs have been driven largely by the needs of the long distance telecommunication industry and generally do not have high levels of integration and are ill suited to the board level distances, electronic VLSI design techniques, and input-output considerations associated with microprocessors. Our research program aims at taking advantage of new developments in optical technology and exploiting these developments in the design of a multiprocessor system. We are currently designing and implementing a message-passing, optically-interconnected multiprocessor. Our focus is on bandwidth limited applications which can effectively use our GEMINI inteconnection network. This dual optical and electrical network provides high bandwidth optical paths for long data messages and a lower congestion, low latency electrical paths for short data and synchronization messages. The design goal is to exploit high integration and low cost options becoming available through the use of integrated optical switches and polymer waveguides. Finally, a significant aspect of the research concerns matching memory and interconnect bandwidths through use of a “scatter-gather” engine connected to an interleaved memory system.”

Fortran90 es, con muy pocas exepciones un superconjunto de Fortran77. Un FAQ bastante especifico es el de Michael Metcalf alojado en fortran.com . Aqui solo veremos algunas de las principales caracteristicas , o por lo menos las mas llamativas desde mi punto de vista .

Principales extensiones de  Fortran90 sobre Fortran77 son : 

  • Notacion Vectorial (Por ejemplo : X(1:N)=R(1:N)*COS(A(1:N)) )
  • Asignacion dinamica de Memoria (ALLOCATE, DEALLOCATE, …)
  • Tipos de Datos derivados y sobrecarga de operadores
  • Modulos. Son una forma eficiente de intercambiar información entre diferentes  programas y subprogramas.   También permiten agrupar funciones y subrutinas que operan sobre los mismos datos  en paquetes o “tool boxes” que pueden ser facilmente utilizados por diferentes  programas.

MODULE module-name
IMPLICIT NONE
[specification part]
CONTAINS
[internal-functions]
END MODULE module-name

  • Nuevas y modernas estructuras de Control (SELECT CASE, EXIT, …)
  • Características Útiles (date, precision, arrays, …)
  • Formato libre para escritura de código.

El codigo que sigue las reglas para escritura de fortran77 es compatible con fortran90 . Fortran77 y Fortran90 permiten escribir codigo mas rapido para que sera mas legible y asi evitar muchos errores de codificacion . Para el que recien llega a la programacion es una oportunidad para aprender un lenguaje clasico y estable . Al igual que el sistema operativo linux , Fortran es un lenguaje muy querido entre la comunidad cientifica .}

Compiladores disponibles para fortran 90/95:

  1. Pro Fortran 2012 v11.5 ( Suite for x86 or x86_64 Linux )
  2. The PathScale® EKOPath Compiler Suite
  3. PGI Accelerator Compilers
  4. GNU Gfortran : Citando a la pagina web de Gfortran

Project Objectives

We strive to provide a high quality Fortran compiler that works well on a variety of native targets. This means:

  • Conformance to Fortran standards, primarily Fortran 95, 2003, and 2008
  • Performance of executables and computational accuracy
  • Reasonable compile speed and cross compilation capability
  • Good diagnostics and debugging features
  • Legacy code support where practical.

Tutoriales y otros documentos :

  1. An Interactive Fortran 90 Programming Course
  2. Fortran 90 for the Fortran 77 Programmer
Libros :
  1. Problem solving with Fortran 90: for scientists and engineers, Springer, 1997. ISBN 0-387-98229-9
  2.  Fortran 90 Handbook, McGraw-Hill, 1992. ISBN 0-07-000406-4
  3. Fortran 90 Programming, Addison Wesley, 1994, with examples ISBN 0-201-54446-6