28/02/2008
Google Maps sin necesidad de programar: Google Static Maps
por @joakinen a las 15:34 [ permalink ]

Tags: google-maps, web20, html

Google ha anunciado un nuevo API, realmente simple, que permite incluir un mapa estático (una imagen) en nuestra página web con tan solo parametrizar correctamente el atributo src de la etiqueta img que define la imagen. Esta novedad permite acceder a la cartografía de Google sin tener que codificar nada en Javascript, ya que lo único que hay que hacer es confeccionar una URL con los parámetros correctos y ponerla dentro del atributo src de la imagen.

Tal como ocurre con el API para generar mapas dinámicos, hace falta la clave gratuita para usar los mapas desde nuestro dominio, que se puede solicitar aquí.

El formato de la URL que tenemos que confeccionar para generar el mapa es:

http://maps.google.com/staticmap?parametros

Los parámetros van concatenados entre si mediante el símbolo &. Una vez que tengamos claro qué parámetros usaremos para generar el mapa, confeccionamos la URL y se la ponemos de argumento al atributo SRC de la etiqueta IMG.

Por ejemplo, este mapa tipo "roadmap" (el tipo de mapa habitual de Google Maps) muestra la zona de la puerta del sol de Madrid y un marcador.

ejemplo PARAMETROS EMPLEADOS

maptype=roadmap
center=40.416741,-3.70325
markers=40.416741,-3.70325,red
zoom=16
size=320x240
key=[aquí va la clave para Google Maps de nuestro dominio]

 

Este otro mapa de la misma zona muestra dos marcadores y es tipo "mobile", que está pensado para ser visualizado por dispositivos móviles por su mayor contraste y mayor tamaño de letra.

ejemplo PARAMETROS EMPLEADOS

maptype=mobile
center=40.416741,-3.70325
markers=40.416,-3.703,reda|40.417,-3.704,blueb
zoom=16
size=320x240
key=[aquí va la clave para Google Maps de nuestro dominio]

Los marcadores que podemos usar son los estándares de Google, lo cual limita un poco lo que podemos hacer con este sistema sobre lo que podemos hacer con Javascript. Al menmos podemos elegir el color, con lo cual podemos visualizar el estado del punto marcado mediante un código de colores, y mediante una leyenda en el lateral del mapa podemos indicar el significado de cada marcador.

permalink | categoría: /web20 |

 

22/02/2008
Bob Metcalfe cuenta los inicios de Ethernet
por @joakinen a las 16:41 [ permalink ]

Tags: ethernet, metcalfe, videos

Hay una versión en inglés sin subtítulos aquí.

permalink | categoría: /networking |

 

Apagar el ordenador no borra la memoria
por @joakinen a las 15:24 [ permalink ]

Tags: seguridad, memoria

Según demuestran en la página de la Universidad de Princeton, al apagar el ordenador no se borra inmediatemente el contenido de la memoria RAM dle ordenador, y la persistencia de la información aumenta si los chips de memoria se enfrían.

En el vídeo a continuación se muestra el experimento de recuperar claves de encriptación a partir de la memoria de otro equipo:

Más información en http://citp.princeton.edu/memory/media/

permalink | categoría: /sistemas |

 

20/02/2008
Etnografía Digital
por @joakinen a las 20:25 [ permalink ]

Tags: web20, etnografia-digital, redes-sociales

Dice la Wikipedia que "etnografía" es:

La etnografía (literalmente "descripción de los pueblos") es una metodología de investigación de los métodos cualitativos de la antropología cultural. Consiste en la recolección de datos en el terreno y teniendo como informantes a los integrantes de una comunidad dada. Los datos recopilados consisten en la descripción densa y detallada de sus costumbres, creencias, mitos, genealogías, historia, etcétera. Dicha información se obtiene, sobre todo, por medio de largas entrevistas con miembros de la comunidad o informantes claves de ellas.

La "etnografía digital" es, por tanto, la aplicación de este estudio sobre las costumbres humanas al escenario virtual de Internet.

Un referente mundial en este aspecto es la Universidad de Kansas (USA) con su digital ethnography working group.

En España, la UNED ha creado ETNOVIRTUAL, "un espacio dedicado a promover el debate y la reflexión sobre el método de investigación etnográfico aplicado a lo ciber, digital, virtual, Internet".

permalink | categoría: /web20 |

 

Qué es la Web 2.0 en 5 minutos
por @joakinen a las 19:26 [ permalink ]

Tags: web20, html, xml, redes-sociales

De vez en cuando leemos noticias sobre cómo los "malos" usan internet para conseguir sus fines y se propone el control de los usuarios de Internet como única forma de evitar que esto ocurra. Es sorprendente que los "buenos" no sean capaces de inundar internet de contenido que sirva para mejorar la vida de la gente. Será que los malos son muy listos y los buenos son torpes y por eso no se les ocurren formas positivas de crear contenido de calidad en internet. O quizás es que no son tan "buenos" como dicen. El caso es que Internet se puede usar para lo mismo que nos usamos a nosotros mismos, podemos hablar con alguien para aportarle algo o para hundirlo, podemos acariciar con nuestras manos o dar puñetazos, y a nadie se le ocurre proponer el control de lenguas y manos. No hay manos delictivas, hay conductas delictivas, insolidarias, o tendencias deseables, pero esto era así también antes de la aparición de Internet, así que no hay por qué empezar ahora a culpar al cuchillo de asesinato.

Es cierto que este nuevo escenario en el que nos empezamos a mover con la Web 2.0 va a obligarnos a cambiar cosas, a tipificar nuevos delitos, a aprender nuevas formas de relacionarnos, pero si alguien solo piensa en cómo controlar y no en cómo aportar es que ya no pertenece a este mundo. Vivir en el siglo XXI implica aprender a usar la tecnología para relacionarnos, y este hecho afectará tanto los planes de estudio como los artículos del código penal.

No hay vuelta atrás. Ahora que la Web 2.0 nos ha dado a cada uno un altavoz de alcance universal hay que dejar de ser espectador y empezar a aportar, a crear contenido personal o colectivamente. Por primera vez en la historia es posible crear una red social entre personas de distintos paises pero que tienen los mismos intereses. Esto hace necesario que ampliemos el significado de algunos conceptos que creíamos absolutos y perfectamente definidos: la propiedad intelectual, la identidad, la ética, la estética, la privacidad, el comercio, la amistad y hasta el concepto de amor.

En menos de 5 minutos este interesante vídeo hace un recorrido histórico a la tecnología que produjo la web y explica los cambios sociales que se están produciendo ahora que nos hemos dado cuenta de que interconectando ordenadores lo que hacemos en realidad es poner en contacto a personas.

Más información: http://mediatedcultures.net

permalink | categoría: /web20 |

 

Un IBM 1401 en Bangalore, India
por @joakinen a las 10:53 [ permalink ]

Tags: ibm1401, india, mainframe

Una de las sorpresas que me encontré al visitar el Visvesvarya industrial and Technological Museum en Bangalore, India, en agosto de 2006, fue que lo que menos me interesó fue la exposición itinerante de la fundación Nobelque, desde 2001, y con motivo del centenario de la existencia de la fundación y sus conocidos premios, se anunciaba a bombo y platillo por todas partes. La verdad es que Bangalore me pareció una ciudad mucho menos interesante de lo que había imaginado. Como dicen de ella que es el Sillicon Valley indio, yo me imaginaba más presencia tecnológica en las tiendas y el centro, pero como mi visita fue breve, no di con la zona correcta.

El caso es que uno de los planes más interesantes para una estancia corta parecía ser la visita a este museo y ver la exposición itinerante. El museo en sí es bastante interesante, uno de esos lugares donde puedes participar en los experimentos técnicos que te proponen en lugar de limitarte a leer una sesuda explicación. Pero la sorpresa fue una instalación casi completa de un IBM 1401, el mainframe más emblemático de IBM.

Estas eran las unidades de almacenamiento en cinta, que se usaban no solamente para hacer backups, sino también para procesar ficheros. Montabas el fichero secuencial de entrada en una unidad de cinta, y en otra unidad de cinta montabas una vacía. El programa en COBOL que hacíamos definía las dos cintas con la instrucción "SELECT cinta ASSIGN TO UNIVERVO", iba leyendo secuencialmente de la primera, procesando y haciendo las modificaciones oportunas en el registro leído y escribiendo el resultado en la segunda unidad de cinta. Al final del proceso teníamos la segunda cinta actualizada y se descartaba la primera.

A mi me trae recuerdos de mi infancia tecnológica, ya que cuando yo empecé a estudiar programación en 1978 en el centro de educación de IBM en Madrid, las prácticas de COBOL se hacían en un S/370, que fue el "nieto" de los 1401, y cuando comencé a trabajar como programador en un entorno de mainframes UNIVAC-1100, escribíamos los programas COBOL en hojas de codificación especiales para que las cuatro chicas del departamento de perforación los pasaran a fichas usando la perforadora-verificadora de IBM, justamente éste modelo que estaba en el museo:

Aún recuerdo los sonidos típicos de la sala de máquinas, muy distintos de los zumbidos de los ventiladores que hoy son el único y monótono sonido de los CPD. Para los que no los hayan escuchado, es imprescindible ver este vídeo que muestra un 1401 en pleno funcionamiento en la actualidad y los sonidos de la impresora, las lectoras de fichas, las lectoras de cintas magnéticas y las perforadoras de fichas.

A continuación las fichas ya perforadas se leían en máquinas como la máquina de la derecha en la siguiente foto, una 1402 Card/reader/punch. Se apilaba el montón de fichas, se introducían en la máquina (cabían hasta 1000 fichas de una vez, y las leía en poco más de un minuto. Podemos ver la 1402 junto a la impresora, una 1403 de 1400 líneas por minuto.

El corazón del sistema era el armario donde estaba la CPU y la memoria de ferritas, que incluía el panel de control, lleno de luces, botones y palancas, algo impensable en los ordenadores de hoy día controlados exclusivamente por software.

Visto desde el punto de vista actual ésta máquina no parece muy potente, con sus 4K de memoria, pero la falta de recursos nunca ha sido un límite para la creatividad, lo cual dice mucho de los programadores de esta generación. Al parecer en el año 2000 aún quedaban 1401 aplicaciones ejecutándose en 1401 simuladores de este mainframe.

Solo faltaba la unidad de almacenamiento IBM 1405 Disk Storage Unit, que tenía una capacidad de hasta 20 Megabytes y usaba 25 discos para almacenarlos y la consola de operación 1407 Console Inquiry Station.

Tal como comenta la Wikipedia en su artículo sobre el IBM 1401, éste ha sido uno de los productos de más éxito de los que IBM ha fabricado. Muchos paises lo compraron (India, Pakistán, Islandia...) y ha sido el entorno en el que se formó toda una generación de informáticos.

Cuando estuve dando clases de informática en Nepal les enseñé a los chavales de la Gladstone Academy las fotos del 1401, ya que uno como este fue el primer ordenador que se usó en Nepal, en 1971, para hacer el censo de la población.

Es curiosa la página de Johann Johannsson ( http://www.ausersmanual.com ), músico islandés, hijo de un informático con dotes musicales que consiguió producir música con esta máquina, hecho que ha inspirado a su hijo a escribir una obra para instrumentos de cuerda que a mi me parece preciosa, incorporando en ella la música original producida por su padre en el 1401, y la voz de las instrucciones originales de mantenimiento del manual en cinta de audio que venía junto con el mainframe. Resulta interesante oir las instrucciones sobre cómo engrasar la máquina, lo cual no extraña cuando cae en la cuenta de que además de sus 50.000 componentes electrónicos, el sistema tenía 20.000 piezas mecánicas.

Más información sobre el 1401 se puede encontrar en http://1401.org/ y en sitio sobre el fascinante proyecto del Computer History Museum de mantener en perfecto funcionamiento un IBM 1401. Incluso se pueden visitar estas instalaciones en Mountain View, California

El proyecto mantiene un informe diario de sus actividades que resulta muy curioso de leer para un administrador de sistemas actual, pues muestra lo mucho que ha cambiado este oficio en 40 años.

Además de fotos muy interesantes y una exhaustiva documentación del sistema, en la web ya mencionada del CHM (Computer History Museum) hay un interesante manual (el original escaneado) sobre cómo programar el 1401, titulado IBM Principles of Programming. Impagable.

A los que les interesen más los sistemas posteriores, les puede resultar curiosa este página, que contiene las ilustraciones del libro "Introduction to IBM Data Processing Systems", de 1968, dirigido a los usuarios del sistema 360 de IBM.

Por cierto, que el padre del músico islandes no fue el único en intentar hacer música con el 1401.

permalink | categoría: /sistemas/retro |

 

15/02/2008
Comparación de views de zonas DNS para detectar diferencias
por @joakinen a las 14:47 [ permalink ]

Tags: dns, views

Uno de los problemas que podrían suceder por mantener dos (o más) ficheros de resolución de nombres/direcciones para implementar views en DNS como comentamos el otro día es que puede que agregues un nombre a uno de los ficheros (por ejemplo, para resolver la IP pública de ese nombre), y se te olvide introducir ese nombre en la vista para las direcciones privadas.

Para detectar estas diferencias, es decir, nombres que están definido en una de las vistas y no lo están en otra, podemos ejecutar este script, al que pasaremos como parámetros los dos ficheros que queremos comparar.

# diffviews db.dominio.com db.dominio.com.local

El script hace una verificación básica de que se haya pasado dos nombres de ficheros como parámetros y que no sean el mismo y a continuación produce un listado de las diferencias entre ellos o un mensaje que indica que son iguales. Incluso genera un código de salida para poder incluirlo en scripts que tengan que verificar si las zonas son iguales o no.

La clave del invento está en estas dos líneas:

awk '$3 == "A" {print $1}' $_FILE_1  | sort  > $_TEMPFILE1
awk '$3 == "A" {print $1}' $_FILE_2  | sort  > $_TEMPFILE2

que lo que hacen es extraer los nombres de cada fichero de zona, ordenarlos alfabéticamente y crear con cada uno de los conjuntos de nombres un fichero temporal. A continuación hacemos un diff de esos dos ficheros temporales y nos dirá qué nombres están en un fichero y faltan en el otro.

Este es el script "diffviews", que hace el trabajo de comparación de dos ficheros de definición de zona DNS:

#/bin/sh
#    diffviews    (C) 2008 Joaquin Herrero, Creative Codeworks
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .

_ZONES_DIRECTORY="/var/named/master/"

echo ""

if [ $# != 2 ]
then
   echo "Must specify two zone files to process"
   exit 127
fi

if [ ! -f $1 ] 
then
   echo "Error: $1 not found."
   exit 127
fi

if [ ! -f $2 ] 
then
   echo "Error: $2 not found."
   exit 127
fi

if [ $1 == $2 ]
then
   echo "Files must exist and have different names"
   exit 127
fi

echo "diff between addresses in $1 and $2"
_FILE_1=$_ZONES_DIRECTORY$1
_FILE_2=$_ZONES_DIRECTORY$2


_TEMPFILE1=/tmp/_diffzona_`echo $USER`_`date +%Y%m%d%H%M%S`_$1
_TEMPFILE2=/tmp/_diffzona_`echo $USER`_`date +%Y%m%d%H%M%S`_$2

awk '$3 == "A" {print $1}' $_FILE_1  | sort  > $_TEMPFILE1
awk '$3 == "A" {print $1}' $_FILE_2  | sort  > $_TEMPFILE2

diff $_DIFF_OPTS $_TEMPFILE1 $_TEMPFILE2

if [ $? == 0 ]
then
  echo "No differences were found."
  _EXIT_STATUS=0
elif [ $? == 1 ]
then
  echo "Differences were found."
  _EXIT_STATUS=1
elif [ $? > 1 ]
then
  echo "Errors were found."
  _EXIT_STATUS=127
fi


rm $_TEMPFILE1 $_TEMPFILE2
exit $_EXIT_STATUS

Para ejecutar "diffviews" para todas las zonas que tengan un view asociado (suponiendo que el view tenga una extensión predeterminada, "local" en este caso) podemos usar este otro script:

#/bin/sh
#    checkviews    (C) 2008 Joaquin Herrero, Creative Codeworks
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .

_ZONES_DIRECTORY="/var/named/master/"

cd $_ZONES_DIRECTORY

for i in *local
do
  _FILE_1=$i
  _FILE_2=`basename $i .local`
  diffviews $_FILE_1 $_FILE_2
done

echo "done."

Este script se puede poner en las tareas diarias de administración del sistema y así cada día, o cada semana, automáticamente se nos enviaría un email con las diferencias entre las vistas de un mismo dominio.

En OpenBSD esto se haría incluyendo la ejecución de este script en /etc/daily o /etc/weekly o /etc/monthly dependiendo de la periodicidad con la que lo queramos ejecutar.

permalink | categoría: /sistemas |

 

14/02/2008
Citrix Presentation Server se llama ahora XenApp
por @joakinen a las 13:34 [ permalink ]

Tags: citrix, xenapp

Tal como nos tiene acostumbrados, Citrix cambia de nombre a su producto estrella cada vez que le hace alguna mejora sustancial. Lo que fue "Metaframe" durante varios años y últimamente era "Presentation Server, ahora es "XenApp".

Por si alguno se ha perdido, he aquí un diccionario de los cambios de nombre que ha sufrido este producto hasta ahora:

1990 Multiuser
1992 A+ Remote
1993 WinView
1995 WinFrame
1998 MetaFrame
2001 MetaFrame XP
2004 Presentation Server
2008 XenApp

La elección del prefijo "Xen" para denominar el producto no es casual, es parte de la nueva filosofía de Citrix. Las "filosofías" de Citrix caducan antes que un yogur del Alcampo por lo que no se cuanto durará esta. Lo que está claro es que lo que mola ahora en Citrix es la palabra "Xen".

Todo esto viene a partir de la reciente compra de Xensource por parte de Citrix. Xensource era/es competencia de VMware, y Citrix siempre favoreció el uso de VMware para los servidores Presentation Server. De hecho, muchos de los canales de distribución de Citrix también distribuyen VMware, lo cual les crea ahora algunos problemas porque están vendiendo dos productos que son competencia entre si: VMware y la versión de Xen que ahora distribuye Citrix.

El caso es que ahora se amplía la línea de productos de Citrix para poder distribuir sus propias soluciones de virtualización, y dar así impulso a la filosofía de virtualizar no solo el servidor sino también el puesto cliente.

Desde hace ya algún tiempo el término "presentation server" le quemaba a Citrix en las manos, porque ya no hablaban de "aplicaciones presentadas" mediante Citrix, sino de "aplicaciones VIRTUALIZADAS mediante Citrix". Si, ahora resulta que el presentar remotamente una aplicación es virtualizarla, al menos según el diccionario de términos de Citrix, que es cada vez más peculiar.

Pues, si lo miran bien, resulta que ahora Citrix es una empresa que ofrece distintos tipos de cosas virtualizadas: ofrece aplicaciones virtualizadas mediante "presentation server", y desde la adquisición de Xen, ofrece servidores virtualizados, que pueden ser usados para ejecutar desktops virtualizados. ¿Se han perdido? Espero que no.

El caso es que a algún gurú del departamento de lingüística de Citrix (que debe tener mogollón de empleados) se le ha ocurrido que el significado oculto de la palabra "Xen" es el término "virtual", por lo que resulta que Citrix es una empresa "Xen" y todos sus productos son "Xen". De ahí que donde antes decía "virtual" ahora Citrix dice "Xen".

Esto aclara mucho el nuevo nombre de "Presentation Server": XenApps, que quiere decir "Virtual Apps".

Pero también aclara los nombres de los nuevos productos de virtualizacion de Citrix: "XenServer" para virtualizar servidores y "XenDesktop" para el producto que virtualiza PC's de usuario, o desktops.

Bienvenido al nuevo mundo zen, perdón, xen, de Citrix.

permalink | categoría: /citrix |

 

13/02/2008
High Performance SSH (HPN-SSH) - Una propuesta defendida con estilo
por @joakinen a las 19:06 [ permalink ]

Tags: ssh, openssh

Recientemente se ha anunciado la disponibilidad de un parche para OpenSSH que permite hacer las copias SCP más rapidamente mediante el uso de varias técnicas, desde aumentar los buffers hasta usar más de un thread (hilo de ejecución).

Chris Rapier, el autor del parche, ha escrito un mensaje en la lista openssh-unix-dev en el que, con un tono que le honra (en vista de las agrias polémicas que está habiendo entre Linus Torvalds y los desarrolladores de FreeBSD respecto del asunto de vmsplice), deja que los autores de OpenSSH verifiquen si su parche cumple con los elevados estándares de seguridad que mantienen desde hace años. He aquí sus comentarios:

Well, I'm the developer of this patch and I fully respect their decision 
not to incorporate at this time.

The OpenSSH dev group has, I believe, different priorities. Security is, 
and must be, foremost in their mind. Performance rightly takes a back 
seat to security concerns. On the other hand, as a developer for high 
performance networks I have a client base that needs the performance so 
that is foremost in my mind. I don't believe my patch compromises 
security but the development group has to be sure of this. Their 
reputation will be far more affected than mine if there turns out to be 
a problem.

Eventually, I believe that some version of the buffer tuning concept 
will be incorporated but it has to meet the high quality requirements of 
the development group. In the mean time, early adopters and other people 
willing to incorporate this patch are perfectly free to do so. In fact, 
even when communicating with non-HPN hosts a performance boost will be 
seen if the bulk data flow is in the direction of the HPN patch host. So 
even without incorporation of the patch into the main source tree people 
  can see these advantages.

Este es un gran ejemplo de actitud del que muchos deberían aprender en vez de dedicarse a defender sus técnicas de programación insultando al adversario, un tipo de falacia conocida como "Argumentum ad Homimem, que, en pocas palabras, es algo así como decir: "tu argumento es mentira porque tú eres un sinvergüenza". A lo largo de mi vida he visto a algunos sinvergüenzas elaborar extraordinarias propuestas y a mucha gente buena decir estupideces. Creo que los argumentos deben ser evaluados independientemente de quien los proponga.

Para finalizar esta entrada vamos a taparnos la nariz y a leer las malolientes palabras de Linus Torvalds en la polémica a la que me refería al principio.

I claim that Mach people (and apparently FreeBSD) are incompetent idiots. 

I also claim that Slashdot people usually are smelly and eat their 
boogers, and have an IQ slightly lower than my daughters pet hamster 
(that's "hamster" without a "p", btw, for any slashdot posters out 
there. Try to follow me, ok?).

Furthermore, I claim that anybody that hasn't noticed by now that I'm an 
opinionated bastard, and that "impolite" is my middle name, is lacking a 
few clues.

Finally, it's clear that I'm not only the smartest person around, I'm also 
incredibly good-looking, and that my infallible charm is also second only 
to my becoming modesty. 

So there. Just to clarify.

       Linus "bow down before me, you scum" Torvalds

Vamos a suponer que Linus Torvalds está usando técnicas de los antiguos filósofos cínicos y su tono se debe al uso deliberado de la anaideia. No se si le estaré sobrevalorando, pero le voy a dar un voto de confianza.

permalink | categoría: /seguridad |

 

DNS views para resolver de forma distinta desde la red local y desde Internet
por @joakinen a las 13:18 [ permalink ]

Cualquiera que tenga una red de servidores con direcionamiento privado (RFC 1918), a los que se tenga también acceso desde internet se enfrenta con un dilema a la hora de definir los servidores de nombres (DNS). ¿Un servidor DNS en la DMZ para resolver los nombres a direcciones públicas y un servidor DNS en la red privada para resolver los nombres a direcciones privadas? Esto es una posibilidad (de hecho, la que más se utiliza) pero plantea el problema de administrar lo que conceptualmente es un único servicio en dos máquinas distintas.

A mi me gusta más la solución de usar un único servidor DNS en la red interna, accesible desde internet, y que resuelva de forma distinta los nombres que le sean consultados en función de si el que pide el servicio está en Internet o en la red interna: si el que consulta el DNS está en Internet se le da una dirección pública, si el que pide está en la red interna se le da la dirección interna del servidor.

Así, si hago un ping a mi dominio desde la red interna obtengo esto:

$ ping creativecodeworks.com
PING creativecodeworks.com (192.168.0.90): 56 data bytes
64 bytes from 192.168.0.90: icmp_seq=0 ttl=255 time=0.567 ms
64 bytes from 192.168.0.90: icmp_seq=1 ttl=255 time=0.445 ms
--- creativecodeworks.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.445/0.506/0.567/0.061 ms

Y si hago el mismo ping desde una máquina en Internet el resultado sería:

$ ping creativecodeworks.com
PING creativecodeworks.com (80.37.203.191): 56 data bytes
64 bytes from 80.37.203.191: icmp_seq=0 ttl=250 time=34.417 ms
64 bytes from 80.37.203.191: icmp_seq=1 ttl=250 time=32.818 ms
--- creativecodeworks.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 32.818/33.617/34.417/0.820 ms

¿Cómo se consigue hacer esto usando un único servidor DNS? Mediante el uso de views en la configuración del DNS. Vamos a ver ejemplos de cómo configurar views en DNS usando BIND versión 9.3.1.

Fichero named.conf

En el fichero named.conf, que en mi OpenBSD está en /var/named/etc/named.conf) hay que definir dos cosas:
1.- Qué direcciones son locales (las demás serán usuarios de Internet). Esto lo definiremos en una ACL (Access Control List).
2.- Qué ficheros de configuración de dominios se aplican a las direcciones locales y cuáles a las direcciones de Internet.

El truco está en que tendremos DOS ficheros de configuración por cada dominio, uno para la red interna y otro para internet, y el DNS usará uno u otro en función de la ACL que se le aplique al que consulta en función de su dirección IP.

Vamos a editar (como root o usando el comando sudo) el fichero named.conf y creamos una ACL para definir las direcciones internas:

acl "interna" {
      127.0.0.1; 192.168.0.0/16; 10.10.0.0/24;
};

Con esta definición, cualquier máquina que consulte este DNS y cuya dirección IP comience por 192.168 o por 10.10.0 (observese la diferente máscara de subred) será catalogada como interna y consultará el fichero de configuración del dominio para la red interna, que contiene solo IPs privadas. El resto de máquinas que consulten este DNS y que no tengan estas direcciones IP serán consideradas máquinas de Internet y se les darán los datos del fichwero de configuración del dominio para internet.

Ficheros de configuración del dominio

Vamos a crear los DOS ficheros que necesitamos para cada dominio, uno para la red interna y otro para las direcciones públicas. El dominio que vamos a definir es "creativecodeworks.com" y los ficheros que crearemos son:

db.creativecodeworks.com              para ser consultado desde internet
db.creativecodeworks.com.local        para ser consultado desde la red interna

En mi sistema estos ficheros están en /var/named/master, ya que este servidor es el servidor maestro para este dominio. El contenido de los dos ficheros será:

$ cd /var/named/master
$ cat db.creativecodeworks.com
$ORIGIN creativecodeworks.com.
$TTL 6h
@   IN      SOA     ns0.creativecodeworks.com. boss.creativecodeworks.com.   (
                         2008020500 ; serial
                         3h         ; refresh after 3 hours
                         1h         ; retry after 1 hour
                         1w         ; expire after 1 week
                         1h )       ; negative caching TTL of 1 hour
                NS      ns0.creativecodeworks.com.
                NS      ns0.xname.org.
                MX      10 smtp.creativecodeworks.com.

creativecodeworks.com.  IN  A  80.37.203.191
www        IN      A       80.37.203.191
smtp       IN      A       80.37.203.191
ns0        IN      A       80.37.203.191
$ cd /var/named/master
$ cat db.creativecodeworks.com.local
$ORIGIN creativecodeworks.com.
$TTL 6h
@   IN      SOA     ns0.creativecodeworks.com. boss.creativecodeworks.com.   (
                         2008020500 ; serial
                         3h         ; refresh after 3 hours
                         1h         ; retry after 1 hour
                         1w         ; expire after 1 week
                         1h )       ; negative caching TTL of 1 hour
                NS      ns0.creativecodeworks.com.
                NS      ns0.xname.org.
                MX      10 smtp.creativecodeworks.com.

creativecodeworks.com.  IN  A  192.168.0.90
www        IN      A       192.168.0.90
smtp       IN      A       192.168.0.90
ns0        IN      A       192.168.0.90

Como puede verse, ambos ficheros son exactamente iguales con la excepcción de la dirección IP asociada a cada nombre, que en un caso es pública y en el otro es privada.

Creación del "view"

Ahora lo que nos falta es la forma de "asociar" cada uno de los dos ficheros de configuración a la ACL que le corresponda. Hemos creado solo una ACL, que define las direcciones privadas, y se sobreentiende que todas las IPs que no figuren en una ACL explícitamente corresponden a una ACL implícita, llamada "any". Osea, que, en principio, todas las direcciones IP pertenecen a la ACL implícita "any", y lo que hacemos definiendo ACL explícitas es "sacar" de "any" a ese grupo de direcciones.

Vamos a crear dos vistas, o "views", una para los clientes asociados a la ACL que hemos llamado "interna", y a esa vista la llamaremos "interna" en un alarde de originalidad, y vamos a crear una segunda vista, que llamaremos "internet" y a la que asociaremos la ACL implícita "any":

// ------------------------------------------------------------------------
// Vista para la red interna
// ------------------------------------------------------------------------

view "interna" {

    match-clients   { "interna"; };
    recursion       yes;   

    zone "." {
            type hint;
            file "standard/root.hint";
    };

    zone "localhost" {
            type master;
            file "standard/localhost";
            allow-transfer { localhost; };
    };

    zone "127.in-addr.arpa" {
            type master;
            file "standard/loopback";
            allow-transfer { localhost; };
    };

    zone "10.in-addr.arpa" {
            type master;
            file "standard/db.10";
            allow-transfer { localhost; };
    };

    zone "creativecodeworks.com" {
         type master;
         file "master/db.creativecodeworks.com.local";
         };

}

La instrucción match-clients define la ACL que corresponde a esta vista. Aquí asociamos a esta vista la ACL "interna".

Dentro de la zona hemos metido el fichero de configuración "db.creativecodeworks.com.local" para resolver los nombres del dominio "creativecodeworks.com", y además he metido los ficheros de configuración inversa que me permiten resolver los nombres cuando le pregunte al servidor por una dirección.

El parámetro recursion puede activarse, o no, en función de lo que necesitemos. Si está activado, nuestro servidor DNS podrá resolver cualquier nombre del mundo mundial, pues escalará la pregunta a los servidores DNS globales; y si ponemos recursion no solamente resolverá los nombres de los dominios que tenga definido este servidor, en este caso solamente creativecodeworks.com.

Yo he puesto para la vista interna recursion yes, lo que me permite definir en mis máquinas internas a este servidor como DNS para los PC's clientes, y usando ese servidor DNS poder consultar cualquier dirección de internet.

El otro "view", el que define qué hacer si nos consultan desde internet es:

// ------------------------------------------------------------------------
// Vista para Internet  
// ------------------------------------------------------------------------

view "internet" {

    match-clients   { any; };
    recursion       no;

    zone "." {
            type hint;
            file "standard/root.hint";
    };

    zone "creativecodeworks.com" {
         type master;
         file "master/db.creativecodeworks.com";
         allow-transfer {  195.234.42.0/24; 193.218.105.144/28; 87.98.164.164; };
         };
}

Observe que aquí he quitado la posibilidad de hacer búsquedas recursivas, esto significa que no quiero que usen desde internet este servidor como servidor DNS para máquinas. Solo se consultará este servidor cuando el sistema DNS global necesite resolver direcciones de los dominios que yo alojo en mis máquinas.

Activar las nuevas configuraciones

Una vez definido todo lo anterior, recargamos tanto la configuración del servicio DNS como la configuración de los dominios:

~ # rndc reconfig   
~ # rndc reload   
server reload successful

rndc reconfig hace efectivos los cambios en el fichero de configuración del servicio DNS (named.conf)
rndc reload carga de nuevo las definiciones de los dominios (ficheros en /var/named/master definidos en named.conf)

Podemos comprobar si ha habido algun error consultando el fichero de log /var/log/messages.

permalink | categoría: /sistemas |

 

12/02/2008
Fix temporal para el bug vmsplice
por @joakinen a las 18:49 [ permalink ]

Tags: vmsplice, linux, freebsd, kernel, exploits, seguridad, vulnerabilidades, patch

En http://www.ping.uio.no/~mortehu/disable-vmsplice-if-exploitable.c, el mismo paisano que ha programado el exploit ha programado la forma de deshabilitar vmsplice en el código del kernel que se está ejecutando en memoria, y así eliminamos la vulnerabilidad de momento, hasta que cambiemos nuestro kernel a uno nuevo que no tenga esta vulnerabilidad.

$ wget http://www.ping.uio.no/~mortehu/disable-vmsplice-if-exploitable.c
$ gcc disable-vmsplice-if-exploitable.c -o disable-vmsplice-if-exploitable
$ sudo ./disable-vmsplice-if-exploitable
Password:
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
Exploit gone!
$

Ejecutamos ahora de nuevo el exploit (cuyo fuente lo he llamado exploit-vmslice.c y el binario exploit-vmslice) y comprobamos que ya no conseguimos acceso root

$ ./exploit-vmsplice 
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7e3c000 .. 0xb7e6e000
[-] vmsplice
$

Como comenté arriba, este parche actúa sobre la memoria, no sobre el código que se carga cuando el sistema se inicia, por tanto al reiniciar la máquina vuelve a ser vulnerable. La solución temporal es ejecutar este parche en el script de inicio del sistema.

Otra opción es parchear el fuente de splice.c (que es donde está el fallo) con el diff publicado en http://www.alu.ua.es/j/jgl14/patch-vmsplice-2.6.24.1.diff.gz y recompilar e instalar el nuevo kernel.

permalink | categoría: /seguridad |

 

Linux kernel vmsplice unchecked
por @joakinen a las 17:46 [ permalink ]

Este es el análisis de vulnerabilidades de vmplice que Wojciech Purczynski hizo públicas este mes. Tomado de la lista "Full disclosure":

Subject:    [Full-disclosure] CSA-L03: Linux kernel vmsplice unchecked
From:       Wojciech Purczynski 
Date:       2008-02-12 7:50:49

===[ ABSTRACT ]=========================================================

A new vmsplice() system call was introduced in the 2.6.17 release of the
Linux kernel. In the 2.6.23 kernel the system call functionality has
been further extended resulting in two new critical vulnerabilities.


===[ AFFECTED SOFTWARE ]================================================

Linux 2.6.23 - 2.6.24

For the exact kernel version please refer to an information provided by
your vendor.


===[ DESCRIPTION ]======================================================

VULNERABILITY #1

Inappropriate dereference of user-supplied memory pointers in the
code beginning at line 1378 in the vmsplice_to_user() kernel
function (fs/splice.c):

---8<--- fs/splice.c:1378 ---8<---
    error = get_user(base, &iov->iov_base);
    /* ... */
    if (unlikely(!base)) {
        error = -EFAULT;
        break;
    }
    /* ... */
    sd.u.userptr = base;
    /* ... */
    size = __splice_from_pipe(pipe, &sd, pipe_to_user);
---8<--- fs/splice.c:1401 ---8<---

The code lacks validation of these pointers (i.e. with access_ok()).
The __splice_from_pipe() assumes these are valid user-memory pointers
and never makes any verification of them. The function dereferences the
pointers with __copy_to_user_inatomic() function (in pipe_to_user()) in
order to write data to user-process memory in this case leading to
possibility of arbitrary data (read from pipe) to arbitrary kernel
memory.


VULNERABILITY #2

The copy_from_user_mmap_sem() function copies data from user-process
memory with the use of __copy_from_user_inatomic() without validating
user-supplied pointer with access_ok():

---8<--- fs/splice.c:1188 ---8<---
         partial = __copy_from_user_inatomic(dst, src, n);
---8<--- fs/splice.c:1188 ---8<---

This vulnerability leads to indirect reading of arbitrary kernel memory.


===[ IMPACT ]===========================================================

Vulnerabilities may lead to local system compromise including execution
of arbitrary machine code in the context of running kernel.

Vulnerability #1 has been successfully exploited on Linux 2.6.24.
Vulnerability #2 not tested.


===[ DISCLOSURE TIMELINE ]==============================================

1st Feb 2008    Vendor notification
8th Feb 2008    Public disclosure


===[ AUTHOR ]===========================================================

Wojciech Purczynski 

Wojciech Purczynski is a Security Researcher at Vulnerability Research
Labs, COSEINC PTE Ltd.
http://coseinc.com

Wojciech Purczynski is also a member of iSEC Security Research
http://isec.pl/


===[ LEGAL DISCLAIMER ]=================================================

Copyright (c) 2008 Wojciech Purczynski
Copyright (c) 2008 COSEINC PTE Ltd.

All Rights Reserved.

PUBLISHING, DISTRIBUTING, PRINTING, COPYING, SCANNING, DUPLICATING IN
ANY FORM, MODIFYING WITHOUT PRIOR WRITTEN PERMISSION IS STRICTLY
PROHIBITED.

THE DOCUMENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. THE
CONTENT MAY CHANGE WITHOUT NOTICE. IN NO EVENT SHALL THE AUTHORS BE
LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, INJURIES,
LOSSES OR UNLAWFUL OFFENCES.

USE AT YOUR OWN RISK.

permalink | categoría: /seguridad |

 

Bug vmsplice en kernel Linux > 2.6.17. Sistemas vulnerables.
por @joakinen a las 17:02 [ permalink ]

Tags: vmsplice, linux, freebsd, kernel, exploits, seguridad, vulnerabilidades

Después de que Linus Torvalds llamara incompetent idiots a la gente de FreeBSD por no implementar vmsplice() en su kernel y hacerlo mediante COW (copy-on-write), ahora parece que tendrá que morderse la lengua por haber introducido en todos los kernel superiores a 2.6.17 junto con vmsplice() un bug muy fácil de explotar, tanto que ya está el fuente del exploit (en Kriptópolis, por ejemplo) que cualquiera puede bajarse y compilar.

Este bug permite a un usuario hacerse root sin tener que dar ninguna contraseña. La versión del kernel 2.6.24.2, disponible en kernel.org ya tiene resuelto este problema.

La lista completa de versiones del kernel vulnerables la ha publicado Security Focus.

Para saber si tu máquina es vulnerable:

1. Accede a la página web del exploit y copialo 
   a un fichero local, por ejemplo, exploit.c 

2. Compílalo con la orden
   $ gcc exploit.c

3. Esto genera un fichero binario llamado a.out que puedes ejecutar directamente
   $ ./a.out

Descarga del exploit

El código fuente del exploit lo tienes en http://www.milw0rm.com/exploits/5092

Copialo al portapapeles y lo pegas en tu terminal en un fichero vacío.

Pruebas de vulnerabilidad

Ubuntu 6.06 LTS Dapper Drake, kernel 2.6.15-51-386

No está afectado, al ser un kernel anterior al 2.6.17

$ uname -a
Linux jhp1 2.6.15-51-386 #1 PREEMPT Thu Dec 6 20:20:49 UTC 2007 i686 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7dc2000 .. 0xb7df4000
[-] vmsplice: Function not implemented
$

Ubuntu 6.10 Edgy - Server Edition, kernel 2.6.17-10-server

Vulnerable.

$ uname -a
Linux srv1 2.6.17-10-server #2 SMP Tue Dec 5 22:29:32 UTC 2006 i686 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7e5a000 .. 0xb7e8c000
[+] root
# 

Ubuntu 7.04 Feisty Fawn, kernel 2.6.20.16-386

No parece estar afectado: el exploit se compila pero la ejecución da un fallo de segmentación al intentar llamar a vsplice. Al parecer algunos de los kernel de Ubuntu no ponen vmsplice en enable a no ser que se haga deliberadamente, esa podría ser la razón de que el exploit termine con un fallo de segmentación.

$ uname -a
Linux jhp2 2.6.20-16-386 #2 Tue Dec 18 05:41:44 UTC 2007 i686 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7e2c000 .. 0xb7e5e000
Fallo de segmentación (core dumped)
$

Ubuntu 7.10 Gutsy Gibbon, kernel 2.6.22-14-generic

Vulnerable

$ uname -a
Linux panic 2.6.22-14-generic #1 SMP Fri Feb 1 04:59:50 UTC 2008 i686 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7ddb000 .. 0xb7e0d000
[+] root
#

Debian Etch, kernel 2.6.18-5-686

Vulnerable

  
$ uname -a   
Linux maiky 2.6.18-5-686 #1 SMP Wed Oct 3 00:12:50 UTC 2007 i686 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7d81000 .. 0xb7db3000
[+] root
#

Open SuSE 10.2, kernel 2.6.18.2-34-default

Vulnerable

$ uname -a
Linux lumi 2.6.18.2-34-default #1 SMP Mon Nov 27 11:46:27 UTC 2006 i686 i686 i386 GNU/Linux
$ gcc exploit.c
$ ./a.out
-----------------------------------
 Linux vmsplice Local Root Exploit
 By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7da2000 .. 0xb7dd4000
[+] root
#

Gracias a Sergio y Maseda por aportar los resultados en sus máquinas

permalink | categoría: /seguridad |

 

11/02/2008
Mi red: OpenBSD, Soekris 4801, Sun Ultra 10 y Wifi con Belkin Wireless G
por @joakinen a las 17:55 [ permalink ]

En este post quiero documentar la infraestructura de mi red que da servicio a Internet.

soekris 4801, router Comtrend, nokia 9210 soekris 4801, router Comtrend, nokia 9210 nokia 9210 consola nokia 9210 consola

Los equipos son:

- Servidor soekris 4801 CPU Geode 266 MHz, 256Mb RAM, con sistema operativo OpenBSD, haciendo funciones de firewall, punto de acceso WiFi, servidor DNS interno y externo, servidor Web, servidor de base de datos MySQL. Este blog está alojado en esta máquina.
- Router Comtrend con ADSL2 de 10Mbps
- Teléfono Nokia 9210 Communicator con software newTelnet9200 de emulación de terminal y cable serie, conectado al puerto de consola del servidor Soekris.

El dmesg del servidor de la DMZ es este:

OpenBSD 3.8 (GENERIC) #138: Sat Sep 10 15:41:37 MDT 2005
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Geode(TM) Integrated Processor by National Semi ("Geode by NSC" 586-class)  267 MHz
cpu0: FPU,TSC,MSR,CX8,CMOV,MMX
cpu0: TSC disabled
real mem  = 268017664 (261736K)
avail mem = 237674496 (232104K)
using 3297 buffers containing 13504512 bytes (13188K) of memory
mainbus0 (root)
bios0 at mainbus0: AT/286+(00) BIOS, date 20/50/29, BIOS32 rev. 0 @ 0xf7840
pcibios0 at bios0: rev 2.0 @ 0xf0000/0x10000
pcibios0: pcibios_get_intr_routing - function not supported
pcibios0: PCI IRQ Routing information unavailable.
pcibios0: PCI bus #0 is the last bus
bios0: ROM list: 0xc8000/0x9000
cpu0 at mainbus0
pci0 at mainbus0 bus 0: configuration mode 1 (bios)
pchb0 at pci0 dev 0 function 0 "Cyrix GXm PCI" rev 0x00
sis0 at pci0 dev 6 function 0 "NS DP83815 10/100" rev 0x00: DP83816A, irq 10, ad dress 00:00:24:c7:a5:b8
nsphyter0 at sis0 phy 0: DP83815 10/100 PHY, rev. 1
sis1 at pci0 dev 7 function 0 "NS DP83815 10/100" rev 0x00: DP83816A, irq 10, ad dress 00:00:24:c7:a5:b9
nsphyter1 at sis1 phy 0: DP83815 10/100 PHY, rev. 1
sis2 at pci0 dev 8 function 0 "NS DP83815 10/100" rev 0x00: DP83816A, irq 10, ad dress 00:00:24:c7:a5:ba
nsphyter2 at sis2 phy 0: DP83815 10/100 PHY, rev. 1
ath0 at pci0 dev 14 function 0 "Atheros AR5212" rev 0x01: irq 11
ath0: AR5212 5.9 phy 4.3 rf2112 4.6, FCC1A, address 00:02:6f:39:cb:a6
gscpcib0 at pci0 dev 18 function 0 "NS SC1100 ISA" rev 0x00
gpio0 at gscpcib0: 64 pins
"NS SC1100 SMI/ACPI" rev 0x00 at pci0 dev 18 function 1 not configured
pciide0 at pci0 dev 18 function 2 "NS SCx200 IDE" rev 0x01: DMA, channel 0 wired  to compatibility, channel 1 wired to compatibility
wd0 at pciide0 channel 0 drive 0: 
wd0: 16-sector PIO, LBA, 57231MB, 117210240 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
geodesc0 at pci0 dev 18 function 5 "NS SC1100 X-Bus" rev 0x00: iid 6 revision 3 wdstatus 0
ohci0 at pci0 dev 19 function 0 "Compaq USB OpenHost" rev 0x08: irq 5, version 1 .0, legacy support
usb0 at ohci0: USB revision 1.0
uhub0 at usb0
uhub0: Compaq OHCI root hub, rev 1.00/1.00, addr 1
uhub0: 3 ports with 3 removable, self powered
isa0 at gscpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pcppi0 at isa0 port 0x61
midi0 at pcppi0: 
spkr0 at pcppi0
sysbeep0 at pcppi0
nsclpcsio0 at isa0 port 0x2e/2: NSC PC87366 rev 9: GPIO VLM TMS
gpio1 at nsclpcsio0: 29 pins
gscsio0 at isa0 port 0x15c/2: SC1100 SIO rev 1:
npx0 at isa0 port 0xf0/16: using exception 16
pccom0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pccom0: console
pccom1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo
biomask f3e5 netmask ffe5 ttymask ffe7
pctr: no performance counters in CPU
dkcsum: wd0 matches BIOS drive 0x80
root on wd0a
rootdev=0x0 rrootdev=0x300 rawdev=0x302

En otra parte de la casa, conectada via WiFi con la DMZ, hay este otro grupo de máquinas:

- Servidor soekris 4801 CPU Geode 266 MHz, 128Mb RAM, con sistema operativo OpenBSD, que hace de respaldo de su gemelo de la DMZ
- Wireless G Ethernet Adapter de Belkin
- Hub 3Com OfficeConnect
- Servidor Sun Ultra 10 Elite3D con OpenBSD, funciones de desktop
- Unidad de cinta DAT40 HP SureStore SCSI

wireless G belkin, hub 3Com, soekris 4801 sun ultra 10 creator3D openbsd openbsd desktop openbsd desktop any key hp surestore dat40

El servidor Ultra 10 tiene dos teclas curiosas, la de puesta en marcha (adoro usar hardware de Sun, con la consola por puerto serie y el botón de encendido en el teclado), y la tecla "any" por si me sale alguna vez el famoso mensaje "press any key to continue" ;).

El dmesg del servidor Sun Ultra 10 es este:

console is keyboard/display
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2007 OpenBSD. All rights reserved.  http://www.OpenBSD.org

OpenBSD 4.2 (GENERIC) #1427: Tue Aug 28 10:46:40 MDT 2007
    deraadt@sparc64.openbsd.org:/usr/src/sys/arch/sparc64/compile/GENERIC
real mem = 1073741824 (1024MB)
avail mem = 1028055040 (980MB)
mainbus0 at root: Sun Ultra 5/10 UPA/PCI (UltraSPARC-IIi 440MHz)
cpu0 at mainbus0: SUNW,UltraSPARC-IIi (rev 9.1) @ 440 MHz, version 0 FPU
cpu0: physical 16K instruction (32 b/l), 16K data (32 b/l), 2048K external (64 b /l)
psycho0 at mainbus0 addr 0xfffc4000: SUNW,sabre, impl 0, version 0, ign 7c0
psycho0: bus range 0-3, PCI bus 0
psycho0: dvma map c0000000-dfffffff, iotdb 1bbe000-1c3e000
pci0 at psycho0
ppb0 at pci0 dev 1 function 1 "Sun Simba PCI-PCI" rev 0x13
pci1 at ppb0 bus 1
ebus0 at pci1 dev 1 function 0 "Sun PCIO EBus2" rev 0x01
auxio0 at ebus0 addr 726000-726003, 728000-728003, 72a000-72a003, 72c000-72c003,  72f000-72f003
power0 at ebus0 addr 724000-724003 ipl 37
"SUNW,pll" at ebus0 addr 504000-504002 not configured
sab0 at ebus0 addr 400000-40007f ipl 43: rev 3.2
sabtty0 at sab0 port 0
sabtty1 at sab0 port 1
comkbd0 at ebus0 addr 3083f8-3083ff ipl 41: layout 42
wskbd0 at comkbd0: console keyboard
com0 at ebus0 addr 3062f8-3062ff ipl 42: mouse: ns16550a, 16 byte fifo
lpt0 at ebus0 addr 3043bc-3043cb, 30015c-30015d, 700000-70000f ipl 34: polled
"fdthree" at ebus0 addr 3023f0-3023f7, 706000-70600f, 720000-720003 ipl 39 not c onfigured
clock1 at ebus0 addr 0-1fff: mk48t59
"flashprom" at ebus0 addr 0-fffff not configured
audioce0 at ebus0 addr 200000-2000ff, 702000-70200f, 704000-70400f, 722000-72200 3 ipl 35 ipl 36: nvaddrs 0
audio0 at audioce0
hme0 at pci1 dev 1 function 1 "Sun HME" rev 0x01: ivec 0x7e1, address 08:00:20:f e:3f:6c
nsphy0 at hme0 phy 1: DP83840 10/100 PHY, rev. 1
vgafb0 at pci1 dev 2 function 0 "ATI Mach64 GP" rev 0x5c
wsdisplay0 at vgafb0
wsdisplay0: screen 0 added (std, sun emulation)
pciide0 at pci1 dev 3 function 0 "CMD Technology PCI0646" rev 0x03: DMA, channel  0 configured to native-PCI, channel 1 configured to native-PCI
pciide0: using ivec 0x7e0 for native-PCI interrupt
wd0 at pciide0 channel 0 drive 0: 
wd0: 16-sector PIO, LBA, 19458MB, 39851760 sectors
wd0(pciide0:0:0): using PIO mode 4, DMA mode 2
atapiscsi0 at pciide0 channel 1 drive 0
scsibus0 at atapiscsi0: 2 targets
cd0 at scsibus0 targ 0 lun 0:  SCSI0 5/cdrom r emovable
cd0(pciide0:1:0): using PIO mode 4, DMA mode 2
ppb1 at pci0 dev 1 function 0 "Sun Simba PCI-PCI" rev 0x13
pci2 at ppb1 bus 2
ppb2 at pci2 dev 1 function 0 "DEC 21153 PCI-PCI" rev 0x04
pci3 at ppb2 bus 3
"Sun PCIO EBus2" rev 0x01 at pci3 dev 0 function 0 not configured
hme1 at pci3 dev 0 function 1 "Sun HME" rev 0x01: ivec 0x7d1, address 08:00:20:f 6:85:94
luphy0 at hme1 phy 1: LU6612 10/100 PHY, rev. 1
"Sun PCIO EBus2" rev 0x01 at pci3 dev 1 function 0 not configured
hme2 at pci3 dev 1 function 1 "Sun HME" rev 0x01: ivec 0x7d2, address 08:00:20:f 6:85:95
luphy1 at hme2 phy 1: LU6612 10/100 PHY, rev. 1
"Sun PCIO EBus2" rev 0x01 at pci3 dev 2 function 0 not configured
hme3 at pci3 dev 2 function 1 "Sun HME" rev 0x01: ivec 0x7d3, address 08:00:20:f 6:85:96
luphy2 at hme3 phy 1: LU6612 10/100 PHY, rev. 1
"Sun PCIO EBus2" rev 0x01 at pci3 dev 3 function 0 not configured
hme4 at pci3 dev 3 function 1 "Sun HME" rev 0x01: ivec 0x7d0, address 08:00:20:f 6:85:97
luphy3 at hme4 phy 1: LU6612 10/100 PHY, rev. 1
siop0 at pci2 dev 2 function 0 "Symbios Logic 53c875" rev 0x14: ivec 0x7d4, usin g 4K of on-board RAM
scsibus1 at siop0: 16 targets
siop1 at pci2 dev 2 function 1 "Symbios Logic 53c875" rev 0x14: ivec 0x7d5, usin g 4K of on-board RAM
scsibus2 at siop1: 16 targets
ohci0 at pci2 dev 3 function 0 "NEC USB" rev 0x43: ivec 0x7d8, version 1.0
ohci1 at pci2 dev 3 function 1 "NEC USB" rev 0x43: ivec 0x7d9, version 1.0
ehci0 at pci2 dev 3 function 2 "NEC USB" rev 0x04: ivec 0x7da
usb0 at ehci0: USB revision 2.0
uhub0 at usb0: NEC EHCI root hub, rev 2.00/1.00, addr 1
usb1 at ohci0: USB revision 1.0
uhub1 at usb1: NEC OHCI root hub, rev 1.00/1.00, addr 1
usb2 at ohci1: USB revision 1.0
uhub2 at usb2: NEC OHCI root hub, rev 1.00/1.00, addr 1
creator0 at mainbus0 addr 0xfebc0000: Elite3D, model SUNW,XXX-XXXX, dac 0
wsdisplay1 at creator0: console (std, sun emulation), using wskbd0
"pcons" at mainbus0 not configured
bootpath: /pci@1f,0/pci@1,1/ide@3,0/disk@0,0
root on wd0a swap on wd0b dump on wd0b

El xorg.conf de esta máquina, preparado para conectar doble monitor, es el siguiente:

#
# Sun Ultra 10 elite 3D
#
Section "ServerLayout"
        Identifier      "Configuracion Basica"
        Screen 0        "Screen1" 0 0
        InputDevice     "commouse0" "CorePointer"
        InputDevice     "Keyboard0" "CoreKeyboard"
EndSection


# ---------------------------------------------------------------------------
# Definicion de cada Pantalla Virtual
# ---------------------------------------------------------------------------

# All framebuffers
Section "Screen"
        Identifier "Screen0"
        Device     "Wsdisplay0"
        Monitor    "SAMSUNG-913V"
        DefaultDepth 8
        SubSection "Display"
                Depth     8
        EndSubSection
        SubSection "Display"
                Depth     16
        EndSubSection
        SubSection "Display"
                Depth     24
        EndSubSection
EndSection

Section "Screen"
        Identifier "Screen1"
        Device     "Wsdisplay1"
        Monitor    "SAMSUNG-913V"
        DefaultDepth 24
        DefaultFbBpp 32
        SubSection "Display"
                Depth   8
                Modes   "640x480" "800x600" "1024x768"
        EndSubSection
        SubSection "Display"
                Depth   16
                Modes   "640x480" "800x600" "1024x768"
        EndSubSection
        SubSection "Display"
                Depth   24
[jherrero@hestia ~]$ cat /etc/X11/xorg.conf
#
# Sun Ultra 10 elite 3D
#
Section "ServerLayout"
        Identifier      "Configuracion Basica"
        Screen 0        "Screen1" 0 0
        InputDevice     "commouse0" "CorePointer"
        InputDevice     "Keyboard0" "CoreKeyboard"
EndSection


# ---------------------------------------------------------------------------
# Definicion de cada Pantalla Virtual
# ---------------------------------------------------------------------------

# All framebuffers
Section "Screen"
        Identifier "Screen0"
        Device     "Wsdisplay0"
        Monitor    "SAMSUNG-913V"
        DefaultDepth 8
        SubSection "Display"
                Depth     8
        EndSubSection
        SubSection "Display"
                Depth     16
        EndSubSection
        SubSection "Display"
                Depth     24
        EndSubSection
EndSection

Section "Screen"
        Identifier "Screen1"
        Device     "Wsdisplay1"
        Monitor    "SAMSUNG-913V"
        DefaultDepth 24
        DefaultFbBpp 32
        SubSection "Display"
                Depth   8
                Modes   "640x480" "800x600" "1024x768"
        EndSubSection
        SubSection "Display"
                Depth   16
                Modes   "640x480" "800x600" "1024x768"
        EndSubSection
        SubSection "Display"
                Depth   24
                Modes   "640x480" "800x600" "1024x768"
        EndSubSection
EndSection

# ---------------------------------------------------------------------------
# Definicion de las tarjetas graficas
# ---------------------------------------------------------------------------


Section "Device"
        # VGA en bus PCI
        Identifier      "Wsdisplay0"
        Driver          "vgafb"
        Option          "device" "/dev/ttyC0"
EndSection

Section "Device"
        # Elite3D
        Identifier      "Wsdisplay1"
        Driver          "wsfb"
        Option          "device" "/dev/ttyD0"
EndSection

Section "Device"
        Identifier      "Card0"
        Driver          "ati"
        BusID           "PCI:1:2:0"
        Option          "composite_sync" "True"
EndSection


Section "Device"
        Identifier      "Creator3D"
        Driver          "sunffb"
EndSection



# ---------------------------------------------------------------------------
# Definicion del TECLADO
# ---------------------------------------------------------------------------

# All Sun keyboards (USB Type 6, Serial Type 3/4/5/6)
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "Protocol"    "wskbd"
        Option      "Device"      "/dev/wskbd0"
        Option      "XkbRules"    "xorg"
        Option      "XkbLayout"   "es"
EndSection

# ---------------------------------------------------------------------------
# Definicion del RATON
# ---------------------------------------------------------------------------

Section "InputDevice"
        Identifier      "commouse0"
        Driver          "mouse"
        Option          "Protocol" "SunMouse"
        Option          "Device" "/dev/tty00"
        Option          "Baudrate" "1200"
EndSection


# ---------------------------------------------------------------------------
# Definicion del MONITOR
# ---------------------------------------------------------------------------

Section "Monitor"
        Identifier   "SAMSUNG-913V"
        VendorName   "Samsung"
        ModelName    "SyncMaster 913v"
      # Adjust those to your monitor before using another device than wsfb
      # or you can destroy it !!
        HorizSync    30-81
        VertRefresh  56-75
EndSection



# ---------------------------------------------------------------------------
# Definicion de las fuentes
# ---------------------------------------------------------------------------

Section "Files"
        RgbPath      "/usr/X11R6/lib/X11/rgb"
        FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
        FontPath     "/usr/X11R6/lib/X11/fonts/CID/"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"

   FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
   FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
   FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
   FontPath   "/usr/local/lib/X11/fonts/ghostscript/"
   FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"

   FontPath   "/usr/local/lib/X11/fonts/mscorefonts"

EndSection


# Serial mice on com ports
Section "InputDevice"
        Identifier      "Mouse0"
        Driver          "mouse"
        Option          "Protocol" "wsmouse"
        Option          "Device" "/dev/wsmouse0"
EndSection

Section "Module"
        Load "i2c"
        Load "bitmap"
        Load "ddc"
        Load "extmod"
        Load "freetype"
        Load "glx"
        Load "int10"
        Load "vbe"
EndSectioN

#
# EOF
#

permalink | categoría: /sistemas |

 

09/02/2008
Formularios para encuestas en Google Docs
por @joakinen a las 17:42 [ permalink ]

Tags: Google, web20 Google acaba de añadir una nueva característica a las hojas de cálculo de Google Docs: formularios para encuestas.

La idea es usar una hoja de cálculo de Google Docs para almacenar los resultados de una encuesta, cuyo contenido se diseña con un asistente muy sencillo de usar y que generará un formulario web. Cuando el usuario conteste a las preguntas en dicho formulario, sus respuestas serán insertadas automáticamente en la hoja de cálculo.

En primer lugar creamos una nueva hoja de cálculo vacía, le damos el nombre que queramos y la guardamos sin salirnos de la hoja.

Pinchamos en la solapa "COMPARTIR" y nos ofrece la lista de colaboradores y lectores que podemos definir para el documento y, además, la posibilidad de invitar a usuarios "para rellenar un formulario". Pinchamos aquí y ahora nos ofrece la posibilidad de editar el formulario.

Aparece una nueva ventana donde podemos definir todo tipo de encuestas, con una o varias preguntas, y cada una de ellas pudiendo contestarlas mediante seleccionar la respuesta de una lista de posibilidades, mediante una selección múltiple entre varias opciones o mediante una frase corta o un párrafo largo.

Una vez diseñado el formulario podemos enviar a los contactos que queramos un email con dos posibilidades: o bien enviamos un enlace al formulario o bien enviamos el formulario completo en el email para que lo contesten directamente desde su buzón de correo.

Podemos también decidir si queremos que la gente que va a responder a esta encuesta vea las respuestas anteriores o podemos hacer confidenciales las respuestas de los demás.

He creado una encuesta estúpida para ver cómo funciona esta idea, y si quieres contestarla puedes hacerlo desde este enlace:
http://spreadsheets.google.com/viewform?key=pnmRo1u1fJLhE_sn7C3RJbw

permalink | categoría: /web20 |

 

08/02/2008
Proceso de imágenes desde la línea de comando
por @joakinen a las 12:22 [ permalink ]

Las herramientas que tenemos desde línea de comandos para procesar fotografías son muy potentes, y permiten hacer modificaciones en un grupo de fotografías de forma automatizada.

Algunas de estas herramientas son:

convert: transforma una fotografía (resize, blur, crop, despeckle, dither, draw on, flio, join, re-sample, etc) creando una nueva imagen que será el resultado de la transformación

mogrify: igual que convert pero la imagen original es sobrescrita con los cambios

jhead: proceso de los datos EXIF que contiene la fotografía

jpegtran: para, entre otras cosas, codificar las fotos en formato JPEG progresivo.

Tanto "convert" como "mogrify" son parte del conjunto de utilidades denominadas ImageMagick, "jpegtran" es parte de las utilidades para procesar JPEG's que en algunos sistemas se instala en la instalación básica (en Ubuntu no), y "jhead" es una utilidad que se puede instalar independientemente.

En Ubuntu Linux:

# apt-get install ImageMagick
# apt-get install libjpeg-progs
# apt-get install jhead

En OpenBSD:

# pkg_add ImageMagick
# pkg_add jpeg
# pkg_add jhead

El uso más básico de jhead para visualizar los datos exit de la foto es muy simple: simplemente le pasamos como parámetro el fichero de la imagen.

$ jhead test.jpg 
File name    : test.jpg
File size    : 106697 bytes
File date    : 2008:02:08 12:31:21
Camera make  : OLYMPUS OPTICAL CO.,LTD
Camera model : C5050Z
Date/Time    : 2006:09:03 18:38:42
Resolution   : 800 x 571
Flash used   : No
Focal length :  7.1mm
Exposure time: 1.300 s 
Aperture     : f/1.8
ISO equiv.   : 400
Metering Mode: matrix
Exposure prog: shutter priority (semi-auto)
Jpeg process : Baseline

Y esta es la salida del mismo comando cuando la imagen no contiene datos EXIF:

$ jhead test.jpg 
File name    : test.jpg
File size    : 9155 bytes
File date    : 2008:02:08 12:44:31
Resolution   : 172 x 162

Algunas utilidades para transformar imágenes no respetan la cabecera EXIF, por lo que es una buena costumbre salvar la cabecera EXIF de la foto que vamos a procesar, hacer las transformaciones que queramos, y finalmente reinsertar la cabecera EXIF en la foto final.

Por ejemplo, si quisieramos usar mogrify para escalar nuestra imagen a 320x240 para usarla en una página web, o para subirla a Flickr, sin perder los datos EXIF, necesitaríamos usar este comando:

$ mogrify -resize 320 test.jpg

Nota que con especificar la anchura deseada (320), el comando calcula la altura que le corresponde sin deformar la foto.

Pero, ¿qué ocurre si nuestro mogrify (u otra utilidad) no conserva los datos EXIF? En este caso podemos usar este comando:

$ jhead -cmd "mogrify -resize 320 &i" *.jpg

que ordena a jhead sacar la cabecera EXIF de la fotografía, procesarla mediante el comando que aparezca en el parámetro "-cmd" (&i es el nombre de la foto), y finalmente reinsertar la cabecera EXIF antes de terminar.

Si en lugar de poner un comando en el parámetro "-cmd" usamos ahí un script que llame a mogrify y a jpegtran, podremos hacer todas las modificaciones que queramos manteniendo la cabecera EXIF de las fotos.

Con estos ingredientes se pueden hacer scripts que automaticen el reescalado de fotos, la inserción de comentarios, o cualquier otra transformación que deseemos.

permalink | categoría: /sistemas |

 

"Me enseña su pasaporte y la lista de sitios web que visita"
por @joakinen a las 09:52 [ permalink ]

Tags: seguridad Leo con estupor en la edición electrónica del Washington Post de ayer 7 de Febrero que en varios aeropuertos de los Estados Unidos se está pidiendo a ciertos pasajeros que llegan del extranjero que entreguen sus teléfonos móviles y sus ordenadores portátiles a los empleados de aduanas para que estos extraigan de ellos la lista de números a los que llamas y la caché del navegador que indica los sitios web que has visitado. La razón que se da para hacer esto es que el agente de aduanas tiene "security concerns" sobre ti.

Aquí está el enlace a la noticia:
http://www.washingtonpost.com/wp-dyn/content/article/2008/02/06/AR2008020604763.html

Puedes negarte a encender tu portatil, teclear tu usuario y contraseña y abrir tu navegador, pero si lo haces te requisan la máquina y la contraseña de tu usuario y, como le ha pasado a una tal Maria Udy, ejecutiva de marketing de una compañía, puede que nunca más vuelvas a ver tu máquina.

Me sorprende la rapidez con la que se están perdiendo todo tipo de derechos y libertades por la sencilla razón de que los gobiernos no son capaces de gestionar la libertad y la seguridad de sus ciudadanos al mismo tiempo. Y lo que me sorprende aún más es que nadie se escandalice por esto. En realidad ya no me sorprende, pero es que yo antes creía que los políticos buscaban el bien común y por ello eran personas con una gran educación en valores. Ahora tengo claro que tienen una gran educación en intereses y buscan el bien de aquellos que les mantienen en el poder. Pero ya que todos sabemos el juego al que juegan, ¿por qué no dejan de tomarnos por tontos y nos dicen a las claras a quién defienden en lugar de querer convencernos de que todo lo hacen por nuestro bien?

permalink | categoría: /seguridad |

 

07/02/2008
Ya se puede instalar Scratch en Linux sin wine
por @joakinen a las 15:02 [ permalink ]

Aunque se esperaba que a finales de 2007 el Medialab del MIT liberara la versión para Linux de Scratch, hay un comentario en el foro "scratch linux" que nos dirige a un nuevo tema creado en el foro cuyo título suena muy prometedor: Linux version (sort of).

Allí se informa de una versión preliminar creada para Linux aprovechando que Scratch es una máquina virtual del entorno Squeak Smalltalk y que, al ser la implementación open source de Smalltalk, tenemos disponible en cualquier Linux.

Las instrucciones y el enlace de descarga están en una página del Thornburg Center:
http://www.tcpdpodcast.org/scratch.html

permalink | categoría: /scratch |

 

06/02/2008
Microsoft se reinventa
por @joakinen a las 19:04 [ permalink ]

El 1 de Febrero los internautas tuvimos ocasión de preguntarle a Javier Amézola, "consultor de Accenture y experto en Internet" (sic) sobre la oferta hecha por Microsoft para adquirir Yahoo, y yo le hice al experto una pregunta sobre lo que podía significar este anuncio. Puedes leer la entrevista completa en http://www.elpais.com/edigitales/entrevista.html?id=3448

Mi pregunta y su respuesta fueron:

P: ¿Es este anuncio de compra un indicio de que Microsoft da por perdida la guerra en el mundo de los sistemas operativos? ¿Está Microsoft reinventándose como hizo IBM hace años?

R: No creo que Msoft esté abandonando el mundo de los sistemas operativos y menos en el mundo del móvil, donde está haciendo una apuesta firme y decidida. Por otro lado, creo que puede crecer mucho en negocio con nuevos servicios en la red.

Me quedé igual que estaba, porque la cuestión sobre la que preguntaba no era sobre los esfuerzos de Microsoft por posicionarse en nuevos mercados sino qué pasa con los sistemas operativos tradicionales. El fiasco de Windows Vista junto con el hecho de que la gente se está empezando a cansar de tener que comprar un ordenador nuevo para estar al día de los nuevos Windows está poniendo al gigante delante de un espejo donde le resulta incómodo mirarse: la gente no quiere/puede seguir ese ritmo, hay productos alternativos a Windows de igual o superior calidad, y el futuro no es seguir vendiendo nuevas versiones de lo mismo. A Microsoft le cuesta entender esto porque ha basado su modelo de negocio en convencernos de no seguir usando un producto suyo durante muchos años; quiere convencernos de que lo último que fabrican es lo que necesitamos y lo que nos vendieron hace unos pocos años es obsoleto y hay que abandonarlo. Esa fue la razón por la que empezó a denominar a sus sistemas operativos con los números del año en el que se lanzaba. Usar Windows 95 en el año 1998 transmitía la impresión de estar "anticuado"; lo moderno era usar Windows 98. De hecho, ahora que Windows XP es un producto estable nos amenaza con dejar de actualizarlo para "motivarnos" a pasarnos a Vista. Ese es, y ha sido, el "estilo Microsoft", y la pregunta que me hago y que le hacía al experto es: ¿tiene futuro este modelo de negocio?.

Si a lo ya comentado le añadimos que en el futuro que ya se vislumbra dejaremos de almacenar grandes volúmenes de datos localmente y de instalar aplicaciones localmente para usar tanto los datos como las aplicaciones directamente de la red (ya es más rápida una conexión a Internet que la conexión interna de nuestro ordenador con su disco duro), todo esto apunta a que Microsoft no puede basar su estrategia de futuro en nuevas versiones de un Windows que cada vez se ve menos necesario. Los ordenadores del futuro no necesitarán los sistemas operativos monstruosamente grandes que ahora tenemos, lo que necesitarán es mayor ancho de banda en su conexión a Internet para conseguir llegar al punto en el que el ordenador sea la red, como hace años vaticinó Sun, y potencia para procesar los datos que obtenga de la red. Y cuando llegue ese punto lo único que instalaremos en nuestra máquina será un sencillo planificador de tareas, la mínima expresión de un sistema operativo, que sea capaz de ejecutar las aplicaciones que nos vengan de la red y manejar los periféricos que tengamos conectados.

Pues si el panorama de Microsoft es posicionarse en esos dos mundos es que Microsoft se está transformando. Microsoft nunca creyó en los servicios en red. Podemos recordar cuando Microsoft predicaba que Internet no tenía futuro y sacó el engendro de Microsoft Network (MSN, siglas que luego aprovechó para el messenger), y podemos ver ahora como Google aventaja a Microsoft en el mercado de aplicaciones en línea con Google Docs porque Microsoft se ha dedicado a desarrollar Office creyendo que un Office en línea no tendría futuro. Microsoft no tiene buen ojo clínico para prever el futuro de la informática. La filosofía de Google es ver lo que el mercado necesita y fabricarlo antes y mejor que nadie, y la filosofía de Microsoft es la contraria: fabricar algo y hacer que el mercado lo necesite. Está claro que, o Microsoft se reconvierte en objetivos y filosofía, o comenzará su declive (si es que no ha comenzado ya).

Parece que en las páginas de tecnología de EL PAIS del día siguiente a esta entrevista daban la razón a mi postura en el recuadro "Transformarse para sobrevivir", donde se puede leer:

"La adquisición de Yahoo!, de completarse con éxito, será el próximo gran paso de Microsoft en la transformación de la compañía. Esta mutación, como indican los analistas, es necesaria para que el gigante fundado por Bill Gates pueda sobrevivir en una nueva realidad tecnológica [...]. Gates ya sugirió en la pasada feria tecnológica en Las Vegas que Microsoft está en fase de cambio, para adaptarse a las demandas del consumidor y reforzar la oferta de contenidos por vía digital y dispositivos móviles.".


http://www.elpais.com/articulo/economia/Microsoft/ofrece/30000/millones/Yahoo/retar/Google/elpepieco/20080202elpepieco_1/Tes

¿Por qué el "experto" Amézola salió por peteneras en su respuesta hablando de sistemas operativos de móviles y de servicios en red en lugar de responder a la pregunta?. Ahora lo entendemos. El "experto" no estaba dando su opinión, estaba citando las declaraciones de Bill Gates en Las Vegas.

Osea, que si, que Microsoft está reinventándose.

permalink | categoría: /internet |

 

05/02/2008
Video conmemorando los 35 años de la HP-35
por @joakinen a las 21:00 [ permalink ]

Este video muestra lo revolucionaria que fue en 1972 la primera calculadora científica que funcionaba a pilas y cabía en un bolsillo, pero también demuestra lo fieles que son a la marca los "frikis" de las calculadoras HP. Y es que resulta fascinante programar estas máquinas y usar RPN para hacer cálculos. No es extraño que una calculadora HP de los 70 siga en la actualidad en perfecto funcionamiento sin experimentar problema alguno, sin que se atasquen las teclas y sin apenas haber cambiado las pilas. Si comparamos eso con lo obsoletas que se quedan las PDA actualmente y lo rápido que se estropean los teléfonos móviles nos daremos cuenta de la diferencia en calidad de fabricación entre las calculadoras programables de HP y los demás dispositivos de mano.

permalink | categoría: /calculadoras |

 

03/02/2008
viajaralaindia.com en Fitur 2008
por @joakinen a las 20:00 [ permalink ]

Mi amigo Titu me ha invitado hoy a Fitur donde lucía su nuevo polo publicitario del dominio que le administro: viajaralaindia.com.

Hemos quedado un día de estos para cenar comida india en su casa, aunque repetiremos la fiesta india que hicimos hace dos años, donde me enseñó a cocinar algunos platos indios y a hacer chapati.

permalink | categoría: |

 

[ 1 | 2 | 3 | 4 | 5 | 6 | 7 ] next >>

powered by blosxom edited with vi powered by OpenBSD powered by perl powered by apache graphics by GIMP