miércoles, 29 de agosto de 2007

Relación de agregación vs Composición II

Vamos a ver en esta ocasión las relaciones de agregación y composición tal y como se codifican. Lo vamos a hacer en php aunque la calidad de este lenguaje es inversamente proporcional a su popularidad.

Veamos el código:

class A
{
function Ver()
{
echo "Hola"."\n";
}
}

class B
{
private $InstanciaA;
function Ver()
{
$InstanciaA = new A;
$InstanciaA->Ver();
}
}

class C
{
function Ver($InstanciaA)
{
$InstanciaA->Ver();
}
}

$InstanciaA = new A();
$InstanciaB = new B();
$InstanciaC = new C();

$InstanciaB->Ver();
$InstanciaC->Ver($InstanciaA);
$InstanciaA->Ver();


Tenemos tres clases A, B y C , como ven no me he matado eligiendo los nombres. Las relaciones que se dan entre ellos son las siguientes:
Entre A y B hay una relación de composición. El tiempo de vida de la instancia $InstanciaA está limitado por el tiempo de vida de la instancia que lo contiene.
Entre A y C hay una relación de agregación. El tiempo de vida de la instancia $InstanciaA no está limitado por el tiempo de vida dela instancia que hace uso de él.

Si ejecutásemos el script mediante "php test.php" el resultado sería el siguiente:
Hola
Hola
Hola

Tan cordial salida es debida a que la $InstanciaB hace uso de la $InstanciaA para ejecutar la salida por pantalla, una vez termina el tiempo de vida de $InstanciaB ambas desaparecen.
El segudo 'Hola' viene dado por la $InstanciaC que usa la $InstanciaA para la producir la salida , el último saludo proviene de $InstanciaA que ha sobrevivido a $InstanciaC.

martes, 28 de agosto de 2007

Romanescu la verdura fractal

La primera vez que vi esta increíble verdura fue en Getxo en una frutería de barrio y me quedé totalmente fascinado.
El romanescu es un cruce entre brécol y coliflor, tiene una clara forma fractal muy fácil de identificar. Podemos ver como se compone de una serie de 'conos' y estos a su vez de otros más pequeños inscritos en él.
¿Pero qué es la geometría fractal? Un objeto de forma fratal tiene una estructura que se repite en diferentes escalas. Esta geometría podría animarnos incluso a interpretar este objeto mediante un modelo recursivo. Esto es, un modelo cuya función es llamada una y otra vez por si misma hasta un límite predefinido.
Otra curiosa propiedad es que si calculásemos su volumen obtendríamos un valor finito sin embargo su superficie tiende a infinito.

Para saber más:
http://es.wikipedia.org/wiki/Fractal
http://es.wikipedia.org/wiki/Recursividad

domingo, 26 de agosto de 2007

Vida en el espacio

Este vídeo es espectacular, se trata de escenas de la vida cotidiana de dos astronautas en la ISS. Muy entretenido y recomendable.

Virtualización de un servidor servlet

Recientemente he instalado tanto el entorno de desarrollo de java como el servidor de aplicaciones en mi virtualización con debian, estos son los pasos:

  • Copiar el fichero al directorio /opt
  • Dar permisos de ejecucion chmod 700
  • Ejecutar el fichero ./
  • Me falló un paquete así que lo instalo apt-get install libstdc++5
  • Vuelvo a ejecutar fichero ./
A partir de aquí se reflejan las contestaciones que se dan a las diferentes cuestiones que se plantean en el proceso de instalación:
  • Decimos 'yes' a las condiciones de instalación.
  • Dejamos el directorio de instalacion por defecto '/opt/SDK'
  • Ponemos la cuenta de administrador dejamos por ejemplo usuario=admin y password = adminadmin con usuario y contraseña
  • Ponemos el fichero .asadminpass con fichero de password
  • Puerto de administracion el 4848
  • Puerto HTTP el 8080
  • Puerto HTTPS el 8181
  • Es una instalacion nueva y no queremos actualizar ninguna version previa
  • Ponemos que queremos configurar el Project Open ESB Startet Kit
  • Ponemos que queremos configurar Sun Java System Access Manager 7.1
  • Ponemos que queremos configurar Portlet Container 1.0
  • Nos pregunta si queremos comenzar la instalacion y le indicamos 'Install Now' , comienza la instalación
  • Finaliza la instalación y se nos comunica que:
  • file:///opt/SDK/docs/about.html
  • Que se puede arrancar la aplicacion en /opt/SDK/bin/asadmin start-domain domain1
  • Y que la consola de administración está es http://localhost:4848
  • Apretamos 'enter' y terminamos con la instalción del programa.

sábado, 25 de agosto de 2007

Tamaño relativo de los planetas

Este vídeo es impresionante, es una comparación de diversos astros según su tamaño. Se te pone la piel de gallina ver que tu enorme planeta es apena una piedrita en medio del espacio.

jueves, 23 de agosto de 2007

Los HOYGAN

Se llama HOYGAN a las personas que participan activamente en internet pero debido a múltiples razones tienen una gran cantidad de faltas de ortografía. También tienen algunos problemas con el estilo a la hora de escribir, por ejemplo lo redactan todo en mayúsculas o bien parece que están mandando un SMS.
Pero bueno, al menos participan. Y no son simplemente unos meros espectadores.
Al otro lado tenemos los elitistas, gente que es intratable y se cree demasiado bueno para tener en consideración a personas con un 'nivel' inferior al suyo , lo malo es que estos se encuentran en cualquier sitio.

Más información:
http://www.hoygan.info/

Estos son dos que se han encontrado en la vida real:
http://historiasydemasparanoias.blogspot.com/2007/08/la-nota.html
http://historiasydemasparanoias.blogspot.com/2007/08/un-anuncio.html

Sólo manejamos cuatro objetos al mismo tiempo

Unas investigaciones han demostrado que el hombre medio es sólo capaz de manejar cuatro objetos al mismo tiempo.
Una razón más para justificar la realización de la representación gráfica de sistemas complejos. A partir de este estudio podemos decir que un sistema complejo es todo aquel que se compone de más de cuatro objetos.
Hay gente que tiene mayor capacidad de manejo de conjuntos de objetos pero no se pueden planificar trabajos basados en esta habilidad.

Más en:
http://www.amazings.com/ciencia/noticias/230807d.html

Ley de protección de datos y proveedores de servicios

Hay muchas organizaciones que tiene sites que está alojadas físicamente en servidores situados en los EEUU. Quizás lo hagan ignorándolo o no , pero está incumpliendo la ley de protección de datos.
No se pueden alojar datos de caracter personal en ordenadores situados fuera de las frontera de la Unión Europea salvo un una serie de países que deben cumplir una serie de condiciones de seguridad. De esta lista está excluido la gran mayoría de los servidores de los EEUU, salvo en un puñado de máquinas el resto no asegura cumplir con las leyes europeas.
Así que ya sabe, si tiene su web ( con datos personales ) fuera del territorio de la Unión Europea tiene altas posibilidades de estar incumpliendo la ley, peor aún que las facturas le lleguen de una empresa europea no implica que esta tenga servidores en territorio europeo y por lo tanto que cumpla con la ley.
A todo esto. ¿Estarán las empresas de telefonía y marketing cumpliendo con la ley? ¿O con sus actividades de deslocalización además de jugar con las leyes laborales de los países de sus clientes también estarán jugando con sus leyes sobre protección de datos?

domingo, 19 de agosto de 2007

Robot tipo beam

En robótica hay unos tipos de robots que me llaman mucho la atención, son los beam . Son robots que explotan la electrónica analógica al máximo , en estos no encontramos microcontroladores sino que toda la lógica está cableada mediante circuitos analógicos.
Estos tienen la ventaja de que son muy sencillos en su diseño y tienen una gran robustez. Hay muchos ejemplos de estos tipos de robots en internet ya que la complejidad y coste de los elementos a usar está a la alcance de todos.

Vemos un vídeo de un tipo de un tipo de robot beam especial , es el beam solar. Este tipo solo tiene la energía solar como fuente de alimentación.





Para ver más:
http://en.wikipedia.org/wiki/BEAM_robotics

Obtener el idioma por defecto de un cliente web en PHP

Para obtener los idiomas por defecto que quiere usar un usuario web debemos obtener la lista de idiomas deseados por este.
En php tenemos una variable de entorno que podemos utilizar, es:
HTTP_ACCEPT_LANGUAGE
para obtener la lista de idiomas debemos ejecutar la sentencia
getenv("HTTP_ACCEPT_LANGUAGE");
Por ejemplo, para mi configuración se devuelve
es-es,es;q=0.8,en-us;q=0.6,en;q=0.4,eu;q=0.2
Tenemos un vector con una dupla de datos , cada dupla está separado por una coma ',' y los elementos de cada dupla están separados por punto y coma ';'.
El primer elemento de la dupla es el nombre del idioma y el segundo indica el interés del usuario por este, el valor que indica q (q=0.6) varía entre 1 y 0 , siendo 1 el elemento de más peso. Hay una dupla que no tiene segundo elemento y es el primero , en este caso asumimos que es el elemento más importante (q=1).

A la hora de elegir el idioma con el que mostrar la aplicación deberíamos tener varias cosas en consideración.
  • La primera la lista de idiomas disponibles en la aplicación.
  • La segunda la lista de idiomas que tiene el usuario elegidos en su navegador.
  • Por último debemos elegir el idiomas mejor posicionado en la lista de idiomas del navegador que tengamos en nuestro sistema.

Por regla general y después de realizar muchas pruebas se puede generalizar que el orden en el que obtenemos el vector de idiomas es el orden deseado por el usuario así que nos podemos ahorrar el trabajo de ordenar la lista de idiomas por el segundo elemento de la dupla.

sábado, 18 de agosto de 2007

Buenos programadores

Hay todo un debate sobre lo que debe ser un buen programador. Para mi un buen programador es comparable con un buen albañil. En el fondo no son dos profesiones tan diferentes. Para unos la materia prima es el ladrillo y para el otro el código. Y ambos participan activamente en la consecución de un proyecto de construcción.

Estas son algunas características que deben tener los buenos programadores:
  • Debe compartir su conocimiento y hacerlo accesible. Muchas veces nos encontramos con 'profesionales' que ocultan sus conocimientos y hacen que su producto sea difícil de seguir. Un producto de este tipo no es bueno y produce gastos añadidos en el mantenimiento con lo cual reduce la rentabilidad del producto final.
  • Hace el producto que se le requiere. Un buen programador debe tener iniciativa , pero esto no puede llevarlo a hacer lo que mejor le parece y esto quizás no es lo que se le pide.
  • Apoya a sus compañeros y colabora en el diseño del producto. Un buen profesional debe apoyar a sus compañeros en las tareas que les resulte complicadas y debe colaborar con los analistas con aportaciones y opiniones sobre el producto que estos producen.
Estos son algunos de los puntos que creo que debe suplir un buen programador, es labor del responsable del proyecto asignar las tareas apropiadas a cada uno de los programadores de manera que el proyecto pueda llevarse a buen fin con la máxima rentabilidad posible.

Plug-in para corrección ortográfica en mozilla.

Este viernes me llamó un cliente para consultarme que podríamos hacer en su nueva aplicación web por que sus operadores estaban cometiendo demasiadas faltas de ortografía a la hora de introducir los textos en el administrador.
No es difícil de imaginar mi cara de sorpresa cuando el cliente sugiere que pongamos un corrector de faltas de ortografía en los formularios.
Al final, la única solución que se me ocurrió sobre la marcha es sugerir que los operadores trabajasen con mozilla y su corrector ortográfico, porque no me quiero ni imaginar la cantidad de datos que tendría que transferir para poder implementar el corrector en un formulario.
El corrector lo podemos encontrar en https://addons.mozilla.org/es-ES/firefox/browse/type:3 y funciona bastante bien.
Y es que hay veces que los clientes piden cosas que pasan con creces lo presupuestado y hay soluciones más baratas en el mercado. En ocasiones tienes suerte y detectas este problemas, otras veces te puede llevar a la ruina.

jueves, 16 de agosto de 2007

Averiguar la procedencia de una IP

Cada vez más las empresas necesitan localizar sus mercados, en la era de la globalización cada vez en más importante saber de dónde vienen tus clientes.
Si necesitamos localizar la procedencia de una entrada IP necesitamos tener una base de datos o un servicio que relacione direcciones IP con localizaciones físicas.
Un ejemplo lo encontramos en este fichero que podemos encontrar en la dirección http://ip-to-country.webhosting.info/node/view/6 en el se relacionan las direcciones IP con los países de origen. Si necesitamos una información más concreta debemos hacer uso de empresas que nos provean de este servicio. Algunas de ellas hacen uso del servicio whois y otras de sus propias bases de datos.
Este es un pequeño listado de empresas:
http://www.maxmind.com/app/locate_ip
http://www.ip2location.com/developers.aspx
http://ripe.net/perl/whois?form_type=simple&full_query_string=&searchtext=
http://nosetup.org/php_on_line/ip_info
http://www.flavionet.com/ippoint.htm
http://www.geobytes.com/IpLocator.htm

Algunas de estas empresas hacen uso del whois y otras tienen sus propias bases de datos. Eso si estos métodos no son fiables al 100% de los casos. Ya que para empezar no sabemos si la dirección IP que llega a nuestro servidor es la de nuestro cliente.

Esta tecnología todavía está en pañales y tiene una funcionalidad bastante limitada. Ya que la asignación de IP no tiene ningún limite geográfico dentro de zonas muy extensas. Por ejemplo, conexiones realizadas desde Canarias son identificadas como provenientes de Madrid o Barcelona.

miércoles, 15 de agosto de 2007

El universo mecánico y Cosmos

Esta es una de las series que más me impactó en mi vida, aquí les dejo el primer capítulo. Una serie basada en la física y las matemáticas.



Cosmos en la serie de divulgación científica por definición. Esta serie va más allá de una explicación de la física, es casi un recorrido de la historia filosófica centrada en el hombre y como la ciencia ha ido poniendo las cosas en su sitio. En este video se describe un calendario creado por Carl Sagan y que da una perspectiva sobre la existencia del hombre que impacta al que lo ve.



Esta serie es la culpable de gran parte de la persona que soy hoy en día.

Los vividores del negocio de internet

Desde que comencé mi vida laboral me he encontrado con un personaje de forma recurrente, el vividor.
El primero con la que me tropecé fue terracanarias un portal que quería ponerse a rebufo de terra en sus mejores tiempos. ¿Y qué mejor que tener casi su mismo nombre?.
Por supuesto, inversión la mínima, mi menguante sueldo y la colaboración de dos amateurs que sólo sabian hacer páginas con el word. El contenido vampirizado de internet, coger fotos y textos con derechos por que al fin y al cabo para esta gente todo lo que está en internet es gratis. El final del proyecto acabó con el florecimiento de la telefonía móvil, este era un producto ya realizado, con la promoción trabajada y con montones de comerciales dispuestos a trabajar sin sueldo por sumar comisiones.
El segundo, tenía un empresa ya con años de vigencia, parecía muy seria. Conocí al dueño en un curso de emarketing. La verdad es que el curso fue muy bien, aprendí muchas cosas y al terminar el contrato temporal que tenía en ese momento me sumé a su empresa. Todo iba muy bien, tenían algunos buenos proyectos, pero la cosa se torció cuando se comenzó el proyecto para un portal de una empresa de protección de datos. Se me impidió prácticamente hablar con el cliente y casi no tenían requisitos de usuario. Así que ya imaginan donde terminó la aventura, con la empresa en ruinas y sueldos sin pagar. Esta empresa se llamaba albanova. Tiempo después de refundó y fue protagonista de una de los pufos más importante del país en cuanto a franquicias. Con su habilidad de comercial logró convencer a decenas de emprendedores para que gastaran su dinero en el producto. Al final el único que cobró fue el dueño , muchos de los empleados de aquella época todavía luchan por sus sueldos y que yo sepa los franquiciados todavía estarán pagando las deudas de entonces.
Al final todos tienen algo en común, son empresas de I+D+I y que no lo son, vamos una empresa que no tiene ni investigación, ni desarrollo de productos, ni innovación.

lunes, 13 de agosto de 2007

Cargar imágenes de Internet con Java

Este se trata de un pequeño programa de pruebas. Con él quería descargar un gráfico desde una URL hasta mi equipo y mostrarlo en la pantalla.
Fundamentalmente maneja dos flujos uno para la descarga por internet y otro para mostrar la imagen.
Aquí queda para quien quieran echarle un ojillo.

http://www.box.net/shared/kv0s0ny8so

miércoles, 8 de agosto de 2007

VxWorks. El sistema operativo interestelar.

VxWorks es un sistema operativo de tiempo real basado en linux.

Entre sus características incluye kernel multitarea, multitarea preferente , respuesta rápida a interrupciones , comunicaciones entre procesos y herramientas de sincronización entre procesos.

Como demostración de su fiabilidad tenemos una lista de los aparatos que lo implementan con probado éxito:
  • Las sondas Spirit y Opportunity
  • La Deep Impact
  • Boing 787
  • Helicóptero Apache

Computadora del modulo lunar

En la fascinante carrera espacial por llegar a la luna una de las cosas que más llaman la atención es la complejidad y dimensión de los vehículos espaciales.
Muchas veces te planteas cómo fueron capaces de llegar a la luna con la tecnología de aquella época y te das cuenta que la envergadura del proyecto produjo un gran salto tecnológico.
Uno de los campos mejor parados fue el de la electrónica y la computación. Esta misión produjo la invención del circuito integrado. El mundo que hoy conocemos no sería posible sin la invención de esta tecnología.
El computador del Apollo es quizás el ejemplo más significativo.

Esta máquina que ayudó a los tripulantes en las tareas de navegación y en el pilotaje automático de la nave tenía unas características bastantes modestas para cualquier máquina de hoy en día.
Tenía una memoria ROM (cableada) de 74 kilobytes y un espacio de memoria RAM de 4Kb. El tamaño de palabra era de 15bits.
La computadora pesó unos 30kg , su coste fue de 150000 dólares USA de la época y contenia 5000 primitivos circuitos integrados.

Utilizó un sistema operativo de tiempo real que discriminaba entre tareas dándole mayor prioridad a las tareas más importantes y relegando las menos importantes a porciones del tiempo de proceso inferiores.

Lo que podemos ver en la imagen es la unidad de interfaz del computador que englobaba la pantalla y el teclado.

Más información en:
http://www.abc.net.au/science/moon/computer.htm

martes, 7 de agosto de 2007

Patrones

En una breve experiencia con herramientas de CAD/CAM descubrí con sorpresa que parte de las tareas de los arquitectos estaban automatizadas y algunas de ellas seguían algo parecido a unas reglas prefijadas.
La arquitectura tiene cientos de años de historia, ha tenido tiempo de experimentar y depurar soluciones prácticas. A partir de esa experiencia han podido extraer patrones que siempre se repiten en sus proyectos.

En la ingeniería del software también pasa lo mismo. Se pueden localizar patrones de diseño de software muy probados. Estos patrones han cogido impulso desde la publicación del libro 'Design Patterns' publicados con el GoF ( Gang of Four ) formado por Erich Gramma , Richard Helm , Ralph Johnson y John Vlisides. En el libro se recogen 23 patrones, aunque existen muchos más.
En el libro estos patrones se dividen en tres grupos:
  • Patrones creacionales

  • Patrones estructurales

  • Patrones de comportamiento

El osito Misha

Por alguna razón me vino a la cabeza el osito Misha, la mascota de los juegos olímpicos de 1980. A pesar de que surgió en plena guerra fría , una época en la que no sabias si despertarías al día siguiente sin haber sido nukeado por los rusos o los americanos, es la mascota olímpica a la que tengo más cariño.

Este es Misha:
Y por si alguien tiene ganas , un resumen de la gala de inauguración de los juegos:



lunes, 6 de agosto de 2007

Relación de agregación vs Composición

Estas son dos relaciones que me ha costado bastante entender por alguna razón. Las dos tienen algo en común y es que realizan una relación más profunda que la relación de asociación. Quizás las definiciones más claras que he encontrado son las siguientes:
Agregación. (Acumulación)Dos objetos se consideran usualmente como independientes y aun así están ligados. Se puede decir que es de tipo todo / parte.
El tiempo de vida de cada uno de los objetos es independiente.

Composición. Dos objetos están estrictamente limitados por una relación complementaria. Uno no se entiende sin el otro, esto es, cada uno por separado no tiene sentido.
El tiempo de vida de cada uno de los objetos es dependiente.

Podemos ver un ejemplo en este esquema, una si desaparecen los libros de una biblioteca ya no tenemos biblioteca. Sin embargo los ordenadores no son estrictamente necesarios en una biblioteca. Pueden desparecer y esta no pierde su funcionalidad.

Otros tipos de relación son los de herencia donde un objeto adquiere las propiedades y métodos de un objeto padre. Se representa mediante un triángulo.
La relación de dependencia que se representa mediante una linea discontinua. Utilizada fundamentalmente para la relación entre paquetes.
Y el tipo de relación más normal que es el de asociación, representada mediante una linea continua. Representa una relación entre clases que colaboran para llevar algo a cabo.

Más ejemplos:
Relación de asociación. Tanto la compañía como los empleados son objetos que pueden existir el uno sin el otro además su comportamiento en el sistema es independiente.

Relación de agregación. A pesar de que el vehiculo y rueda son elementos independientes la funcionalidad de uno y dependen del otro.


Relación de composición. Un capitulo sin libro no tiene en absoluto sentido.


Gráficos obtenidos de las páginas: http://www.udistrital.edu.co/comunidad/profesores/rfranco/bd_oo.htm
http://docs.kde.org/stable/es/kdesdk/umbrello/uml-elements.html

viernes, 3 de agosto de 2007

Las variables

Uno de los elementos más básicos de programación , la variable, es quizás la que más discusiones y calenturas de cabeza da.
Cuantas veces nos hemos enfrentado a la discusión de como debe ser el nombre de una variable. Lo más lógico es que debe ser tan larga como sea necesario para comprender lo que contiene sin mayor esfuerzo , pero cuantas veces hemos visto cosas como 'co_ve_alqui' cuando se podía haber puesto 'ColorVehiculoAlquilado' o 'color_vehiculo_alquilado'. Creo que poner estas variables abstractas vienen de cierta creencia enfermiza en el ahorro de memoria y sobre todo lo comenten aquellos que aprendieron a programar com basic , comenzaban con la variable a y continuaban con todo el alfabeto hasta que se gastaba.

Además con los nombres largos ya no hace falta poner el tipo de la variable por escrito como prefijo de esta. Además es una broma para lenguajes que no tienen prototipado fuerte. Es como meter el dedo en llaga, ya que el lenguaje no tiene idea de lo que le van a poner se lo escribo en el nombre de la variable.

Último libro leído. Guía para la creación de diagramas mentales.

Mi último libro leído ha sido "Guía para la creación de diagramas mentales". Este es un libro corto y muy fácil de leer que explica una técnica para la organización de ideas.
Hace hincapié en la colaboración entre las dos partes de la mente humana, haciendo que la parte lógica y la parte creativa trabajen en el mismo objetivo.
Según este libro estos diagramas nos ayudan a:
  • ser más creativo
  • ahorrar tiempo
  • concentrarse
  • organizar y clarificar ideas
  • recordar
  • planificar
  • estudiar
  • y ver las cosas como un todo
Aunque el libro no lo nombra en ningún momento ,ya que es partidario de la vieja técnica del lápiz y el papel, un buen software para llevar a cabo estos diagramas en freemind. Lo pueden encontrar en el siguiente enlace: http://freemind.sourceforge.net/wiki/index.php/Main_Page

Guía para la creación de diagramas mentales.
Claudio Aros.
ISBN: 84-7556-395-3